diff --git a/404.html b/404.html index c211a65..3669648 100644 --- a/404.html +++ b/404.html @@ -11,7 +11,7 @@ - + @@ -19,7 +19,7 @@ - + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d41c0bd --- /dev/null +++ b/LICENSE @@ -0,0 +1,232 @@ +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS + +0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on the Program. + +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. + + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +14. Revised Versions of this License. +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . diff --git a/about/index.html b/about/index.html index ff28177..7c0bf2b 100644 --- a/about/index.html +++ b/about/index.html @@ -15,7 +15,7 @@ - + @@ -23,7 +23,7 @@ - + diff --git a/assets/stylesheets/main.eebd395e.min.css b/assets/stylesheets/main.eebd395e.min.css new file mode 100644 index 0000000..eb7ce64 --- /dev/null +++ b/assets/stylesheets/main.eebd395e.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:#ffff0080;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:#ffff0080;--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr[title]:focus:after,.md-typeset abbr[title]:hover:after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);font-size:.7rem;left:.8rem;margin-top:2em;padding:.2rem .3rem;position:absolute;right:.8rem}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;justify-content:space-between;margin-top:.625em;overflow:hidden;scroll-snap-align:start;text-overflow:ellipsis;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:focus,.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.9375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav,.md-nav__toggle:indeterminate~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__link--index){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:#ffffff1f}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::placeholder{transition:color .25s}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:#0000}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>.md-icon{margin-left:.2rem}[dir=rtl] .md-search__options>.md-icon{margin-right:.2rem}.md-search__options>.md-icon{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>.md-icon:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more>summary{cursor:pointer;display:block;outline:none;position:sticky;scroll-snap-align:start;top:0;z-index:1}.md-search-result__more>summary::marker{display:none}.md-search-result__more>summary::-webkit-details-marker{display:none}.md-search-result__more>summary>div{color:var(--md-typeset-a-color);font-size:.64rem;padding:.75em .8rem;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more>summary>div{padding-left:2.2rem}[dir=rtl] .md-search-result__more>summary>div{padding-right:2.2rem}}.md-search-result__more>summary:focus>div,.md-search-result__more>summary:hover>div{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more[open]>summary{background-color:var(--md-default-bg-color)}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result .md-typeset{color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.6}.md-search-result .md-typeset h1{color:var(--md-default-fg-color);font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}.md-search-result .md-typeset h1 mark{text-decoration:none}.md-search-result .md-typeset h2{color:var(--md-default-fg-color);font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result .md-typeset h2 mark{text-decoration:none}.md-search-result__terms{color:var(--md-default-fg-color);display:block;font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color);text-decoration:underline}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.1875em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em #0000;transform:scale(1)}to{box-shadow:0 0 0 0 #0000;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:focus,.md-annotation .md-annotation__index:hover{color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index{color:var(--md-accent-bg-color)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.05rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.eebd395e.min.css.map b/assets/stylesheets/main.eebd395e.min.css.map new file mode 100644 index 0000000..231356e --- /dev/null +++ b/assets/stylesheets/main.eebd395e.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/components/_banner.scss","src/assets/stylesheets/main/components/_base.scss","src/assets/stylesheets/main/components/_clipboard.scss","src/assets/stylesheets/main/components/_consent.scss","src/assets/stylesheets/main/components/_content.scss","src/assets/stylesheets/main/components/_dialog.scss","src/assets/stylesheets/main/components/_feedback.scss","src/assets/stylesheets/main/components/_footer.scss","src/assets/stylesheets/main/components/_form.scss","src/assets/stylesheets/main/components/_header.scss","src/assets/stylesheets/main/components/_nav.scss","src/assets/stylesheets/main/components/_search.scss","src/assets/stylesheets/main/components/_select.scss","src/assets/stylesheets/main/components/_sidebar.scss","src/assets/stylesheets/main/components/_source.scss","src/assets/stylesheets/main/components/_tabs.scss","src/assets/stylesheets/main/components/_tag.scss","src/assets/stylesheets/main/components/_tooltip.scss","src/assets/stylesheets/main/components/_top.scss","src/assets/stylesheets/main/components/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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,8CACE,OnCoqHV,CmCrqHQ,8CACE,OnCuqHV,CmCxqHQ,8CACE,OnC0qHV,CmC3qHQ,8CACE,OnC6qHV,CmC9qHQ,8CACE,OnCgrHV,CmCjrHQ,8CACE,OnCmrHV,CmCprHQ,8CACE,OnCsrHV,CmCvrHQ,8CACE,OnCyrHV,CmC1rHQ,+CACE,QnC4rHV,CmC7rHQ,+CACE,QnC+rHV,CmChsHQ,+CACE,QnCksHV,CmCnsHQ,+CACE,QnCqsHV,CmCtsHQ,+CACE,QnCwsHV,CmCzsHQ,+CACE,QnC2sHV,CmC5sHQ,+CACE,QnC8sHV,CmC/sHQ,+CACE,QnCitHV,CmCltHQ,+CACE,QnCotHV,CmCrtHQ,+CACE,QnCutHV,CmCxtHQ,+CACE,QnC0tHV,CACF,CmCrtHM,uCACE,+BnCutHR,CmCjtHE,4BACE,UnCmtHJ,CmChtHI,aAJF,4BAKI,gBnCmtHJ,CACF,CmC/sHE,0BACE,YnCitHJ,CmC9sHI,aAJF,0BAKI,anCitHJ,CmC7sHM,sCACE,OnC+sHR,CmChtHM,uCACE,OnCktHR,CmCntHM,uCACE,OnCqtHR,CmCttHM,uCACE,OnCwtHR,CmCztHM,uCACE,OnC2tHR,CmC5tHM,uCACE,OnC8tHR,CmC/tHM,uCACE,OnCiuHR,CmCluHM,uCACE,OnCouHR,CmCruHM,uCACE,OnCuuHR,CmCxuHM,wCACE,QnC0uHR,CmC3uHM,wCACE,QnC6uHR,CmC9uHM,wCACE,QnCgvHR,CmCjvHM,wCACE,QnCmvHR,CmCpvHM,wCACE,QnCsvHR,CmCvvHM,wCACE,QnCyvHR,CmC1vHM,wCACE,QnC4vHR,CmC7vHM,wCACE,QnC+vHR,CmChwHM,wCACE,QnCkwHR,CmCnwHM,wCACE,QnCqwHR,CmCtwHM,wCACE,QnCwwHR,CACF,CmClwHI,+FAEE,QnCowHN,CmCjwHM,yGACE,wBAAA,CACA,yBnCowHR,CmC3vHM,2DAEE,wBAAA,CACA,yBAAA,CAFA,QnC+vHR,CmCxvHM,iEACE,QnC0vHR,CmCvvHQ,qLAGE,wBAAA,CACA,yBAAA,CAFA,QnC2vHV,CmCrvHQ,6FACE,wBAAA,CACA,yBnCuvHV,CmClvHM,yDACE,kBnCovHR,CmC/uHI,sCACE,QnCivHN,CmC5uHE,2BAEE,iBAAA,CAOA,kBAAA,CAHA,uCAAA,CAEA,cAAA,CAPA,aAAA,CAGA,YAAA,CACA,gBAAA,CAEA,mBAAA,CAGA,gCAAA,CAPA,WnCqvHJ,CmC3uHI,iCAEE,uDAAA,CADA,+BnC8uHN,CmCzuHI,iCAKE,6BAAA,CADA,UAAA,CAHA,aAAA,CAEA,WAAA,CAMA,8CAAA,CAAA,sCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,+CACE,CALF,UnCmvHN,CmCpuHE,4BAOE,yEACE,CANF,YAAA,CAGA,aAAA,CAFA,qBAAA,CAGA,mBAAA,CALA,iBAAA,CAYA,wBAAA,CATA,YnC0uHJ,CmC9tHI,sCACE,wBnCguHN,CmC5tHI,oCACE,SnC8tHN,CmC1tHI,kCAGE,wEACE,CAFF,mBAAA,CADA,OnC8tHN,CmCptHM,uDACE,8CAAA,CAAA,sCnCstHR,CKt0HI,wC8B8HF,wDAEE,kBnC8sHF,CmChtHA,wDAEE,mBnC8sHF,CmChtHA,8CAGE,eAAA,CAFA,eAAA,CAGA,iCnC4sHF,CmCxsHE,8DACE,mBnC2sHJ,CmC5sHE,8DACE,kBnC2sHJ,CmC5sHE,oDAEE,UnC0sHJ,CmCtsHE,8EAEE,kBnCysHJ,CmC3sHE,8EAEE,mBnCysHJ,CmC3sHE,8EAGE,kBnCwsHJ,CmC3sHE,8EAGE,mBnCwsHJ,CmC3sHE,oEACE,UnC0sHJ,CmCpsHE,8EAEE,mBnCusHJ,CmCzsHE,8EAEE,kBnCusHJ,CmCzsHE,8EAGE,mBnCssHJ,CmCzsHE,8EAGE,kBnCssHJ,CmCzsHE,oEACE,UnCwsHJ,CACF,CmC1rHE,cAHF,olDAII,+BnC6rHF,CmC1rHE,g8GACE,sCnC4rHJ,CACF,CmCvrHA,4sDACE,uDnC0rHF,CmCtrHA,wmDACE,anCyrHF,CoCtiIA,MACE,8WAAA,CAEA,uXpC0iIF,CoChiIE,4BAEE,oBAAA,CADA,iBpCoiIJ,CoC/hII,sDAGE,SpCiiIN,CoCpiII,sDAGE,UpCiiIN,CoCpiII,4CACE,iBAAA,CACA,SpCkiIN,CoC5hIE,+CAEE,SAAA,CADA,UpC+hIJ,CoC1hIE,kDAOE,WpCgiIJ,CoCviIE,kDAOE,YpCgiIJ,CoCviIE,wCAME,qDAAA,CADA,UAAA,CADA,aAAA,CAIA,0CAAA,CAAA,kCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAVA,iBAAA,CACA,SAAA,CACA,YpCoiIJ,CoCxhIE,gEACE,wBTyWa,CSxWb,mDAAA,CAAA,2CpC0hIJ,CqC5kIA,QACE,8DAAA,CAGA,+CAAA,CACA,iEAAA,CACA,oDAAA,CACA,sDAAA,CACA,mDrC6kIF,CqCvkIA,SAEE,kBAAA,CADA,YrC2kIF,CKp7HI,mCiChKA,8BACE,UtC4lIJ,CsC7lIE,8BACE,WtC4lIJ,CsC7lIE,8BAGE,kBtC0lIJ,CsC7lIE,8BAGE,iBtC0lIJ,CsC7lIE,oBAKE,mBAAA,CADA,YAAA,CAFA,atC2lIJ,CsCrlII,kCACE,WtCwlIN,CsCzlII,kCACE,UtCwlIN,CsCzlII,kCAEE,iBAAA,CAAA,ctCulIN,CsCzlII,kCAEE,aAAA,CAAA,kBtCulIN,CACF","file":"main.css"} \ No newline at end of file diff --git a/files/ll3.exe b/files/ll3.exe new file mode 100644 index 0000000..803517d Binary files /dev/null and b/files/ll3.exe differ diff --git a/images/interfaces.png b/images/interfaces.png new file mode 100644 index 0000000..8745954 Binary files /dev/null and b/images/interfaces.png differ diff --git a/index.html b/index.html index d7a334c..325a411 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ - + @@ -23,7 +23,7 @@ - + diff --git a/pugu/index.html b/pugu/index.html index 7de8dfd..0a8a4de 100644 --- a/pugu/index.html +++ b/pugu/index.html @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + diff --git a/search/search_index.json b/search/search_index.json index 9fa2f1d..cf2a196 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#welcome","title":"Welcome","text":"

This mkdocs instance includes all documentation related to the terms of Love Live game hacking. I'd like to keep all the important information in one place for easy access and easy contribution for other languages.

This repo for the documentation here is open source, so please make your edits there:

git clone git@codeberg.org:carette/ll-hax-docs.git

https://codeberg.org/carette/ll-hax-docs

DM me on Discord if you need it to be updated (the public instance).

"},{"location":"#notable_users","title":"Notable Users","text":"

Below is a list of notable users who have made contributions ranging from a few helpful messages to entire archival projects of games. This list is not in any particular order. If you would like your name removed, added or updated in anyway (as I've likely forgotten or made a mistake), please make a pull request.

  • CursedBlackCat
  • tungnotpunk
  • hentaku
  • AuahDark
  • rayfirefist
  • varnotfound
  • asesidaa
  • BocuD
  • gam
  • chikachi0801
  • CPPO
  • Formula91
  • Shiz
  • cosplayerkyo
  • merkusberkus
"},{"location":"about/","title":"About","text":""},{"location":"about/#about","title":"About","text":"

LL Hax is a community created by Caret. The sole purpose of creating this community was to take notes and do research on hacking the SIFAC game. Then when SIF was getting EoS, Caret made sure that the community could be used for working on that, which followed SIFAS.

Currently, the LL Hax community resides in a cozy discord server, but Caret also set up a matrix server as a back up, just in case (desipte unlikely-ness).

"},{"location":"about/#discord_server","title":"Discord Server","text":"

https://discord.gg/VnhnvdW8CG

"},{"location":"about/#matrix_server","title":"Matrix Server","text":"

Matrix is a decentralized messaging system that enables secure communication and collaboration across platforms.

https://matrix.to/#/#ll-hax:m.sif.moe

Check out a list of clients here: https://matrix.org/ecosystem/clients/

"},{"location":"pugu/","title":"Puchiguru","text":""},{"location":"pugu/#puchiguru","title":"Puchiguru","text":"

Puchiguru Love Live! (\u3077\u3061\u3050\u308b\u30e9\u30d6\u30e9\u30a4\u30d6\uff01 Puchiguru Rabu raibu!) was a game released for iOS and Android, based on the Love Live! franchise. It was developed and published by Pokelabo, Inc. and was released on April 24, 2018 for both iOS and Android devices. The game's service was terminated on May 31, 2019.^1

Puchiguru (as of 2023) has a private server hosted by CursedBlackCat.

"},{"location":"pugu/#discord","title":"Discord","text":"

https://discord.gg/S64Yryk

(Copied from the Discord)

Private server APK: https://pokenesos.com/

IOS Method:

https://pokenesos.com/ios

(Copied from Reddit by CursedBlackCat)

Puchiguru download links for Android and iOS! iOS Link

iOS App Store Download Link Android Links

Android Google Play Download Link

Android APK Download Link (APKpure)

Android QooApp Link

Please note that you will not be able to play the game until the server goes live at 12PM noon on April 24, JST. A countdown timer until then can be found here.

"},{"location":"sif/","title":"SIF","text":""},{"location":"sif/#sif","title":"SIF","text":"

(the following was copied from the fandom wiki) Love Live! School idol festival (\u30e9\u30d6\u30e9\u30a4\u30d6\uff01\u30b9\u30af\u30fc\u30eb\u30a2\u30a4\u30c9\u30eb\u30d5\u30a7\u30b9\u30c6\u30a3\u30d0\u30eb Rabu raibu! Suk\u016bru Aidoru Fesutibaru, LLSIF) was a rhythm game released for iOS and Android, based on the Love Live! franchise. It was published by Bushiroad and developed by KLab Inc. and was released on April 16, 2013 for iOS and June 6, 2013 for Android devices.

An English version was released on May 12, 2014 under the title \"School Idol Festival\" at version 1.6. A Taiwanese version was released on May 22, 2014 under Mobimon Inc. at version 1.2. A Chinese version was released on June 12, 2014 under MariyGames at version 1.0. A Korean version was released on July 1, 2014 under NHN Entertainment Corp. at version 1.1. The Korean version was shut down and merged with the Global version on August 10, 2016. The Traditional Chinese version was shut down and merged with the Global version as of May 17, 2017. The Japanese Version was merged with the Global Version on June 10, 2021 and the Korean version & Traditional Chinese options was removed.

An arcade version was announced to be in production on November 27, 2015 and was made available for play on December 6, 2016. A new game titled Love Live! School Idol Festival ALL STARS was announced to be in production on September 21, 2017, and was released on September 26, 2019. Both games will continue to run concurrently alongside each other.

A successor to the game Love Live! School idol festival 2 MIRACLE LIVE! was announced on September 25, 2022, also featuring Nijigasaki High School Idol Club and Liella!.

On January 31, 2023, it was announced that the game's service would be shut down on March 31, 2023. ^1

"},{"location":"sif/#private_servers","title":"Private Servers","text":""},{"location":"sif/#self_hostable_servers","title":"Self Hostable Servers","text":""},{"location":"sifac/","title":"SIFAC","text":""},{"location":"sifac/#sifac","title":"SIFAC","text":"

Love Live! School idol festival ~after school ACTIVITY~ (\u30e9\u30d6\u30e9\u30a4\u30d6\uff01\u30b9\u30af\u30fc\u30eb\u30a2\u30a4\u30c9\u30eb\u30d5\u30a7\u30b9\u30c6\u30a3\u30d0\u30eb ~after school ACTIVITY~) is an arcade version of Love Live! School idol festival. It was first announced to be in production on November 27, 2015 and was made available for play on December 6, 2016.

Aqours was first announced to be added to the game on October 20, 2017. Aqours was added to the game with the Love Live! School Idol Festival: After School Activity Next Stage update on December 6, 2018. It was announced on October 26, 2020 that the game will receive a final update on November 10, 2020. No new songs or cards will be added passed that point, essentially ending support for the arcade version.

On October 10th 2020, it was announced that a port to the Playstation 4, titled Love Live! School idol festival ~after school ACTIVITY~ WaiWai! Home Meeting!! was in development. This version of the game was also announced with English language support, notably being the first iteration of the game to be released outside of Japan and in another language. It was released worldwide on March 24th 2021.

"},{"location":"sifac/#how_to_play","title":"How to Play","text":"

Obtaining the game files for this is gray area due to the copyright restriction playing an old arcade game entails. If you agree with me, you'd think this is total BS and want to play things that are considered dead or EoS even after the matter. Archival and preservation are the main motivators here, not money or business!

  1. I do not suggest looking on a certain site called nyaa.si or of similar origin as it will contain the borderline illegal method of getting the game
  2. Once the game files are obtained. (From a dump of the arcade machine or of other methods) extract them or decrypt the virtual hard disk (ask around for help if you need this method).
  3. The binary you want to run will be ll3.exe, but don't run it yet! There are some command line arguments that you can run it with to change how it acts:
"},{"location":"sifac/#cli_arguments","title":"CLI Arguments","text":"

-highquality: Runs the game with higher quality graphics. Not really sure if this makes a huge difference or not.

-centralmode: Enables a specific game mode designed for the gacha version, where players obtain randomized virtual items.

-windowmode or -singlemode: Runs the game in a resizable window instead of full-screen mode, useful for debugging or testing.

-sh (screen height): Sets the desired vertical size or resolution of the game window.

-sw (screen width): Sets the desired horizontal size or resolution of the game window.

-wx: Controls the horizontal position of the game window, specifying where the left edge of the window will be positioned.

-wy: Controls the vertical position of the game window, specifying where the top edge of the window will be positioned.

"},{"location":"sifac/#running_the_game","title":"Running The game","text":""},{"location":"sifac/#offline_mode","title":"Offline Mode","text":"
  1. Once you've setup a .bat script in that directory to run the game, open it. Example below:

    bat ll3.exe -singlemode -sw 1920 -sh 1080 -highquality

  2. Launch the batch file and the game should open. Ensure you have the correct patched file(s) for the functionality you want to unlock. By default, the game will be capable of running in 'Free Play' mode (activate through the test configuration page). This allows for some gameplay (play up to a certain amount of songs per session, not all songs are unlocked). The machine can scan cards if a user has them. From my understanding, it doesn't need a network to do this.
"},{"location":"sifac/#online_mode_currently_being_worked_on","title":"Online Mode (currently being worked on)","text":"

For online mode, you will need some more files (which I don't believe are easy to get via the site you should not go to). Here is a download link for this file structure:

../files/system.zip

Next, make a D:\\ drive (you can partition your C:\\ drive) and directory to have the following file tree:

(Assume this is under the `D:\\` root)\n\u251c\u2500\u2500 system\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 CmdFile\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 log\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 Log.txt\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 DUA\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 data\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 decrypt\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 download\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 event\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 news\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 1524476664.png\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 1554282603.png\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 unpack\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 work\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 option.txt\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 Service\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 NesysService.exe\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 update.log\n

(The most important file is the NesysService.exe as this is what the game uses to call between the game server and the game)

After that step, edit your arcade machine's hosts file:

Usually under: C:\\Windows\\System32\\drivers\\etc\\hosts

127.0.0.1 cert.nesys.jp\n127.0.0.1 cert3.nesys.jp\n127.0.0.1 data.nesys.jp\n127.0.0.1 proxy.nesys.jp\n127.0.0.1 nesys.taito.co.jp\n127.0.0.1 fjm170920zero.nesica.net\n

(If its the same PC, just leave it as 127.0.0.1 if its a different PC on your network, replace it with the IP address)

Once your computer resolves the domains to where ever you host the game server, we need to add some registry entries to enable the NesysService to run.

Run the following file:

../files/runme.reg

Finally, you'll need to make nesys an actual Windows service (one that you would find in services.msc). Download and run this command to add it (assuming your service directory is found in D:\\). This is all tested for D:\\.

../files/nesys.bat

If you don't want to create a service, you're also able to run NesysService.exe in powershell or cmd. Just follow these steps:

  • Make sure you open powershell or cmd as administrator
  • Run this first (so you can debug it if it gives you an error):
  • chcp 932
  • Then run the exe as so:
  • D:\\system\\Service\\NesysService.exe -app

If it outputs the following then you're good to go!

If it outputs something else, then you didn't install the registry values correctly!

(todo, add a picture here as an example)

"},{"location":"sifac/#certificates","title":"Certificates","text":"

The last step to this would be adding certificates. It is not an easy process, but asesidaa made a script that should do it for you.

You can find the script to install the scripts in here: https://github.com/asesidaa/LLServer/tree/master/LLServer/Certificates

Make sure to run the script as administrator. (you might need to enable powershell script running exception)

Enter this command in an administrator powershell window:

set-executionpolicy remotesigned

If the script doesn't work, you just need to have the certs in the 'Personal' store and the 'Root Trust ...' store (I forget the full name). After that you shouldn't get any nesys HTTP errors (it should just connect).

If the server isn't compiled already, you'll need Visual Studio Community edition, link for easy access here. Make sure you set it up with basic .NET functionality. (It should install the things it needs if you don't select the right one so don't worry too much).

Then if you haven't already, download the LLServer repo: https://github.com/asesidaa/LLServer/archive/refs/heads/master.zip

"},{"location":"sifas/","title":"SIFAS","text":""},{"location":"sifas/#sifas","title":"SIFAS","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#welcome","title":"Welcome","text":"

This mkdocs instance includes all documentation related to the terms of Love Live game hacking. I'd like to keep all the important information in one place for easy access and easy contribution for other languages.

This repo for the documentation here is open source, so please make your edits there:

git clone git@codeberg.org:carette/ll-hax-docs.git

https://codeberg.org/carette/ll-hax-docs

DM me on Discord if you need it to be updated (the public instance).

"},{"location":"#notable_users","title":"Notable Users","text":"

Below is a list of notable users who have made contributions ranging from a few helpful messages to entire archival projects of games. This list is not in any particular order. If you would like your name removed, added or updated in anyway (as I've likely forgotten or made a mistake), please make a pull request.

  • CursedBlackCat
  • tungnotpunk
  • hentaku
  • AuahDark
  • rayfirefist
  • varnotfound
  • asesidaa
  • BocuD
  • gam
  • chikachi0801
  • CPPO
  • Formula91
  • Shiz
  • cosplayerkyo
  • merkusberkus
"},{"location":"about/","title":"About","text":""},{"location":"about/#about","title":"About","text":"

LL Hax is a community created by Caret. The sole purpose of creating this community was to take notes and do research on hacking the SIFAC game. Then when SIF was getting EoS, Caret made sure that the community could be used for working on that, which followed SIFAS.

Currently, the LL Hax community resides in a cozy discord server, but Caret also set up a matrix server as a back up, just in case (desipte unlikely-ness).

"},{"location":"about/#discord_server","title":"Discord Server","text":"

https://discord.gg/VnhnvdW8CG

"},{"location":"about/#matrix_server","title":"Matrix Server","text":"

Matrix is a decentralized messaging system that enables secure communication and collaboration across platforms.

https://matrix.to/#/#ll-hax:m.sif.moe

Check out a list of clients here: https://matrix.org/ecosystem/clients/

"},{"location":"pugu/","title":"Puchiguru","text":""},{"location":"pugu/#puchiguru","title":"Puchiguru","text":"

Puchiguru Love Live! (\u3077\u3061\u3050\u308b\u30e9\u30d6\u30e9\u30a4\u30d6\uff01 Puchiguru Rabu raibu!) was a game released for iOS and Android, based on the Love Live! franchise. It was developed and published by Pokelabo, Inc. and was released on April 24, 2018 for both iOS and Android devices. The game's service was terminated on May 31, 2019.^1

Puchiguru (as of 2023) has a private server hosted by CursedBlackCat.

"},{"location":"pugu/#discord","title":"Discord","text":"

https://discord.gg/S64Yryk

(Copied from the Discord)

Private server APK: https://pokenesos.com/

IOS Method:

https://pokenesos.com/ios

(Copied from Reddit by CursedBlackCat)

Puchiguru download links for Android and iOS! iOS Link

iOS App Store Download Link Android Links

Android Google Play Download Link

Android APK Download Link (APKpure)

Android QooApp Link

Please note that you will not be able to play the game until the server goes live at 12PM noon on April 24, JST. A countdown timer until then can be found here.

"},{"location":"sif/","title":"SIF","text":""},{"location":"sif/#sif","title":"SIF","text":"

(the following was copied from the fandom wiki) Love Live! School idol festival (\u30e9\u30d6\u30e9\u30a4\u30d6\uff01\u30b9\u30af\u30fc\u30eb\u30a2\u30a4\u30c9\u30eb\u30d5\u30a7\u30b9\u30c6\u30a3\u30d0\u30eb Rabu raibu! Suk\u016bru Aidoru Fesutibaru, LLSIF) was a rhythm game released for iOS and Android, based on the Love Live! franchise. It was published by Bushiroad and developed by KLab Inc. and was released on April 16, 2013 for iOS and June 6, 2013 for Android devices.

An English version was released on May 12, 2014 under the title \"School Idol Festival\" at version 1.6. A Taiwanese version was released on May 22, 2014 under Mobimon Inc. at version 1.2. A Chinese version was released on June 12, 2014 under MariyGames at version 1.0. A Korean version was released on July 1, 2014 under NHN Entertainment Corp. at version 1.1. The Korean version was shut down and merged with the Global version on August 10, 2016. The Traditional Chinese version was shut down and merged with the Global version as of May 17, 2017. The Japanese Version was merged with the Global Version on June 10, 2021 and the Korean version & Traditional Chinese options was removed.

An arcade version was announced to be in production on November 27, 2015 and was made available for play on December 6, 2016. A new game titled Love Live! School Idol Festival ALL STARS was announced to be in production on September 21, 2017, and was released on September 26, 2019. Both games will continue to run concurrently alongside each other.

A successor to the game Love Live! School idol festival 2 MIRACLE LIVE! was announced on September 25, 2022, also featuring Nijigasaki High School Idol Club and Liella!.

On January 31, 2023, it was announced that the game's service would be shut down on March 31, 2023. ^1

"},{"location":"sif/#private_servers","title":"Private Servers","text":""},{"location":"sif/#self_hostable_servers","title":"Self Hostable Servers","text":""},{"location":"sifac/","title":"SIFAC","text":""},{"location":"sifac/#sifac","title":"SIFAC","text":"

Love Live! School idol festival ~after school ACTIVITY~ (\u30e9\u30d6\u30e9\u30a4\u30d6\uff01\u30b9\u30af\u30fc\u30eb\u30a2\u30a4\u30c9\u30eb\u30d5\u30a7\u30b9\u30c6\u30a3\u30d0\u30eb ~after school ACTIVITY~) is an arcade version of Love Live! School idol festival. It was first announced to be in production on November 27, 2015 and was made available for play on December 6, 2016.

Aqours was first announced to be added to the game on October 20, 2017. Aqours was added to the game with the Love Live! School Idol Festival: After School Activity Next Stage update on December 6, 2018. It was announced on October 26, 2020 that the game will receive a final update on November 10, 2020. No new songs or cards will be added passed that point, essentially ending support for the arcade version.

On October 10th 2020, it was announced that a port to the Playstation 4, titled Love Live! School idol festival ~after school ACTIVITY~ WaiWai! Home Meeting!! was in development. This version of the game was also announced with English language support, notably being the first iteration of the game to be released outside of Japan and in another language. It was released worldwide on March 24th 2021.

"},{"location":"sifac/#how_to_play","title":"How to Play","text":"

Obtaining the game files for this is gray area due to the copyright restriction playing an old arcade game entails. If you agree with me, you'd think this is total BS and want to play things that are considered dead or EoS even after the matter. Archival and preservation are the main motivators here, not money or business!

  1. I do not suggest looking on a certain site called nyaa.si or of similar origin as it will contain the borderline illegal method of getting the game
  2. Once the game files are obtained. (From a dump of the arcade machine or of other methods) extract them or decrypt the virtual hard disk (ask around for help if you need this method).
  3. The binary you want to run will be ll3.exe, but don't run it yet! There are some command line arguments that you can run it with to change how it acts:
"},{"location":"sifac/#cli_arguments","title":"CLI Arguments","text":"

-highquality: Runs the game with higher quality graphics. Not really sure if this makes a huge difference or not.

-centralmode: Enables a specific game mode designed for the gacha version, where players obtain randomized virtual items.

-windowmode or -singlemode: Runs the game in a resizable window instead of full-screen mode, useful for debugging or testing.

-sh (screen height): Sets the desired vertical size or resolution of the game window.

-sw (screen width): Sets the desired horizontal size or resolution of the game window.

-wx: Controls the horizontal position of the game window, specifying where the left edge of the window will be positioned.

-wy: Controls the vertical position of the game window, specifying where the top edge of the window will be positioned.

"},{"location":"sifac/#running_the_game","title":"Running The game","text":""},{"location":"sifac/#offline_mode","title":"Offline Mode","text":"
  1. Once you've setup a .bat script in that directory to run the game, open it. Example below:

    bat ll3.exe -singlemode -sw 1920 -sh 1080 -highquality

  2. Launch the batch file and the game should open. Ensure you have the correct patched file(s) for the functionality you want to unlock. By default, the game will be capable of running in 'Free Play' mode (activate through the test configuration page). This allows for some gameplay (play up to a certain amount of songs per session, not all songs are unlocked). The machine can scan cards if a user has them. From my understanding, it doesn't need a network to do this.
"},{"location":"sifac/#online_mode_currently_being_worked_on","title":"Online Mode (currently being worked on)","text":"

For online mode, you will need some more files (which I don't believe are easy to get via the site you should not go to). Here is a download link for this file structure:

../files/system.zip

Next, make a D:\\ drive (you can partition your C:\\ drive) and directory to have the following file tree:

(Assume this is under the `D:\\` root)\n\u251c\u2500\u2500 system\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 CmdFile\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 log\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0     \u2514\u2500\u2500 Log.txt\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 DUA\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 data\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 decrypt\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 download\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 event\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 news\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 1524476664.png\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 1554282603.png\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 unpack\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 work\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 option.txt\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 Service\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 NesysService.exe\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 update.log\n

(The most important file is the NesysService.exe as this is what the game uses to call between the game server and the game)

After that step, edit your arcade machine's hosts file:

Usually under: C:\\Windows\\System32\\drivers\\etc\\hosts

127.0.0.1 cert.nesys.jp\n127.0.0.1 cert3.nesys.jp\n127.0.0.1 data.nesys.jp\n127.0.0.1 proxy.nesys.jp\n127.0.0.1 nesys.taito.co.jp\n127.0.0.1 fjm170920zero.nesica.net\n

(If its the same PC, just leave it as 127.0.0.1 if its a different PC on your network, replace it with the IP address)

Once your computer resolves the domains to where ever you host the game server, we need to add some registry entries to enable the NesysService to run.

Run the following file:

../files/runme.reg

Finally, you'll need to make nesys an actual Windows service (one that you would find in services.msc). Download and run this command to add it (assuming your service directory is found in D:\\). This is all tested for D:\\.

../files/nesys.bat

If you don't want to create a service, you're also able to run NesysService.exe in powershell or cmd. Just follow these steps:

  • Make sure you open powershell or cmd as administrator
  • Run this first (so you can debug it if it gives you an error):
  • chcp 932
  • Then run the exe as so:
  • D:\\system\\Service\\NesysService.exe -app

If it outputs the following then you're good to go!

If it outputs something else, then you didn't install the registry values correctly!

(todo, add a picture here as an example)

"},{"location":"sifac/#certificates","title":"Certificates","text":"

The last step to this would be adding certificates. It is not an easy process, but asesidaa made a script that should do it for you.

You can find the script to install the scripts in here: https://github.com/asesidaa/LLServer/tree/master/LLServer/Certificates

Make sure to run the script as administrator. (you might need to enable powershell script running exception)

Enter this command in an administrator powershell window:

set-executionpolicy remotesigned

If the script doesn't work, you just need to have the certs in the 'Personal' store and the 'Root Trust ...' store (I forget the full name). After that you shouldn't get any nesys HTTP errors (it should just connect).

(On Japanese Locale, I think the 'Personal' store is also called the 'My' store)

If the server isn't compiled already, you'll need Visual Studio Community edition, link for easy access here. Make sure you set it up with basic .NET functionality. (It should install the things it needs if you don't select the right one so don't worry too much).

Then if you haven't already, download the LLServer repo: https://github.com/asesidaa/LLServer/archive/refs/heads/master.zip

"},{"location":"sifac/#network_interfaces","title":"Network Interfaces","text":"

NesysService will require you to have a single interface enabled (and the other ones disabled) in order for it to connect correctly. Make sure you only have one network interface enabled like the picture below:

"},{"location":"sifac/#patched_binary","title":"Patched Binary","text":"

Lastly you will need the patched binary with the correct public key. This key is used to confirm that it's talking to the right server.

Download it here:

../files/ll3.exe

FYI, you will need to replace the original binary with this one.

Please message @caretchara on the Discord if anything here needs changes!

"},{"location":"sifas/","title":"SIFAS","text":""},{"location":"sifas/#sifas","title":"SIFAS","text":"

(the following was copied from the fandom wiki)

Love Live! School Idol Festival ALL STARS (\u30e9\u30d6\u30e9\u30a4\u30d6\uff01\u30b9\u30af\u30fc\u30eb\u30a2\u30a4\u30c9\u30eb\u30d5\u30a7\u30b9\u30c6\u30a3\u30d0\u30eb ALL STARS Rabu raibu! Suk\u016bru Aidoru Fesutibaru ALL STARS) was a rhythm action game developed for mobile platforms, based on the Love Live! and related franchises. It is published by Bushiroad and developed by KLab Inc., and was released on September 26, 2019. It was first announced at Tokyo Game Show 2017 on September 21, 2017. Prior to the announcement, it was first introduced and teased on March 30, 2017 as the PERFECT Dream Project in conjunction with SIF's 4th year anniversary. Love Live! School Idol Festival ALL STARS was designed with \"the greatest, best idol game\" as its concept. Characters from \u03bc\u2019s, Aqours and Nijigasaki High School Idol Club appear within this game.

On April 30, 2023, it was announced that the game's service would be shut down on June 30, 2023.

"},{"location":"sifas/#some_random_forewords","title":"Some random forewords","text":"

SIFAS, whether you liked it or not, was unjustly killed in favor of a bad \"sequel\". SIFAS die and bring with it things like fully animated navigator, stories, costume, and of course the main selling point of the game - 3DMV. With SIFAS gone, the only way to officially watch 3DMV is through the Link Live app (doesn't have other groups), or through some metaverse VR stuff that you have to pay for (per concert).

Luckily for us, the community managed to preserve most if not all of the beloved aspects of the game. Thanks to various community members, there are works done and being done so that with a bit of tinkering, you can install and play SIFAS.

"},{"location":"sifas/#disclaimers","title":"Disclaimers","text":"

The information presented by the author(s) of this documentation were either background knowledge, knowledge provided by community members, or knowledge learned from works published by community members.

The author(s) try to make sure that the information presented is correct. However, there might be incorrect info, or outdated info.

The author(s) try to acknowledge and credit the community members who share knowledge, develop tools, host resources, or helped in any other way, but there might be some missing credit. If that were the case, please know that it is not intended by the author(s), and please contact the author(s) for proper credit.

The knowledge, tools, resources used by this documentation are acquired and presented with a good faith basis. While the author(s) try to ask creators for permission to use or feature their works, some works was used or featured without explicit permission. If you have problem with your works being mentioned / features, or your name being credited, please contact the author(s) to sort things out.

"},{"location":"sifas/#intents","title":"Intents","text":"

This documentation go somewhat in depth to the technical side, so for experienced audience, it can serve as a quick introduction to the working of the game and server. If you are not interested in the details, or want to get something running before learning more, please check out the Easy install section for a streamlined experience. Do note that the provided packages might not work for you, however, the details explanation should give you want you need to get things working. Regardless, feel free to reach out to the community, both to help resolve your situation and to help make the documentation better.

This documentation will be about hosting your own SIFAS server, however, there exist a Korean private server that you can play the GL version on. You can find out more about it by asking in the LL Hax server. This documentation will also discuss only the GL (Global) and JP (Japanese) version, although there exist private server for CN (Chinese) version as well.

This documentation assume that you have some background knowledge related to the topic discussed, however, if this is your first time doing something like this, or you just want to learn more, you can also checkout the Random knowledge section. Various things that are common knowledge, things that are related and interesting (but not totally relevant to the discussion) are discussed.

"},{"location":"sifas/#convention","title":"Convention","text":"

As there are multiple platforms for both client and server, we use the following terms to refer to them:

  • Client: The game/app itself. This is what you will use to play the game.
  • Server: The program that serve the necessary data for client(s) to function. This was Klab/MYNET/Bushiroad responsibility, but we will have to run our own server now that they have stoped supporting the game. The server often run in another machine, but there are setup that run the client and server on the same machine for android.
  • Android/iOS/android/ios: The platform that the client run on. You should know what your platform is.
  • Window/Linux/MacOS/Android: The platform that the server will run on.
"},{"location":"sifas/#installing_the_client","title":"Installing the client","text":""},{"location":"sifas/#clients_version","title":"Clients version","text":"

We will be using the 3.12 clients (patched): - If you recall, these are released after the game is dead. - The only functionality is to show a \"SIFAS EoS, thanks for playing SIFAS\" message, or so it seems. - The truth is that, none of the original functionality was deleted, but the crack-proof is removed. - Which mean that if we patch the starting screen away, we have access to a superior version of the app. - We will only deal with the patched version here, the only modification you might need to do is to change the server address inside the client.

"},{"location":"sifas/#basic_clients","title":"Basic clients","text":"

These are the clients that come with the elichika server, you can get them fromelichika or directly here.

These clients connect to http://192.168.1.123. This is a local address (LAN), so if you run elichika the machine that has that address (and the port is opened for LAN access), you won't have to modify the clients at all. It will be explained more on the easy install section.

"},{"location":"sifas/#patching_client_to_a_different_server_address","title":"Patching client to a different server address","text":"

There are some problems that prevent the basic clients from working or working well: - You might not have a Wi-Fi network that you can connect to. - You might not have a separate device (usually a PC / laptop) to run the server on. - Your Wi-Fi router IP address might not look like 192.168.xxx.xxx, and it's impossible or very complicated to change that. - You can't obtain the IP 192.168.1.123 because someone or something on your network already have that (it's a nice address). - You have the IP but you need port 80 (default http) for something else, so you can't run elichika on that port. - You are outside touching grass a lot, so you are not connected to Wi-Fi that often. - The list go on.

In which case, you will need to patch the server address in your client, or a client with different address. There are a few clients provided in the easy install section, see if you can use one of them, if not then you will have to patch the server address yourself.

"},{"location":"sifas/#patching_android_client_to_different_server_address","title":"Patching Android client to different server address","text":"

This part is written after referencing honoka-chan. It's recommended that you read that for a deeper understanding, however that won't be necessary to follow this documentation.

We work with the basic clients .apk here.

"},{"location":"sifas/#first_step_unpacking_the_apk","title":"First step: Unpacking the apk","text":"

There are multiple ways to do this, but we will use apktool.

We can either use the wrapper or .jar directly. Of course, java will be necessary.

Open up a terminal (command prompt) in the same folder as the .apk and run the following:

apktool d ALL_STARS_3.12.0_gl_patched.apk\n

for global client, or

apktool d ALL_STARS_3.12.0_ja_patched.apk\n

for JP client. Note that if you don't use or don't have the apktool wrapper, you can run the .jar directly (put in the same directory or you will have to specify to the actual path):

java -jar apktool_2.8.1.jar d apkname.apk\n

In any case, after unpacking, you should have a folder that has the same name as the .apk except for the extension

"},{"location":"sifas/#second_step_change_the_address_string","title":"Second step: Change the address string","text":"

We will use the MetaData String Editor

It is written in C#, and the .exe you can download need windows to run. If you can build your own from source, or change the metadata in other way, then you can use that too.

This tool is used to edit the metadata file of Unity engine games. In this case, we use it to change the address the client will connect to, but you can also change other strings.

To change the address string, open the tool, then press the top left button and open up the global-metadata.dat file. You can find it in:

ALL_STARS_3.12.0_gl_patched\\assets\\bin\\Data\\Managed\\Metadata\n

or

ALL_STARS_3.12.0_jp_patched\\assets\\bin\\Data\\Managed\\Metadata\n

depending on the versions.

You will see many strings. Search for http://192.168.1.123 using the textbox at the top. Double click on the string, click on the popup thing, and you will see another window pop up. You can edit that data to any address you wish to connect to.

If want to use the elichika server, keep it http, you can use https if the server do support that.

After editing the address, click the bottom right button to change the address. After that, click the middle button on the top left of the program. Save the metadata as some other file, as you can't overwrite to the current file. After that you can close the tool, remove the original global-metadata.dat and rename the new file to global-metadata.dat.

"},{"location":"sifas/#third_step_repack_the_apk","title":"Third step: Repack the apk","text":"

We can do this with apktool:

apktool b ALL_STARS_3.12.0_gl_patched\n

or

apktool b ALL_STARS_3.12.0_ja_patched\n

After apktool is done, you can find the output .apk in

ALL_STARS_3.12.0_gl_patched\\dist\\ALL_STARS_3.12.0_gl_patched.apk\n

or

ALL_STARS_3.12.0_jp_patched\\dist\\ALL_STARS_3.12.0_jp_patched.apk\n

This .apk is not finished, we need to sign it before it can be installed in emulators or phones.

"},{"location":"sifas/#fourth_step_sign_the_apk","title":"Fourth step: Sign the apk","text":"

To sign the .apk, we will need a few things.

The first is apksigner. You can either download a .jar online, or you can get it with the Android SDK.

The second thing we need is a keystore. You can download this keystore that has password 123456 for your convinience. If you want to generate your own key store, you will need keytool, which come with java (find it in java bin folder):

keytool -genkeypair -v -keystore sifkey.keystore -alias sifkey -keyalg RSA -keysize 2048 -validity 36500\n

You can choose your own password and the keystore name. After we have the keystore, you can sign the .apk:

apksigner sign --ks sifkey.keystore --ks-key-alias sifkey --out ALL_STARS_3.12.0_gl_patched.apk ALL_STARS_3.12.0_gl_patched\\dist\\ALL_STARS_3.12.0_gl_patched.apk\n\n

You can change the .apk name if necessary.

After this, you can install the .apk. If you already have a version of SIFAS, you might get an error saying that the signature doesn't match. You can just uninstall the old SIFAS and install the new one in that case. Google play protect might say the file is suspicious, but you can still install it.

"},{"location":"sifas/#patching_android_client_to_new_address_with_frida","title":"Patching Android client to new address with frida","text":"

It's possible to use frida to change the address and avoid having to patch the .apk, as demonstated by sarah in the LL Hax discord. If you don't want to use the above patching process, you might want to try that.

"},{"location":"sifas/#patching_ios_client_to_new_address","title":"Patching ios client to new address","text":"

The details on patching .ipa is outside of the author(s) knowledge and is not discussed here, but it is doable.

The ios clients distributed by elichika were patched by tungnotpunk in the LL Hax discord. If you want to learn how patch them yourself, you can find out more there.

"},{"location":"sifas/#install_the_elichika_server","title":"Install the elichika server","text":"

elichika is a SIFAS server written by YumeMichi (.yumemichi on discord). It is written in Go(lang), and it is still being worked on at the time of writing this documentation. As such, it's recommended that you install git to make it easy to keep your version up-to-date.

This documentation will walk through the process of installing and building elichika using git and some other tools. You can also try the prebuilt server binaries but they might not be up to date, and might not work for your purpose.

"},{"location":"sifas/#platforms","title":"Platforms","text":"

Generally, if we can run Go on a platform, then we can run the server on it. Regardless of the platform, the setup will be something like this: - Local PC: server run on a PC (windows, linux, mac), client connect to it through WLAN (Wi-Fi) or some tethering method. - External PC: server run on an external machine, client connect to it through a public IP or a server address. This is the setup for online multiplayers, however that is not supported by the server (for now). - Android/Termux: server run on the same android phone, tablet, or emulator as the client. More precisely, it will be running inside the termux app.

"},{"location":"sifas/#zeroth_step_install_git_for_each_platform","title":"Zeroth step: Install git for each platform","text":"

If you want to use git to get the server, and you didn't have it installed, you can download and install through the official website.

For Linux and Termux, you can also install git through the terminal (it's most likely already installed in Linux, but this is necessary for a fresh Termux install):

apt install git\n

If you don't want to use it, you can skip this step.

"},{"location":"sifas/#first_step_download_the_server","title":"First step: Download the server","text":""},{"location":"sifas/#using_git","title":"Using git","text":"

Nagivate to where you want to put the server and open up a terminal: - For Windows, nagivate with the GUI to the folder you want to put the server, then enter cmd`` into the address bar, that will open up a terminal inside that folder. - For Linux GUI, you can also navigate to the directory you want, and right click, there should be an option to open the terminal. - For all platforms, you can also just open the command prompt / terminal and go to the correct place. Expect to use things likecdandmkdir` to navigate and create folder.

After that, use git clone to download the server:

git clone https://github.com/YumeMichi/elichika\n\n

You will get an elichika folder / directory. Go to it with your current terminal:

cd elichika\n

Everyt ime you want to run the server, you will have to open a terminal in that directory.

If you use git, you can keep your server source code up to date by running the following:

git pull\n

Note that if you made changes to the server, then git pull might fail. You can either learn more about .gitignore (or other methods) to keep your changes, or you can just run:

git reset --hard\ngit pull\n

to update it, but you will have to make the change again.

"},{"location":"sifas/#download_directly","title":"Download directly","text":"

You can also download the source code directly to avoid using git. If you do this, everytime you want to update the server, you will have to redownload everything.

Simply go to elichika with your web browser, click on the Code button, click on Download ZIP, save the file, and extract it. You will need to open terminal in the extracted folder with main.go file.

"},{"location":"sifas/#third_step_build_the_server","title":"Third step: Build the server","text":"

It's recommended to build your own server if you can, so you can stay up-to-date and make the changes necessary.

"},{"location":"sifas/#installing_go","title":"Installing Go","text":"

Because the server is written in Go, you have to install it to build the server.

For PC platforms, you can get it here.

For Termux, run:

pkg install golang\n
"},{"location":"sifas/#building_the_server","title":"Building the server","text":"

On all platform, simply run:

go build\n

inside the elichika server. You will get an elichika binary (elichika.exe on windows). Note that you will have to rebuild everytime you update or make a change.

"},{"location":"sifas/#running_the_server","title":"Running the server","text":"

Before you can play the game, you have to run the server. To do that, go to the elichika folder, and run the binary through terminal / command prompt:

./elichika\n

remove the ./ on windows. On windows, you can also run it by opening the .exe file directly.

If you haven't configured the server correctly, you might have to change some config. Mostly you will change config.json or main.go.

Easy setups all have configuration ready, but you might still want to do some modifications.

To change the files in windows or linux GUI, you can open any text editor to change config.

In Termux, you should use some command-line based text editor like nano, or vim. Looks up a tutorial if you don't know how to use them. You can also just use sed if you are comfortable with it.

"},{"location":"sifas/#providing_a_cdn_server","title":"Providing a CDN server","text":"

A CDN (content distribution network) server is where the game(app) will download the files necessary (i.e. songs, stories). We can set it inside config.json. Note that if the file is not present, just run elichika and close it, the file will be generated.

By default, it's pointed to http://192.168.1.123/static (the same address as the default elichika server). This essentially tell the game to download game files from http://192.168.1.123/static (from the game network environment).

We can change the CDN server by changing that string in the config.json file.

"},{"location":"sifas/#online_cdn","title":"Online CDN","text":"

Thanks to sarah (sarayalth) from the LL Hax discord, there is a CDN that we can use to avoid hosting our own files.

Change the cnd server to https://llsifas.catfolk.party/static, and the game will download file from that server (through the internet). This is the recommended way to do this, however the server might become unavailable later on. The config.json file should looks something like this:

{\"app_name\":\"elichika\",\"settings\":{\"cdn_server\":\"https://llsifas.catfolk.party/static\"}}\n

The easy installs all use this method.

"},{"location":"sifas/#self_hosted_cdn","title":"Self hosted CDN","text":"

elichika has the ability to host the CDN files, but we will have to have the CDN data ready. The data is 20GB for either GL or JP server, so 40GB for both.

One way to get them is from archive.org. The direct downloading speed is not that great, so be prepared to leave your machine on for a very long time. If you don't want that, download using the .torrent, it would be much appreciated if you also host the files once downloaded. Do note that there are risks associated with torrenting, but that topic will not be discussed here.

Another way to get them is from extracting the downloaded game files. You can try this once you download the necessary files (from https://llsifas.catfolk.party/static), for example. To extract the files, use this youtube tutorial, or any other methods you know.

You can also just directly download from https://llsifas.catfolk.party/static if you have the list of necessary files (check the file database).

Regardless of how you get the files, you want to put them in:

elichika/static/2d61e7b4e89961c7\n

for GL or

elichika/static/b66ec2295e9a00aa\n

for JP. After that, edit the cnd_server address to be http://<server_address>/static (i.e. http://192.168.1.123/static or http://127.0.0.1:8080/static) and we're done.

"},{"location":"sifas/#patching_the_database","title":"Patching the database","text":"

Since we use the 3.12 clients, we have to patch the database (as the cdn data was for 3.11 clients). The patched database is included in the same download with the basic clients here. Just extract the correct version GL or JP, and put them in elichika/static/2d61e7b4e89961c7 (GL) or elichika/static/b66ec2295e9a00aa (JP).

The easy installs have the database patch included for both JP and GL version.

It's possible to patch and key the database again (if you want to modify some file for example), although that is not discussed here. Join the discord and ask around for more informations.

"},{"location":"sifas/#changing_server_port","title":"Changing server port","text":"

By default the server run on port 80. You can change by changing the main.go file. Remember that you have to rebuild if you do this. Maybe this is better in a config file, but it's hard coded for now.

To change the port, open up main.go the line:

r.Run(\":80\")\n

to whatever port you like, i.e.:

r.Run(\":8080\")\n

or

r.Run(\":1503\")\n

You can also use sed:

sed -i 's/r.Run(\":80\")/r.Run(\":8080\")/g' main.go\n

On some system (Linux and/or Termux), port with number less than 1024 need to have root permission (or just higher permission than normal) to open, so changing it to something bigger let you run without root. Your port 80 might also be used for other things, so you might want a new port.

"},{"location":"sifas/#playing_the_game","title":"Playing the game","text":"

After you have the server installed and run it, just open the game. You will be prompted to choose language if you are using the GL version, English(EN), Korean (KR), and Traditional Chinese (ZH) are supported, choose the one you want.

You will then be prompted to download the files. If you have spaces on your phone / emulator, you can just download everything, however, other type of download also work just fine. Download everything let you play the game without the internet later on.

After you are done downloading, you can just play the game like normal.

For your information, here is the summany state of the server. Note these might be outdated, mising, or incorekt.

"},{"location":"sifas/#stuff_that_works_at_least_partially","title":"Stuff that works (at least partially)","text":""},{"location":"sifas/#personalization","title":"Personalization","text":"

The following persionalizations work: - Changing profile: You can select any card / title / name / nickname. - Changing partner: You can select partners and their costumes, as well as the backgrounds.

"},{"location":"sifas/#partner_interaction","title":"Partner interaction","text":"

You can interact with everyone, view their cards, view their costumes and preview them.

There is no bond board unlock as they are all maxed.

"},{"location":"sifas/#3dmv","title":"3DMV","text":"

You can watch all the MVs, with all the settings: - The \"custom formation\" tab works and you have all the outfit to choose from. - However changing costume in the \"original formation\" tab doesn't work, but you can just use the \"custom formation\" node.

"},{"location":"sifas/#story","title":"Story","text":"

You can read ALL the stories, ALL of them: - All main stories - All bond stories - All side (card) stories - All event stories - All Nijigasaki anime tie-in stories

"},{"location":"sifas/#live_show","title":"Live show","text":"

You can build team and play live shows: - You can play all the permanent songs and story songs. - You can play all the daily song, but they are on a rotation similar to the official game, however there is no limit to how many time you can play. Maybe it will be possible to make it so all daily song are always available. - You have all the cards almost maxed, along with maxed bond board and bond level 500 on every character, so you can try to clear the harder songs that you didn't manage to do before the game die. - Autoplay will also get Wonderful judgement everytime. If you didn't know, this is a server setting, so you can change the server so that it behave like the official game if you want. - The song play record is not implemented for now, and you don't get any item drops, but the main feature is there. - After you complete a song, you always get taken to a story menu, so it might be a bit annoying. - Some stuff like changing formation name can crash the game, but you can just restart. - Skip ticket doesn't work. - Overall the core stuff is there.

"},{"location":"sifas/#school_idols","title":"School idols","text":"

You have all the school idols at max level and max limit breaks. - Most idols have their practice done, except for the party cards (will likely be fixed soon enough) - There's no actual idol rising experience for now.

"},{"location":"sifas/#training","title":"Training","text":"

You can do training: - Training doesn't cost any AP. - Training doesn't give you any items. - Training doesn't depend on the regiments, you always get the same insight awarded, so you can use that to quickly build your maxed team. - Training doesn't give any other skill for now, so you can't build a team that has maxed out skill chance for example.

"},{"location":"sifas/#accessories","title":"Accessories","text":"

You have the accessories available in the original game: - You can choose accessories for the formation just fine. - All the DLP accessories are available and maxed. - You also have other maxed accessories. - But there is no way to get more for now, so you can't play into some strategy that require them. - The game will crash if you try to disassemble or synthesize, or lock or remove from all formation etc. These will be address in due time.

"},{"location":"sifas/#stuff_that_doesnt_work_at_least_at_the_time_of_writing","title":"Stuff that doesn't work (at least at the time of writing)","text":"

Aside from the things that work partially, some stuff doesn't work at all and crash the game, you should avoid clicking on them.

"},{"location":"sifas/#gacha","title":"Gacha","text":"

Sadly you can't gacha for now.

"},{"location":"sifas/#membership_card","title":"Membership card","text":"

Membership doesn't work on the global version (tapping it results in a crash).

Supposedly it works in the JP version.

"},{"location":"sifas/#news","title":"News","text":"

The news menu works but it shows you JP news, and if you click on the news it crashes.

"},{"location":"sifas/#goals","title":"Goals","text":"

There's no goal (mission), you can click on it but it will freeze your game, so you will need to restart the game.

"},{"location":"sifas/#channel_member","title":"Channel member","text":"

Crash the game if clicked on.

"},{"location":"sifas/#shop_and_exchange","title":"Shop and exchange","text":"

Crash the game if clicked on.

"},{"location":"sifas/#multiplayer","title":"Multiplayer","text":"

No form of multiplayer exist or can exist with the current implementation. That might change later on.

"},{"location":"sifas/#event_sbl_and_dlp","title":"Event, SBL, and DLP","text":"

There is currently no way to play these modes. In the future, someone might figure that out.

"},{"location":"sifas/#future_of_the_server","title":"Future of the server","text":"

Development is still being done on the server by YumeMichi. If you want to help, joining the LL Hax discord would be a good first step.

Ideally, we would at least have a server that offer the same experience of the SIFAS journey: Getting cards, costumes, clearing goals, raising idols, raising bond level and so on.

"},{"location":"sifas/#easy_install","title":"Easy install","text":"

This section provide some prebuilt server binaries and some clients so you don't have to make the modifications yourself.

"},{"location":"sifas/#clients","title":"Clients","text":"
  • elichika provided android and ios clients. Connect to server at http://192.168.1.123:80
  • localhost android clients. Connect to server at http://127.0.0.1:8080
  • LAN android clients. Connect to server at http://192.168.1.123:8080
  • For the .apk clients, you can get them here. The naming format is ALL_STARS_3.12.0_version_ip_ip_ip_ip_port. Version being GL or JP.
"},{"location":"sifas/#servers","title":"Servers","text":"
  • elichika server source.
  • elichika server resource: download directly from github and unzip.
  • catfolk CDN patch.
  • static/database: same download as elichika provided clients, or direct zip
  • elichika prebuilt server binaries for various OS and architectures so you don't or can't install go. The file names is in the format: elichika_<OS>_<ARCH>_<PORT>.
  • To use a server version, download the server resource and extract it, download the CDN patch, download the correct binary. Put the binary and CDN patch inside the extracted server resource and run the binary.
"},{"location":"sifas/#common_setups","title":"Common setups","text":""},{"location":"sifas/#server_and_client_run_on_android_with_termux","title":"Server and client run on Android, with Termux","text":"

The server run inside Termux, on the same phone or emulator that you want to play SIFAS on. After downloading all of the game files, you can play anywhere anytime even without internet.

  • Download the client that point to http://127.0.0.1:8080 and install it in your phone.
    • GL version
    • JP version
  • Open up termux and enter the follow commands:
curl https://codeberg.org/arina999999997/nozomi/raw/branch/master/termux_install_script.sh -o sifas_install.sh && bash sifas_install.sh\n
  • After that run the elichika server:
cd elichika\n./elichika\n
  • Finally run the game and enjoy.

If that doesn't work, you might have one of the following problems: - If you can't install the .apk then you're out of luck, either play with a 64 bits emulator or phone. - If anything happen before you run the binary, your Termux has problem. Install through this guide. - If you run the server binary and it doesn't work, it's likely that your system has a different architecture. It might also start and give you a warning (this still works). The way to resolve this is to install golang and build the server yourself:

apt install golang\ngo build\n
  • Note that in some system, even if you can build the go binary, you will still have a problem when running it. If this happens, it's easier to just use another device that work.
"},{"location":"sifas/#server_on_pc_play_on_phone_through_wi-fi","title":"Server on PC, play on phone, through Wi-Fi","text":"

The server run on your PC (Windows / Linux / MacOS). You play on your phone. The 2 devices has to be in the same network.

  • Download the client that point to http://192.168.1.123:80 (or http://192.168.1.123:8080 if you can't use port 80) and install that.
  • Download the server (your architecture + port). If the architecture is not in the release, then you will have to build your own with go.
  • Change your PC's local IP to 192.168.1.123. You might also have to deal with firewall stuff. Look up how to change IP on <your specific system> if you have trouble.
  • Run the binary on PC and run the game on your phone.
  • Note that if you are using port 80, you might need to run the server with root permission on Linux and MacOS, otherwise the program just close after it start.
"},{"location":"sifas/#server_on_pc_play_on_android_phone_through_adb","title":"Server on PC, play on android phone, through adb","text":"

In the case that you want to run server on PC but play on android phone, and you can't get the IP/port, you can rely on adb.

  • Download the client that point to http://127.0.0.1:8080 and install it in your phone.
  • Download a server that run at http://127.0.0.1:8080 on your PC.
  • Enable developer options, and turn on adb.
  • Connect your phone to your pc, accept the USB debugging and run:
adb reverse tcp:8080 tcp:8080\n
  • This map http://127.0.0.1:8080 in your phone to http://127.0.0.1:8080 in your PC, allow the app to connect to the server.
  • If you don't want to have your phone plugged in to your computer, debug the phone through tcpip mode. If you are going to do this, it's good to have a static IP for your phone, then you can make a script that connect to your phone and run the server,for convinience.
"},{"location":"sifas/#server_on_pc_play_on_android_emulator","title":"Server on PC, play on android emulator","text":"

If you want to play on an emulator and don't want to use Termux, you can use either adb, or you can bridge the network so your emulator get treated as a device in your LAN. The details on how to do this depend on the emulator, so you should look it up yourself.

"},{"location":"sifas/#random_knowledge","title":"Random knowledge","text":"

Some random knowledge that you might already know, or stuff that is inconvenience to discuss elsewhere.

"},{"location":"sifas/#install_necessary_program_in_linuxmactermux","title":"Install necessary program in Linux/Mac/Termux","text":"

If you need a program, say git, you can just type it to the terminal. The terminal will say that you don't have that program, but it will let you know which command to install the thing. If it doesn't then the tool you are trying to use is very niche, but you can still find some installing guide by searching.

"},{"location":"sifas/#installing_apk","title":"Installing .apk","text":"

For android, you can just use your phone/emulator to download the .apk and install it. You might have to go through some step / permission, but it should be doable.

Pretty much all emulators have a way to install .apk. You can use that feature for them. Most of them also let you install .apk by dragging them into the emulator.

Finally, you can install .apk through adb.

"},{"location":"sifas/#installing_ipa","title":"Installing .ipa","text":"

For ios, it's way harder to install custom package. Please look up guide or ask the communities for help.

"},{"location":"sifas/#installing_termux_for_android","title":"Installing termux (for android)","text":"

Termux give you access to various things, you can do things usually done on computers like programming. In our case, it let us run the server and play the game everywhere (without internet if you has downloaded the game files).

You can build termux yourself, but for simplicity, you can install Termux through the F-Droid release. You can either use the F-Droid app, or download the .apk directly from the page and install that.

Note that the Termux from Google Play store is very OUTDATED, and it will likely NOT WORK.

"}]} \ No newline at end of file diff --git a/sif/index.html b/sif/index.html index 2f866e8..97255ee 100644 --- a/sif/index.html +++ b/sif/index.html @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + diff --git a/sif2/index.html b/sif2/index.html index 3530912..ab12e13 100644 --- a/sif2/index.html +++ b/sif2/index.html @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + diff --git a/sifac/index.html b/sifac/index.html index 2203c7e..f8fa6b1 100644 --- a/sifac/index.html +++ b/sifac/index.html @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -377,6 +377,20 @@ Certificates + + +
  • + + Network Interfaces + + +
  • + +
  • + + Patched Binary + +
  • @@ -515,6 +529,20 @@ Certificates + + +
  • + + Network Interfaces + + +
  • + +
  • + + Patched Binary + +
  • @@ -636,10 +664,20 @@ ll3.exe -singlemode -sw 1920 -sh 1080 -highquality

    Enter this command in an administrator powershell window:

    set-executionpolicy remotesigned

    If the script doesn't work, you just need to have the certs in the 'Personal' store and the 'Root Trust ...' store (I forget the full name). After that you shouldn't get any nesys HTTP errors (it should just connect).

    +

    (On Japanese Locale, I think the 'Personal' store is also called the 'My' store)

    If the server isn't compiled already, you'll need Visual Studio Community edition, link for easy access here. Make sure you set it up with basic .NET functionality. (It should install the things it needs if you don't select the right one so don't worry too much).

    Then if you haven't already, download the LLServer repo: https://github.com/asesidaa/LLServer/archive/refs/heads/master.zip

    +

    Network Interfaces

    +

    NesysService will require you to have a single interface enabled (and the other ones disabled) in order for it to connect correctly. Make sure you only have one network interface enabled like the picture below: +image-20230716133155441

    +

    Patched Binary

    +

    Lastly you will need the patched binary with the correct public key. This key is used to confirm that it's talking to the right server.

    +

    Download it here:

    +

    ../files/ll3.exe

    +

    FYI, you will need to replace the original binary with this one.

    +

    Please message @caretchara on the Discord if anything here needs changes!

    diff --git a/sifas/index.html b/sifas/index.html index 787c0b0..42e42f5 100644 --- a/sifas/index.html +++ b/sifas/index.html @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -348,6 +348,531 @@ SIFAS + + +
  • + + Some random forewords + + +
  • + +
  • + + Disclaimers + + +
  • + +
  • + + Intents + + +
  • + +
  • + + Convention + + +
  • + +
  • + + Installing the client + + + + +
  • + +
  • + + Install the elichika server + + + + +
  • + +
  • + + Running the server + + + + +
  • + +
  • + + Playing the game + + + + +
  • + +
  • + + Future of the server + + +
  • + +
  • + + Easy install + + + + +
  • + +
  • + + Random knowledge + + + +
  • @@ -417,6 +942,531 @@ SIFAS + + +
  • + + Some random forewords + + +
  • + +
  • + + Disclaimers + + +
  • + +
  • + + Intents + + +
  • + +
  • + + Convention + + +
  • + +
  • + + Installing the client + + + + +
  • + +
  • + + Install the elichika server + + + + +
  • + +
  • + + Running the server + + + + +
  • + +
  • + + Playing the game + + + + +
  • + +
  • + + Future of the server + + +
  • + +
  • + + Easy install + + + + +
  • + +
  • + + Random knowledge + + + +
  • @@ -437,6 +1487,379 @@

    SIFAS

    SIFAS

    +

    (the following was copied from the fandom wiki)

    +

    Love Live! School Idol Festival ALL STARS (ラブライブ!スクールアイドルフェスティバル ALL STARS Rabu raibu! Sukūru Aidoru Fesutibaru ALL STARS) was a rhythm action game developed for mobile platforms, based on the Love Live! and related franchises. It is published by Bushiroad and developed by KLab Inc., and was released on September 26, 2019. It was first announced at Tokyo Game Show 2017 on September 21, 2017. Prior to the announcement, it was first introduced and teased on March 30, 2017 as the PERFECT Dream Project in conjunction with SIF's 4th year anniversary. +Love Live! School Idol Festival ALL STARS was designed with "the greatest, best idol game" as its concept. Characters from μ’s, Aqours and Nijigasaki High School Idol Club appear within this game.

    +

    On April 30, 2023, it was announced that the game's service would be shut down on June 30, 2023.

    +

    Some random forewords

    +

    SIFAS, whether you liked it or not, was unjustly killed in favor of a bad "sequel". SIFAS die and bring with it things like fully animated navigator, stories, costume, and of course the main selling point of the game - 3DMV. With SIFAS gone, the only way to officially watch 3DMV is through the Link Live app (doesn't have other groups), or through some metaverse VR stuff that you have to pay for (per concert).

    +

    Luckily for us, the community managed to preserve most if not all of the beloved aspects of the game. Thanks to various community members, there are works done and being done so that with a bit of tinkering, you can install and play SIFAS.

    +

    Disclaimers

    +

    The information presented by the author(s) of this documentation were either background knowledge, knowledge provided by community members, or knowledge learned from works published by community members.

    +

    The author(s) try to make sure that the information presented is correct. However, there might be incorrect info, or outdated info.

    +

    The author(s) try to acknowledge and credit the community members who share knowledge, develop tools, host resources, or helped in any other way, but there might be some missing credit. If that were the case, please know that it is not intended by the author(s), and please contact the author(s) for proper credit.

    +

    The knowledge, tools, resources used by this documentation are acquired and presented with a good faith basis. While the author(s) try to ask creators for permission to use or feature their works, some works was used or featured without explicit permission. If you have problem with your works being mentioned / features, or your name being credited, please contact the author(s) to sort things out.

    +

    Intents

    +

    This documentation go somewhat in depth to the technical side, so for experienced audience, it can serve as a quick introduction to the working of the game and server. If you are not interested in the details, or want to get something running before learning more, please check out the Easy install section for a streamlined experience. Do note that the provided packages might not work for you, however, the details explanation should give you want you need to get things working. Regardless, feel free to reach out to the community, both to help resolve your situation and to help make the documentation better.

    +

    This documentation will be about hosting your own SIFAS server, however, there exist a Korean private server that you can play the GL version on. You can find out more about it by asking in the LL Hax server. This documentation will also discuss only the GL (Global) and JP (Japanese) version, although there exist private server for CN (Chinese) version as well.

    +

    This documentation assume that you have some background knowledge related to the topic discussed, however, if this is your first time doing something like this, or you just want to learn more, you can also checkout the Random knowledge section. Various things that are common knowledge, things that are related and interesting (but not totally relevant to the discussion) are discussed.

    +

    Convention

    +

    As there are multiple platforms for both client and server, we use the following terms to refer to them:

    +
      +
    • Client: The game/app itself. This is what you will use to play the game.
    • +
    • Server: The program that serve the necessary data for client(s) to function. This was Klab/MYNET/Bushiroad responsibility, but we will have to run our own server now that they have stoped supporting the game. The server often run in another machine, but there are setup that run the client and server on the same machine for android.
    • +
    • Android/iOS/android/ios: The platform that the client run on. You should know what your platform is.
    • +
    • Window/Linux/MacOS/Android: The platform that the server will run on.
    • +
    +

    Installing the client

    +

    Clients version

    +

    We will be using the 3.12 clients (patched): +- If you recall, these are released after the game is dead. +- The only functionality is to show a "SIFAS EoS, thanks for playing SIFAS" message, or so it seems. +- The truth is that, none of the original functionality was deleted, but the crack-proof is removed. +- Which mean that if we patch the starting screen away, we have access to a superior version of the app. +- We will only deal with the patched version here, the only modification you might need to do is to change the server address inside the client.

    +

    Basic clients

    +

    These are the clients that come with the elichika server, you can get them fromelichika or directly here.

    +

    These clients connect to http://192.168.1.123. This is a local address (LAN), so if you run elichika the machine that has that address (and the port is opened for LAN access), you won't have to modify the clients at all. It will be explained more on the easy install section.

    +

    Patching client to a different server address

    +

    There are some problems that prevent the basic clients from working or working well: +- You might not have a Wi-Fi network that you can connect to. +- You might not have a separate device (usually a PC / laptop) to run the server on. +- Your Wi-Fi router IP address might not look like 192.168.xxx.xxx, and it's impossible or very complicated to change that. +- You can't obtain the IP 192.168.1.123 because someone or something on your network already have that (it's a nice address). +- You have the IP but you need port 80 (default http) for something else, so you can't run elichika on that port. +- You are outside touching grass a lot, so you are not connected to Wi-Fi that often. +- The list go on.

    +

    In which case, you will need to patch the server address in your client, or a client with different address. There are a few clients provided in the easy install section, see if you can use one of them, if not then you will have to patch the server address yourself.

    +

    Patching Android client to different server address

    +

    This part is written after referencing honoka-chan. It's recommended that you read that for a deeper understanding, however that won't be necessary to follow this documentation.

    +

    We work with the basic clients .apk here.

    +
    First step: Unpacking the apk
    +

    There are multiple ways to do this, but we will use apktool.

    +

    We can either use the wrapper or .jar directly. Of course, java will be necessary.

    +

    Open up a terminal (command prompt) in the same folder as the .apk and run the following:

    +
    apktool d ALL_STARS_3.12.0_gl_patched.apk
    +
    +

    for global client, or

    +
    apktool d ALL_STARS_3.12.0_ja_patched.apk
    +
    +

    for JP client. Note that if you don't use or don't have the apktool wrapper, you can run the .jar directly (put in the same directory or you will have to specify to the actual path):

    +
    java -jar apktool_2.8.1.jar d apkname.apk
    +
    +

    In any case, after unpacking, you should have a folder that has the same name as the .apk except for the extension

    +
    Second step: Change the address string
    +

    We will use the MetaData String Editor

    +

    It is written in C#, and the .exe you can download need windows to run. If you can build your own from source, or change the metadata in other way, then you can use that too.

    +

    This tool is used to edit the metadata file of Unity engine games. In this case, we use it to change the address the client will connect to, but you can also change other strings.

    + + +

    To change the address string, open the tool, then press the top left button and open up the global-metadata.dat file. You can find it in:

    +
    ALL_STARS_3.12.0_gl_patched\assets\bin\Data\Managed\Metadata
    +
    +

    or

    +
    ALL_STARS_3.12.0_jp_patched\assets\bin\Data\Managed\Metadata
    +
    +

    depending on the versions.

    +

    You will see many strings. Search for http://192.168.1.123 using the textbox at the top. Double click on the string, click on the popup thing, and you will see another window pop up. You can edit that data to any address you wish to connect to.

    +

    If want to use the elichika server, keep it http, you can use https if the server do support that.

    +

    After editing the address, click the bottom right button to change the address. After that, click the middle button on the top left of the program. Save the metadata as some other file, as you can't overwrite to the current file. After that you can close the tool, remove the original global-metadata.dat and rename the new file to global-metadata.dat.

    +
    Third step: Repack the apk
    +

    We can do this with apktool:

    +
    apktool b ALL_STARS_3.12.0_gl_patched
    +
    +

    or

    +
    apktool b ALL_STARS_3.12.0_ja_patched
    +
    +

    After apktool is done, you can find the output .apk in

    +
    ALL_STARS_3.12.0_gl_patched\dist\ALL_STARS_3.12.0_gl_patched.apk
    +
    +

    or

    +
    ALL_STARS_3.12.0_jp_patched\dist\ALL_STARS_3.12.0_jp_patched.apk
    +
    +

    This .apk is not finished, we need to sign it before it can be installed in emulators or phones.

    +
    Fourth step: Sign the apk
    +

    To sign the .apk, we will need a few things.

    +

    The first is apksigner. You can either download a .jar online, or you can get it with the Android SDK.

    +

    The second thing we need is a keystore. You can download this keystore that has password 123456 for your convinience. If you want to generate your own key store, you will need keytool, which come with java (find it in java bin folder):

    +
    keytool -genkeypair -v -keystore sifkey.keystore -alias sifkey -keyalg RSA -keysize 2048 -validity 36500
    +
    +

    You can choose your own password and the keystore name. After we have the keystore, you can sign the .apk:

    +
    apksigner sign --ks sifkey.keystore --ks-key-alias sifkey --out ALL_STARS_3.12.0_gl_patched.apk ALL_STARS_3.12.0_gl_patched\dist\ALL_STARS_3.12.0_gl_patched.apk
    +
    +
    +

    You can change the .apk name if necessary.

    +

    After this, you can install the .apk. If you already have a version of SIFAS, you might get an error saying that the signature doesn't match. You can just uninstall the old SIFAS and install the new one in that case. Google play protect might say the file is suspicious, but you can still install it.

    +

    Patching Android client to new address with frida

    +

    It's possible to use frida to change the address and avoid having to patch the .apk, as demonstated by sarah in the LL Hax discord. If you don't want to use the above patching process, you might want to try that.

    +

    Patching ios client to new address

    +

    The details on patching .ipa is outside of the author(s) knowledge and is not discussed here, but it is doable.

    +

    The ios clients distributed by elichika were patched by tungnotpunk in the LL Hax discord. If you want to learn how patch them yourself, you can find out more there.

    +

    Install the elichika server

    +

    elichika is a SIFAS server written by YumeMichi (.yumemichi on discord). It is written in Go(lang), and it is still being worked on at the time of writing this documentation. As such, it's recommended that you install git to make it easy to keep your version up-to-date.

    +

    This documentation will walk through the process of installing and building elichika using git and some other tools. You can also try the prebuilt server binaries but they might not be up to date, and might not work for your purpose.

    +

    Platforms

    +

    Generally, if we can run Go on a platform, then we can run the server on it. Regardless of the platform, the setup will be something like this: +- Local PC: server run on a PC (windows, linux, mac), client connect to it through WLAN (Wi-Fi) or some tethering method. +- External PC: server run on an external machine, client connect to it through a public IP or a server address. This is the setup for online multiplayers, however that is not supported by the server (for now). +- Android/Termux: server run on the same android phone, tablet, or emulator as the client. More precisely, it will be running inside the termux app.

    +

    Zeroth step: Install git for each platform

    +

    If you want to use git to get the server, and you didn't have it installed, you can download and install through the official website.

    +

    For Linux and Termux, you can also install git through the terminal (it's most likely already installed in Linux, but this is necessary for a fresh Termux install):

    +
    apt install git
    +
    +

    If you don't want to use it, you can skip this step.

    +

    First step: Download the server

    +

    Using git

    +

    Nagivate to where you want to put the server and open up a terminal: +- For Windows, nagivate with the GUI to the folder you want to put the server, then enter cmd`` into the address bar, that will open up a terminal inside that folder. +- For Linux GUI, you can also navigate to the directory you want, and right click, there should be an option to open the terminal. +- For all platforms, you can also just open the command prompt / terminal and go to the correct place. Expect to use things likecdandmkdir` to navigate and create folder.

    +

    After that, use git clone to download the server:

    +
    git clone https://github.com/YumeMichi/elichika
    +
    +
    +

    You will get an elichika folder / directory. Go to it with your current terminal:

    +
    cd elichika
    +
    +

    Everyt ime you want to run the server, you will have to open a terminal in that directory.

    +

    If you use git, you can keep your server source code up to date by running the following:

    +
    git pull
    +
    +

    Note that if you made changes to the server, then git pull might fail. You can either learn more about .gitignore (or other methods) to keep your changes, or you can just run:

    +
    git reset --hard
    +git pull
    +
    +

    to update it, but you will have to make the change again.

    +

    Download directly

    +

    You can also download the source code directly to avoid using git. If you do this, everytime you want to update the server, you will have to redownload everything.

    +

    Simply go to elichika with your web browser, click on the Code button, click on Download ZIP, save the file, and extract it. You will need to open terminal in the extracted folder with main.go file.

    +

    Third step: Build the server

    +

    It's recommended to build your own server if you can, so you can stay up-to-date and make the changes necessary.

    +

    Installing Go

    +

    Because the server is written in Go, you have to install it to build the server.

    +

    For PC platforms, you can get it here.

    +

    For Termux, run:

    +
    pkg install golang
    +
    +

    Building the server

    +

    On all platform, simply run:

    +
    go build
    +
    +

    inside the elichika server. You will get an elichika binary (elichika.exe on windows). Note that you will have to rebuild everytime you update or make a change.

    +

    Running the server

    +

    Before you can play the game, you have to run the server. To do that, go to the elichika folder, and run the binary through terminal / command prompt:

    +
    ./elichika
    +
    +

    remove the ./ on windows. On windows, you can also run it by opening the .exe file directly.

    +

    If you haven't configured the server correctly, you might have to change some config. Mostly you will change config.json or main.go.

    +

    Easy setups all have configuration ready, but you might still want to do some modifications.

    +

    To change the files in windows or linux GUI, you can open any text editor to change config.

    +

    In Termux, you should use some command-line based text editor like nano, or vim. Looks up a tutorial if you don't know how to use them. You can also just use sed if you are comfortable with it.

    +

    Providing a CDN server

    +

    A CDN (content distribution network) server is where the game(app) will download the files necessary (i.e. songs, stories). We can set it inside config.json. Note that if the file is not present, just run elichika and close it, the file will be generated.

    +

    By default, it's pointed to http://192.168.1.123/static (the same address as the default elichika server). This essentially tell the game to download game files from http://192.168.1.123/static (from the game network environment).

    +

    We can change the CDN server by changing that string in the config.json file.

    +

    Online CDN

    +

    Thanks to sarah (sarayalth) from the LL Hax discord, there is a CDN that we can use to avoid hosting our own files.

    +

    Change the cnd server to https://llsifas.catfolk.party/static, and the game will download file from that server (through the internet). This is the recommended way to do this, however the server might become unavailable later on. The config.json file should looks something like this:

    +
    {"app_name":"elichika","settings":{"cdn_server":"https://llsifas.catfolk.party/static"}}
    +
    +

    The easy installs all use this method.

    +

    Self hosted CDN

    +

    elichika has the ability to host the CDN files, but we will have to have the CDN data ready. The data is 20GB for either GL or JP server, so 40GB for both.

    +

    One way to get them is from archive.org. The direct downloading speed is not that great, so be prepared to leave your machine on for a very long time. If you don't want that, download using the .torrent, it would be much appreciated if you also host the files once downloaded. Do note that there are risks associated with torrenting, but that topic will not be discussed here.

    +

    Another way to get them is from extracting the downloaded game files. You can try this once you download the necessary files (from https://llsifas.catfolk.party/static), for example. To extract the files, use this youtube tutorial, or any other methods you know.

    +

    You can also just directly download from https://llsifas.catfolk.party/static if you have the list of necessary files (check the file database).

    +

    Regardless of how you get the files, you want to put them in:

    +
    elichika/static/2d61e7b4e89961c7
    +
    +

    for GL or

    +
    elichika/static/b66ec2295e9a00aa
    +
    +

    for JP. After that, edit the cnd_server address to be http://<server_address>/static (i.e. http://192.168.1.123/static or http://127.0.0.1:8080/static) and we're done.

    +

    Patching the database

    +

    Since we use the 3.12 clients, we have to patch the database (as the cdn data was for 3.11 clients). The patched database is included in the same download with the basic clients here. Just extract the correct version GL or JP, and put them in elichika/static/2d61e7b4e89961c7 (GL) or elichika/static/b66ec2295e9a00aa (JP).

    +

    The easy installs have the database patch included for both JP and GL version.

    +

    It's possible to patch and key the database again (if you want to modify some file for example), although that is not discussed here. Join the discord and ask around for more informations.

    +

    Changing server port

    +

    By default the server run on port 80. You can change by changing the main.go file. Remember that you have to rebuild if you do this. Maybe this is better in a config file, but it's hard coded for now.

    +

    To change the port, open up main.go the line:

    +
    r.Run(":80")
    +
    +

    to whatever port you like, i.e.:

    +
    r.Run(":8080")
    +
    +

    or

    +
    r.Run(":1503")
    +
    +

    You can also use sed:

    +
    sed -i 's/r.Run(":80")/r.Run(":8080")/g' main.go
    +
    +

    On some system (Linux and/or Termux), port with number less than 1024 need to have root permission (or just higher permission than normal) to open, so changing it to something bigger let you run without root. Your port 80 might also be used for other things, so you might want a new port.

    +

    Playing the game

    +

    After you have the server installed and run it, just open the game. You will be prompted to choose language if you are using the GL version, English(EN), Korean (KR), and Traditional Chinese (ZH) are supported, choose the one you want.

    +

    You will then be prompted to download the files. If you have spaces on your phone / emulator, you can just download everything, however, other type of download also work just fine. Download everything let you play the game without the internet later on.

    +

    After you are done downloading, you can just play the game like normal.

    +

    For your information, here is the summany state of the server. Note these might be outdated, mising, or incorekt.

    +

    Stuff that works (at least partially)

    +

    Personalization

    +

    The following persionalizations work: +- Changing profile: You can select any card / title / name / nickname. +- Changing partner: You can select partners and their costumes, as well as the backgrounds.

    +

    Partner interaction

    +

    You can interact with everyone, view their cards, view their costumes and preview them.

    +

    There is no bond board unlock as they are all maxed.

    +

    3DMV

    +

    You can watch all the MVs, with all the settings: +- The "custom formation" tab works and you have all the outfit to choose from. +- However changing costume in the "original formation" tab doesn't work, but you can just use the "custom formation" node.

    +

    Story

    +

    You can read ALL the stories, ALL of them: +- All main stories +- All bond stories +- All side (card) stories +- All event stories +- All Nijigasaki anime tie-in stories

    +

    Live show

    +

    You can build team and play live shows: +- You can play all the permanent songs and story songs. +- You can play all the daily song, but they are on a rotation similar to the official game, however there is no limit to how many time you can play. Maybe it will be possible to make it so all daily song are always available. +- You have all the cards almost maxed, along with maxed bond board and bond level 500 on every character, so you can try to clear the harder songs that you didn't manage to do before the game die. +- Autoplay will also get Wonderful judgement everytime. If you didn't know, this is a server setting, so you can change the server so that it behave like the official game if you want. +- The song play record is not implemented for now, and you don't get any item drops, but the main feature is there. +- After you complete a song, you always get taken to a story menu, so it might be a bit annoying. +- Some stuff like changing formation name can crash the game, but you can just restart. +- Skip ticket doesn't work. +- Overall the core stuff is there.

    +

    School idols

    +

    You have all the school idols at max level and max limit breaks. +- Most idols have their practice done, except for the party cards (will likely be fixed soon enough) +- There's no actual idol rising experience for now.

    +

    Training

    +

    You can do training: +- Training doesn't cost any AP. +- Training doesn't give you any items. +- Training doesn't depend on the regiments, you always get the same insight awarded, so you can use that to quickly build your maxed team. +- Training doesn't give any other skill for now, so you can't build a team that has maxed out skill chance for example.

    +

    Accessories

    +

    You have the accessories available in the original game: +- You can choose accessories for the formation just fine. +- All the DLP accessories are available and maxed. +- You also have other maxed accessories. +- But there is no way to get more for now, so you can't play into some strategy that require them. +- The game will crash if you try to disassemble or synthesize, or lock or remove from all formation etc. These will be address in due time.

    +

    Stuff that doesn't work (at least at the time of writing)

    +

    Aside from the things that work partially, some stuff doesn't work at all and crash the game, you should avoid clicking on them.

    +

    Gacha

    +

    Sadly you can't gacha for now.

    +

    Membership card

    +

    Membership doesn't work on the global version (tapping it results in a crash).

    +

    Supposedly it works in the JP version.

    +

    News

    +

    The news menu works but it shows you JP news, and if you click on the news it crashes.

    +

    Goals

    +

    There's no goal (mission), you can click on it but it will freeze your game, so you will need to restart the game.

    +

    Channel member

    +

    Crash the game if clicked on.

    +

    Shop and exchange

    +

    Crash the game if clicked on.

    +

    Multiplayer

    +

    No form of multiplayer exist or can exist with the current implementation. That might change later on.

    +

    Event, SBL, and DLP

    +

    There is currently no way to play these modes. In the future, someone might figure that out.

    +

    Future of the server

    +

    Development is still being done on the server by YumeMichi. If you want to help, joining the LL Hax discord would be a good first step.

    +

    Ideally, we would at least have a server that offer the same experience of the SIFAS journey: Getting cards, costumes, clearing goals, raising idols, raising bond level and so on.

    +

    Easy install

    +

    This section provide some prebuilt server binaries and some clients so you don't have to make the modifications yourself.

    +

    Clients

    +
      +
    • elichika provided android and ios clients. Connect to server at http://192.168.1.123:80
    • +
    • localhost android clients. Connect to server at http://127.0.0.1:8080
    • +
    • LAN android clients. Connect to server at http://192.168.1.123:8080
    • +
    • For the .apk clients, you can get them here. The naming format is ALL_STARS_3.12.0_version_ip_ip_ip_ip_port. Version being GL or JP.
    • +
    +

    Servers

    + +

    Common setups

    +

    Server and client run on Android, with Termux

    +

    The server run inside Termux, on the same phone or emulator that you want to play SIFAS on. After downloading all of the game files, you can play anywhere anytime even without internet.

    +
      +
    • Download the client that point to http://127.0.0.1:8080 and install it in your phone. +
    • +
    • Open up termux and enter the follow commands:
    • +
    +
    curl https://codeberg.org/arina999999997/nozomi/raw/branch/master/termux_install_script.sh -o sifas_install.sh && bash sifas_install.sh
    +
    +
      +
    • After that run the elichika server:
    • +
    +
    cd elichika
    +./elichika
    +
    +
      +
    • Finally run the game and enjoy.
    • +
    +

    If that doesn't work, you might have one of the following problems: +- If you can't install the .apk then you're out of luck, either play with a 64 bits emulator or phone. +- If anything happen before you run the binary, your Termux has problem. Install through this guide. +- If you run the server binary and it doesn't work, it's likely that your system has a different architecture. It might also start and give you a warning (this still works). The way to resolve this is to install golang and build the server yourself:

    +
    apt install golang
    +go build
    +
    +
      +
    • Note that in some system, even if you can build the go binary, you will still have a problem when running it. If this happens, it's easier to just use another device that work.
    • +
    +

    Server on PC, play on phone, through Wi-Fi

    +

    The server run on your PC (Windows / Linux / MacOS). You play on your phone. The 2 devices has to be in the same network.

    +
      +
    • Download the client that point to http://192.168.1.123:80 (or http://192.168.1.123:8080 if you can't use port 80) and install that.
    • +
    • Download the server (your architecture + port). If the architecture is not in the release, then you will have to build your own with go.
    • +
    • Change your PC's local IP to 192.168.1.123. You might also have to deal with firewall stuff. Look up how to change IP on <your specific system> if you have trouble.
    • +
    • Run the binary on PC and run the game on your phone.
    • +
    • Note that if you are using port 80, you might need to run the server with root permission on Linux and MacOS, otherwise the program just close after it start.
    • +
    +

    Server on PC, play on android phone, through adb

    +

    In the case that you want to run server on PC but play on android phone, and you can't get the IP/port, you can rely on adb.

    +
      +
    • Download the client that point to http://127.0.0.1:8080 and install it in your phone.
    • +
    • Download a server that run at http://127.0.0.1:8080 on your PC.
    • +
    • Enable developer options, and turn on adb.
    • +
    • Connect your phone to your pc, accept the USB debugging and run:
    • +
    +
    adb reverse tcp:8080 tcp:8080
    +
    +
      +
    • This map http://127.0.0.1:8080 in your phone to http://127.0.0.1:8080 in your PC, allow the app to connect to the server.
    • +
    • If you don't want to have your phone plugged in to your computer, debug the phone through tcpip mode. If you are going to do this, it's good to have a static IP for your phone, then you can make a script that connect to your phone and run the server,for convinience.
    • +
    +

    Server on PC, play on android emulator

    +

    If you want to play on an emulator and don't want to use Termux, you can use either adb, or you can bridge the network so your emulator get treated as a device in your LAN. The details on how to do this depend on the emulator, so you should look it up yourself.

    +

    Random knowledge

    +

    Some random knowledge that you might already know, or stuff that is inconvenience to discuss elsewhere.

    +

    Install necessary program in Linux/Mac/Termux

    +

    If you need a program, say git, you can just type it to the terminal. The terminal will say that you don't have that program, but it will let you know which command to install the thing. If it doesn't then the tool you are trying to use is very niche, but you can still find some installing guide by searching.

    +

    Installing .apk

    +

    For android, you can just use your phone/emulator to download the .apk and install it. You might have to go through some step / permission, but it should be doable.

    +

    Pretty much all emulators have a way to install .apk. You can use that feature for them. Most of them also let you install .apk by dragging them into the emulator.

    +

    Finally, you can install .apk through adb.

    +

    Installing .ipa

    +

    For ios, it's way harder to install custom package. Please look up guide or ask the communities for help.

    +

    Installing termux (for android)

    +

    Termux give you access to various things, you can do things usually done on computers like programming. In our case, it let us run the server and play the game everywhere (without internet if you has downloaded the game files).

    +

    You can build termux yourself, but for simplicity, you can install Termux through the F-Droid release. You can either use the F-Droid app, or download the .apk directly from the page and install that.

    +

    Note that the Termux from Google Play store is very OUTDATED, and it will likely NOT WORK.

    diff --git a/sitemap.xml b/sitemap.xml index 0a5d657..6c997d6 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,37 +2,37 @@ https://ll.hax.sif.moe/ - 2023-07-21 + 2023-07-26 daily https://ll.hax.sif.moe/about/ - 2023-07-21 + 2023-07-26 daily https://ll.hax.sif.moe/pugu/ - 2023-07-21 + 2023-07-26 daily https://ll.hax.sif.moe/sif/ - 2023-07-21 + 2023-07-26 daily https://ll.hax.sif.moe/sif2/ - 2023-07-21 + 2023-07-26 daily https://ll.hax.sif.moe/sifac/ - 2023-07-21 + 2023-07-26 daily https://ll.hax.sif.moe/sifas/ - 2023-07-21 + 2023-07-26 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 7b37b15..27640f1 100644 Binary files a/sitemap.xml.gz and b/sitemap.xml.gz differ