From 6e22eae9d960dbf2350b496ca7c0a04ae71c2a61 Mon Sep 17 00:00:00 2001 From: cainmagi Date: Fri, 23 Jul 2021 00:52:17 -0500 Subject: [PATCH 01/33] 7/23/2021 Upload the new documentation. --- .gitattributes | 2 + .github/workflows/docusaurus.yml | 56 + .gitignore | 20 + LICENSE | 674 ++ README.md | 33 + babel.config.js | 3 + docs/api-overview.mdx | 44 + docs/changlog.mdx | 134 + docs/guides/examples/client.mdx | 90 + docs/guides/examples/decoding.mdx | 38 + docs/guides/examples/server.mdx | 158 + docs/guides/examples/transcoding.mdx | 66 + docs/guides/install/legacy.mdx | 39 + docs/guides/install/linux.mdx | 159 + docs/guides/install/pypi.mdx | 23 + docs/guides/install/windows.mdx | 85 + docs/introduction.mdx | 70 + docs/troubleshooting/installation.mdx | 114 + docs/troubleshooting/qna.mdx | 31 + docs/troubleshooting/running.mdx | 78 + docusaurus.config.js | 127 + mpegCoder-docs.code-workspace | 21 + package.json | 46 + sidebars.js | 53 + src/components/DarkButton.js | 48 + src/components/HomepageFeatures.js | 63 + src/components/HomepageFeatures.module.css | 13 + src/components/InlineIcon.js | 13 + src/css/custom.scss | 137 + src/envs/variables.js | 30 + src/pages/index.js | 47 + src/pages/index.module.scss | 37 + src/pages/markdown-page.md | 7 + static/.nojekyll | 0 static/img/examples/client.svg | 1 + static/img/examples/server.png | Bin 0 -> 93461 bytes static/img/favicon.ico | Bin 0 -> 34494 bytes static/img/icon_cpp.svg | 1 + static/img/icon_ffmpeg.svg | 1 + static/img/icon_python.svg | 1 + static/img/logo.svg | 1 + static/img/overview.svg | 1 + yarn.lock | 8818 ++++++++++++++++++++ 43 files changed, 11383 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/workflows/docusaurus.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 babel.config.js create mode 100644 docs/api-overview.mdx create mode 100644 docs/changlog.mdx create mode 100644 docs/guides/examples/client.mdx create mode 100644 docs/guides/examples/decoding.mdx create mode 100644 docs/guides/examples/server.mdx create mode 100644 docs/guides/examples/transcoding.mdx create mode 100644 docs/guides/install/legacy.mdx create mode 100644 docs/guides/install/linux.mdx create mode 100644 docs/guides/install/pypi.mdx create mode 100644 docs/guides/install/windows.mdx create mode 100644 docs/introduction.mdx create mode 100644 docs/troubleshooting/installation.mdx create mode 100644 docs/troubleshooting/qna.mdx create mode 100644 docs/troubleshooting/running.mdx create mode 100644 docusaurus.config.js create mode 100644 mpegCoder-docs.code-workspace create mode 100644 package.json create mode 100644 sidebars.js create mode 100644 src/components/DarkButton.js create mode 100644 src/components/HomepageFeatures.js create mode 100644 src/components/HomepageFeatures.module.css create mode 100644 src/components/InlineIcon.js create mode 100644 src/css/custom.scss create mode 100644 src/envs/variables.js create mode 100644 src/pages/index.js create mode 100644 src/pages/index.module.scss create mode 100644 src/pages/markdown-page.md create mode 100644 static/.nojekyll create mode 100644 static/img/examples/client.svg create mode 100644 static/img/examples/server.png create mode 100644 static/img/favicon.ico create mode 100644 static/img/icon_cpp.svg create mode 100644 static/img/icon_ffmpeg.svg create mode 100644 static/img/icon_python.svg create mode 100644 static/img/logo.svg create mode 100644 static/img/overview.svg create mode 100644 yarn.lock diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.github/workflows/docusaurus.yml b/.github/workflows/docusaurus.yml new file mode 100644 index 0000000..235a784 --- /dev/null +++ b/.github/workflows/docusaurus.yml @@ -0,0 +1,56 @@ +# This workflow will deploy the documentation. +# For more information see: https://docusaurus.io/zh-CN/docs/deployment + +name: docusaurus + +on: + pull_request: + branches: [docs] + push: + branches: [docs] + +jobs: + checks: + if: github.event_name != 'push' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Test Build + run: | + if [ -e yarn.lock ]; then + yarn install --frozen-lockfile + elif [ -e package-lock.json ]; then + npm ci + else + npm i + fi + npm run build + gh-release: + if: github.event_name != 'pull_request' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14.x' + - name: Release to GitHub Pages + run: | + if [ -e yarn.lock ]; then + yarn install --frozen-lockfile + elif [ -e package-lock.json ]; then + npm ci + else + npm i + fi + npm run build + - name: Deploy + uses: JamesIves/github-pages-deploy-action@4.1.4 + with: + branch: gh-pages # The branch the action should deploy to. + folder: build # The folder the action should deploy. + token: ${{ secrets.GH_PAGES_TOKEN }} + git-config-name: cainmagi + git-config-email: cainmagi@gmail.com diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2d6de3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..231a499 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Website + +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. + +## Installation + +```console +yarn install +``` + +## Local Development + +```console +yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +## Build + +```console +yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +## Deployment + +```console +GIT_USER= USE_SSH=true yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..e00595d --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/api-overview.mdx b/docs/api-overview.mdx new file mode 100644 index 0000000..e8cadc4 --- /dev/null +++ b/docs/api-overview.mdx @@ -0,0 +1,44 @@ +--- +id: apis +title: Overview +description: The overview of all APIs. +slug: /apis/ +--- + +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import vsiSymbolClass from '@iconify-icons/codicon/symbol-class'; +import mdiFunctionVariant from '@iconify-icons/mdi/function-variant'; +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +import OverviewSvg from '/img/overview.svg'; + +:::info + +This part is under construction now. More details would be added in the future. + +::: + +This package is a single-module package. The classes are shown in the following figure: + + + +## Classes + +The module contains four classes: + +| Classes |
Description
| +| :------: | :----------- | +| `MpegDecoder` | The FFMpeg decoder. It could be used for demuxing a video file, and return the extracted frames or GOPs. | +| `MpegEncoder` | The FFMpeg encoder. It is used for writing a video file. The data is encoded frame-by-frame. | +| `MpegClient` | The FFMpeg decoder designed for pulling and demuxing a remote video stream. This class manages a `std::thread`, and use the thread to synchronize the decoder with the real-time stream. | +| `MpegServer` | The FFMpeg encoder designed for muxing and pushing a remote video stream. The stream is pushed frame-by-frame. Note that this class is required to be used with an active server. | + +## Functions + +The following functions are global methods of the module. + +| Classes |
Description
| +| :------: | :----------- | +| `setGlobal` | Used for setting the global configurations of the module. | +| `readme` | Readme function. This method is used for printing brief instructions and updating reports of the module. | diff --git a/docs/changlog.mdx b/docs/changlog.mdx new file mode 100644 index 0000000..b34e180 --- /dev/null +++ b/docs/changlog.mdx @@ -0,0 +1,134 @@ +--- +id: changlog +title: Changelog +description: The changelog of this project. +slug: /changlog +--- + +## Update Report of `mpegCoder` + +### V3.1.0 @ 7/23/2021: + +1. Support `str()` type for all string arguments. + +2. Support `http`, `ftp`, `sftp` streams for `MpegServer`. + +3. Support `nthread` option for `MpegDecoder`, `MpegEncoder`, `MpegClient` and `MpegServer`. + +4. Fix a bug caused by the constructor `MpegServer()`. + +5. Clean up all `gcc` warnings of the source codes. + +6. Fix typos in docstrings. + +### V3.0.0 update report: + +1. Fix a severe memory leaking bugs when using `AVPacket`. + +2. Fix a bug caused by using `MpegClient.terminate()` when a video is closed by the server. + +3. Support the `MpegServer`. This class is used for serving the online video streams. + +4. Refactor the implementation of the loggings. + +5. Add `getParameter()` and `setParameter(configDict)` APIs to `MpegEncoder` and `MpegServer`. + +6. Move `FFMpeg` depedencies and the `OutputStream` class to the `cmpc` space. + +7. Fix dependency issues and cpp standard issues. + +8. Upgrade to `FFMpeg 4.4` Version. + +9. Add a quick script for fetching the `FFMpeg` dependencies. + +### V2.05 update report: + +1. Fix a severe bug that causes the memory leak when using `MpegClient`.This bug also exists in `MpegDecoder`, but it seems that the bug would not cause memory leak in that case. (Although we have also fixed it now.) + +2. Upgrade to `FFMpeg 4.0` Version. + +### V2.01 update report: + +1. Fix a bug that occurs when the first received frame may has a PTS larger than zero. + +2. Enable the project produce the newest `FFMpeg 3.4.2` version and use `Python 3.6.4`, `numpy 1.14`. + +### V2.0 update report: + +1. Revise the bug of the encoder which may cause the stream duration is shorter than the real duration of the video in some not advanced media players. + +2. Improve the structure of the code and remove some unnecessary codes. + +3. Provide a complete version of client, which could demux the video stream from a server in any network protocol. + +### V1.8 update report: + +1. Provide options `(widthDst, heightDst)` to let `MpegDecoder` could control the output size manually. To ensure the option is valid, we must use the method `setParameter` before `FFmpegSetup`. Now you could use this options to get a rescaled output directly: + + ```python + d = mpegCoder.MpegDecoder() # initialize + d.setParameter(widthDst=400, heightDst=300) # noted that these options must be set before 'FFmpegSetup'! + d.FFmpegSetup(b'i.avi') # the original video size would not influence the output + print(d) # examine the parameters. You could also get the original video size by 'getParameter' + d.ExtractFrame(0, 100) # get 100 frames with 400x300 + ``` + + In another example, the set optional parameters could be inherited by encoder, too: + + ```python + d.setParameter(widthDst=400, heightDst=300) # set optional parameters + ... + e.setParameter(decoder=d) # the width/height would inherit from widthDst/heightDst rather than original width/height of the decoder. + ``` + + Noted that we do not provide `widthDst`/`heightDst` in `getParameter`, because these 2 options are all set by users. There is no need to get them from the video metadata. + +2. Optimize some realization of Decoder so that its efficiency could be improved. + +### V1.7-linux update report: + +Thanks to God, we succeed in this work! + +A new version is avaliable for Linux. To implement this tool, you need to install some libraries firstly: + +* python3.5 + +* numpy 1.13 + +If you want, you could install `ffmpeg` on Linux: Here are some instructions + +1. Check every pack which ffmpeg needs here: [Dependency of FFmpeg](https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu "Dependency of FFmpeg") + +2. Use these steps to install ffmpeg instead of provided commands on the above site. + +```Bash + $ git clone https://git.ffmpeg.org/ffmpeg.git + $ cd ffmpeg + $ ./configure --prefix=host --enable-gpl --enable-libx264 --enable-libx265 --enable-shared --disable-static --disable-doc + $ make + $ make install +``` + +### V1.7 update report: + +1. Realize the encoder totally. + +2. Provide a global option `dumpLevel` to control the log shown in the screen. + +3. Fix bugs in initialize functions. + +### V1.5 update report: + +1. Provide an incomplete version of encoder, which could encode frames as a video stream that could not be played by player. + +### V1.4 update report: + +1. Fix a severe bug of the decoder, which causes the memory collapsed if decoding a lot of frames. + +### V1.2 update report: + +1. Use numpy array to replace the native pyList, which improves the speed significantly. + +### V1.0 update report: + +1. Provide the decoder which could decode videos in arbitrary formats and arbitrary coding. diff --git a/docs/guides/examples/client.mdx b/docs/guides/examples/client.mdx new file mode 100644 index 0000000..a9b213f --- /dev/null +++ b/docs/guides/examples/client.mdx @@ -0,0 +1,90 @@ +--- +id: client +title: Pulling a video stream +sidebar_label: Client +slug: /examples/client +description: Example codes for pulling a stream on the client side. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import octGitBranch16 from '@iconify-icons/octicon/git-branch-16'; +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +import ClientSvg from '/img/examples/client.svg'; + +## Introduction + +The following figure show the theory of `mpegCoder.MpegClient()`. Assuming that we have a video server from the remote side, the real-time stream is pushed continuously. Even we do not read the online stream, the data flow would not wait for reading. Therefore, we design the following two-thread workflow. + + + +When connecting to the remote server, `mpegCoder.MpegClient()` would create a sub-thread ("*writer*" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two pointer maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting pointer is kept stepping each time a new frame is received. + +The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading pointer, and read several frames from the buffer. After the reading results are collected, the lock would be released. A locked position would not be updated. In other words, during the reading events, if the writting pointer moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10. + +## Codes + +To test the following codes, we recommend users to use VLC or ffmpeg to push a remote stream, because the stream pushing without encoding is not supported by `mpegCoder` currently. Using VLC or ffmpeg to serve the stream will occupy less system resources. + +The following example codes would scale the remote frame to `480x360`, and resample the frame rate to 5 FPS. The reading size and the buffer size are 5 and 12 respectively. + +```python {9,15,19,22-24,26-27} title="client.py" +import os, sys +import time +import mpegCoder +mpegCoder.setGlobal(dumpLevel=2) # show full log + +if __name__ == '__main__': + d = mpegCoder.MpegClient() # create the handle + d.setParameter(widthDst=480, heightDst=360, dstFrameRate=(5,1), readSize=5, cacheSize=12) # do basic settings + success = d.FFmpegSetup('rtsp://localhost:8554/video') # connect with the server + print(d) + + if not success: # exit the program if the server is not available. You could delete this checking and see what will happen. + exit() + + d.start() # start the sub-thread for demuxing the stream. + + time.sleep(5) # wait for getting some frames + print('Get slept') + p = d.ExtractFrame() # extract some frames from current cache. + print(p.shape) # show information of extracted frames + + for i in range(10): # wait for 50 seconds + time.sleep(5) + p = d.ExtractFrame() # extract some frames from current cache. + + d.terminate() # shut down the current thread. You could call start() and let it restart. + d.clear() # but here we would like to clear the handle and exit +``` + +After configuring the client, the codes contain the following key steps: + +1. The `MpegClient.FFmpegSetup()` accepts a video stream address. The stream type would be detected from the protocol automacially. Currently, we support `http`, `ftp`, `sftp`, `rtsp` and `rtmp`. Note that only `rtsp` and `rtmp` should be used for analyzing the real-time stream. The `http`, `ftp` and `sftp` protocols are mostly used for data transfer. This method will launch a connect to the remote server. + +2. When `MpegClient.start()` is called, the sub-thread "*writer*" will be created. + +3. Using `MpegClient.ExtractFrame()` to get the real-time data. The returned frame number is given by `readSize` during the configuration. However, user could override the configurtion by using an argument, for example, `ExtractFrame(4)` would force the reader to read 4 frames. + +4. If the remote stream is closed, `d.ExtractFrame()` would return `None`. However, user would terminate the client in any time. The method `MpegClient.terminate()` would stop the writing thread. But the connection would not be aborted until `MpegClient.clear()` is called. + +## Examples on Github + +On Github, we provide the above example as a single branch. + +

+ + Demuxing Checking Program + +

+ +In addition, we provide another example. This example is a simple video stream player based on [`PyQt5`][link-pyqt5] and `mpegCoder`. + +

+ + Video Stream Player + +

+ +[link-pyqt5]:https://www.riverbankcomputing.com/software/pyqt "PyQt5" diff --git a/docs/guides/examples/decoding.mdx b/docs/guides/examples/decoding.mdx new file mode 100644 index 0000000..89ca382 --- /dev/null +++ b/docs/guides/examples/decoding.mdx @@ -0,0 +1,38 @@ +--- +id: decoding +title: Decoding a video +sidebar_label: Decoding +slug: /examples/decoding +description: Example codes for decoding a video. +--- + +import IconExternalLink from '@theme/IconExternalLink'; + +The following codes will demux, decode and iterate a video file. The video could be in any valid format. The `mpegCoder.MpegDecoder()` could recognize the video codec automatically. + +```python {7,8} title="decoding.py" +import mpegCoder + +d = mpegCoder.MpegDecoder() +opened = d.FFmpegSetup('test-video.mp4') +if opened: # If encoder is not loaded successfully, do not continue. + gop = True + while gop is not None: + gop = d.ExtractGOP() # Extract current GOP. +d.clear() # Close the input video. +``` + +In each while loop, a [Group of pictures (GOP)][wiki-gop] would be extracted. The GOP is a collection of video frames, and also the minimal data unit of the video compression algorithm. In `mpegCoder`, the GOP is arranged as a 4D [`np.ndarray`][link-ndarray]. The shape `(N, H, W, C)` means frame number, width, height and channel number respectively. Each frame has been converted to RGB (`uint8`) space. If the video reaches its end, the returned `gop` would be `None`. + +Users could configure `MpegDecoder()` and scale the video frames. For example, the following codes would scale the frame to 720x486. + +```python {3} +... +d = mpegCoder.MpegDecoder() +d.setParameter(widthDst=720, heightDst=486) +opened = d.FFmpegSetup('test-video.mp4') +... +``` + +[wiki-gop]:https://en.wikipedia.org/wiki/Group_of_pictures "Group of pictures | Wikipedia" +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" diff --git a/docs/guides/examples/server.mdx b/docs/guides/examples/server.mdx new file mode 100644 index 0000000..5530bd7 --- /dev/null +++ b/docs/guides/examples/server.mdx @@ -0,0 +1,158 @@ +--- +id: server +title: Pushing a video stream +sidebar_label: Server +slug: /examples/server +description: Example codes for pushing a stream on the server side. +--- + +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import vsiCheckIcon from '@iconify-icons/codicon/check'; +import vsiCloseIcon from '@iconify-icons/codicon/close'; + +import ServerImg from '/img/examples/server.png'; + +## Preparation + +The `ffserver` has been removed after FFMpeg `3.4` (see the docs [here][link-ffserver]). In other words, FFMpeg could not work without a server program. The same case exists in our `mpegCoder`. Users need to start a server program first. The server program will keeps listening and waiting for any pushed streams. After that, `mpegCoder` would push the stream to the server by `mpegCoder.MpegServer()`. + +:::caution + +It is also supported if you push a stream with `mpegCoder.MpegServer()` and receive the same stream with `mpegCoder.MpegClient()` in the same time. But we recommend users to run `MpegServer()` and `MpegClient()` on different devices, because the encoder implemented in `MpegServer()` may occupy a lot of system resources. + +::: + +We recommend the following video server projects. User could choose one from them according to their requirements. + +| Project | Windows | Linux | +| :-----: | :-----: | :-----: | +| [RTSP Simple Server][git-rtsp-simple-server] | | | +| [Matroska Server Mk2][git-mkvserver_mk2] | | | +| [Simple Realtime Server][git-srs] | | | + +Take *RTSP Simple Server* on Windows as an example. We only need to launch the server program by one command: + +Launch the RTSP Simple Server + +When the server is listening, we could use the following addresses for the testings + +```shell +rtsp://localhost:85554/ +rtmp://localhost:1935/ +``` + +## Non-blocking example + +This example is based on the non-blocking API `MpegServer.ServeFrame()`. Synchronization is an important problem when pushing a stream. If we keeps using `ServeFrame()`, the frames would be sent as many as possible. The newly income frames would override the previous pushed frames. In some cases, the server would be broken, because the server could not accept so many frames. + +To make the server works properly, we need to push the frames according to the video timestamp. When `MpegServer.FFmpegSetup()` is called, we mark this time point as a starting time. `MpegServer` will maintain a timer. Everytime users call `MpegServer.getParemeter('waitRef')`, the method would returns a waiting period, indicating how long the pushed video stream is ahead of the playing time. The waiting period is half of the aforementioned time lag (the unit of the returned value is *second*). If we have pushed too much frames, we need to let the server wait for a while. + +```python {16,19-20} title="server-non-blocking.py" +import time +import mpegCoder + +d = mpegCoder.MpegDecoder() +opened = d.FFmpegSetup('test-video.mp4') +e = mpegCoder.MpegServer() +e.setParameter(configDict=d.getParameter(), codecName='libx264', videoAddress='rtsp://localhost:8554/video') # inherit most of parameters from the decoder. +opened = opened and e.FFmpegSetup() # Load the encoder. +if opened: # If encoder is not loaded successfully, do not continue. + p = True + s = 0 + while p is not None: + p = d.ExtractGOP() # Extract current GOP. + if p is not None: + for i in p: # Select every frame. + e.ServeFrame(i) # Serve current frame. + s += 1 + if s == 10: # Wait for synchronization for each 10 frames. + wait = e.getParameter('waitRef') + time.sleep(wait) + s = 0 + e.FFmpegClose() # End encoding and pushing, and flush all frames in cache. +else: + print(e) +e.clear() # Close the encoder. +d.clear() # Close the decoder. +``` + +## Dual-process example + +The above example is not an elegant implementation, because `MpegDecoder` and `MpegServer` occupy the same main thread. When decoder takes a lot of time, there would be an obvious latency. Therefore, we suggest users to split `MpegDecoder` and `MpegServer` to two different sub-processes. The following codes are implemented by this way. The decoder and the streamer are synchronized by a shared queue. Instead of using `MpegServer.ServeFrame()`, we use `MpegServer.ServeFrameBlock()` here. Each time this method is called, `MpegServer` will check the current playing time first, and ensure that the timestamp of the newly incoming frame is not ahead of the playing time too much. If the time lag between the new frame and the playing time is too long, the method will wait until the time lag becomes small enough. + +```python {14,21,23,37,43,45} title="server-dual-procs.py" +import mpegCoder +import multiprocessing + + +class Decoder(multiprocessing.Process): + def __init__(self, video_name='test-video.mp4', q_o=None, name=None, daemon=None): + super().__init__(name=name, daemon=daemon) + self.video_name = video_name + self.q_o = q_o + + def run(self): + d = mpegCoder.MpegDecoder() + opened = d.FFmpegSetup(self.video_name) + self.q_o.put(d.getParameter()) + if opened: + p = True + while p is not None: + p = d.ExtractGOP() # Extract current GOP. + if p is not None: + for i in p: # Select every frame. + self.q_o.put(i) + else: + self.q_o.put(None) + else: + print(d) + d.clear() + + +class Encoder(multiprocessing.Process): + def __init__(self, video_addr='rtsp://localhost:8554/video', q_i=None, name=None, daemon=None): + super().__init__(name=name, daemon=daemon) + self.video_addr = video_addr + self.q_i = q_i + + def run(self): + e = mpegCoder.MpegServer() + config_dict = self.q_i.get() # Get decoder configurations. + e.setParameter(configDict=config_dict, codecName='libx264', maxBframe=16, videoAddress=self.video_addr) + opened = e.FFmpegSetup() + if opened: # If encoder is not loaded successfully, do not continue. + frame = True + while frame is not None: + frame = self.q_i.get() # Get one frame. + if frame is not None: + e.ServeFrameBlock(frame) # Encode current frame. + e.FFmpegClose() # End encoding, and flush all frames in cache. + else: + print(e) + e.clear() + + +if __name__ == '__main__': + queue_data = multiprocessing.Queue(maxsize=20) + proc_dec = Decoder(video_name='test-video.mp4', q_o=queue_data, daemon=True) + proc_enc = Encoder(video_addr='rtsp://localhost:8554/video', q_i=queue_data, daemon=True) + proc_dec.start() + proc_enc.start() + proc_enc.join() + proc_dec.join() +``` + +:::caution + +In the above examples, we use `configDict` for `MpegServer.setParameter()`. The input value is a python dict returned by `MpegDecoder.getParameter()`. This API is equivalent to using `e.setParameter(decoder=d)`. However, we have to use the equivalent API here, because all classes of `mpegCoder` could not be pickled. + +::: + +[link-ffserver]:https://trac.ffmpeg.org/wiki/ffserver "ffserver" +[git-rtsp-simple-server]:https://github.com/aler9/rtsp-simple-server "RTSP Simple Server" +[git-mkvserver_mk2]:https://github.com/klaxa/mkvserver_mk2/blob/master/Makefile "Matroska Server Mk2" +[git-srs]:https://ossrs.net/releases "Simple Realtime Server" diff --git a/docs/guides/examples/transcoding.mdx b/docs/guides/examples/transcoding.mdx new file mode 100644 index 0000000..fd12a65 --- /dev/null +++ b/docs/guides/examples/transcoding.mdx @@ -0,0 +1,66 @@ +--- +id: transcoding +title: Transcoding a video +sidebar_label: Transcoding +slug: /examples/transcoding +description: Example codes for encoding or transcoding a video. +--- + +import IconExternalLink from '@theme/IconExternalLink'; + +The following codes show an example of encoding a new video file. Although we are transcoding a video, the input of the encoder could be any data. + +```python {12,14-15} title="transcoding.py" +import mpegCoder + +d = mpegCoder.MpegDecoder() +d.setParameter(nthread=4) +opened = d.FFmpegSetup('test-video.mp4') # Setup the decoder +e = mpegCoder.MpegEncoder() +e.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', nthread=8) # inherit most of parameters from the decoder. +opened = opened and e.FFmpegSetup() # Setup the encoder. +if opened: # If encoder is not loaded successfully, do not continue. + p = True + while p is not None: + p = d.ExtractGOP() # Extract current GOP. + if p is not None: + for i in p: # Iterate every frame. + e.EncodeFrame(i) # Encode current frame. + e.FFmpegClose() # End encoding, and flush all frames in cache. +e.clear() # Clean configs of the encoder. +d.clear() # Close configs of the decoder. +``` + +In this example, we decode an existing video file, and encode a new video by `x265` codec. The most widely used video codecs are `libxvid`, `libx264`, `libx265`, `libvp9`, `libsvtav1`. Most of the encoder configurations are copied from the opened decoder. So the output video would share the same GOP number, B frame number, video size, bit rate and frame rate of the input video. We also reconfigure the thread number of the encoder by `8`. + +:::info + +Some codec may not work with multi-threading. In this case, after we call `FFmpegSetup()`, the configuration of the threading number would be corrected as `1` automatically. + +::: + +In each while loop, we read a GOP, iterate the GOP, and encode the data frame-by-frame. After all frames are encoded, the `mp4` file tail would be dumped into the output video. + +If user trigger Ctrl+C during the while loop, the video could be still completed safely. However, if users hit Ctrl+C by twice, the output video would be broken, because the video tail has not been written correctly. + +In the above example, the output video may not be encoded by an optimized configuration. The x265 could accept a maximal consecutive B frame number of `<=16`. We could also configure the output bit rate manually. Therefore, if we change the configuraitons like the following example, the output video size would be reduced significantly. + +```python {3} +... +e = mpegCoder.MpegEncoder() +e.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16, bitRate=48.0, nthread=8) +opened = opened and e.FFmpegSetup() +... +``` + +In some cases, we may want to rescale the output video size, and resample the output frames, + +```python {3} +... +e = mpegCoder.MpegEncoder() +e.setParameter(decoder=d, codecName='libx265', videoPath='test-video-x265.mp4', width=720, height=486, frameRate=(5, 1), nthread=8) +opened = opened and e.FFmpegSetup() +... +``` + +This example would rescale the output frame to `720x486`, and resample the output frame rate as 5 FPS. In this case, when we call `e.EncodeFrame(i)`, the frame `i` may be not in the size of `720x486`, but `MpegEncoder()` could scale it automatically. diff --git a/docs/guides/install/legacy.mdx b/docs/guides/install/legacy.mdx new file mode 100644 index 0000000..f2bc731 --- /dev/null +++ b/docs/guides/install/legacy.mdx @@ -0,0 +1,39 @@ +--- +id: legacy +title: Installation (legacy versions) +sidebar_label: Legacy +slug: /installation/legacy +description: Archived legacy pre-compiled versions of mpegCoder. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import InlineIcon from '@site/src/components/InlineIcon'; +import mdiDownloadBox from '@iconify-icons/mdi/download-box'; + +:::caution + +The following built are legacy versions. They are not technically supported now. But they support older FFMpeg versions. Note that not all funcionalities of `mpegCoder` are supported in these versions. They may also contains severe bugs. + +::: + +| mpegCoder | OS | Python | Numpy | FFmpeg | +| :--------: | :------: | :---------: | :--------: | :---------: | +| [`2.05`][down205w] | Windows | `3.6` | `1.14` | `4.0` | +| [`2.05`][down205w35] | Windows | `3.5` | `1.13` | `4.0` | +| [`2.01`][down201w] | Windows | `3.6` | `1.14` | `3.4.2` | +| [`2.0`][down20l] | Linux | `3.5` | `1.13` | `3.3` | +| [`2.0`][down20w] | Windows | `3.5` | `1.13` | `3.3` | +| [`1.8`][down18l] | Linux | `3.5` | `1.13` | `3.3` | +| [`1.8`][down18w] | Windows | `3.5` | `1.13` | `3.3` | +| [`1.7`][down17l] | Linux | `3.5` | `1.13` | `3.3` | +| [`1.7`][down17w] | Windows | `3.5` | `1.13` | `3.3` | + +[down205w]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py36.7z "Windows 2.05, Python 3.6" +[down205w35]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.05/mpegCoder_2_0_5_Win_py35.7z "Windows 2.05, Python 3.5" +[down201w]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.01/mpegCoder_2_0_1_Win.7z "Windows 2.01" +[down20l]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Linux.7z "Linux, 2.0" +[down20w]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/2.0/mpegCoder_2_0_Win.7z "Windows, 2.0" +[down18l]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Linux.7z "Linux, 1.8" +[down18w]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.8/mpegCoder_1_8_Win.7z "Windows, 1.8" +[down17l]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Linux.7z "Linux, 1.7" +[down17w]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/1.7/mpegCoder_1_7_Win.7z "Windows, 1.7" diff --git a/docs/guides/install/linux.mdx b/docs/guides/install/linux.mdx new file mode 100644 index 0000000..e5d0d21 --- /dev/null +++ b/docs/guides/install/linux.mdx @@ -0,0 +1,159 @@ +--- +id: linux +title: Installation for Linux +sidebar_label: Linux +slug: /installation/linux +description: A tutorial about the installation or compilation of the package for Linux. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import mdiDownloadBox from '@iconify-icons/mdi/download-box'; +import vsiDebugAlt from '@iconify-icons/codicon/debug-alt'; +import vsiCheckIcon from '@iconify-icons/codicon/check'; +import vsiCloseIcon from '@iconify-icons/codicon/close'; +import octMarkGithub16 from '@iconify-icons/octicon/mark-github-16'; + + +This guide contains steps for installing or compiling the `mpegCoder` module manually. We recommend users who need to use `mpegCoder` in a project locally to install the package by this way. + +## Install the pre-compiled module + +### Download `mpegCoder` + +First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment. + +| mpegCoder | FFMpeg | Numpy | Python | GCC/G++ | OS | +| :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | +| [`3.1.0`][download-3-1-0-py39] | `4.4` | `1.21.1` | `3.9.6` | `8.3.0` | `Debian 10` | +| [`3.1.0`][download-3-1-0-py38] | `4.4` | `1.21.1` | `3.8.11` | `8.3.0` | `Debian 10` | +| [`3.1.0`][download-3-1-0-py37] | `4.4` | `1.21.1` | `3.7.11` | `8.3.0` | `Debian 10` | +| [`3.1.0`][download-3-1-0-py36] | `4.4` | `1.19.5` | `3.6.14` | `8.3.0` | `Debian 10` | +| [`3.1.0`][download-3-1-0-py35] | `4.4` | `1.18.5` | `3.5.10` | `8.3.0` | `Debian 10` | + +After extracting the tarball, we could get `mpegCoder.so`. + +:::info + +Note that the above versions only show the environment when building mpegCoder. It does not mean that they are the dependencies of running mpegCoder. For example, users could use python 3.9.5 and numpy 1.19.5 to run mpegCoder. + +::: + +### Download dependencies + +The pre-compiled dependencies are available on our release page. The dependencies contain several `.so` files. Users also need to download the tarball with the correct FFMpeg version, and extract the files. + +| FFMpeg | GCC/G++ | OS | +| :-----: | :-----: | :-----: | +| [`4.4`][download-ff-4-4] | `9.3.0` | `20.04.2` | + +These files are compiled by myself, because FFMpeg has not released the fully built shared libraries for Linux. To learn how to compile the FFMpeg, please check [the compilation section](#compile-the-module). + +### Import + +Running the pre-compiled `mpegCoder` requires users to add the required dynamic libraries to your path. The extracted dependency files should contain two folders: + +```shell +. +|---lib +`---lib-fix +``` + +We recommend users to place the two folders in a global domain, for example, + +```shell +/opt/ffmpeg/ +|---lib +`---lib-fix +``` + +After that, users could add the following lines to your `~/.bashrc` + +```shell +export LD_LIBRARY_PATH=/opt/ffmpeg/lib:$LD_LIBRARY_PATH +export PKG_CONFIG_PATH=/opt/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH +export PKG_CONFIG_LIBDIR=/opt/ffmpeg/lib/:$PKG_CONFIG_LIBDIR +``` + +To make the configurations take effects instantly, please run + +```shell +source ~/.bashrc +``` + +Running the module requires users to install `glibc>=2.29`. Please check the following table and find whether the requirements are fulfilled in your case: + +| OS | GLibC | Fulfilled | +| :-----: | :-----: | :-----: | +| Ubuntu bionic (`18.04`) | `2.27` | | +| Ubuntu focal (`20.04`) | `2.31` | | +| Debian buster (`10`) | `2.28` | | +| Debian bullseye (`11`) | `2.31` | | + +If the `glibc>=2.29` is not provided by your OS, we recommend users to compile and install GLibC by themselves. However, if users want a faster hotfix. Please check the extracted dependencies. + +Take the above steps as an example, then users could link the provided GLibC to your `/lib` folder. + +```shell +ln -sf /opt/ffmpeg/lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6 +``` + +After all, users could place `mpegCoder.so` in your project folder, and import the module by + +```python +import mpegCoder +``` + +## Compile the module + +### Compile `mpegCoder` + +If users need to compile the module by themselves, please follow the instructions on Github: + +

+ + Compile with GCC/G++ + +

+ +### Compile FFMpeg + +:::info + +Users are not required for compiling FFMpeg by themselves, because `mpegCoder` could be compiled with our provided pre-compiled FFMpeg. But in some cases, user may need to built `mpegCoder` with a specified FFMpeg version. + +If users are using their own FFMpeg to compile `mpegCoder`, please check the [configuration][code-config] in the setup file and the [macros][code-macros] in the source codes. + +::: + +We have provided some scripts for compiling FFMpeg. Please check the following branch: + +

+ + Scripts for compilation + +

+ +For example, if users want to compile FFMpeg `4.4`, they could run + +```shell +curl -O https://raw.githubusercontent.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/deps/install-ffmpeg-4_4.sh +chmod +rwx install-ffmpeg-4_4.sh +./install-ffmpeg-4_4.sh +``` + +:::info + +Note that users may need to modify the scripts according to their own cases. Our script is only tested on `Ubuntu 20.04` and `GCC 9.3.0`. + +::: + +[download-3-1-0-py39]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py39.tar.xz +[download-3-1-0-py38]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py38.tar.xz +[download-3-1-0-py37]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py37.tar.xz +[download-3-1-0-py36]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py36.tar.xz +[download-3-1-0-py35]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0-linux/mpegCoder_3_1_0_Linux_py35.tar.xz +[download-ff-4-4]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz +[code-config]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/setup.py#L34 +[code-macros]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/MpegCoder/MpegBase.h#L11 diff --git a/docs/guides/install/pypi.mdx b/docs/guides/install/pypi.mdx new file mode 100644 index 0000000..3414f00 --- /dev/null +++ b/docs/guides/install/pypi.mdx @@ -0,0 +1,23 @@ +--- +id: pypi +title: Installation from PyPI +sidebar_label: PyPI +slug: /installation/pypi +description: A tutorial about the installation of the package from PyPI. +--- + +:::info + +This part is to be implemented now. Users are able to install `mpegCoder` from PyPI in the future. + +::: + +To install the pre-compiled package, just run + +```shell +pip install mpegCoder +``` + +The PyPI repository is supported since `mpegCoder 3.1.0`. We support from `python 3.5` to `python 3.9`. To check the details of each pre-compiled version, please view the manual installation guides for [Windows](./windows) and [Linux](./linux). + +The package installed by this method is shipped with all required dynamic libraries. Users do not need to install any other dependencies in this case. However, if users find that the package could not be imported after the installation, please check the troubleshooting page first. diff --git a/docs/guides/install/windows.mdx b/docs/guides/install/windows.mdx new file mode 100644 index 0000000..30930a9 --- /dev/null +++ b/docs/guides/install/windows.mdx @@ -0,0 +1,85 @@ +--- +id: windows +title: Installation for Windows +sidebar_label: Windows +slug: /installation/windows +description: A tutorial about the installation or compilation of the package for Windows. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import mdiDownloadBox from '@iconify-icons/mdi/download-box'; +import vsiDebugAlt from '@iconify-icons/codicon/debug-alt'; + +This guide contains steps for installing or compiling the `mpegCoder` module manually. We recommend users who need to use `mpegCoder` in a project locally to install the package by this way. + +## Install the pre-compiled module + +### Download `mpegCoder` + +First, users need to download the single module. We provide the downloading links in the following table. Please check the correct version according to your environment. + +| mpegCoder | FFMpeg | Numpy | Python | VS | OS | +| :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | +| [`3.1.0`][download-3-1-0-py39] | `4.4` | `1.21.1` | `3.9.6` | `2019 (v142)` | `Windows 10 21H1` | +| [`3.1.0`][download-3-1-0-py38] | `4.4` | `1.21.1` | `3.8.10` | `2019 (v142)` | `Windows 10 21H1` | +| [`3.1.0`][download-3-1-0-py37] | `4.4` | `1.21.1` | `3.7.10` | `2019 (v142)` | `Windows 10 21H1` | +| [`3.1.0`][download-3-1-0-py36] | `4.4` | `1.19.5` | `3.6.13` | `2019 (v142)` | `Windows 10 21H1` | +| [`3.1.0`][download-3-1-0-py35] | `4.4` | `1.15.2` | `3.5.5` | `2019 (v142)` | `Windows 10 21H1` | + +After extracting the tarball, we could get `mpegCoder.pyd`. + +:::info + +Note that the above versions only show the environment when building mpegCoder. It does not mean that they are the dependencies of running mpegCoder. For example, users could use python 3.9.5 and numpy 1.19.5 to run mpegCoder. + +::: + +### Download dependencies + +The pre-compiled dependencies are available on our release page. The dependencies contain several `.dll` files. Users also need to download the tarball with the correct FFMpeg version, and extract the files. + +| FFMpeg | +| :-----: | +| [`4.4`][download-ff-4-4] | + +The above files are collected from the officially released FFMpeg shared libraries. Users could also find them [here][link-ffmpeg-download]. + +### Import + +To import the libraries, users need to place the `mpegCoder.pyd` and the dependencies in the same folder. For example, + +```shell +. +|---mpegCoder.pyd +|---avcodec-58.dll +|---avformat-58.dll +|---avutil-56.dll +|---swresample-3.dll +`---swscale-5.dll +``` + +After that, users could enter the same folder, and import the module by + +```python +import mpegCoder +``` + +## Compile the module + +If users need to compile the module by themselves, please follow the instructions on Github: + +

+ + Compile with VS2019 + +

+ +[download-3-1-0-py39]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py39.tar.xz +[download-3-1-0-py38]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py38.tar.xz +[download-3-1-0-py37]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py37.tar.xz +[download-3-1-0-py36]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py36.tar.xz +[download-3-1-0-py35]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py35.tar.xz +[download-ff-4-4]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz +[link-ffmpeg-download]:https://www.gyan.dev/ffmpeg/builds/#release-section "FFMpeg release" diff --git a/docs/introduction.mdx b/docs/introduction.mdx new file mode 100644 index 0000000..08c039a --- /dev/null +++ b/docs/introduction.mdx @@ -0,0 +1,70 @@ +--- +id: introduction +title: Introduction +description: The introduction of mpegCoder. The package mpegCoder is used for encoding, decoding, receiving streams and pushing streams. This project is totally dependent on FFMpeg. +slug: / +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import octLaw16 from '@iconify-icons/octicon/law-16'; +import octRepoForked16 from '@iconify-icons/octicon/repo-forked-16'; +import octShareAndroid16 from '@iconify-icons/octicon/share-android-16'; + +This project is also named as "*FFmpeg-Encoder-Decoder-for-Python*". It is implemented based on [FFMpeg][link-ffmpeg], [Python-C-API][link-python-c-api] and [C++11][link-cpp11]. It is under [GPL v3 License][git-license], and recommended for researching purposes. + +With this package, users could: + +* Make use of **all** FFMpeg video encoders and decoders. When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters. +* Work with FFMpeg directly. This project invokes the FFMpeg C APIs in the bottom level. Unlike [ffmpeg-python][git-ffmpeg-python] and [pyffmpeg][git-pyffmpeg], our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is [`np.ndarray`][link-ndarray]. In other words, our project enables users to combine [numpy][link-numpy] and FFMpeg directly. +* Frame-level APIs. Unlike [pyffmpeg][git-pyffmpeg], this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D [`np.ndarray`][link-ndarray]. +* Pre-compiled package. This package has been pre-compiled by the author. If users download the dependent dynamic libraries (`.so` or `.dll`), they do not need to compile the package by themself. + +However, users could not work with this project in such cases: + +* Platform limited. Currently, we only support Linux and Windows. The Linux release is pre-compiled on Debian. It has been only tested in Ubuntu, Debian and Windows. In other cases, the pre-compiled library may not work. Users may need to compile the package by themselves. +* Version limited. Currently, our project only works with FFMpeg `4.4`. Users need to download the dependent dynamic libraries to make the package work. The legacy versions of this project supports FFMpeg `3.3`, `3.4.2` and `4.0`. However, the legacy built packages are not technically supported now. +* Audio not supported. Although the original FFMpeg supports both video and audio streams, our project only works on video streams. For example, if a video contains audio streams, our package would omit all audio frames in the bottom level. In other words, you **could not** perform audio analysis now. In the future (`v4`), we may support the audio frame analysis. +* Filters not supported. Although the original FFMpeg supports some video processing tools ([`avfilter`][link-avfilter] and [`postproc`][link-postproc]), our implementation drops these modules. Instead, we suggest that users should process the frames with [pillow][pip-pillow] or [openCV][pip-opencv]. On the other hand, our implementation still supports frame scaling and re-sampling (supported by [`swscale`][link-swscale] and [`swresample`][link-swresample]). + +## Related materials + +License of this project: + +

+ + MIT License + +

+ +Guidelines for the contributions: + +

+ + Contributions + +

+ +Contributor covenant code of conduct: + +

+ + Code of Conduct + +

+ + +[git-ffmpeg-python]:https://github.com/kkroening/ffmpeg-python "ffmpeg-python" +[git-pyffmpeg]:https://github.com/deuteronomy-works/pyffmpeg "pyffmpeg" +[git-license]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE +[pip-pillow]:https://pypi.org/project/Pillow "Pillow" +[pip-opencv]:https://pypi.org/project/opencv-python "OpenCV Python" +[link-cpp11]:https://en.cppreference.com/w/ "C++ 11" +[link-python-c-api]:https://docs.python.org/3/c-api/index.html "Python-C-API" +[link-numpy]:https://numpy.org "numpy" +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" +[link-ffmpeg]:https://ffmpeg.org "FFMpeg" +[link-avfilter]:http://ffmpeg.org/doxygen/trunk/group__lavfi.html "libavfilter" +[link-postproc]:http://ffmpeg.org/doxygen/trunk/group__lpp.html "libpostproc" +[link-swscale]:http://ffmpeg.org/doxygen/trunk/group__libsws.html "libswscale" +[link-swresample]:http://ffmpeg.org/doxygen/trunk/group__lswr.html "libswresample" diff --git a/docs/troubleshooting/installation.mdx b/docs/troubleshooting/installation.mdx new file mode 100644 index 0000000..5dec3ec --- /dev/null +++ b/docs/troubleshooting/installation.mdx @@ -0,0 +1,114 @@ +--- +id: installation +title: Troubleshooting for installation +sidebar_label: Installation +slug: /troubleshooting/installation +description: The troubleshooting for installation. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import octInfo16 from '@iconify-icons/octicon/info-16'; +import mdiDownloadBox from '@iconify-icons/mdi/download-box'; + +## Instruction + +If you could not find your problem in this page, please fire an issue: + +

+ + Fire an issue + +

+ +## Questions and answers + +### DLL not found + +* **Question**: When importing the module, why meeting the following error? + + ``` + ImportError: DLL load failed while importing mpegCoder: The specified module could not be found. + ``` + +* **Answer**: It seems that this error will only occurs when both the following conditions are satisfied: + + * You are using Windows. + * You are using the maunally installed `mpegCoder`, not the pip version. + + This error is caused by the absent of required dependencies. It is typically caused when: + + * Your python version does not match the `mpegCoder` module. + * The required DLL files are neither in the same folder of `mpegCoder.pyd`, nor in the path (environment variable `PATH`). + +* **Fix**: Download the [dependencies][download-ff-4-4-win] and extract the DLLs in the same folder of `mpegCoder.pyd`. + +### `.so` not found + +* **Question**: When importing the module, why meeting the following error? + + ``` + ImportError: lib*****.so.**: cannot open shared object file: No such file or directory + ``` + +* **Answer**: It seems that this error will only occurs when both the following conditions are satisfied: + + * You are using Linux. + * You are using the maunally installed `mpegCoder`, not the pip version. + + This error is caused by the absent of required dependencies. It is typically caused when: + + * Your python version does not match the `mpegCoder` module, in this case, the library name should be `libpython3.*.so.**`. + * The required dependencies files are not in your environment variable `$LD_LIBRARY_PATH`. + +* **Fix**: Download the [dependencies][download-ff-4-4-linux] and extract the missing `.so` to a folder in `$LD_LIBRARY_PATH`. + +### `numpy.core.multiarray` not found + +* **Question**: When importing the module, why meeting the following error? + + ``` + ImportError: numpy.core.multiarray failed to import + ``` + +* **Answer**: You may not install [numpy][link-numpy], or your numpy version is not match the pre-compiled `mpegCoder`. In most cases, a little bit mismatch of the numpy would not cause this error. Maybe your numpy version is different from the requirement too much. See [Compilation list (Win)](../installation/windows#download-mpegcoder) or [Compilation list (Linux)](../installation/linux#download-mpegcoder) to find the best numpy version. + +* **Fix**: Reinstall numpy, or compile `mpegCoder` by yourself. + +### GLibC not found + +* **Question**: When importing the module, why meeting the following error? + + ``` + OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/libdrm.so.2) + ``` + +* **Answer**: Your GLibC version is not `>=2.29`. To verify that, you could run + + ```shell + ldd --version + ``` + + This problem often occurs when you are using an older Linux OS. The supported OS list could be found [here](../installation/linux#import). + +* **Fix**: Compile and install GLibC `>=2.29`. However, if users want a faster hotfix. Please follow the follwing instructions. + + If you are using `mpegCoder` from pip. You could find a folder named `lib-fix` in where `mpegCoder` is installed, then run the following command: + + ```shell + ln -sf /lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6 + ``` + + The same file (`libm-2.31.so`) could be also found in the [Linux dependencies][download-ff-4-4-linux]. + +### Incorrect dependencies + +* **Question**: I have not installed any dependencies, and I am not using the PyPI version. Why could I import `mpegCoder` successfully? + +* **Answer**: You may have installed FFMpeg before. The FFMpeg libraries are already in your environment. It is danger to work with an incorrect FFMpeg version, because the FFMpeg APIs are keeping changing. Please ensure that your `mpegCoder` version and your FFMpeg version are consistent. + +* **Fix**: Install `mpegCoder` from PyPI, or download our dependencies. + +[download-ff-4-4-win]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz +[download-ff-4-4-linux]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz +[link-numpy]:https://numpy.org "numpy" diff --git a/docs/troubleshooting/qna.mdx b/docs/troubleshooting/qna.mdx new file mode 100644 index 0000000..cb57316 --- /dev/null +++ b/docs/troubleshooting/qna.mdx @@ -0,0 +1,31 @@ +--- +id: qna +title: Questions and answers +sidebar_label: Q&A +slug: /troubleshooting/qna +description: The questions and answers for mpegCoder. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import octInfo16 from '@iconify-icons/octicon/info-16'; + +## Questions and answers + +### Plan for audio processing + +* **Question**: The audio processing is not supported by `mpegCoder 3.x`. Will it be implemented future? + +* **Answer**: Sure. The audio processing would be supported since `mpegCoder 4.x`. But I do not have enough time on this project, so it may take a long time to implement. + +### Plan for no-encoding streaming + +* **Question**: In `mpegCoder 3.x`, `MpegServer` only support streaming while encoding. Will there be a class for decoding a video while pushing it as a stream? + +* **Answer**: No. I believe that using the official FFMpeg is a good enough solution. + +### Commercial plan + +* **Question**: Will there be a commercial plan for `mpegCoder`? + +* **Answer**: No. `mpegCoder` share exactly the same license (GPL v3) of FFMpeg coder. This project is totally open-sourced. I will not concern anything about the commercial plan for this project. diff --git a/docs/troubleshooting/running.mdx b/docs/troubleshooting/running.mdx new file mode 100644 index 0000000..aef8165 --- /dev/null +++ b/docs/troubleshooting/running.mdx @@ -0,0 +1,78 @@ +--- +id: running +title: Troubleshooting for running +sidebar_label: Running +slug: /troubleshooting/running +description: The troubleshooting for running mpegCoder. +--- + +import DarkButton from '@site/src/components/DarkButton'; +import IconExternalLink from '@theme/IconExternalLink'; +import octInfo16 from '@iconify-icons/octicon/info-16'; + +## Instruction + +If you could not find your problem in this page, please fire an issue: + +

+ + Fire an issue + +

+ +## Questions and answers + +### Fail to decode first frame + +* **Question**: Why does the first frame not able to be decoded correctly? The returned frame is totally black. + +* **Answer**: This problem often occurs when using `mpegCoder.MpegClient()`, especially when demuxing the RTSP stream. In some video codec formats, there are I, P, and B frames. The I frame is required for decoding other frames. If the first received frame from the remote stream is not an I frame, you could not decode the frame correctly. This problem should be fixed if you let your client running for a while. + +### Fail to encode frames + +* **Question**: When encoding frames, why does `mpegCoder` collapse? + +* **Answer**: You may send incorrect data to `MpegEncoder.EncodeFrame()`. The input value should be a 3D [`np.ndarray`][link-ndarray]. + +### Bad output video + +* **Question**: I am working with `mpegCoder.MpegEncoder`. Why is the output video broken? + +* **Answer**: There are two typical cases for the bad output video. Please check whether you meet such cases: + + * The video tail is not written correctly. This problem is often caused by a sudden termination of the program. + * Some of the input frames are not correctly written. + +### Stuck of the streamer + +* **Question**: When using `mpegCoder.MpegClient` or `mpegCoder.MpegServer`, why is the program stucked? + +* **Answer**: This problem is often caused by `mpegCoder.FFmpegSetup()`, especially when the remote server program is not launched, or the stream protocol is not accepted by the server. I have to admit that I should add a timeout option in the future. + +### Fail to push the stream + +* **Question**: I could connect the server by `MpegServer.FFmpegSetup()` successfully. Why am I not able to serve the first frame by `MpegServer.ServeFrame()`? + +* **Answer**: This problem is often caused by using a wrong codec. Not all codecs are supported for the online streaming. We recommend users to use `libx264`. + +### Set log level + +* **Question**: I do not want the logs shown in the prompt, how to disable them? + +* **Answer**: We provide a global configuration method to do that: + + ```python + mpegCoder.setGlobal(dumpLevel=0) + ``` + + This value could be `0` (only show errors), `1` (show basic logs), `2` (show detailed logs). + +### Reuse the instances + +* **Question**: Can I reuse the same instance of `mpegCoder`, for example, the `mpegCoder.MpegDecoder()`? + +* **Answer**: Of course. Remember to call `clear()` before reusing the instance. + +[download-ff-4-4-win]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz +[download-ff-4-4-linux]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" diff --git a/docusaurus.config.js b/docusaurus.config.js new file mode 100644 index 0000000..e025d1a --- /dev/null +++ b/docusaurus.config.js @@ -0,0 +1,127 @@ +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +/** @type {import('@docusaurus/types').DocusaurusConfig} */ +module.exports = { + title: 'mpegCoder', + tagline: 'This is a C++ based FFmpeg Encoder/Decoder for Python 3.5+ & numpy 1.13+. Both Linux & Win versions are provided. Theoretically you do not need to install FFmpeg for using this library.', + url: 'https://cainmagi.github.io', + baseUrl: '/FFmpeg-Encoder-Decoder-for-Python/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/favicon.ico', + organizationName: 'cainmagi', // Usually your GitHub org/user name. + projectName: 'mpegCoder', // Usually your repo name. + plugins: [ + 'docusaurus-plugin-sass', + ], + themeConfig: { + navbar: { + title: 'mpegCoder', + logo: { + alt: 'mpegCoder Logo', + src: 'img/logo.svg', + }, + items: [ + { + type: 'doc', + docId: 'introduction', + position: 'left', + label: 'Tutorial', + }, + { + type: 'doc', + docId: 'apis', + position: 'left', + label: 'APIs', + }, + { + href: 'https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python', + position: 'right', + className: 'header-github-link', + 'aria-label': 'GitHub repository', + }, + { + href: 'https://pypi.org/project/mpegCoder', + position: 'right', + className: 'header-pypi-link', + 'aria-label': 'PyPI repository', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: 'Tutorial', + to: '/docs/', + }, + { + label: 'APIs', + to: '/docs/apis/', + }, + ], + }, + { + title: 'Contact the author', + items: [ + { + label: 'Website', + href: 'https://cainmagi.github.io/', + }, + { + label: 'Email', + href: 'mailto:cainmagi@gmail.com', + }, + { + label: 'Github', + href: 'https://github.com/cainmagi', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'UH MODAL Lib', + href: 'https://modal.ece.uh.edu/', + }, + { + label: 'University of Houston', + href: 'https://www.uh.edu/', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + hideableSidebar: true, + gtag: { + trackingID: 'G-VY4XPTJXNM', + anonymizeIP: true, + }, + }, + presets: [ + [ + '@docusaurus/preset-classic', + { + docs: { + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + editUrl: + 'https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/edit/docs/', + }, + theme: { + customCss: require.resolve('./src/css/custom.scss'), + }, + }, + ], + ], +}; diff --git a/mpegCoder-docs.code-workspace b/mpegCoder-docs.code-workspace new file mode 100644 index 0000000..ca4acbf --- /dev/null +++ b/mpegCoder-docs.code-workspace @@ -0,0 +1,21 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "jshint.options": { + "esversion":6 + }, + "eslint.options": { + "env":{ + "es6":true + }, + "parserOptions": { + "ecmaVersion": 6 // or 7,8,9 + } + }, + "cSpell.enabled": false + }, +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..79e9700 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "mpeg-coder", + "version": "3.1.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids" + }, + "dependencies": { + "@docusaurus/core": "2.0.0-beta.3", + "@docusaurus/preset-classic": "2.0.0-beta.3", + "@mdx-js/react": "^1.6.21", + "@svgr/webpack": "^5.5.0", + "@iconify-icons/codicon": "^1.1.15", + "@iconify-icons/mdi": "^1.1.15", + "@iconify-icons/octicon": "^1.1.8", + "@iconify/react": "^1.1.4", + "clsx": "^1.1.1", + "docusaurus-plugin-sass": "^0.2.1", + "sass": "^1.35.2", + "file-loader": "^6.2.0", + "prism-react-renderer": "^1.2.1", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "url-loader": "^4.1.1" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} \ No newline at end of file diff --git a/sidebars.js b/sidebars.js new file mode 100644 index 0000000..826a64b --- /dev/null +++ b/sidebars.js @@ -0,0 +1,53 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +module.exports = { + // By default, Docusaurus generates a sidebar from the docs folder structure + docs: [ + 'introduction', + { + type: 'category', + label: 'Installation', + collapsed: false, + items: ['guides/install/pypi', 'guides/install/windows', 'guides/install/linux', 'guides/install/legacy'], + }, + { + type: 'category', + label: 'Examples', + collapsed: false, + items: ['guides/examples/decoding', 'guides/examples/transcoding', 'guides/examples/client', 'guides/examples/server'], + }, + { + type: 'category', + label: 'Troubleshooting', + collapsed: false, + items: ['troubleshooting/installation', 'troubleshooting/running', 'troubleshooting/qna'], + }, + 'changlog' + ], + apis: [ + 'apis', + ] + + // By default, Docusaurus generates a sidebar from the docs folder structure + // tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + { + type: 'category', + label: 'Tutorial', + items: ['hello'], + }, + ], + */ +}; diff --git a/src/components/DarkButton.js b/src/components/DarkButton.js new file mode 100644 index 0000000..1992fe9 --- /dev/null +++ b/src/components/DarkButton.js @@ -0,0 +1,48 @@ +import React, {useEffect, useState} from 'react'; + +import Link from '@docusaurus/Link'; +import { Icon, InlineIcon } from "@iconify/react"; +import useThemeContext from '@theme/hooks/useThemeContext'; //docs: https://v2.docusaurus.io/docs/2.0.0-alpha.69/theme-classic#usethemecontext + + +const useButtonTheme = () => { + const {isDarkTheme} = useThemeContext(); + if (isDarkTheme) { + return "button--secondary button--outline"; + } + else { + return "button--secondary"; + } +}; + + +function DarkButton(props) { + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + const curStyle = useButtonTheme(); + + let className; + if (props.index) { + className = `button ${curStyle} button--lg button--index`; + } else { + className = `button ${curStyle} button--lg`; + } + + return ( + + {props.icon && + + }{props.children} + + ); +} + + +export default DarkButton; diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js new file mode 100644 index 0000000..fca73cd --- /dev/null +++ b/src/components/HomepageFeatures.js @@ -0,0 +1,63 @@ +import React from 'react'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import IconExternalLink from '@theme/IconExternalLink'; +import styles from './HomepageFeatures.module.css'; + +const FeatureList = [ + { + title: 'Python without depdencies', + Svg: require('../../static/img/icon_python.svg').default, + description: ( + <> + Implemented by the Python-C-API. This feature has been included in stdlib. No matter when you need to compile or use this package, you do not need any python dependencies. + + ), + }, + { + title: 'Fully based on FFMpeg', + Svg: require('../../static/img/icon_ffmpeg.svg').default, + description: ( + <> + Built with the shared-lib-enabled FFMpeg. Since the original FFMpeg is not modified. All encoders and decoders are available. We have also provided a packed mpegCoder with all dynamic libraries. + + ), + }, + { + title: 'Compiled by C++', + Svg: require('../../static/img/icon_cpp.svg').default, + description: ( + <> + Compiled by C++ on both Windows and Linux. The Win version and the Linux version are compiled by VC++ and G++ respectively. All source codes of this project are open-sourced by GPL v3 License. + + ), + }, +]; + +function Feature({Svg, title, description}) { + return ( +
+
+ +
+
+

{title}

+

{description}

+
+
+ ); +} + +export default function HomepageFeatures() { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/src/components/HomepageFeatures.module.css b/src/components/HomepageFeatures.module.css new file mode 100644 index 0000000..9dcb82c --- /dev/null +++ b/src/components/HomepageFeatures.module.css @@ -0,0 +1,13 @@ +/* stylelint-disable docusaurus/copyright-header */ + +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/src/components/InlineIcon.js b/src/components/InlineIcon.js new file mode 100644 index 0000000..7dca81c --- /dev/null +++ b/src/components/InlineIcon.js @@ -0,0 +1,13 @@ +import React, {useEffect, useState} from 'react'; + +import { Icon, InlineIcon } from "@iconify/react"; + + +function InlineIconM(props) { + return ( + + ); +} + + +export default InlineIconM; diff --git a/src/css/custom.scss b/src/css/custom.scss new file mode 100644 index 0000000..e093192 --- /dev/null +++ b/src/css/custom.scss @@ -0,0 +1,137 @@ +/* stylelint-disable docusaurus/copyright-header */ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #5cb85c; + --ifm-color-primary-dark: #4bad4b; + --ifm-color-primary-darker: #47a347; + --ifm-color-primary-darkest: #3b873b; + --ifm-color-primary-light: #6fc06f; + --ifm-color-primary-lighter: #79c579; + --ifm-color-primary-lightest: #96d196; + --ifm-code-font-size: 95%; +} + +.header-github-link{ + &:hover { + opacity: 0.6; + } + &:before { + content: ''; + width: 24px; + height: 24px; + display: flex; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z' /%3E%3C/svg%3E") + no-repeat; + } + html[data-theme='dark'] &:before { + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z' /%3E%3C/svg%3E") + no-repeat; + } +} + +.header-pypi-link{ + &:hover { + opacity: 0.6; + } + &:before { + content: ''; + width: 24px; + height: 24px; + display: flex; + background: url("data:image/svg+xml,") + no-repeat; + } + html[data-theme='dark'] &:before { + background: url("data:image/svg+xml,") + no-repeat; + } +} + +.docusaurus-highlight-code-line { + background-color: rgba(0, 0, 0, 0.1); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); + + /* Color which works with dark mode syntax highlighting theme */ + html[data-theme='dark'] & { + background-color: rgba(0, 0, 0, 0.3); + } +} + +a.noline:hover { + text-decoration: var(--ifm-link-decoration); + filter: brightness(85%); + + html[data-theme='dark'] & { + filter: brightness(125%); + } +} + +// Index related +.buttons_src-pages-index-module { + a.button.button--secondary.button--outline:not(.button--active):not(:hover) { + color: var(--ifm-color-gray-900); + border-color: var(--ifm-color-gray-900); + } +} + +// SVG: mermaid +.mermaid { + html[data-theme='dark'] & { + [data-tstyle='font-d'] { + fill: #ddd !important; + } + [data-tstyle='font-e'] { + fill: #eee !important; + } + [data-tstyle='font-f'] { + fill: #fff !important; + } + [data-tstyle='module-box'] { + fill: #474848 !important; + stroke: #fff !important; + } + [data-tstyle='class-box'] { + fill: #241b42 !important; + stroke: #81b1db !important; + } + [data-tstyle='func-box'] { + fill: #1f2020 !important; + stroke: #ddd !important; + } + [data-tstyle='d-line'] { + stroke: #999 !important; + } + } +} + +// SVG: theme color +.themeColor { + html[data-theme='dark'] & { + [data-tcolor='black'] { + fill: #fff !important; + } + [data-tcolor='sblack'] { + stroke: #fff !important; + } + [data-tcolor='blue'] { + fill: #aaf !important; + } + [data-tcolor='sblue'] { + stroke: #aaf !important; + } + [data-tcolor='red'] { + fill: #faa !important; + } + [data-tcolor='sred'] { + stroke: #faa !important; + } + } +} diff --git a/src/envs/variables.js b/src/envs/variables.js new file mode 100644 index 0000000..b1fb2bc --- /dev/null +++ b/src/envs/variables.js @@ -0,0 +1,30 @@ +/** + * Environmental variables of this side. + * Yuchen Jin, mailto:cainmagi@gmail.com + */ + +import React from 'react'; +import Link from '@docusaurus/Link'; + +const variables = { + sourceURL: 'https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/c2f41bfc95c9c87f91e3a6f59df9b2e6b66e683b/MpegCoder' +}; + +function SourceURL(props) { + let url = variables.sourceURL + '/' + props.url; + return ( + { props.children } + ); +}; + +function Splitter(props) { + return ( + · + ); +}; + +Splitter.defaultProps = { + padx: '1ex' +}; + +export {SourceURL, Splitter}; diff --git a/src/pages/index.js b/src/pages/index.js new file mode 100644 index 0000000..8d9dd51 --- /dev/null +++ b/src/pages/index.js @@ -0,0 +1,47 @@ +import React from 'react'; +import clsx from 'clsx'; +import Layout from '@theme/Layout'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import styles from './index.module.scss'; +import DarkButton from "../components/DarkButton"; +import HomepageFeatures from '../components/HomepageFeatures'; + +import LogoSVG from '../../static/img/logo.svg'; + +function HomepageHeader() { + const {siteConfig} = useDocusaurusContext(); + return ( +
+
+

{siteConfig.title}

+

{siteConfig.tagline}

+
+ + Getting started + + + PyPI Project + +
+
+
+ ); +} + +export default function Home() { + const {siteConfig} = useDocusaurusContext(); + return ( + + +
+ +
+
+ ); +} diff --git a/src/pages/index.module.scss b/src/pages/index.module.scss new file mode 100644 index 0000000..be86baf --- /dev/null +++ b/src/pages/index.module.scss @@ -0,0 +1,37 @@ +/* stylelint-disable docusaurus/copyright-header */ + +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; + + @media screen and (max-width: 966px) { + & { + padding: 2rem; + } + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; + + a { + &:not(:last-child) { + margin-right: 1em; + } + } +} + +.title-logo { + width: 56px; + height: 56px; + vertical-align: text-bottom; +} diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md new file mode 100644 index 0000000..9756c5b --- /dev/null +++ b/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/static/.nojekyll b/static/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/static/img/examples/client.svg b/static/img/examples/client.svg new file mode 100644 index 0000000..76bcd69 --- /dev/null +++ b/static/img/examples/client.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/examples/server.png b/static/img/examples/server.png new file mode 100644 index 0000000000000000000000000000000000000000..68621af2b636e19eb439cedc48b66f5d2733f1a9 GIT binary patch literal 93461 zcmeEucT`j9+btF>AmFIz2m<3+KoJmW0)~K$A}YN^siM-WQUU=I1pyU-8Kk#>Nbf>u zAw)n$g;1mf5=bagLkKMikaiFA4bIGO-9PUA?pohp_pIe&os;C8_dMr4&$FMs_v;H| zLp>n@F#$e4J|X=ZznSv!?Zxo%?bh742RO2Nv(XXwv%}X^?FCX9W!L5Hge(wEB<>TY!>Hnr<9%#2PD%d1C;K1PV7yj~mWH-Ne zcA&KOhv#>G{rw<+v7)DmX0G+;pfiWbslueRIl!C?p&y5YRxcl&hPNeotFSFcZ1wI z@^HY~jFOac#B$Z}(uk}R?;0d6E7NeFT}h4e>!5%{Mf;7-hJ1^q_!9(f;|3?HAfyoyo;_hB(%78+%tJT`PcbB_F$YRWN(MHL1NeKLD7NuI#APT$@@5=l`%enJo;*=q- z_-JB$zHm@ghlX)ORyB@$%wEwO8CrCFi2i*Hr#-LqlmDZu#Jf{U)tHGht2(S=)mI+5 zr|bCnzJAWpMW*H(V6X~~)a)Q=yHqEkjfzXwv~wY-?YCo4i7r{A=(d{6RmpRGZ_G2#DvWt94nWuLdJo=-a*sB{ zITj$j397}LcU1P06g#vC_Zim)D1DyOiMHvu8G~+RX(?EH6Y;yv>OgE}F^~AGAWdSu zr>PndaU!P>>YU9l}+gCyQ$K>%qCnkEyJfN(}hl3SF}y%idd#3 zB2g-~>G1oilAEo5uKo?`6^@f*oP`khcfsoB74qy}5vfaMMwf^EKpP%?g}qf0ezQw6 z(>RbgF6R_7-OT99#|(edg0ak%0*c=1VfSG?eJE$tJ1vn#Dq&ZQ2~V%|DO{qaolqu{ zY)v+xbYT`bkqGw8b1{KR%|q?s6`Y;smT zpM2ao?ExeXQQv3^_5Nifn#h313gzXd1pd{XN_oS9{jhfY)c#z2VJ^{febn zGcCAO?~$Pla&fh*|5ZBT7H0K}aCInRip)LRo*GT`GvIpjdW~?g{-V<;>fW$pZf?DE zhx#ZJX1Eu_CydlDFU_^=S*pX{^yE2}Q9;bQ+(~^%ngU9gV?u#I2=ZK)mrJwqMWBV|4?`N-g`Osgvo>C6H@?=~z67JAg+x#sf7qPgf z!`nJ2rs2YhH}j{}ah5_F1T2Cw`;I;3#uJwuxSq-@^MBt|9hw+4c_YmcwoW_DWxZ|M z&5QIL8D{GjC>cbL4Y&;Rg0<>+@IOYnt!3L(Dk2G8E&bS;ZWWGOhU`!D4rb#SJ=tWY z-PB5KmP4cJu$L;F)EZK>q9l=f)GT^5N=wx{lwGTCb$1X;)yxx8>=Q$u_udAKFvx*lvrAF%Qj^! zoS~!|6_6q3Lk28lNuA;|72F|9)-=uSvha74P&CRL)2PCJf+nHrx~u3a8Vs6fb$1he z(XD#fWes(nPG-xMUresu5BaeA#c7oVBEEXDDLJ6N{xs+TK7BefSK4why5m>owFHIO z6RH%Z*CizUQBTbk?%S`t=2_DXHTKZcYG!q)Q(wC^Zag>2pkP{}b571skW?h~l3s`I z&Bs~Ca#wiV)+^O6CQFBaaW|7mQe6X zFZP7+%k6#OZ$k1Xy|_JR{&D2%?aAD?q`wb5xiqjY!~EB2imr=RRDd==BS0QmcWYz< z&w-I4D=#)?bK^RjLs^|I;d{d&JNRyNy^zjwu|l~yTGe@ZTGhDx)U;I^|J=li-S-H+ z1UGGrw?*L^{VAR4-p#IB>?Pfu-hA3EA)9jr(->8K7 z+Kr=BV7+wr@$t=n%h8RxeeD{5i`w>=gltNCg4-g6o(b_idDBa-1ap_;T9mdw?K!BT z8Wc%tgsOp>cJO@+7<<2?8o}d^9pC zJ&C+G^)*rFTvmrX`htwg1qsanWiW4}8OEy**&W!Fu1w8z zS|}~psXbPrMbn=GOuAVh4BK1w6)Lf=J75s!{H;l7xZD=)F%~+N2q7$KBukRzmj;`x zB9kmGLxS-)~-y@lGLg7NOHy<61iZ*EN5Unx8A{G{wAH&9Up+^lHdqtQ`e6!RPXl-_0*) zc3+9;N4&@1tSf+00;o91-p~%eE3`{}HKPsF&uSCRrY4s?(J6-seyZ(t>ckWH`P;rD zUz}6U%4w#amCke$L(Se3%M5&}h$Ez(lCHU=7whgSEQN0k>8(%Q7|FP&rTOi{iOn~U z^=dqv%em25p~2nTp#bn-T&r8epg=|S+_J6P(>i5v)!n&B64i+M(9mOe&|_q+HfSPa-c6$IwT1c^CNU(qf%c6k?Sx?G=%% z=|^=GF)|8Z)%FtfQZLl|NZB|^l+-$$m^wME+3=5L(oSSg9!k!IXE0I2gJR`fJ<~jl;DYG50*bn1I^)G-*u_b`4i|YiX{V z2lWNG1lQP(d!F&xGhc_~EI2b1iDN{5(!}&NPH(YAN%j%@_>S#_@m=Bkx;*{8_03Cb zS`8NBee3Ioani^Ik(~ploakxbG!~qToThrxQU~RXlo51i@4&10F0Wt-BKqN=q`zi z-kdBhDZfN!k(iwykJ+DSipK&;dH8^o)|J4&YKZa)SxEWqhdbks3OC;ZEhWVtz*yJ0 zd#9mX92qpoZ0LuSuXC&2U^Q$o*Kzf|?rNvCH`cu|W4PrNhv=Pt5+YJ4@X5213iE>` zmbB8o;%&TXU)zNxx-Zc@i4TP#NrL0Kaa!-%*4^g&3gXnK63jf-Lq8pNPO<0ALs|;H z_Qk>1PO;Xh-Uwm_g1b>fUFgk?QeW*dqOH#PxWoAF{Y#H5bXyzgDBPYTIO3DINg4rqs1BT+Xx_ zZ#841n`h^uMPj~C=k(W3??otehD^!YSLFnppJn71+mVs!`M9+7K~G}31OQ1-XoXz9 z^I#mqVGwnS8WEcXhM3f}gh75(Um)o5fZCJ&MCdTzC=hzg(f?6fs5{H&{*ecUAb|@Gs z`wR3bbO6&N`WWf=*nM?4C)|nIB@qzx@$E%smnKcQ011bof*;sF`Y6h19+saSczUW4 zQEbG-TfXma3i7pPWI{WH=x(gLWqL@9(P~?% zCyj@Nfq00}yhA3%j~952HV*$4k@=PV&HDi;^5>SVe2t&f7zJIIBE#xCNq_{(ghOe%Sy?N7wYBLqKco4>>=qa zWeQ-yYMz8lCt-;z_X--n!(1!wRJCdq&s4X1jsl$wn?c*5<<$AJ_(R@GGPVY3;e+uc zs`jDWA*>OT`mw8L5+x$01lmR$AAWnQ&#;>W&_i*pJb#Bks|B(Wyzv@b{ z_i~6Qp{DBfS0Tlvqnzh5eKk%vG1gtsb&OQjR~`8lwWr&NE+OCVX`R`83sgUX6eFgh zO4aaFHb}2iW-&r-ME!_G=hw8V=9ZntAPQSvD8XS;jB(fklc<0W1CcDI*^L0;yz*9JTQi_Ndm5fH? z>x{mqgOUdIAdkSEqVn<_UwS99kCJ2QA0 z-dgLErmJ&Z26o+x#SXYpzma9>l-EXH&RUy3!8*Y(*?R%Za?(4;=#3KWrYx}o)?a8+ z)N>b8%NcKPQ$`lnRbOE*wJ~}lJ_xj-BqfXmK3D|EqZclTSE84OaJf1Cwix!New47p zLN1NRM)D3PxNUNoSnuFMS@vMhj8*MUii}jql8&*)b)q~_!rq0NU#u{;9}ljNP3xDn z!Mxv*khBD9YGbZnZ!@)CG8o&2ntA7l?}_II#?UoaX+ZWi>%QC`QsbVi4l{2{gV5KS z-{6xwKVZ=VuQrIZ6fx?W%Ll)erhx52e{;-N2lzX6UEN2;q3eYw+FNPO|EkQ^My*p`%*(kE)i(wIQ@ zV{ixG?9xAS8?8M;Cs^_=UUhub@(yOhqOTMr%0dX;-*1lBT@`{VtawCf#yy@dDj?_$ zXcoiM>_V2Wv5xcQojegpAr!nALpwwZ{G9@h#9u$h-RMSS;lFz=6OE_D0yVc%fz52_ z^_f*1i-xgRIT6%x)agT|J1(xBtKf^nm)8I}%8?VWs^E)M<1z6@DfAM!b2IdTy%HTM zoq{yjkXE7=fED{_Xgr&UHB@Bs7VJB*;C1h51@1!n^wPM(?bW2Rg~|3{tpkIWKhF

sCrgQQf8*cEiBBc{z+txI}R^xyfM>elKSO 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%0DTQ-ux&~BJQ}3#D-e76_U3cm(Ich2Q{w^u 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 G2>%~XIBaDA literal 0 HcmV?d00001 diff --git a/static/img/favicon.ico b/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c176a9b0ea32242256afc943d06368f6f42b6cb6 GIT binary patch literal 34494 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 \ No newline at end of file diff --git a/static/img/icon_ffmpeg.svg b/static/img/icon_ffmpeg.svg new file mode 100644 index 0000000..d1a43ff --- /dev/null +++ b/static/img/icon_ffmpeg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/icon_python.svg b/static/img/icon_python.svg new file mode 100644 index 0000000..d262768 --- /dev/null +++ b/static/img/icon_python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/logo.svg b/static/img/logo.svg new file mode 100644 index 0000000..b68d6b7 --- /dev/null +++ b/static/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/overview.svg b/static/img/overview.svg new file mode 100644 index 0000000..8261b42 --- /dev/null +++ b/static/img/overview.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..5c2621e --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8818 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.2.1.tgz#95fc07cfa40b5a38e3f80acd75d1fb94968215a8" + integrity sha512-/SLS6636Wpl7eFiX7eEy0E3wBo60sUm1qRYybJBDt1fs8reiJ1+OSy+dZgrLBfLL4mSFqRIIUHXbVp25QdZ+iw== + dependencies: + "@algolia/autocomplete-shared" "1.2.1" + +"@algolia/autocomplete-preset-algolia@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.2.1.tgz#bda1741823268ff76ba78306259036f000198e01" + integrity sha512-Lf4PpPVgHNXm1ytrnVdrZYV7hAYSCpAI/TrebF8UC6xflPY6sKb1RL/2OfrO9On7SDjPBtNd+6MArSar5JmK0g== + dependencies: + "@algolia/autocomplete-shared" "1.2.1" + +"@algolia/autocomplete-shared@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.2.1.tgz#96f869fb2285ed6a34a5ac2509722c065df93016" + integrity sha512-RHCwcXAYFwDXTlomstjWRFIzOfyxtQ9KmViacPE5P5hxUSSjkmG3dAb77xdydift1PaZNbho5TNTCi5UZe0RpA== + +"@algolia/cache-browser-local-storage@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.3.tgz#3bf81e0f66a4a1079a75914a987eb1ef432c7c68" + integrity sha512-TD1N7zg5lb56/PLjjD4bBl2eccEvVHhC7yfgFu2r9k5tf+gvbGxEZ3NhRZVKu2MObUIcEy2VR4LVLxOQu45Hlg== + dependencies: + "@algolia/cache-common" "4.10.3" + +"@algolia/cache-common@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.10.3.tgz#311b2b5ae06d55300f4230944c99bc39ad15847d" + integrity sha512-q13cPPUmtf8a2suBC4kySSr97EyulSXuxUkn7l1tZUCX/k1y5KNheMp8npBy8Kc8gPPmHpacxddRSfOncjiKFw== + +"@algolia/cache-in-memory@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.10.3.tgz#697e4994538426272ea29ccf2b32b46ea4c48862" + integrity sha512-JhPajhOXAjUP+TZrZTh6KJpF5VKTKyWK2aR1cD8NtrcVHwfGS7fTyfXfVm5BqBqkD9U0gVvufUt/mVyI80aZww== + dependencies: + "@algolia/cache-common" "4.10.3" + +"@algolia/client-account@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.10.3.tgz#f2cbefb1abce74c341115607d6af199df1b056ae" + integrity sha512-S/IsJB4s+e1xYctdpW3nAbwrR2y3pjSo9X21fJGoiGeIpTRdvQG7nydgsLkhnhcgAdLnmqBapYyAqMGmlcyOkg== + dependencies: + "@algolia/client-common" "4.10.3" + "@algolia/client-search" "4.10.3" + "@algolia/transporter" "4.10.3" + +"@algolia/client-analytics@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.10.3.tgz#43d934ef8df0cf551c78e6b2e9f2452e7fb27d93" + integrity sha512-vlHTbBqJktRgclh3v7bPQLfZvFIqY4erNFIZA5C7nisCj9oLeTgzefoUrr+R90+I+XjfoLxnmoeigS1Z1yg1vw== + dependencies: + "@algolia/client-common" "4.10.3" + "@algolia/client-search" "4.10.3" + "@algolia/requester-common" "4.10.3" + "@algolia/transporter" "4.10.3" + +"@algolia/client-common@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.10.3.tgz#c4257dd5c57c5c8ec4bd48a7b1897573e372d403" + integrity sha512-uFyP2Z14jG2hsFRbAoavna6oJf4NTXaSDAZgouZUZlHlBp5elM38sjNeA5HR9/D9J/GjwaB1SgB7iUiIWYBB4w== + dependencies: + "@algolia/requester-common" "4.10.3" + "@algolia/transporter" "4.10.3" + +"@algolia/client-personalization@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.10.3.tgz#58c800f90ab8ab4aa29abdf29a97e89e6bda419e" + integrity sha512-NS7Nx8EJ/nduGXT8CFo5z7kLF0jnFehTP3eC+z+GOEESH3rrs7uR12IZHxv5QhQswZa9vl925zCOZDcDVoENCg== + dependencies: + "@algolia/client-common" "4.10.3" + "@algolia/requester-common" "4.10.3" + "@algolia/transporter" "4.10.3" + +"@algolia/client-search@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.10.3.tgz#aa6b02c2d528cb264830f276739b7f68b58988ef" + integrity sha512-Zwnp2G94IrNFKWCG/k7epI5UswRkPvL9FCt7/slXe2bkjP2y/HA37gzRn+9tXoLVRwd7gBzrtOA4jFKIyjrtVw== + dependencies: + "@algolia/client-common" "4.10.3" + "@algolia/requester-common" "4.10.3" + "@algolia/transporter" "4.10.3" + +"@algolia/logger-common@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.10.3.tgz#6773d2e38581bf9ac57e2dda02f0c4f1bc72ce94" + integrity sha512-M6xi+qov2bkgg1H9e1Qtvq/E/eKsGcgz8RBbXNzqPIYoDGZNkv+b3b8YMo3dxd4Wd6M24HU1iqF3kmr1LaXndg== + +"@algolia/logger-console@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.10.3.tgz#bd8bdc1f9dba89db37be25d673ac1f2e68de7913" + integrity sha512-vVgRI7b4PHjgBdRkv/cRz490twvkLoGdpC4VYzIouSrKj8SIVLRhey3qgXk7oQXi3xoxVAv6NrklHfpO8Bpx0w== + dependencies: + "@algolia/logger-common" "4.10.3" + +"@algolia/requester-browser-xhr@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.3.tgz#81ae8f6caf562a28f96102f03da7f4b19bba568c" + integrity sha512-4WIk1zreFbc1EF6+gsfBTQvwSNjWc20zJAAExRWql/Jq5yfVHmwOqi/CajA53/cXKFBqo80DAMRvOiwP+hOLYw== + dependencies: + "@algolia/requester-common" "4.10.3" + +"@algolia/requester-common@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.10.3.tgz#c3112393cff97be79863bc28de76f9c69b2f5a95" + integrity sha512-PNfLHmg0Hujugs3rx55uz/ifv7b9HVdSFQDb2hj0O5xZaBEuQCNOXC6COrXR8+9VEfqp2swpg7zwgtqFxh+BtQ== + +"@algolia/requester-node-http@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.10.3.tgz#75ea7805ac0ba25a1124989d8632ef39c31441c1" + integrity sha512-A9ZcGfEvgqf0luJApdNcIhsRh6MShn2zn2tbjwjGG1joF81w+HUY+BWuLZn56vGwAA9ZB9n00IoJJpxibbfofg== + dependencies: + "@algolia/requester-common" "4.10.3" + +"@algolia/transporter@4.10.3": + version "4.10.3" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.10.3.tgz#0aeee752923957cffe63e4cf1c7a22ca48d96dde" + integrity sha512-n1lRyKDbrckbMEgm7QXtj3nEWUuzA3aKLzVQ43/F/RCFib15j4IwtmYhXR6OIBRSc7+T0Hm48S0J6F+HeYCQkw== + dependencies: + "@algolia/cache-common" "4.10.3" + "@algolia/logger-common" "4.10.3" + "@algolia/requester-common" "4.10.3" + +"@babel/code-frame@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.5.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" + integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.12.16", "@babel/core@^7.12.3": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.8.tgz#20cdf7c84b5d86d83fac8710a8bc605a7ba3f010" + integrity sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.8" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.8" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.14.8" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.12.15", "@babel/generator@^7.12.5", "@babel/generator@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.8.tgz#bf86fd6af96cf3b74395a8ca409515f89423e070" + integrity sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg== + dependencies: + "@babel/types" "^7.14.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== + dependencies: + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz#a6f8c3de208b1e5629424a9a63567f56501955fc" + integrity sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.7" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-member-expression-to-functions@^7.14.5", "@babel/helper-member-expression-to-functions@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz#d4279f7e3fd5f4d5d342d833af36d4dd87d7dc49" + integrity sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.8" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.8" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-simple-access@^7.14.5", "@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + dependencies: + "@babel/types" "^7.14.8" + +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c" + integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.8.tgz#839f88f463025886cff7f85a35297007e2da1b77" + integrity sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw== + dependencies: + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.16", "@babel/parser@^7.12.7", "@babel/parser@^7.14.5", "@babel/parser@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.8.tgz#66fd41666b2d7b840bd5ace7f7416d5ac60208d4" + integrity sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" + integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + +"@babel/plugin-proposal-async-generator-functions@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" + integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" + integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.5" + +"@babel/plugin-proposal-optional-catch-binding@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" + integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" + integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + +"@babel/plugin-transform-block-scoped-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" + integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-duplicate-keys@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-exponentiation-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-for-of@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-member-expression-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" + integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== + dependencies: + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" + integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + +"@babel/plugin-transform-new-target@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-object-super@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" + integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-display-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65" + integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx-development@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af" + integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.14.5" + +"@babel/plugin-transform-react-jsx@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a" + integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/plugin-transform-react-pure-annotations@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" + integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-regenerator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-runtime@^7.12.15": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523" + integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-spread@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + +"@babel/plugin-transform-sticky-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-template-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typeof-symbol@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typescript@^7.14.5": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c" + integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.6" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.14.5" + +"@babel/plugin-transform-unicode-escapes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.16": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.8.tgz#254942f5ca80ccabcfbb2a9f524c74bca574005b" + integrity sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.7" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.14.5" + "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.14.8" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.15.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.13", "@babel/preset-react@^7.12.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" + integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-react-display-name" "^7.14.5" + "@babel/plugin-transform-react-jsx" "^7.14.5" + "@babel/plugin-transform-react-jsx-development" "^7.14.5" + "@babel/plugin-transform-react-pure-annotations" "^7.14.5" + +"@babel/preset-typescript@^7.12.16": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz#aa98de119cf9852b79511f19e7f44a2d379bcce0" + integrity sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-typescript" "^7.14.5" + +"@babel/runtime-corejs3@^7.12.13": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.8.tgz#68539e0129f13eb1ed9a9aa273d3542b93c88384" + integrity sha512-4dMD5QRBkumn45oweR0SxoNtt15oz3BUBAQ8cIx7HJqZTtE8zjpM0My8aHJHVnyf4XfRg6DNzaE1080WLBiC1w== + dependencies: + core-js-pure "^3.15.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" + integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.12.7", "@babel/template@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.8.tgz#c0253f02677c5de1a8ff9df6b0aacbec7da1a8ce" + integrity sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.8" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.8" + "@babel/types" "^7.14.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.4.4": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.8.tgz#38109de8fcadc06415fbd9b74df0065d4d41c728" + integrity sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q== + dependencies: + "@babel/helper-validator-identifier" "^7.14.8" + to-fast-properties "^2.0.0" + +"@docsearch/css@3.0.0-alpha.37": + version "3.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.0.0-alpha.37.tgz#9ae87820d6c0ee2ccb55164ecaec612f721fd3c4" + integrity sha512-EUr2AhvFw+TYPrkfePjDWh3NqpJgpwM8v6n8Mf0rUnL/ThxXKsdamzfBqWCWAh+N1o+eeGqypvy+p8Fp8dZXhQ== + +"@docsearch/react@^3.0.0-alpha.36": + version "3.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.0.0-alpha.37.tgz#1e12608db3faf8d3462769dbad569d26e4c1c633" + integrity sha512-W/O3OfL+LLQTlGXrT8/d7ztBYKgZmDWweu9f0O/41zV6Hirzo/qZEWzr25ky8utFUcMwj1pfTHLOp1F9UCtLAQ== + dependencies: + "@algolia/autocomplete-core" "1.2.1" + "@algolia/autocomplete-preset-algolia" "1.2.1" + "@docsearch/css" "3.0.0-alpha.37" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.3.tgz#3af14897dcf5b73554314f6ed02c46cf0f463336" + integrity sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg== + dependencies: + "@babel/core" "^7.12.16" + "@babel/generator" "^7.12.15" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.12.15" + "@babel/preset-env" "^7.12.16" + "@babel/preset-react" "^7.12.13" + "@babel/preset-typescript" "^7.12.16" + "@babel/runtime" "^7.12.5" + "@babel/runtime-corejs3" "^7.12.13" + "@babel/traverse" "^7.12.13" + "@docusaurus/cssnano-preset" "2.0.0-beta.3" + "@docusaurus/react-loadable" "5.5.0" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-common" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + "@slorber/static-site-generator-webpack-plugin" "^4.0.0" + "@svgr/webpack" "^5.5.0" + autoprefixer "^10.2.5" + babel-loader "^8.2.2" + babel-plugin-dynamic-import-node "2.3.0" + boxen "^5.0.1" + chalk "^4.1.1" + chokidar "^3.5.1" + clean-css "^5.1.2" + commander "^5.1.0" + copy-webpack-plugin "^9.0.0" + core-js "^3.9.1" + css-loader "^5.1.1" + css-minimizer-webpack-plugin "^3.0.1" + cssnano "^5.0.4" + del "^6.0.0" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^1.12.1" + express "^4.17.1" + file-loader "^6.2.0" + fs-extra "^10.0.0" + github-slugger "^1.3.0" + globby "^11.0.2" + html-minifier-terser "^5.1.1" + html-tags "^3.1.0" + html-webpack-plugin "^5.3.2" + import-fresh "^3.3.0" + is-root "^2.1.0" + leven "^3.1.0" + lodash "^4.17.20" + mini-css-extract-plugin "^1.6.0" + module-alias "^2.2.2" + nprogress "^0.2.0" + postcss "^8.2.15" + postcss-loader "^5.3.0" + prompts "^2.4.1" + react-dev-utils "^11.0.1" + react-error-overlay "^6.0.9" + react-helmet "^6.1.0" + react-loadable "^5.5.0" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.2.0" + react-router-config "^5.1.1" + react-router-dom "^5.2.0" + resolve-pathname "^3.0.0" + rtl-detect "^1.0.3" + semver "^7.3.4" + serve-handler "^6.1.3" + shelljs "^0.8.4" + std-env "^2.2.1" + strip-ansi "^6.0.0" + terser-webpack-plugin "^5.1.3" + tslib "^2.2.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^5.3.0" + webpack "^5.40.0" + webpack-bundle-analyzer "^4.4.2" + webpack-dev-server "^3.11.2" + webpack-merge "^5.8.0" + webpackbar "^5.0.0-3" + +"@docusaurus/cssnano-preset@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.3.tgz#b82d58df4e95b04cd57a3e9922d39056207d2c73" + integrity sha512-k7EkNPluB+TV++oZB8Je4EQ6Xs6cR0SvgIU9vdXm00qyPCu38MMfRwSY4HnsVUV797T/fQUD91zkuwhyXCUGLA== + dependencies: + cssnano-preset-advanced "^5.1.1" + postcss "^8.2.15" + postcss-sort-media-queries "^3.10.11" + +"@docusaurus/mdx-loader@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.3.tgz#e1d9f3265889e4728412dab9f45d940bd87639fd" + integrity sha512-xH6zjNokZD2D7Y+Af3gMO692lwfw5N3NzxuLqMF3D0HPHOLrokDeIeVPeY/EBJBxZiXgqWGZ/ESewNDU1ZUfRQ== + dependencies: + "@babel/parser" "^7.12.16" + "@babel/traverse" "^7.12.13" + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@mdx-js/mdx" "^1.6.21" + "@mdx-js/react" "^1.6.21" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.0.0" + github-slugger "^1.3.0" + gray-matter "^4.0.3" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.1.0" + stringify-object "^3.3.0" + unist-util-visit "^2.0.2" + url-loader "^4.1.1" + webpack "^5.40.0" + +"@docusaurus/plugin-content-blog@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.3.tgz#cb7ea4c61ee8717a76595b339932e7ee9fe9e091" + integrity sha512-QynxHVzS3jItnDbmu9wkASyMxrduauqONVqYHrL4x2pC4kzSTIrcDnOK1JXUJAuDg9XY66ISWQ8dN7YZOpU+4Q== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/mdx-loader" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + chalk "^4.1.1" + escape-string-regexp "^4.0.0" + feed "^4.2.2" + fs-extra "^10.0.0" + globby "^11.0.2" + loader-utils "^2.0.0" + lodash "^4.17.20" + reading-time "^1.3.0" + remark-admonitions "^1.2.1" + tslib "^2.2.0" + webpack "^5.40.0" + +"@docusaurus/plugin-content-docs@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.3.tgz#8c4f1780c1264fcb5937183ab8ce9792f88f253a" + integrity sha512-lB9UjDyFtq89tpyif+JDIJ/gtwtSTEwOBNTLAzOsg4ZIfNLfyifrWN4ci0TkZV0xShWUHqGp36/5XTpHRn1jJQ== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/mdx-loader" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + chalk "^4.1.1" + combine-promises "^1.1.0" + escape-string-regexp "^4.0.0" + execa "^5.0.0" + fs-extra "^10.0.0" + globby "^11.0.2" + import-fresh "^3.2.2" + js-yaml "^4.0.0" + loader-utils "^1.2.3" + lodash "^4.17.20" + remark-admonitions "^1.2.1" + shelljs "^0.8.4" + tslib "^2.2.0" + utility-types "^3.10.0" + webpack "^5.40.0" + +"@docusaurus/plugin-content-pages@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.3.tgz#f90d565563551556354b8dbf48ab5765c3b36fa2" + integrity sha512-lV6ZoSkkVwN10kQLE4sEAubaEnzXjKBQBhMCx49wkrvRwKzjBoRnfWV8qAswN1KU2YZZL1ixFpcr8+oXvhxkuA== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/mdx-loader" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + globby "^11.0.2" + lodash "^4.17.20" + minimatch "^3.0.4" + remark-admonitions "^1.2.1" + slash "^3.0.0" + tslib "^2.1.0" + webpack "^5.40.0" + +"@docusaurus/plugin-debug@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.3.tgz#2278cb537cb6acf153977733c19c704a32e15b28" + integrity sha512-EeHUcCPsr9S1tsyRo42SnhrCCOlcvkcA8CR4pOofiJkG1gJ8IwhY9fNOLJM7dYs0bMtViiqXy5fD2jUib4G1jw== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + react-json-view "^1.21.3" + tslib "^2.1.0" + +"@docusaurus/plugin-google-analytics@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.3.tgz#aff4a625b183c2c5bcb63ce61542592e98075f55" + integrity sha512-e6tO1FCIdAqIjcLAUaHugz/dErAP/wx67WyN6bWSdAMJRobmav+TFesE2iVzzIMxuRB3pY0Y7TtLL5dF5xpIsg== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + +"@docusaurus/plugin-google-gtag@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.3.tgz#e52105a749e33e6ea44e7103f42df0fcac0268ac" + integrity sha512-p48CK7ZwThs9wc/UEv+zG3lZ/Eh4Rwg2c0MBBLYATGE+Wwh6HIyilhjQAj4dC6wf9iYvCZFXX2pNOr+cKKafIA== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + +"@docusaurus/plugin-sitemap@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.3.tgz#61e0b52db51cc11dd59662041ffd32ef3f4ec5f1" + integrity sha512-ilEJ3Xb8zbShjGhdRHGAm4OZ0bUwFxtMtcTyqLlGmk9r0U2h0CWcaS+geJfLwgUJkwgKZfGdDrmTpmf8oeGQvw== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-common" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + fs-extra "^10.0.0" + sitemap "^7.0.0" + tslib "^2.2.0" + +"@docusaurus/preset-classic@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz#44fe60bb73e671cce56a028c8731d97631fe57b2" + integrity sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/plugin-content-blog" "2.0.0-beta.3" + "@docusaurus/plugin-content-docs" "2.0.0-beta.3" + "@docusaurus/plugin-content-pages" "2.0.0-beta.3" + "@docusaurus/plugin-debug" "2.0.0-beta.3" + "@docusaurus/plugin-google-analytics" "2.0.0-beta.3" + "@docusaurus/plugin-google-gtag" "2.0.0-beta.3" + "@docusaurus/plugin-sitemap" "2.0.0-beta.3" + "@docusaurus/theme-classic" "2.0.0-beta.3" + "@docusaurus/theme-search-algolia" "2.0.0-beta.3" + +"@docusaurus/react-loadable@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.0.tgz#6d6f0c8fd9a434b62a1ab1f8645ee7bde5a9ec21" + integrity sha512-Ld/kwUE6yATIOTLq3JCsWiTa/drisajwKqBQ2Rw6IcT+sFsKfYek8F2jSH8f68AT73xX97UehduZeCSlnuCBIg== + dependencies: + prop-types "^15.6.2" + +"@docusaurus/theme-classic@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.3.tgz#a84241ad6dc22aec9a33136e9d592034aea4d865" + integrity sha512-d2I4r9FQ67hCTGq+fkz0tDNvpCLxm/HAtjuu+XsZkX6Snh50XpWYfwOD4w8oFbbup5Imli2q7Z8Q2+9izphizw== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/plugin-content-blog" "2.0.0-beta.3" + "@docusaurus/plugin-content-docs" "2.0.0-beta.3" + "@docusaurus/plugin-content-pages" "2.0.0-beta.3" + "@docusaurus/theme-common" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-common" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + "@mdx-js/mdx" "^1.6.21" + "@mdx-js/react" "^1.6.21" + chalk "^4.1.1" + clsx "^1.1.1" + copy-text-to-clipboard "^3.0.1" + fs-extra "^10.0.0" + globby "^11.0.2" + infima "0.2.0-alpha.26" + lodash "^4.17.20" + parse-numeric-range "^1.2.0" + postcss "^8.2.15" + prism-react-renderer "^1.2.1" + prismjs "^1.23.0" + prop-types "^15.7.2" + react-router-dom "^5.2.0" + rtlcss "^3.1.2" + +"@docusaurus/theme-common@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.3.tgz#8dbe05f3436637b099aeada5c75a6f7c9bc163a5" + integrity sha512-XuiqpfQyOWGniN7d8uMfUQ3OmCc70u+O0ObPUONj7gFglCzwu33Izx05gNrV9ekhnpQ1pkPcvGU7Soe9Hc5i6g== + dependencies: + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/plugin-content-blog" "2.0.0-beta.3" + "@docusaurus/plugin-content-docs" "2.0.0-beta.3" + "@docusaurus/plugin-content-pages" "2.0.0-beta.3" + "@docusaurus/types" "2.0.0-beta.3" + tslib "^2.1.0" + +"@docusaurus/theme-search-algolia@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.3.tgz#9ca8142fe4686d262d546c9ba309d02d9d4d59a9" + integrity sha512-fxWxcXGmqjwuA7zYRAbwqSANx3PVVjYUehV9SI28u5qq8U2tSYflhd1nGogM6guiV+Er6u8gwO91PL6wg3/vBA== + dependencies: + "@docsearch/react" "^3.0.0-alpha.36" + "@docusaurus/core" "2.0.0-beta.3" + "@docusaurus/theme-common" "2.0.0-beta.3" + "@docusaurus/utils" "2.0.0-beta.3" + "@docusaurus/utils-validation" "2.0.0-beta.3" + algoliasearch "^4.8.4" + algoliasearch-helper "^3.3.4" + clsx "^1.1.1" + eta "^1.12.1" + lodash "^4.17.20" + +"@docusaurus/types@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.3.tgz#042838d3a1ce0aa6f0df1b87180da0d503268d9b" + integrity sha512-ivQ6L1ahju06ldTvFsZLQxcN6DP32iIB7DscxWVRqP0eyuyX2xAy+jrASqih3lB8lyw0JJaaDEeVE5fjroAQ/Q== + dependencies: + commander "^5.1.0" + joi "^17.4.0" + querystring "0.2.0" + webpack "^5.40.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.3.tgz#85fc7f7572d0f55e62b8f0baeb91967bf7d699e0" + integrity sha512-KJgDN4G2MzJcHy+OR2e/xgEwRy+vX26pzwtjPkRjNf24CPa0BwFbRmR5apbltCgTB10vT6xroStc8Quv/286Cg== + dependencies: + "@docusaurus/types" "2.0.0-beta.3" + tslib "^2.2.0" + +"@docusaurus/utils-validation@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.3.tgz#24e8187ff853dfec111faaef75af432274bd8773" + integrity sha512-jGX78NNrxDZFgDjLaa6wuJ/eKDoHdZFG2CVX3uCaIGe1x8eTMG2/e/39GzbZl+W7VHYpW0bzdf/5dFhaKLfQbQ== + dependencies: + "@docusaurus/utils" "2.0.0-beta.3" + chalk "^4.1.1" + joi "^17.4.0" + tslib "^2.1.0" + +"@docusaurus/utils@2.0.0-beta.3": + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.3.tgz#81bdf02c5128f3d307d56925cbc398dbf3600e50" + integrity sha512-DApc6xcb3CvvsBCfRU6Zk3KoZa4mZfCJA4XRv5zhlhaSb0GFuAo7KQ353RUu6d0eYYylY3GGRABXkxRE1SEClA== + dependencies: + "@docusaurus/types" "2.0.0-beta.3" + "@types/github-slugger" "^1.3.0" + chalk "^4.1.1" + escape-string-regexp "^4.0.0" + fs-extra "^10.0.0" + gray-matter "^4.0.3" + lodash "^4.17.20" + resolve-pathname "^3.0.0" + tslib "^2.2.0" + +"@hapi/hoek@^9.0.0": + version "9.2.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" + integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@iconify-icons/codicon@^1.1.15": + version "1.1.18" + resolved "https://registry.yarnpkg.com/@iconify-icons/codicon/-/codicon-1.1.18.tgz#41e2987bd68da234044b6b298e6083a11baac67a" + integrity sha512-QmtVWW7gD5JvVwSmgQdHOnPKyeDWZnw5RJVxiXKYpUH9EPb1mer4BhATmvgGoc7+urU9CeaPw70ktv/Lp5IZzA== + +"@iconify-icons/mdi@^1.1.15": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@iconify-icons/mdi/-/mdi-1.1.16.tgz#ff35b9559fcc69b0123b730b5fbddb01a4719cde" + integrity sha512-sWxzdsLpiuuf5bc+1Iu6GL+Mr/pQKK990authP5qil9NjFTxjnQFRXBYm0pss7ywx1O5lp4hNisyZt7WX1GXLw== + +"@iconify-icons/octicon@^1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@iconify-icons/octicon/-/octicon-1.1.8.tgz#bf95a832026732619aad074aae171d1759c2a753" + integrity sha512-JMzXmm7pU3F8zGlD5OG7LAKs3rv0Wc/3BsbEv32mgrsY780n2bqA4A06BkarhFyaYpg3FVa49S0yAwo2mX78pw== + +"@iconify/react@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@iconify/react/-/react-1.1.4.tgz#c778eddbaf196e55705d0bedff00d039dc1de8d3" + integrity sha512-oxq8IMOq8q3nKGiDHbQPC8FcFuBsKve68JWBo140d5LRnj0bv5TB/FE/y01ZSvEZ7PlI2HIrnb2qivPN8kTDgw== + +"@mdx-js/mdx@^1.6.21": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.21": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.15": + version "1.0.0-next.15" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.15.tgz#6a9d143f7f4f49db2d782f9e1c8839a29b43ae23" + integrity sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA== + +"@sideway/address@^4.1.0": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" + integrity sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.1.tgz#0c8852146441aaa683693deaa5aee2f991d94841" + integrity sha512-PSv4RIVO1Y3kvHxjvqeVisk3E9XFoO04uwYBDWe217MFqKspplYswTuKLiJu0aLORQWzuQjfVsSlLPojwfYsLw== + dependencies: + bluebird "^3.7.1" + cheerio "^0.22.0" + eval "^0.1.4" + url "^0.11.0" + webpack-sources "^1.4.3" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" + integrity sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow== + +"@types/eslint-scope@^3.7.0": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" + integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.0.tgz#7e41f2481d301c68e14f483fe10b017753ce8d5a" + integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.50": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/github-slugger@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/github-slugger/-/github-slugger-1.3.0.tgz#16ab393b30d8ae2a111ac748a015ac05a1fc5524" + integrity sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g== + +"@types/glob@^7.1.1": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/hast@^2.0.0": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.2.tgz#236201acca9e2695e42f713d7dd4f151dc2982e4" + integrity sha512-Op5W7jYgZI7AWKY5wQ0/QNMzQM7dGQPyW1rXKNiymVCy5iTfdPuGu4HhYNOM2sIv8gUfIuIdcYlXmAepwaowow== + dependencies: + "@types/unist" "*" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" + integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== + +"@types/mdast@^3.0.0": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.7.tgz#cba63d0cc11eb1605cea5c0ad76e02684394166b" + integrity sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg== + dependencies: + "@types/unist" "*" + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*": + version "16.4.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.0.tgz#2c219eaa3b8d1e4d04f4dd6e40bc68c7467d5272" + integrity sha512-HrJuE7Mlqcjj+00JqMWpZ3tY8w7EUd+S0U3L1+PQSWiXZbOgyQDvi+ogoUxaHApPJq5diKxYBQwA3iIlNcPqOg== + +"@types/node@^15.0.1": + version "15.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.2.tgz#7af8ab20156586f076f4760bc1b3c5ddfffd1ff2" + integrity sha512-dvMUE/m2LbXPwlvVuzCyslTEtQ2ZwuuFClDrOQ6mp2CenCg971719PTILZ4I6bTP27xfFFc+o7x2TkLuun/MPw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/sax@^1.2.1": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.3.tgz#b630ac1403ebd7812e0bf9a10de9bf5077afb348" + integrity sha512-+QSw6Tqvs/KQpZX8DvIl3hZSjNFLW/OqE5nlyHXtTwODaJvioN2rOWpBNEWZp2HZUFhOh+VohmJku/WxEXU2XA== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-walk@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" + integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== + +acorn@^8.0.4, acorn@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +algoliasearch-helper@^3.3.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.5.4.tgz#21b20ab8a258daa9dde9aef2daa5e8994cd66077" + integrity sha512-t+FLhXYnPZiwjYe5ExyN962HQY8mi3KwRju3Lyf6OBgtRdx30d6mqvtClXf5NeBihH45Xzj6t4Y5YyvAI432XA== + dependencies: + events "^1.1.1" + +algoliasearch@^4.0.0, algoliasearch@^4.8.4: + version "4.10.3" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.10.3.tgz#22df4bb02fbf13a765b18b85df8745ee9c04f00a" + integrity sha512-OLY0AWlPKGLbSaw14ivMB7BT5fPdp8VdzY4L8FtzZnqmLKsyes24cltGlf7/X96ACkYEcT390SReCDt/9SUIRg== + dependencies: + "@algolia/cache-browser-local-storage" "4.10.3" + "@algolia/cache-common" "4.10.3" + "@algolia/cache-in-memory" "4.10.3" + "@algolia/client-account" "4.10.3" + "@algolia/client-analytics" "4.10.3" + "@algolia/client-common" "4.10.3" + "@algolia/client-personalization" "4.10.3" + "@algolia/client-search" "4.10.3" + "@algolia/logger-common" "4.10.3" + "@algolia/logger-console" "4.10.3" + "@algolia/requester-browser-xhr" "4.10.3" + "@algolia/requester-common" "4.10.3" + "@algolia/requester-node-http" "4.10.3" + "@algolia/transporter" "4.10.3" + +alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.0.tgz#a20e2bb5710e82950a516b3f933fee5ed478be90" + integrity sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^10.2.0, autoprefixer@^10.2.5: + version "10.3.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.3.1.tgz#954214821d3aa06692406c6a0a9e9d401eafbed2" + integrity sha512-L8AmtKzdiRyYg7BUXJTzigmhbQRCXFKz6SA1Lqo0+AR2FBbQ4aTAPFSDlOutnFkjhiz8my4agGXog1xlMjPJ6A== + dependencies: + browserslist "^4.16.6" + caniuse-lite "^1.0.30001243" + colorette "^1.2.2" + fraction.js "^4.1.1" + normalize-range "^0.1.2" + postcss-value-parser "^4.1.0" + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +babel-loader@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" + integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.14.0" + +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.7.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boxen@^5.0.0, boxen@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" + integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.0" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@4.14.2: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001243: + version "1.0.30001246" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001246.tgz#fe17d9919f87124d6bb416ef7b325356d69dc76c" + integrity sha512-Tc+ff0Co/nFNbLOrziBXmMVtpt9S2c2Y+Z9Nk9Khj09J+0zR9ejvIW5qkZAErCbOrVODCx/MN+GpB5FNBs5GFA== + +ccount@^1.0.0, ccount@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" + integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-css@^5.1.2: + version "5.1.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.1.3.tgz#42348778c3acb0083946ba340896802be5517ee2" + integrity sha512-qGXzUCDpLwAlPx0kYeU4QXjzQIcIYZbJjD4FNm7NnSjoP0hYMVZhHOpUYJ6AwfkMX2cceLRq54MeCgHy/va1cA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.3.0.tgz#72f27e99bac4d861e47f69b5ed1f54c9d8d58775" + integrity sha512-0NaS8lq6xZ9Zb+cWRwQf6ql1Z/7HMIAMzPrM2pgfAqskGAhUksBcaau6W8sL+6OK0xIujcSo1TJfdctG7K85Qg== + +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +consola@^2.15.0: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-text-to-clipboard@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" + integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== + +copy-webpack-plugin@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz#b71d21991599f61a4ee00ba79087b8ba279bbb59" + integrity sha512-14gHKKdYIxF84jCEgPgYXCPpldbwpxxLbCmA7LReY7gvbaT555DgeBWBgBZM116tv/fO6RRJrsivBqRyRlukhw== + dependencies: + fast-glob "^3.2.5" + glob-parent "^6.0.0" + globby "^11.0.3" + normalize-path "^3.0.0" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.14.0, core-js-compat@^3.15.0: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" + integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== + dependencies: + browserslist "^4.16.6" + semver "7.0.0" + +core-js-pure@^3.15.0: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" + integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== + +core-js@^3.9.1: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" + integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-fetch@^3.0.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" + integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== + dependencies: + node-fetch "2.6.1" + +cross-spawn@7.0.3, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-color-names@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" + integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== + +css-declaration-sorter@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz#9dfd8ea0df4cc7846827876fafb52314890c21a9" + integrity sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw== + dependencies: + timsort "^0.3.0" + +css-loader@^5.1.1: + version "5.2.7" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" + integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== + dependencies: + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.15" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.2.tgz#8fadbdf10128cb40227bff275a4bb47412534245" + integrity sha512-B3I5e17RwvKPJwsxjjWcdgpU/zqylzK1bPVghcmpFHRL48DXiBgrtqz1BJsn68+t/zzaLp9kYAaEDvQ7GyanFQ== + dependencies: + cssnano "^5.0.6" + jest-worker "^27.0.2" + p-limit "^3.0.2" + postcss "^8.3.5" + schema-utils "^3.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.1.3.tgz#a2c6cf2fe39108b81e88810e3c399d1c0fe030ea" + integrity sha512-pS4+Q2Hoo/FevZs2JqA2BG8Vn5o5VeXgj+z6kGndKTq3RFYvlKeJ1ZPnLXo9zyYKwmSqWW0rWqtGxxmigIte0Q== + dependencies: + autoprefixer "^10.2.0" + cssnano-preset-default "^5.1.3" + postcss-discard-unused "^5.0.1" + postcss-merge-idents "^5.0.1" + postcss-reduce-idents "^5.0.1" + postcss-zindex "^5.0.1" + +cssnano-preset-default@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz#caa54183a8c8df03124a9e23f374ab89df5a9a99" + integrity sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ== + dependencies: + css-declaration-sorter "^6.0.3" + cssnano-utils "^2.0.1" + postcss-calc "^8.0.0" + postcss-colormin "^5.2.0" + postcss-convert-values "^5.0.1" + postcss-discard-comments "^5.0.1" + postcss-discard-duplicates "^5.0.1" + postcss-discard-empty "^5.0.1" + postcss-discard-overridden "^5.0.1" + postcss-merge-longhand "^5.0.2" + postcss-merge-rules "^5.0.2" + postcss-minify-font-values "^5.0.1" + postcss-minify-gradients "^5.0.1" + postcss-minify-params "^5.0.1" + postcss-minify-selectors "^5.1.0" + postcss-normalize-charset "^5.0.1" + postcss-normalize-display-values "^5.0.1" + postcss-normalize-positions "^5.0.1" + postcss-normalize-repeat-style "^5.0.1" + postcss-normalize-string "^5.0.1" + postcss-normalize-timing-functions "^5.0.1" + postcss-normalize-unicode "^5.0.1" + postcss-normalize-url "^5.0.2" + postcss-normalize-whitespace "^5.0.1" + postcss-ordered-values "^5.0.2" + postcss-reduce-initial "^5.0.1" + postcss-reduce-transforms "^5.0.1" + postcss-svgo "^5.0.2" + postcss-unique-selectors "^5.0.1" + +cssnano-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-2.0.1.tgz#8660aa2b37ed869d2e2f22918196a9a8b6498ce2" + integrity sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ== + +cssnano@^5.0.4, cssnano@^5.0.6: + version "5.0.7" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.7.tgz#e81894bdf31aa01a0ca3d1d0eee47be18f7f3012" + integrity sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw== + dependencies: + cssnano-preset-default "^5.1.3" + is-resolvable "^1.1.0" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.0.2, csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +docusaurus-plugin-sass@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.1.tgz#673c6b6ac00b581e8fb0baab22f2b3766735aafc" + integrity sha512-cRugbRWnKLjFPQTo1k2cyn/AANYkXAPHv+DaLs7bkOfOofEgTSrMdpNidt3oZ0ltQcjUUbvmSRRjH9R1ifdRMA== + dependencies: + sass-loader "^10.1.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@^0.1.1, duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: + version "1.3.783" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.783.tgz#62aefa771502ce5178bb856c3fda8d9b2cffc234" + integrity sha512-296P577qmXQHgLa3zAYdB9zOhqzt7lckmbLAJO78lIXGBhYA5NVI2WRwyYJPZ614eJxd0Bew7RA72vFOFXyogA== + +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.8.0: + version "5.8.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz#15ddc779345cbb73e97c611cd00c01c1e7bf4d8b" + integrity sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-module-lexer@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.7.1.tgz#c2c8e0f46f2df06274cdaf0dd3f3b33e0a0b267d" + integrity sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.0.2, escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^1.12.1: + version "1.12.3" + resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1" + integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eval@^0.1.4: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.6.tgz#9620d7d8c85515e97e6b47c5814f46ae381cb3cc" + integrity sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ== + dependencies: + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1, fast-glob@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.0.tgz#0907067fb3f57a78f45d95f1eacffcacd623c165" + integrity sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg== + dependencies: + cross-fetch "^3.0.4" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" + integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.1.tgz#7843502b02841d4aaa534af0b373034a1f75ee5c" + integrity sha512-emk4RCvJ8RzNP2lNpphKnG7r18q8elDYNAPx7xn+bDeOIo9FFfxEfIQ2y6YbQNmnsGD3nH1noxtLE64Puz1bRQ== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.0" + +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fork-ts-checker-webpack-plugin@4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" + integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +github-slugger@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.1.tgz#42054f685eb6a44e7a7d189a96efa40a54971aa7" + integrity sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^11.0.1, globby@^11.0.2, globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" + integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== + dependencies: + ccount "^1.0.3" + hastscript "^5.0.0" + property-information "^5.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.2.tgz#7b04bf80b1f6fe84a6d3f66c8b79d64739321b08" + integrity sha512-HvB33boVNCz2lTyBsSiMffsJ+m0YLIQ+pskblXgN9fnjS1BgEcuAfdInfXfGrkdXV406k9FiDi86eVCDBgJOyQ== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + html-minifier-terser "^5.0.1" + lodash "^4.17.21" + pretty-error "^3.0.4" + tapable "^2.0.0" + +htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +immer@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" + integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + +import-fresh@^3.2.1, import-fresh@^3.2.2, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.26: + version "0.2.0-alpha.26" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.26.tgz#8582d40ef01a09dbbde8f0e574f8c61d6bc0992b" + integrity sha512-0/Dt+89mf8xW+9/hKGmynK+WOAsiy0QydVJL0qie6WK57yGIQv+SjJrhMybKndnmkZBQ+Vlt0tWPnTakx8X2Qw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@2.1.0, is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +jest-worker@^27.0.2: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed" + integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.3.0, joi@^17.4.0: + version "17.4.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.1.tgz#15d2f23c8cbe4d1baded2dd190c58f8dbe11cca0" + integrity sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.0" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.3.tgz#68f3005e921dafbd2a2afb48379986aa6d2579fd" + integrity sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg== + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.4.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + dependencies: + mime-db "1.48.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.3.1, mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" + integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +module-alias@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" + integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-releases@^1.1.61, node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.10.3: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.2.0.tgz#aa70b00f29624ed13e9f943e9461b306e386b0fa" + integrity sha512-1q2tXpAOplPxcl8vrIGPWz1dJxxfmdRkCFcpxxMBerDnGuuHalOWF/xj9L8Nn5XoTUoB/6F0CeQBp2fMgkOYFg== + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@1.0.2, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.0.0.tgz#a05b87aacd132740a5db09462a3612453e5df90a" + integrity sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g== + dependencies: + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.2.0.tgz#2b620b88c0ff19683f3349f4cf9e24ebdafb2c88" + integrity sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-convert-values@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz#4ec19d6016534e30e3102fdf414e753398645232" + integrity sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-discard-comments@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz#9eae4b747cf760d31f2447c27f0619d5718901fe" + integrity sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg== + +postcss-discard-duplicates@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz#68f7cc6458fe6bab2e46c9f55ae52869f680e66d" + integrity sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA== + +postcss-discard-empty@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz#ee136c39e27d5d2ed4da0ee5ed02bc8a9f8bf6d8" + integrity sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw== + +postcss-discard-overridden@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz#454b41f707300b98109a75005ca4ab0ff2743ac6" + integrity sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q== + +postcss-discard-unused@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.0.1.tgz#63e35a74a154912f93d4e75a1e6ff3cc146f934b" + integrity sha512-tD6xR/xyZTwfhKYRw0ylfCY8wbfhrjpKAMnDKRTLMy2fNW5hl0hoV6ap5vo2JdCkuHkP3CHw72beO4Y8pzFdww== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.3.0.tgz#1657f869e48d4fdb018a40771c235e499ee26244" + integrity sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.4" + semver "^7.3.4" + +postcss-merge-idents@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.0.1.tgz#6b5856fc28f2571f28ecce49effb9b0e64be9437" + integrity sha512-xu8ueVU0RszbI2gKkxR6mluupsOSSLvt8q4gA2fcKFkA+x6SlH3cb4cFHpDvcRCNFbUmCR/VUub+Y6zPOjPx+Q== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-merge-longhand@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz#277ada51d9a7958e8ef8cf263103c9384b322a41" + integrity sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw== + dependencies: + css-color-names "^1.0.1" + postcss-value-parser "^4.1.0" + stylehacks "^5.0.1" + +postcss-merge-rules@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz#d6e4d65018badbdb7dcc789c4f39b941305d410a" + integrity sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^2.0.1" + postcss-selector-parser "^6.0.5" + vendors "^1.0.3" + +postcss-minify-font-values@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz#a90cefbfdaa075bd3dbaa1b33588bb4dc268addf" + integrity sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-minify-gradients@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz#2dc79fd1a1afcb72a9e727bc549ce860f93565d2" + integrity sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g== + dependencies: + cssnano-utils "^2.0.1" + is-color-stop "^1.1.0" + postcss-value-parser "^4.1.0" + +postcss-minify-params@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz#371153ba164b9d8562842fdcd929c98abd9e5b6c" + integrity sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw== + dependencies: + alphanum-sort "^1.0.2" + browserslist "^4.16.0" + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz#4385c845d3979ff160291774523ffa54eafd5a54" + integrity sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og== + dependencies: + alphanum-sort "^1.0.2" + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz#121559d1bebc55ac8d24af37f67bd4da9efd91d0" + integrity sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg== + +postcss-normalize-display-values@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz#62650b965981a955dffee83363453db82f6ad1fd" + integrity sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-positions@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz#868f6af1795fdfa86fbbe960dceb47e5f9492fe5" + integrity sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-normalize-repeat-style@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz#cbc0de1383b57f5bb61ddd6a84653b5e8665b2b5" + integrity sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-string@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz#d9eafaa4df78c7a3b973ae346ef0e47c554985b0" + integrity sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-normalize-timing-functions@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz#8ee41103b9130429c6cbba736932b75c5e2cb08c" + integrity sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-unicode@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz#82d672d648a411814aa5bf3ae565379ccd9f5e37" + integrity sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA== + dependencies: + browserslist "^4.16.0" + postcss-value-parser "^4.1.0" + +postcss-normalize-url@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz#ddcdfb7cede1270740cf3e4dfc6008bd96abc763" + integrity sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ== + dependencies: + is-absolute-url "^3.0.3" + normalize-url "^6.0.1" + postcss-value-parser "^4.1.0" + +postcss-normalize-whitespace@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz#b0b40b5bcac83585ff07ead2daf2dcfbeeef8e9a" + integrity sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-ordered-values@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz#1f351426977be00e0f765b3164ad753dac8ed044" + integrity sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-reduce-idents@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.0.1.tgz#99b49ce8ee6f9c179447671cc9693e198e877bb7" + integrity sha512-6Rw8iIVFbqtaZExgWK1rpVgP7DPFRPh0DDFZxJ/ADNqPiH10sPCoq5tgo6kLiTyfh9sxjKYjXdc8udLEcPOezg== + dependencies: + postcss-value-parser "^4.1.0" + +postcss-reduce-initial@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz#9d6369865b0f6f6f6b165a0ef5dc1a4856c7e946" + integrity sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw== + dependencies: + browserslist "^4.16.0" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz#93c12f6a159474aa711d5269923e2383cedcf640" + integrity sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA== + dependencies: + cssnano-utils "^2.0.1" + postcss-value-parser "^4.1.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^3.10.11: + version "3.11.12" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-3.11.12.tgz#bfc449fadedfe2765ca4566c30b24694635ad182" + integrity sha512-PNhEOWR/btZ0bNNRqqdW4TWxBPQ1mu2I6/Zpco80vBUDSyEjtduUAorY0Vm68rvDlGea3+sgEnQ36iQ1A/gG8Q== + dependencies: + sort-css-media-queries "1.5.4" + +postcss-svgo@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.2.tgz#bc73c4ea4c5a80fbd4b45e29042c34ceffb9257f" + integrity sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A== + dependencies: + postcss-value-parser "^4.1.0" + svgo "^2.3.0" + +postcss-unique-selectors@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz#3be5c1d7363352eff838bd62b0b07a0abad43bfc" + integrity sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w== + dependencies: + alphanum-sort "^1.0.2" + postcss-selector-parser "^6.0.5" + uniqs "^2.0.0" + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-zindex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.0.1.tgz#c585724beb69d356af8c7e68847b28d6298ece03" + integrity sha512-nwgtJJys+XmmSGoYCcgkf/VczP8Mp/0OfSv3v0+fw0uABY4yxw+eFs0Xp9nAZHIKnS5j+e9ywQ+RD+ONyvl5pA== + +postcss@^8.2.15, postcss@^8.2.4, postcss@^8.3.5: + version "8.3.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" + integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map-js "^0.6.2" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +pretty-error@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-3.0.4.tgz#94b1d54f76c1ed95b9c604b9de2194838e5b574e" + integrity sha512-ytLFLfv1So4AO1UkoBF6GXQgJRaKbiSiGFICaOPNwQ3CMvBvXpLRubeQWyPGnsbV/t9ml9qto6IeCsho0aEvwQ== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.6" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.2.1.tgz#392460acf63540960e5e3caa699d851264e99b89" + integrity sha512-w23ch4f75V1Tnz8DajsYKvY5lF7H1+WvzvLUcF0paFxkTHSp42RS0H5CttdN2Q8RR3DRGZ9v5xD/h3n8C8kGmg== + +prismjs@^1.23.0: + version "1.24.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036" + integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prompts@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^11.0.1: + version "11.0.4" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" + integrity sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + dependencies: + "@babel/code-frame" "7.10.4" + address "1.1.2" + browserslist "4.14.2" + chalk "2.4.2" + cross-spawn "7.0.3" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.1.0" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "4.1.6" + global-modules "2.0.0" + globby "11.0.1" + gzip-size "5.1.1" + immer "8.0.1" + is-root "2.1.0" + loader-utils "2.0.0" + open "^7.0.2" + pkg-up "3.1.0" + prompts "2.4.0" + react-error-overlay "^6.0.9" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dom@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.9: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + +react-fast-compare@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-helmet@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" + integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== + dependencies: + object-assign "^4.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.1.1" + react-side-effect "^2.1.0" + +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-loadable@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" + integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg== + dependencies: + prop-types "^15.5.0" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0, react-router@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-side-effect@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" + integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== + +react-textarea-autosize@^8.3.2: + version "8.3.3" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" + integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.0.0" + use-latest "^1.0.0" + +react@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1, readable-stream@^2.0.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.3.0.tgz#d13e74431589a4a9038669f24d5acbc08bbb015d" + integrity sha512-RJ8J5O6UvrclfZpcPSPuKusrdRfoY7uXXoYOOdeswZNtSkQaewT3919yz6RyloDBR+iwcUyz5zGOUjhgvfuv3g== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + +rehype-parse@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" + integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== + dependencies: + hast-util-from-parse5 "^5.0.0" + parse5 "^5.0.0" + xtend "^4.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remark-admonitions@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" + integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== + dependencies: + rehype-parse "^6.0.2" + unified "^8.4.2" + unist-util-visit "^2.0.1" + +remark-emoji@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rtl-detect@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.1.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.3.0.tgz#fa9d29b071a863fe959704da6a93de3076aeeca4" + integrity sha512-XZ2KEatH2nU5yPlts1Wu8SGIuZ3ndN025HQX5MqtUCUiOn5WkCDbcpJ2VJWjpuFmM2cUTQ1xtH21fhMCSseI5A== + dependencies: + chalk "^4.1.0" + find-up "^5.0.0" + mkdirp "^1.0.4" + postcss "^8.2.4" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^6.6.3: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@^10.1.1: + version "10.2.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" + integrity sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sass@^1.35.2: + version "1.35.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.2.tgz#b732314fcdaf7ef8d0f1698698adc378043cb821" + integrity sha512-jhO5KAR+AMxCEwIH3v+4zbB2WB0z67V1X0jbapfVwQQdjHZUGUyukpnoM6+iCMfsIUC016w9OPKQ5jrNOS9uXw== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.8: + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + dependencies: + node-forge "^0.10.0" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" + integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.0.4" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sirv@^1.0.7: + version "1.0.12" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.12.tgz#d816c882b35489b3c63290e2f455ae3eccd5f652" + integrity sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg== + dependencies: + "@polka/url" "^1.0.0-next.15" + mime "^2.3.1" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.0.0.tgz#022bef4df8cba42e38e1fe77039f234cab0372b6" + integrity sha512-Ud0jrRQO2k7fEtPAM+cQkBKoMvxQyPKNXKDLn8tRVHxRCsdDQ2JZvw+aZ5IRYYQVAV9iGxEar6boTwZzev+x3g== + dependencies: + "@types/node" "^15.0.1" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +sort-css-media-queries@1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-1.5.4.tgz#24182b12002a13d01ba943ddf74f5098d7c244ce" + integrity sha512-YP5W/h4Sid/YP7Lp87ejJ5jP13/Mtqt2vx33XyhO+IAugKlufRPbOrPlIiEUuxmpNBSBd3EeeQpFhdu3RfI2Ag== + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +std-env@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.3.0.tgz#66d4a4a4d5224242ed8e43f5d65cfa9095216eee" + integrity sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw== + dependencies: + ci-info "^3.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@6.0.0, strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.1.tgz#323ec554198520986806388c7fdaebc38d2c06fb" + integrity sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA== + dependencies: + browserslist "^4.16.0" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.3.1.tgz#603a69ce50311c0e36791528f549644ec1b3f4bc" + integrity sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw== + dependencies: + "@trysound/sax" "0.1.1" + chalk "^4.1.0" + commander "^7.1.0" + css-select "^4.1.3" + css-tree "^1.1.2" + csso "^4.2.0" + stable "^0.1.8" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + +terser-webpack-plugin@^5.1.3: + version "5.1.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz#c369cf8a47aa9922bd0d8a94fe3d3da11a7678a1" + integrity sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA== + dependencies: + jest-worker "^27.0.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + terser "^5.7.0" + +terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784" + integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-invariant@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +ts-essentials@^2.0.3: + version "2.0.12" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ua-parser-js@^0.7.18: + version "0.7.28" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" + integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" + integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.2, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use-composed-ref@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.1.0.tgz#9220e4e94a97b7b02d7d27eaeab0b37034438bbc" + integrity sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg== + dependencies: + ts-essentials "^2.0.3" + +use-isomorphic-layout-effect@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" + integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== + +use-latest@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" + integrity sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw== + dependencies: + use-isomorphic-layout-effect "^1.0.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +wait-on@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.3.0.tgz#584e17d4b3fe7b46ac2b9f8e5e102c005c2776c7" + integrity sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg== + dependencies: + axios "^0.21.1" + joi "^17.3.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^6.6.3" + +watchpack@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" + integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0, web-namespaces@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webpack-bundle-analyzer@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.2.tgz#39898cf6200178240910d629705f0f3493f7d666" + integrity sha512-PIagMYhlEzFfhMYOzs5gFT55DkUdkyrJi/SxJp8EF3YMWhS+T9vvs2EoTetpk5qb6VsCq02eXTlRDOydRhDFAQ== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^6.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^1.1.0, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@^5.40.0: + version "5.45.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.45.1.tgz#d78dcbeda18a872dc62b0455d3ed3dcfd1c886bb" + integrity sha512-68VT2ZgG9EHs6h6UxfV2SEYewA9BA3SOLSnC2NEbJJiEwbAiueDL033R1xX0jzjmXvMh0oSeKnKgbO2bDXIEyQ== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.50" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.4.1" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.8.0" + es-module-lexer "^0.7.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.2.0" + webpack-sources "^2.3.0" + +webpackbar@^5.0.0-3: + version "5.0.0-3" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.0-3.tgz#f4f96c8fb13001b2bb1348252db4c980ab93aaac" + integrity sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.1.0" + consola "^2.15.0" + figures "^3.2.0" + pretty-time "^1.1.0" + std-env "^2.2.1" + text-table "^0.2.0" + wrap-ansi "^7.0.0" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +ws@^7.3.1: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 97eef97e365aac4f54a5b1f2786926d2a244e539 Mon Sep 17 00:00:00 2001 From: cainmagi Date: Fri, 23 Jul 2021 01:10:36 -0500 Subject: [PATCH 02/33] 7/23/2021 - 2 Fix typos. --- docs/introduction.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 08c039a..3444cd7 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -40,7 +40,7 @@ License of this project: Guidelines for the contributions:

- + Contributions

@@ -48,7 +48,7 @@ Guidelines for the contributions: Contributor covenant code of conduct:

- + Code of Conduct

From 9610d9ecf752ae67ecced7b7b248371047bd5006 Mon Sep 17 00:00:00 2001 From: cainmagi Date: Fri, 23 Jul 2021 01:16:43 -0500 Subject: [PATCH 03/33] 7/23/2021 - 3 Fix a typo. --- docs/introduction.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 3444cd7..d45141c 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -33,7 +33,7 @@ License of this project:

- MIT License + GPL v3 License

From 50f29a094cb8cac28606c2d7de6faea79afa0178 Mon Sep 17 00:00:00 2001 From: cainmagi Date: Fri, 23 Jul 2021 01:24:47 -0500 Subject: [PATCH 04/33] 7/23/2021 - 4 Fix a typo in the docs. --- docs/troubleshooting/installation.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/troubleshooting/installation.mdx b/docs/troubleshooting/installation.mdx index 5dec3ec..9237338 100644 --- a/docs/troubleshooting/installation.mdx +++ b/docs/troubleshooting/installation.mdx @@ -8,6 +8,7 @@ description: The troubleshooting for installation. import DarkButton from '@site/src/components/DarkButton'; import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; import octInfo16 from '@iconify-icons/octicon/info-16'; import mdiDownloadBox from '@iconify-icons/mdi/download-box'; From a0823b9ca1325dc4705365743699c48c20e1a73f Mon Sep 17 00:00:00 2001 From: cainmagi Date: Fri, 23 Jul 2021 14:02:00 -0500 Subject: [PATCH 05/33] 7/23/2021 - 5 Fix more typos. --- docs/guides/examples/client.mdx | 8 +++-- docs/guides/examples/decoding.mdx | 6 ++-- docs/guides/examples/server.mdx | 26 +++++++-------- docs/guides/examples/transcoding.mdx | 8 +++-- docs/guides/install/pypi.mdx | 2 +- docs/troubleshooting/installation.mdx | 46 +++++++++++++-------------- docs/troubleshooting/qna.mdx | 16 ++++++++-- docs/troubleshooting/running.mdx | 18 +++++------ 8 files changed, 74 insertions(+), 56 deletions(-) diff --git a/docs/guides/examples/client.mdx b/docs/guides/examples/client.mdx index a9b213f..ff31941 100644 --- a/docs/guides/examples/client.mdx +++ b/docs/guides/examples/client.mdx @@ -15,17 +15,17 @@ import ClientSvg from '/img/examples/client.svg'; ## Introduction -The following figure show the theory of `mpegCoder.MpegClient()`. Assuming that we have a video server from the remote side, the real-time stream is pushed continuously. Even we do not read the online stream, the data flow would not wait for reading. Therefore, we design the following two-thread workflow. +The following figure show the theory of `mpegCoder.MpegClient`. Assuming that we have a video server from the remote side, the real-time stream is pushed continuously. Even we do not read the online stream, the data flow would not wait for reading. Therefore, we design the following two-thread workflow. -When connecting to the remote server, `mpegCoder.MpegClient()` would create a sub-thread ("*writer*" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two pointer maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting pointer is kept stepping each time a new frame is received. +When connecting to the remote server, `mpegCoder.MpegClient` would create a sub-thread ("*writer*" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two pointer maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting pointer is kept stepping each time a new frame is received. The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading pointer, and read several frames from the buffer. After the reading results are collected, the lock would be released. A locked position would not be updated. In other words, during the reading events, if the writting pointer moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10. ## Codes -To test the following codes, we recommend users to use VLC or ffmpeg to push a remote stream, because the stream pushing without encoding is not supported by `mpegCoder` currently. Using VLC or ffmpeg to serve the stream will occupy less system resources. +To test the following codes, we recommend users to use [VLC][link-vlc] or [FFMpeg][link-ffmpeg-stream] to push a remote stream, because the stream pushing without encoding is not supported by `mpegCoder` currently. Using VLC or FFMpeg to serve the stream will occupy less system resources. The following example codes would scale the remote frame to `480x360`, and resample the frame rate to 5 FPS. The reading size and the buffer size are 5 and 12 respectively. @@ -88,3 +88,5 @@ In addition, we provide another example. This example is a simple video stream p

[link-pyqt5]:https://www.riverbankcomputing.com/software/pyqt "PyQt5" +[link-vlc]:https://www.videolan.org/vlc/streaming.html "VLC used for streaming" +[link-ffmpeg-stream]:https://trac.ffmpeg.org/wiki/StreamingGuide "FFMpeg used for streaming" diff --git a/docs/guides/examples/decoding.mdx b/docs/guides/examples/decoding.mdx index 89ca382..bd8d8b6 100644 --- a/docs/guides/examples/decoding.mdx +++ b/docs/guides/examples/decoding.mdx @@ -8,7 +8,7 @@ description: Example codes for decoding a video. import IconExternalLink from '@theme/IconExternalLink'; -The following codes will demux, decode and iterate a video file. The video could be in any valid format. The `mpegCoder.MpegDecoder()` could recognize the video codec automatically. +The following codes will demux, decode and iterate a video file. The video could be in any valid format. The `mpegCoder.MpegDecoder` could recognize the video codec automatically. ```python {7,8} title="decoding.py" import mpegCoder @@ -24,7 +24,9 @@ d.clear() # Close the input video. In each while loop, a [Group of pictures (GOP)][wiki-gop] would be extracted. The GOP is a collection of video frames, and also the minimal data unit of the video compression algorithm. In `mpegCoder`, the GOP is arranged as a 4D [`np.ndarray`][link-ndarray]. The shape `(N, H, W, C)` means frame number, width, height and channel number respectively. Each frame has been converted to RGB (`uint8`) space. If the video reaches its end, the returned `gop` would be `None`. -Users could configure `MpegDecoder()` and scale the video frames. For example, the following codes would scale the frame to 720x486. +## Decoder rescaling + +Users could configure `MpegDecoder` and scale the video frames. For example, the following codes would scale the frame to 720x486. ```python {3} ... diff --git a/docs/guides/examples/server.mdx b/docs/guides/examples/server.mdx index 5530bd7..5a170bc 100644 --- a/docs/guides/examples/server.mdx +++ b/docs/guides/examples/server.mdx @@ -15,11 +15,11 @@ import ServerImg from '/img/examples/server.png'; ## Preparation -The `ffserver` has been removed after FFMpeg `3.4` (see the docs [here][link-ffserver]). In other words, FFMpeg could not work without a server program. The same case exists in our `mpegCoder`. Users need to start a server program first. The server program will keeps listening and waiting for any pushed streams. After that, `mpegCoder` would push the stream to the server by `mpegCoder.MpegServer()`. +The `ffserver` has been removed after FFMpeg `3.4` (see the docs [here][link-ffserver]). In other words, FFMpeg could not work without a server program. The same case exists in our `mpegCoder`. Users need to start a server program first. The server program will keeps listening and waiting for any pushed streams. After that, `mpegCoder` would push the stream to the server by `mpegCoder.MpegServer`. :::caution -It is also supported if you push a stream with `mpegCoder.MpegServer()` and receive the same stream with `mpegCoder.MpegClient()` in the same time. But we recommend users to run `MpegServer()` and `MpegClient()` on different devices, because the encoder implemented in `MpegServer()` may occupy a lot of system resources. +It is also supported if you push a stream with `mpegCoder.MpegServer` and receive the same stream with `mpegCoder.MpegClient` in the same time. But we recommend users to run `MpegServer` and `MpegClient` on different devices, because the encoder implemented in `MpegServer` may occupy a lot of system resources. ::: @@ -41,7 +41,7 @@ Take *RTSP Simple Server* on Windows as an example. We only need to launch the s When the server is listening, we could use the following addresses for the testings ```shell -rtsp://localhost:85554/ +rtsp://localhost:8554/ rtmp://localhost:1935/ ``` @@ -61,12 +61,12 @@ e = mpegCoder.MpegServer() e.setParameter(configDict=d.getParameter(), codecName='libx264', videoAddress='rtsp://localhost:8554/video') # inherit most of parameters from the decoder. opened = opened and e.FFmpegSetup() # Load the encoder. if opened: # If encoder is not loaded successfully, do not continue. - p = True + gop = True s = 0 - while p is not None: - p = d.ExtractGOP() # Extract current GOP. - if p is not None: - for i in p: # Select every frame. + while gop is not None: + gop = d.ExtractGOP() # Extract current GOP. + if gop is not None: + for i in gop: # Select every frame. e.ServeFrame(i) # Serve current frame. s += 1 if s == 10: # Wait for synchronization for each 10 frames. @@ -100,11 +100,11 @@ class Decoder(multiprocessing.Process): opened = d.FFmpegSetup(self.video_name) self.q_o.put(d.getParameter()) if opened: - p = True - while p is not None: - p = d.ExtractGOP() # Extract current GOP. - if p is not None: - for i in p: # Select every frame. + gop = True + while gop is not None: + gop = d.ExtractGOP() # Extract current GOP. + if gop is not None: + for i in gop: # Select every frame. self.q_o.put(i) else: self.q_o.put(None) diff --git a/docs/guides/examples/transcoding.mdx b/docs/guides/examples/transcoding.mdx index fd12a65..b61aa3a 100644 --- a/docs/guides/examples/transcoding.mdx +++ b/docs/guides/examples/transcoding.mdx @@ -43,7 +43,9 @@ In each while loop, we read a GOP, iterate the GOP, and encode the data frame-by If user trigger Ctrl+C during the while loop, the video could be still completed safely. However, if users hit Ctrl+C by twice, the output video would be broken, because the video tail has not been written correctly. -In the above example, the output video may not be encoded by an optimized configuration. The x265 could accept a maximal consecutive B frame number of `<=16`. We could also configure the output bit rate manually. Therefore, if we change the configuraitons like the following example, the output video size would be reduced significantly. +## Optimize the output video + +In the above example, the output video may not be encoded by an optimized configuration. The x265 codec could accept a maximal consecutive B frame number of `<=16`. We could also configure the output bit rate manually. Therefore, if we change the configuraitons like the following example, the output video size would be reduced significantly. ```python {3} ... @@ -53,6 +55,8 @@ opened = opened and e.FFmpegSetup() ... ``` +## Rescaling and resampling + In some cases, we may want to rescale the output video size, and resample the output frames, ```python {3} @@ -63,4 +67,4 @@ opened = opened and e.FFmpegSetup() ... ``` -This example would rescale the output frame to `720x486`, and resample the output frame rate as 5 FPS. In this case, when we call `e.EncodeFrame(i)`, the frame `i` may be not in the size of `720x486`, but `MpegEncoder()` could scale it automatically. +This example would rescale the output frame to `720x486`, and resample the output frame rate as 5 FPS. In this case, when we call `e.EncodeFrame(i)`, the frame `i` may be not in the size of `720x486`, but `MpegEncoder` could scale it automatically. diff --git a/docs/guides/install/pypi.mdx b/docs/guides/install/pypi.mdx index 3414f00..ba3ff6e 100644 --- a/docs/guides/install/pypi.mdx +++ b/docs/guides/install/pypi.mdx @@ -20,4 +20,4 @@ pip install mpegCoder The PyPI repository is supported since `mpegCoder 3.1.0`. We support from `python 3.5` to `python 3.9`. To check the details of each pre-compiled version, please view the manual installation guides for [Windows](./windows) and [Linux](./linux). -The package installed by this method is shipped with all required dynamic libraries. Users do not need to install any other dependencies in this case. However, if users find that the package could not be imported after the installation, please check the troubleshooting page first. +The package installed by this method is shipped with all required dynamic libraries. Users do not need to install any other dependencies in this case. However, if users find that the package could not be imported after the installation, please check the [troubleshooting page](../troubleshooting/installation) first. diff --git a/docs/troubleshooting/installation.mdx b/docs/troubleshooting/installation.mdx index 9237338..108b80f 100644 --- a/docs/troubleshooting/installation.mdx +++ b/docs/troubleshooting/installation.mdx @@ -28,16 +28,16 @@ If you could not find your problem in this page, please fire an issue: * **Question**: When importing the module, why meeting the following error? - ``` - ImportError: DLL load failed while importing mpegCoder: The specified module could not be found. - ``` + ``` + ImportError: DLL load failed while importing mpegCoder: The specified module could not be found. + ``` * **Answer**: It seems that this error will only occurs when both the following conditions are satisfied: * You are using Windows. * You are using the maunally installed `mpegCoder`, not the pip version. - This error is caused by the absent of required dependencies. It is typically caused when: + This error is caused by the absent of required dependencies. It is typically caused when: * Your python version does not match the `mpegCoder` module. * The required DLL files are neither in the same folder of `mpegCoder.pyd`, nor in the path (environment variable `PATH`). @@ -48,16 +48,16 @@ If you could not find your problem in this page, please fire an issue: * **Question**: When importing the module, why meeting the following error? - ``` - ImportError: lib*****.so.**: cannot open shared object file: No such file or directory - ``` + ``` + ImportError: lib*****.so.**: cannot open shared object file: No such file or directory + ``` * **Answer**: It seems that this error will only occurs when both the following conditions are satisfied: * You are using Linux. * You are using the maunally installed `mpegCoder`, not the pip version. - This error is caused by the absent of required dependencies. It is typically caused when: + This error is caused by the absent of required dependencies. It is typically caused when: * Your python version does not match the `mpegCoder` module, in this case, the library name should be `libpython3.*.so.**`. * The required dependencies files are not in your environment variable `$LD_LIBRARY_PATH`. @@ -68,9 +68,9 @@ If you could not find your problem in this page, please fire an issue: * **Question**: When importing the module, why meeting the following error? - ``` - ImportError: numpy.core.multiarray failed to import - ``` + ``` + ImportError: numpy.core.multiarray failed to import + ``` * **Answer**: You may not install [numpy][link-numpy], or your numpy version is not match the pre-compiled `mpegCoder`. In most cases, a little bit mismatch of the numpy would not cause this error. Maybe your numpy version is different from the requirement too much. See [Compilation list (Win)](../installation/windows#download-mpegcoder) or [Compilation list (Linux)](../installation/linux#download-mpegcoder) to find the best numpy version. @@ -80,27 +80,27 @@ If you could not find your problem in this page, please fire an issue: * **Question**: When importing the module, why meeting the following error? - ``` - OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/libdrm.so.2) - ``` + ``` + OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ******/libdrm.so.2) + ``` * **Answer**: Your GLibC version is not `>=2.29`. To verify that, you could run - ```shell - ldd --version - ``` + ```shell + ldd --version + ``` - This problem often occurs when you are using an older Linux OS. The supported OS list could be found [here](../installation/linux#import). + This problem often occurs when you are using an older Linux OS. The supported OS list could be found [here](../installation/linux#import). * **Fix**: Compile and install GLibC `>=2.29`. However, if users want a faster hotfix. Please follow the follwing instructions. - If you are using `mpegCoder` from pip. You could find a folder named `lib-fix` in where `mpegCoder` is installed, then run the following command: + If you are using `mpegCoder` from pip. You could find a folder named `lib-fix` in where `mpegCoder` is installed, then run the following command: - ```shell - ln -sf /lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6 - ``` + ```shell + ln -sf /lib-fix/libm-2.31.so /lib/x86_64-linux-gnu/libm.so.6 + ``` - The same file (`libm-2.31.so`) could be also found in the [Linux dependencies][download-ff-4-4-linux]. + The same file (`libm-2.31.so`) could be also found in the [Linux dependencies][download-ff-4-4-linux]. ### Incorrect dependencies diff --git a/docs/troubleshooting/qna.mdx b/docs/troubleshooting/qna.mdx index cb57316..4b830d4 100644 --- a/docs/troubleshooting/qna.mdx +++ b/docs/troubleshooting/qna.mdx @@ -8,10 +8,18 @@ description: The questions and answers for mpegCoder. import DarkButton from '@site/src/components/DarkButton'; import IconExternalLink from '@theme/IconExternalLink'; -import octInfo16 from '@iconify-icons/octicon/info-16'; +import mdiEmailEditOutline from '@iconify-icons/mdi/email-edit-outline'; ## Questions and answers +If you feel like asking more questions, please contact me by the email: + +

+ + Contact me + +

+ ### Plan for audio processing * **Question**: The audio processing is not supported by `mpegCoder 3.x`. Will it be implemented future? @@ -22,10 +30,12 @@ import octInfo16 from '@iconify-icons/octicon/info-16'; * **Question**: In `mpegCoder 3.x`, `MpegServer` only support streaming while encoding. Will there be a class for decoding a video while pushing it as a stream? -* **Answer**: No. I believe that using the official FFMpeg is a good enough solution. +* **Answer**: No. I believe that using the official FFMpeg is a good enough solution. We recommend users to use a server program together with the official [FFMpeg][link-ffmpeg-stream] streaming features. ### Commercial plan * **Question**: Will there be a commercial plan for `mpegCoder`? -* **Answer**: No. `mpegCoder` share exactly the same license (GPL v3) of FFMpeg coder. This project is totally open-sourced. I will not concern anything about the commercial plan for this project. +* **Answer**: No. `mpegCoder` shares exactly the same license (GPL v3) of FFMpeg. This project is totally open-sourced. Although GPLv3 enables coders to add a commercial plan, such a plan would be a burden for me. I will not concern anything about the commercial plan for this project. + +[link-ffmpeg-stream]:https://trac.ffmpeg.org/wiki/StreamingGuide "FFMpeg used for streaming" diff --git a/docs/troubleshooting/running.mdx b/docs/troubleshooting/running.mdx index aef8165..d60272e 100644 --- a/docs/troubleshooting/running.mdx +++ b/docs/troubleshooting/running.mdx @@ -24,9 +24,9 @@ If you could not find your problem in this page, please fire an issue: ### Fail to decode first frame -* **Question**: Why does the first frame not able to be decoded correctly? The returned frame is totally black. +* **Question**: Why is the first frame not able to be decoded correctly? The returned frame is totally black. -* **Answer**: This problem often occurs when using `mpegCoder.MpegClient()`, especially when demuxing the RTSP stream. In some video codec formats, there are I, P, and B frames. The I frame is required for decoding other frames. If the first received frame from the remote stream is not an I frame, you could not decode the frame correctly. This problem should be fixed if you let your client running for a while. +* **Answer**: This problem often occurs when using `mpegCoder.MpegClient`, especially when demuxing the RTSP stream. In some video codec formats, there are I, P, and B frames. The I frame is required for decoding other frames. If the first received frame from the remote stream is not an I frame, you could not decode the frame correctly. This problem should be fixed if you let your client running for a while. ### Fail to encode frames @@ -40,8 +40,8 @@ If you could not find your problem in this page, please fire an issue: * **Answer**: There are two typical cases for the bad output video. Please check whether you meet such cases: - * The video tail is not written correctly. This problem is often caused by a sudden termination of the program. - * Some of the input frames are not correctly written. + * The video tail is not written correctly. This problem is often caused by a sudden termination of the program. + * Some of the input frames are not correctly written. ### Stuck of the streamer @@ -61,15 +61,15 @@ If you could not find your problem in this page, please fire an issue: * **Answer**: We provide a global configuration method to do that: - ```python - mpegCoder.setGlobal(dumpLevel=0) - ``` + ```python + mpegCoder.setGlobal(dumpLevel=0) + ``` - This value could be `0` (only show errors), `1` (show basic logs), `2` (show detailed logs). + This value could be `0` (only show errors), `1` (show basic logs), `2` (show detailed logs). ### Reuse the instances -* **Question**: Can I reuse the same instance of `mpegCoder`, for example, the `mpegCoder.MpegDecoder()`? +* **Question**: Can I reuse the same instance of `mpegCoder`, for example, the `mpegCoder.MpegDecoder`? * **Answer**: Of course. Remember to call `clear()` before reusing the instance. From 778137373f0e665f910022482ab1906799216c57 Mon Sep 17 00:00:00 2001 From: cainmagi Date: Fri, 23 Jul 2021 20:50:52 -0500 Subject: [PATCH 06/33] 7/23/2021 - 6 1. Change the title page description. 2. Fix some typos. --- docs/guides/install/linux.mdx | 11 ++++++++++- docs/guides/install/windows.mdx | 11 ++++++++++- docs/introduction.mdx | 4 ++-- docs/troubleshooting/installation.mdx | 6 +++--- docusaurus.config.js | 2 +- src/components/DarkButton.js | 3 +++ src/components/HomepageFeatures.js | 4 ++-- src/css/custom.scss | 2 +- src/pages/index.js | 2 +- static/img/icon_ffmpeg.svg | 2 +- 10 files changed, 34 insertions(+), 13 deletions(-) diff --git a/docs/guides/install/linux.mdx b/docs/guides/install/linux.mdx index e5d0d21..95d35fd 100644 --- a/docs/guides/install/linux.mdx +++ b/docs/guides/install/linux.mdx @@ -36,10 +36,18 @@ After extracting the tarball, we could get `mpegCoder.so`. :::info -Note that the above versions only show the environment when building mpegCoder. It does not mean that they are the dependencies of running mpegCoder. For example, users could use python 3.9.5 and numpy 1.19.5 to run mpegCoder. +Note that the above versions only show the environment when building `mpegCoder`. It does not mean that they are the dependencies of running `mpegCoder`. For example, users could use `python 3.9.5` and `numpy 1.19.5` to run `mpegCoder`. ::: +### Install Numpy + +To run `mpegCoder`, you are required to install [Numpy][link-numpy] with the correct version first. The best version for each `mpegCoder` release has been listed before. If your Numpy version is differnt from the best version too much, `mpegCoder` may not work. + +```shell +python -m pip install numpy== +``` + ### Download dependencies The pre-compiled dependencies are available on our release page. The dependencies contain several `.so` files. Users also need to download the tarball with the correct FFMpeg version, and extract the files. @@ -157,3 +165,4 @@ Note that users may need to modify the scripts according to their own cases. Our [download-ff-4-4]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz [code-config]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/setup.py#L34 [code-macros]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master-linux/MpegCoder/MpegBase.h#L11 +[link-numpy]:https://numpy.org "Numpy" diff --git a/docs/guides/install/windows.mdx b/docs/guides/install/windows.mdx index 30930a9..2c3288f 100644 --- a/docs/guides/install/windows.mdx +++ b/docs/guides/install/windows.mdx @@ -32,10 +32,18 @@ After extracting the tarball, we could get `mpegCoder.pyd`. :::info -Note that the above versions only show the environment when building mpegCoder. It does not mean that they are the dependencies of running mpegCoder. For example, users could use python 3.9.5 and numpy 1.19.5 to run mpegCoder. +Note that the above versions only show the environment when building `mpegCoder`. It does not mean that they are the dependencies of running `mpegCoder`. For example, users could use `python 3.9.5` and `numpy 1.19.5` to run `mpegCoder`. ::: +### Install Numpy + +To run `mpegCoder`, you are required to install [Numpy][link-numpy] with the correct version first. The best version for each `mpegCoder` release has been listed before. If your Numpy version is differnt from the best version too much, `mpegCoder` may not work. + +```shell +python -m pip install numpy== +``` + ### Download dependencies The pre-compiled dependencies are available on our release page. The dependencies contain several `.dll` files. Users also need to download the tarball with the correct FFMpeg version, and extract the files. @@ -83,3 +91,4 @@ If users need to compile the module by themselves, please follow the instruction [download-3-1-0-py35]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/3.1.0/mpegCoder_3_1_0_Win_py35.tar.xz [download-ff-4-4]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz [link-ffmpeg-download]:https://www.gyan.dev/ffmpeg/builds/#release-section "FFMpeg release" +[link-numpy]:https://numpy.org "Numpy" diff --git a/docs/introduction.mdx b/docs/introduction.mdx index d45141c..5370202 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -16,7 +16,7 @@ This project is also named as "*FFmpeg-Encoder-Decoder-for-Python*". It is imple With this package, users could: * Make use of **all** FFMpeg video encoders and decoders. When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters. -* Work with FFMpeg directly. This project invokes the FFMpeg C APIs in the bottom level. Unlike [ffmpeg-python][git-ffmpeg-python] and [pyffmpeg][git-pyffmpeg], our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is [`np.ndarray`][link-ndarray]. In other words, our project enables users to combine [numpy][link-numpy] and FFMpeg directly. +* Work with FFMpeg directly. This project invokes the FFMpeg C APIs in the bottom level. Unlike [ffmpeg-python][git-ffmpeg-python] and [pyffmpeg][git-pyffmpeg], our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is [`np.ndarray`][link-ndarray]. In other words, our project enables users to combine [Numpy][link-numpy] and FFMpeg directly. * Frame-level APIs. Unlike [pyffmpeg][git-pyffmpeg], this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D [`np.ndarray`][link-ndarray]. * Pre-compiled package. This package has been pre-compiled by the author. If users download the dependent dynamic libraries (`.so` or `.dll`), they do not need to compile the package by themself. @@ -61,7 +61,7 @@ Contributor covenant code of conduct: [pip-opencv]:https://pypi.org/project/opencv-python "OpenCV Python" [link-cpp11]:https://en.cppreference.com/w/ "C++ 11" [link-python-c-api]:https://docs.python.org/3/c-api/index.html "Python-C-API" -[link-numpy]:https://numpy.org "numpy" +[link-numpy]:https://numpy.org "Numpy" [link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" [link-ffmpeg]:https://ffmpeg.org "FFMpeg" [link-avfilter]:http://ffmpeg.org/doxygen/trunk/group__lavfi.html "libavfilter" diff --git a/docs/troubleshooting/installation.mdx b/docs/troubleshooting/installation.mdx index 108b80f..506511e 100644 --- a/docs/troubleshooting/installation.mdx +++ b/docs/troubleshooting/installation.mdx @@ -72,9 +72,9 @@ If you could not find your problem in this page, please fire an issue: ImportError: numpy.core.multiarray failed to import ``` -* **Answer**: You may not install [numpy][link-numpy], or your numpy version is not match the pre-compiled `mpegCoder`. In most cases, a little bit mismatch of the numpy would not cause this error. Maybe your numpy version is different from the requirement too much. See [Compilation list (Win)](../installation/windows#download-mpegcoder) or [Compilation list (Linux)](../installation/linux#download-mpegcoder) to find the best numpy version. +* **Answer**: You may not install [Numpy][link-numpy], or your Numpy version is not match the pre-compiled `mpegCoder`. In most cases, a little bit mismatch of the Numpy would not cause this error. Maybe your Numpy version is different from the requirement too much. See [Compilation list (Win)](../installation/windows#download-mpegcoder) or [Compilation list (Linux)](../installation/linux#download-mpegcoder) to find the best Numpy version. -* **Fix**: Reinstall numpy, or compile `mpegCoder` by yourself. +* **Fix**: Reinstall Numpy, or compile `mpegCoder` by yourself. ### GLibC not found @@ -112,4 +112,4 @@ If you could not find your problem in this page, please fire an issue: [download-ff-4-4-win]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/dll-win-ffmpeg_4_4.tar.xz [download-ff-4-4-linux]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/so-linux-ffmpeg_4_4.tar.xz -[link-numpy]:https://numpy.org "numpy" +[link-numpy]:https://numpy.org "Numpy" diff --git a/docusaurus.config.js b/docusaurus.config.js index e025d1a..9492ad9 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -4,7 +4,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').DocusaurusConfig} */ module.exports = { title: 'mpegCoder', - tagline: 'This is a C++ based FFmpeg Encoder/Decoder for Python 3.5+ & numpy 1.13+. Both Linux & Win versions are provided. Theoretically you do not need to install FFmpeg for using this library.', + tagline: 'This is a C++ based FFmpeg Encoder/Decoder for Python 3.5+ & Numpy 1.13+. Both Linux & Win versions are provided. Theoretically you do not need to install FFmpeg for using this library.', url: 'https://cainmagi.github.io', baseUrl: '/FFmpeg-Encoder-Decoder-for-Python/', onBrokenLinks: 'throw', diff --git a/src/components/DarkButton.js b/src/components/DarkButton.js index 1992fe9..6137df9 100644 --- a/src/components/DarkButton.js +++ b/src/components/DarkButton.js @@ -1,3 +1,6 @@ +/* DarkButton + * Author: cainmagi@gmail.com + */ import React, {useEffect, useState} from 'react'; import Link from '@docusaurus/Link'; diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index fca73cd..1b3adbe 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -10,7 +10,7 @@ const FeatureList = [ Svg: require('../../static/img/icon_python.svg').default, description: ( <> - Implemented by the Python-C-API. This feature has been included in stdlib. No matter when you need to compile or use this package, you do not need any python dependencies. + Implemented by the Python-C-API. This feature has been included in stdlib. No matter when you need to compile or use this package, the only dependency is Numpy. ), }, @@ -19,7 +19,7 @@ const FeatureList = [ Svg: require('../../static/img/icon_ffmpeg.svg').default, description: ( <> - Built with the shared-lib-enabled FFMpeg. Since the original FFMpeg is not modified. All encoders and decoders are available. We have also provided a packed mpegCoder with all dynamic libraries. + Combine the shared-lib-enabled FFMpeg and Numpy together. Both the two libraries are not modifed. Users could benefit from user-friendly Numpy APIs and all FFMpeg features. ), }, diff --git a/src/css/custom.scss b/src/css/custom.scss index e093192..456c44d 100644 --- a/src/css/custom.scss +++ b/src/css/custom.scss @@ -75,7 +75,7 @@ a.noline:hover { } // Index related -.buttons_src-pages-index-module { +.buttons { a.button.button--secondary.button--outline:not(.button--active):not(:hover) { color: var(--ifm-color-gray-900); border-color: var(--ifm-color-gray-900); diff --git a/src/pages/index.js b/src/pages/index.js index 8d9dd51..a3bdc8a 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -15,7 +15,7 @@ function HomepageHeader() {

{siteConfig.title}

{siteConfig.tagline}

-
+
diff --git a/static/img/icon_ffmpeg.svg b/static/img/icon_ffmpeg.svg index d1a43ff..9153694 100644 --- a/static/img/icon_ffmpeg.svg +++ b/static/img/icon_ffmpeg.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From c288fa058a2a9a6b315b153f30277fae325bb6c7 Mon Sep 17 00:00:00 2001 From: cainmagi Date: Sun, 25 Jul 2021 21:53:36 -0500 Subject: [PATCH 07/33] 7/25/2021 1. Add all APIs' documents. 2. Fix some typos. --- docs/api-overview.mdx | 12 +- docs/apis/MpegClient.mdx | 262 +++++++++++++++++++++++++ docs/apis/MpegDecoder.mdx | 332 ++++++++++++++++++++++++++++++++ docs/apis/MpegEncoder.mdx | 269 ++++++++++++++++++++++++++ docs/apis/MpegServer.mdx | 298 ++++++++++++++++++++++++++++ docs/apis/readme.mdx | 37 ++++ docs/apis/setGlobal.mdx | 43 +++++ docs/guides/examples/client.mdx | 4 +- package.json | 12 +- sidebars.js | 6 + yarn.lock | 4 +- 11 files changed, 1262 insertions(+), 17 deletions(-) create mode 100644 docs/apis/MpegClient.mdx create mode 100644 docs/apis/MpegDecoder.mdx create mode 100644 docs/apis/MpegEncoder.mdx create mode 100644 docs/apis/MpegServer.mdx create mode 100644 docs/apis/readme.mdx create mode 100644 docs/apis/setGlobal.mdx diff --git a/docs/api-overview.mdx b/docs/api-overview.mdx index e8cadc4..351a9b3 100644 --- a/docs/api-overview.mdx +++ b/docs/api-overview.mdx @@ -13,16 +13,12 @@ import { SourceURL, Splitter } from '@site/src/envs/variables'; import OverviewSvg from '/img/overview.svg'; -:::info - -This part is under construction now. More details would be added in the future. - -::: - This package is a single-module package. The classes are shown in the following figure: +In most APIs, the `string` formatted arguments accept both `str` and `bytes` objects. If a `str` object is given, its coding will be recognized by the file system encoding, see [`PyUnicode_DecodeFSDefaultAndSize`][py-decodefs]. If a `bytes` object is given, the contents will be converted to a `std::string` directly. Therefore, if users want to use an argument with a specific encoding, they could use `str_argu.encode('...')` instead of using `str_argu` directly. + ## Classes The module contains four classes: @@ -31,7 +27,7 @@ The module contains four classes: | :------: | :----------- | | `MpegDecoder` | The FFMpeg decoder. It could be used for demuxing a video file, and return the extracted frames or GOPs. | | `MpegEncoder` | The FFMpeg encoder. It is used for writing a video file. The data is encoded frame-by-frame. | -| `MpegClient` | The FFMpeg decoder designed for pulling and demuxing a remote video stream. This class manages a `std::thread`, and use the thread to synchronize the decoder with the real-time stream. | +| `MpegClient` | The FFMpeg decoder designed for pulling and demuxing a remote video stream. This class manages a `std::thread`, and use the thread to synchronize the decoder with the real-time stream. | | `MpegServer` | The FFMpeg encoder designed for muxing and pushing a remote video stream. The stream is pushed frame-by-frame. Note that this class is required to be used with an active server. | ## Functions @@ -42,3 +38,5 @@ The following functions are global methods of the module. | :------: | :----------- | | `setGlobal` | Used for setting the global configurations of the module. | | `readme` | Readme function. This method is used for printing brief instructions and updating reports of the module. | + +[py-decodefs]:https://docs.python.org/zh-cn/3/c-api/unicode.html#c.PyUnicode_DecodeFSDefaultAndSize "PyUnicode_DecodeFSDefaultAndSize" diff --git a/docs/apis/MpegClient.mdx b/docs/apis/MpegClient.mdx new file mode 100644 index 0000000..a0926ef --- /dev/null +++ b/docs/apis/MpegClient.mdx @@ -0,0 +1,262 @@ +--- +id: MpegClient +title: MpegClient +sidebar_label: MpegClient +slug: /apis/MpegClient +description: This class has wrapped the C-API of FFMpeg demuxer so that users could call its methods to demux the network stream in python quickly. +--- + +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import vsiSymbolClass from '@iconify-icons/codicon/symbol-class'; +import vsiCheckIcon from '@iconify-icons/codicon/check'; +import octFileCode16 from '@iconify-icons/octicon/file-code-16'; +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +

+ Class + + + Source + +

+ +```python +cln = mpegCoder.MpegClient() +``` + +The frame-level video stream client used for demuxing an online video stream. + +This client instance is integrated with the features of [`MpegDecoder`](./MpegDecoder). The connection to the video server is established by [`FFmpegSetup()`](#ffmpegsetup). When the client is working, it will manage a background sub-thread for fetching the remote frames consecutively. The fetched frames are saved in a circular buffer. The method [`ExtractFrame()`](#extractframe) always return the latest received frames. To learn more details, please review the [description of the theory](../examples/client#introduction). + +`MpegClient` requires users to initialize the decoding before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the client is destructed. `MpegClient` also supports threading control. When the client is connected to the server, users could use [`start()`](#start) to keep the buffer synchronized with the video stream. Calling [`terminate()`](#terminate) will force the buffer updating to stop. In this case, the method [`ExtractFrame()`](#extractframe) will always return the same results. + +## Arguments + +This class does not has initialization arguments. + +## Methods + +### `clear` + +```python +cln.clear() +``` + +Clear all configurations **except** the default video address. If a video stream is alredy opened, `clear()` will release the connection automatically. + +:::tip + +We suggest that users should call `clear()` manually, like using other file readers. No matter when [`start()`](#start) is called, this method could be used safely without calling [`terminate()`](#terminate). + +::: + +---------- + +### `resetPath` + +```python +cln.resetPath(videoAddress) +``` + +Reset the default video address to a specific value. Configuring this value will not cause the video stream to be opened. This method is merely used as a configuration. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoAddress` | `str` or `bytes` | | The address of the video to be read. | + +---------- + +### `getParameter` + +```python +param = cln.getParameter(paramName=None) +``` + +Get the video parameter or configuration value. Each time `paramName` only accepts one parameter name. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `paramName` | `str` or `bytes` | | The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a `dict`. | + +Here is a list of checkable `paramName`: + +| Parameter | Type |
Description
| +| :------------: | :-----: | :----------------------------- | +| `videoAddress` | `str` | The current address of the read video. If the video stream is not opened, will return the default video address. | +| `width` | `int` | The width of the read video. This value is determined by the video stream. | +| `height` | `int` | The height of the read video. This value is determined by the video stream. | +| `frameCount` | `int` | The number of returned frames in the last frame extraction method. | +| `coderName` | `str` | The name of the codec used for decoding the video. | +| `nthread` | `int` | The number of decoder threads. | +| `duration` | `float` | The total seconds of this video. | +| `estFrameNum` | `int` | The estimated total frame number (may be not accurate). | +| `srcFrameRate` | `float` | The average of FPS of the source video stream. The actual frame rate may be changed on client side. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `param` | Determined by `paramName` | The returned value of the parameter. If no `paramName` is given, will return all important parameters. These parameters could serve as `configDict` for `MpegEncoder` and `MpegServer`. | + +---------- + +### `setParameter` + +```python +cln.setParameter(widthDst=None, heightDst=None, cacheSize=None, readSize=None, dstFrameRate=None, nthread=None) +``` + +Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before [`FFmpegSetup()`](#ffmpegsetup). + +#### Requires + +| Argument | Type | Required |
Description
| +| :------------: | :-----: | :--------: | :----------------------------- | +| `widthDst` | `int` | | The width of extracted frames. Configuring both `widthDst` and `heightDst` will cause the frames to be scaled. If a value `<=0` is given, this value would take no effect. | +| `heightDst` | `int` | | The height of extracted frames. Configuring both `widthDst` and `heightDst` will cause the frames to be scaled. If a value `<=0` is given, this value would take no effect. | +| `cacheSize` | `int` | | The number of allocated avaliable frames in the cache. We recommend to configure this value as `2*readSize`. | +| `dstFrameRate` | `tuple` | | The destination FPS of the stream. This value should be formatted as a factor defined as `(numerator, denominator)`. Configuing this value will cause the received frames to be resampled. | +| `nthread` | `int` | | The number of decoder threads. | + +---------- + +### `FFmpegSetup` + +```python +cln.FFmpegSetup(videoAddress=None) +``` + +Open the online video stream, and initialize the decoder. After the client initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video stream connection is established by the client now, this connection will be released first, then the new video stream will be opened. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoAddress` | `str` or `bytes` | | The address of the video stream to be read. If not given, will use the default path configured by [`resetPath()`](#resetpath). Setting this argument will also cause the default video path to change. | + +---------- + +### `dumpFile` + +```python +cln.dumpFile() +``` + +Print out a brief preview of the video meta-data to the standard output. + +:::caution + +This method is based on C stdout. Therefore, these results could not be redirected or catched by python. + +::: + +---------- + +### `start` + +```python +cln.start() +``` + +Start the demuxing thread. The started sub-thread will keep receiving remote frames to ensure the client buffer is synchronized with the online video stream. + +:::caution + +This method must be called after [`FFmpegSetup()`](#ffmpegsetup). Once this method is called, users are not allowed to call it again until [`terminate()`](#terminate) is called or the client is restarted by [`FFmpegSetup()`](#ffmpegsetup). + +::: + +---------- + +### `terminate` + +```python +cln.terminate() +``` + +Terminate the current demuxing thread. This method is required to be called after [`start()`](#start). It will stop the frame receiving, and make the played video to be "paused". In this case, the frame receiving could be started again by [`start()`](#start). + +:::caution + +This method must be called after [`FFmpegSetup()`](#ffmpegsetup). Calling this method will not cause the current connection aborted. Only [`clear()`](#clear) could release the connection explicitly. + +::: + +---------- + +### `ExtractFrame` + +```python +frames = cln.ExtractFrame(readSize=0) +``` + +Read the latest several frames from the circular buffer. + +This method is merely a reading method, and not decode frames. Instead, the decoding is managed by the sub-thread. `ExtractFrame()` always fetch the several frames that are latestly decoded. Even [`terminate()`](#terminate) is called, this method could be still used safely. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `readSize` | `int` | | The number of the frames to be read. If configured as `<=0`, will use the default `readSize` configured by [`setParameter()`](#setparameter). | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `frames` | `np.ndarray` | An array with a shape of `(N, H, W, C)`, where `N` is given by `readSize` (no matter whether the video reaches its end), `(H, W)` are the height and width of the returned frames respectively. `C` means the 3 RGB channel. If no valid frames are received, this method would return several frames that are totally black. | + +## Operators + +### `__str__` + +```python +info = str(dec) +``` + +Return a brief report of the current client status. + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `info` | `str` | A brief report of the client status, the configurations and parameters will be listed as formatted texts. | + +## Examples + +See [*`Client`*](../examples/client) in the tutorial. Here we also show some specific configurations: + +### Scale the decoded frame + +```python +... +cln = mpegCoder.MpegClient() +cln.setParameter(widthDst=720, heightDst=486) +... +``` + +### Configure the cache size + +```python +... +cln = mpegCoder.MpegClient() +# Assume that the source frame rate is 29.997 +cln.setParameter(readSize=30, cacheSize=60) +... +``` + +### Use multi-thread decoding + +```python +... +cln = mpegCoder.MpegClient() +cln.setParameter(nthread=8) +... +``` + +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" diff --git a/docs/apis/MpegDecoder.mdx b/docs/apis/MpegDecoder.mdx new file mode 100644 index 0000000..d35ccee --- /dev/null +++ b/docs/apis/MpegDecoder.mdx @@ -0,0 +1,332 @@ +--- +id: MpegDecoder +title: MpegDecoder +sidebar_label: MpegDecoder +slug: /apis/MpegDecoder +description: This class has wrapped the C-API of FFMpeg decoder so that users could call its methods to decode the frame data in python quickly. +--- + +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import vsiSymbolClass from '@iconify-icons/codicon/symbol-class'; +import vsiCheckIcon from '@iconify-icons/codicon/check'; +import octFileCode16 from '@iconify-icons/octicon/file-code-16'; +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +

+ Class + + + Source + +

+ +```python +dec = mpegCoder.MpegDecoder(videoPath=None) +``` + +The frame-level video decoder used for demuxing a video file. + +This decoder instance serves as a video file reader. It supports: + +* Decoding the video frames into [`np.ndarray`][link-ndarray]. +* Reading video frames consecutively. +* Setting the reading cursor to any position. +* Scaling the decoded video frames to a specific size. + +`MpegDecoder` requires users to initialize the decoder before reading frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the decoder is destructed. + +## Arguments + +### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :----: | :--------: | :----------------------------- | +| `videoPath` | `str` or `bytes` | | The path of the video to be read. Configuring this value will causes the video to be opened by [`FFmpegSetup()`](#ffmpegsetup). We do not recommend users to set this value when initializing the decoder. | + +## Methods + +### `clear` + +```python +dec.clear() +``` + +Clear all configurations **except** the default video path. If a video is opened by the decoder, `clear()` will close the video automatically. + +:::tip + +We suggest that users should call `clear()` manually, like using other file readers. + +::: + +---------- + +### `resetPath` + +```python +dec.resetPath(videoPath) +``` + +Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoPath` | `str` or `bytes` | | The path of the video to be read. | + +---------- + +### `getParameter` + +```python +param = dec.getParameter(paramName=None) +``` + +Get the video parameter or configuration value. Each time `paramName` only accepts one parameter name. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `paramName` | `str` or `bytes` | | The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a `dict`. | + +Here is a list of checkable `paramName`: + +| Parameter | Type |
Description
| +| :------------: | :-----: | :----------------------------- | +| `videoPath` | `str` | The current path of the read video. If the video is not opened, will return the default video path. | +| `width` | `int` | The width of the read video. This value is determined by the video file. | +| `height` | `int` | The height of the read video. This value is determined by the video file. | +| `frameCount` | `int` | The number of returned frames in the last frame extraction method. | +| `coderName` | `str` | The name of the codec used for decoding the video. | +| `nthread` | `int` | The number of decoder threads. | +| `duration` | `float` | The total seconds of this video. | +| `estFrameNum` | `int` | The estimated total frame number (may be not accurate). | +| `avgFrameRate` | `float` | The average of FPS of the video stream. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `param` | Determined by `paramName` | The returned value of the parameter. If no `paramName` is given, will return all important parameters. These parameters could serve as `configDict` for `MpegEncoder` and `MpegServer`. | + +---------- + +### `setParameter` + +```python +dec.setParameter(widthDst=None, heightDst=None, nthread=None) +``` + +Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before [`FFmpegSetup()`](#ffmpegsetup). + +#### Requires + +| Argument | Type | Required |
Description
| +| :---------: | :-----: | :--------: | :----------------------------- | +| `widthDst` | `int` | | The width of extracted frames. Configuring both `widthDst` and `heightDst` will cause the frames to be scaled. If a value `<=0` is given, this value would take no effect. | +| `heightDst` | `int` | | The height of extracted frames. Configuring both `widthDst` and `heightDst` will cause the frames to be scaled. If a value `<=0` is given, this value would take no effect. | +| `nthread` | `int` | | The number of decoder threads. | + +---------- + +### `FFmpegSetup` + +```python +dec.FFmpegSetup(videoPath=None) +``` + +Open the video file, and initialize the decoder. After the decoder initialized, the video parameters will be loaded, the video format will be parsed and the video codec will be detected automatically. If an video is opening by the decoder now, this video will be closed first, then the new video will be opened. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoPath` | `str` or `bytes` | | The path of the video to be read. If not given, will use the default path configured by [`resetPath()`](#resetpath). Setting this argument will also cause the default video path to change. | + +---------- + +### `dumpFile` + +```python +dec.dumpFile() +``` + +Print out a brief preview of the video meta-data to the standard output. + +:::caution + +This method is based on C stdout. Therefore, these results could not be redirected or catched by python. + +::: + +---------- + +### `ExtractFrame` + +```python +frames = dec.ExtractFrame(framePos=0, frameNum=1) +``` + +Extract several frames at a specific position. + +This API is recommended to be used when users only want to fetch few frames. The API will seek the starting position defined by `framePos`, then extract the required number of frames. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `framePos` | `int` | | A frame index used as the starting postion. This position will be used by [`av_seek_frame`][ffmpeg-avseekframe] at the bottom level. | +| `frameNum` | `int` | | The number of frames that require to be extracted. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `frames` | `np.ndarray` | An array with a shape of `(N, H, W, C)`, where `N` is given by `frameNum` (if the deocder reaches the end of the file, `N` may be smaller than `frameNum`), `(H, W)` are the height and width of the returned frames respectively. `C` means the 3 RGB channel. If no frames could be extracted, this method would return `None`. | + +---------- + +### `ExtractFrameByTime` + +```python +frames = dec.ExtractFrameByTime(timePos=0, frameNum=1) +``` + +Extract several frames at a specific position. + +The functionality of this API is the same as [`ExtractFrame()`](#extractframe). Instead of using a frame index, this method seek the reading cursor by a time point (the unit is `second`). + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `timePos` | `float` | | A time index (second) used as the starting postion. This position will be used by [`av_seek_frame`][ffmpeg-avseekframe] at the bottom level. | +| `frameNum` | `int` | | The number of frames that require to be extracted. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `frames` | `np.ndarray` | An array with a shape of `(N, H, W, C)`, where `N` is given by `frameNum` (if the deocder reaches the end of the file, `N` may be smaller than `frameNum`), `(H, W)` are the height and width of the returned frames respectively. `C` means the 3 RGB channel. If no frames could be extracted, this method would return `None`. | + +---------- + +### `ExtractGOP` + +```python +gop = dec.ExtractGOP(framePos=-1) +``` + +Extract a [Group of Pictures][wiki-gop]. The GOP size is determined by the video file. Users could use [`getParameter()`](#getparameter) to find the GOP size. + +We recommend to use `dec.ExtractGOP()` when a video file needs to be read consecutively. When the returned value is `None`, the read cursor reaches the end of the video. + +:::info + +Each time this method is used with `framePos>=0`, the current reading cursor will be reset by `framePos`. + +::: + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `framePos` | `int` | | A frame index used for seeking the starting position of the GOP. This position will be used by [`av_seek_frame`][ffmpeg-avseekframe] at the bottom level. If configured as `<0`, this value will not take effects, the GOP will be extracted from the current reading cursor position. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `gop` | `np.ndarray` | An array with a shape of `(N, H, W, C)`, where `N` is the GOP size (if the deocder reaches the end of the file, `N` may be smaller than the GOP size), `(H, W)` are the height and width of the returned frames respectively. `C` means the 3 RGB channel. If no frames could be extracted, this method would return `None`. | + +---------- + +### `ExtractGOPByTime` + +```python +gop = dec.ExtractGOPByTime(timePos=-1) +``` + +Extract a [Group of Pictures][wiki-gop]. Instead of using a frame index, this method uses a time point (the unit is `second`) to seek the starting position. + +We recommend to use `dec.ExtractGOPByTime()` when a video file needs to be read consecutively. When the returned value is `None`, the read cursor reaches the end of the video. + +:::info + +Each time this method is used with `timePos>=0`, the current reading cursor will be reset by `timePos`. + +::: + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `timePos` | `float` | | A time index (second) used for seeking the starting position of the GOP. This position will be used by [`av_seek_frame`][ffmpeg-avseekframe] at the bottom level. If configured as `<0`, this value will not take effects, the GOP will be extracted from the current reading cursor position. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `gop` | `np.ndarray` | An array with a shape of `(N, H, W, C)`, where `N` is the GOP size (if the deocder reaches the end of the file, `N` may be smaller than the GOP size), `(H, W)` are the height and width of the returned frames respectively. `C` means the 3 RGB channel. If no frames could be extracted, this method would return `None`. | + +---------- + +### `ResetGOPPosition` + +```python +gop = dec.ResetGOPPosition(framePos=-1, timePos=-1) +``` + +Reset the current reading cursor of [`ExtractGOP()`](#extractgop) and [`ExtractGOPByTime()`](#extractgopbytime). The cursor could be set by either a frame index or a time point (`second`). This method is merely a configuration, and will not return the GOP. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `framePos` | `int` | | A frame index used for seeking the starting position of the GOP. This position will be used by [`av_seek_frame`][ffmpeg-avseekframe] at the bottom level. If configured as `<0`, this value will not take effects. | +| `timePos` | `float` | | A time index (second) used for seeking the starting position of the GOP. If this value is configured as `<0` or the `framePos` is configured, it will not take effects. | + +## Operators + +### `__str__` + +```python +info = str(dec) +``` + +Return a brief report of the current decoder status. + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `info` | `str` | A brief report of the decoder status, the configurations and parameters will be listed as formatted texts. | + +## Examples + +See [*`Decoding`*](../examples/decoding) in the tutorial. Here we also show some specific configurations: + +### Scale the decoded frame + +```python +... +dec = mpegCoder.MpegDecoder() +dec.setParameter(widthDst=720, heightDst=486) +... +``` + +### Use multi-thread decoding + +```python +... +dec = mpegCoder.MpegDecoder() +dec.setParameter(nthread=8) +... +``` + +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" +[wiki-gop]:https://en.wikipedia.org/wiki/Group_of_pictures "Group of pictures | Wikipedia" +[ffmpeg-avseekframe]:https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8 "av_seek_frame" diff --git a/docs/apis/MpegEncoder.mdx b/docs/apis/MpegEncoder.mdx new file mode 100644 index 0000000..c687195 --- /dev/null +++ b/docs/apis/MpegEncoder.mdx @@ -0,0 +1,269 @@ +--- +id: MpegEncoder +title: MpegEncoder +sidebar_label: MpegEncoder +slug: /apis/MpegEncoder +description: This class has wrapped the C-API of FFMpeg encoder so that users could call its methods to encode frames by using numpy-data quickly. +--- + +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import vsiSymbolClass from '@iconify-icons/codicon/symbol-class'; +import vsiCheckIcon from '@iconify-icons/codicon/check'; +import octFileCode16 from '@iconify-icons/octicon/file-code-16'; +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +

+ Class + + + Source + +

+ +```python +enc = mpegCoder.MpegEncoder() +``` + +The frame-level video encoder used for muxing a video file. + +This encoder instance serves as a video file writer. It supports: + +* Encode a 3D [`np.ndarray`][link-ndarray] as a video frame. +* Configure the codec type and the video parameters. +* Scaling the encoded video frames to a specific size. + +`MpegEncoder` requires users to initialize the encoder before writing frames, and close the video after finishing all works. If the video is not closed manually, an automatical closing would be performed when the encoder is destructed. During the distruction, hitting Ctrl+C will cause the written video to break. + +## Arguments + +This class does not has initialization arguments. + +## Methods + +### `clear` + +```python +enc.clear() +``` + +Clear all configurations **including** the default video path. If a video is opened by the encoder, `clear()` will close the video automatically. + +:::tip + +We suggest that users should call `clear()` manually, like using other file writers. + +::: + +---------- + +### `resetPath` + +```python +enc.resetPath(videoPath) +``` + +Reset the default video path to a specific value. Configuring this value will not cause the video to be opened. This method is merely used as a configuration. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoPath` | `str` or `bytes` | | The path of the video to be written. | + +---------- + +### `getParameter` + +```python +param = enc.getParameter(paramName=None) +``` + +Get the video parameter or configuration value. Each time `paramName` only accepts one parameter name. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `paramName` | `str` or `bytes` | | The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a `dict`. | + +Here is a list of checkable `paramName`: + +| Parameter | Type |
Description
| +| :------------: | :-----: | :----------------------------- | +| `videoPath` | `str` | The current path of the written video. If the video is not opened, will return the default video path. | +| `codecName` | `str` | The name of the encoder. See [here][ffmpeg-encoder] to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries. | +| `nthread` | `int` | The number of encoder threads. | +| `bitRate` | `float` | The bit rate of the written video (Kb/s). This value determines the output video size directly. | +| `width` | `int` | The width of the written video. This value is mainly determined by the user configurations. | +| `height` | `int` | The height of the written video. This value is mainly determined by the user configurations. | +| `widthSrc` | `int` | The width of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `width`. | +| `heightSrc` | `int` | The height of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `height`. | +| `GOPSize` | `int` | The size of one [GOP][wiki-gop]. | +| `maxBframe` | `int` | The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than `16`. | +| `frameRate` | `tuple` | The target frame rate of the written video. This value should be a tuple of two `int`s: `(numerator, denominator)`. This format is consistent with [`AVRational`][ffmpeg-avrational] | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `param` | Determined by `paramName` | The returned value of the parameter. If no `paramName` is given, will return all important parameters. | + +---------- + +### `setParameter` + +```python +enc.setParameter( + decoder=None, configDict=None, videoPath=None, codecName=None, + nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None, + GOPSize=None, maxBframe=None, frameRate=None +) +``` + +Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before [`FFmpegSetup()`](#ffmpegsetup). + +#### Requires + +| Argument | Type | Required |
Description
| +| :------------: | :-----: | :--------: | :----------------------------- | +| `decoder` | [`MpegDecoder`](./MpegDecoder) or [`MpegClient`](./MpegClient) | | When configure this argument, the required configurations will be copied from a decoder or a client. This argument is useful when trancoding a video. | +| `configDict` | `dict` | | An alternative of the argument `decoder` when the parameters need to be passed through different processes. Using `configDict=decoder.getParameter()` is equivalent to using `decoder=decoder`. | +| `videoPath` | `str` | | The current path of the written video. If the video is not opened, will return the default video path. | +| `codecName` | `str` | | The name of the encoder. See [here][ffmpeg-encoder] to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries. | +| `nthread` | `int` | | The number of encoder threads. | +| `bitRate` | `float` | | The bit rate of the written video (Kb/s). This value determines the output video size directly. | +| `width` | `int` | | The width of the written video. | +| `height` | `int` | | The height of the written video. | +| `widthSrc` | `int` | | The width of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `width`. | +| `heightSrc` | `int` | | The height of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `height`. | +| `GOPSize` | `int` | | The size of one [GOP][wiki-gop]. | +| `maxBframe` | `int` | | The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than `16`. | +| `frameRate` | `tuple` | | The target frame rate of the written video. This value should be a tuple of two `int`s: `(numerator, denominator)`. This format is consistent with [`AVRational`][ffmpeg-avrational] | + +---------- + +### `FFmpegSetup` + +```python +enc.FFmpegSetup(videoPath=None) +``` + +Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the file name and the user configurations set by [`setParameter()`](#setparameter). If an video is opening by the encoder now, this video will be closed first, then the new video will be opened with the same configurations. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoPath` | `str` or `bytes` | | The path of the video to be written. If not given, will use the default path configured by [`resetPath()`](#resetpath). Setting this argument will also cause the default video path to change. | + +---------- + +### `dumpFile` + +```python +enc.dumpFile() +``` + +Print out a brief preview of the video meta-data to the standard output. + +:::caution + +This method is based on C stdout. Therefore, these results could not be redirected or catched by python. + +::: + +---------- + +### `EncodeFrame` + +```python +is_success = enc.EncodeFrame(PyArrayFrame) +``` + +Encode one frame into the video. Note that in most cases, the frame will not be written to the file instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when [`FFmpegClose()`](#ffmpegclose) is called, the frames in the buffer will be flushed into the file. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `PyArrayFrame` | `np.ndarray` | | An array with a shape of `(H, W, C)`, where `(H, W)` are the source height (`heightSrc`) and source width (`widthSrc`) respectively. `C` means the 3 RGB channel. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `is_success` | `bool` | The status of the frame encoding. If the given frame succeeds to be encoded, will return `True`; Otherwise, will return `False`. | + +---------- + +### `FFmpegClose` + +```python +enc.FFmpegClose() +``` + +Close the video file. Calling this method will flush all buffered frames into the file. Then the video tail will be writen to the file. If users does not call this method explicitly, it will be called when `clear()` is called or when the encoder is destructed. + +## Operators + +### `__str__` + +```python +info = str(enc) +``` + +Return a brief report of the current encoder status. + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `info` | `str` | A brief report of the encoder status, the configurations and parameters will be listed as formatted texts. | + +## Examples + +See [*`Transcoding`*](../examples/transcoding) in the tutorial. Here we also show some specific configurations: + +### Optimize the video encoding + +```python +... +dec = mpegCoder.MpegDecoder() +... +enc = mpegCoder.MpegEncoder() +enc.setParameter(decoder=dec, codecName='libx265', videoPath='test-video-x265.mp4', GOPSize=24, maxBframe=16) +... +``` + +### Rescale and resample the video + +```python +... +enc = mpegCoder.MpegEncoder() +enc.setParameter(width=1280, height=720, frameRate=(5, 1), codecName='libx265', videoPath='test-video-x265.mp4') +... +``` + +### Use the AV1 encoder + +```python +... +enc = mpegCoder.MpegEncoder() +enc.setParameter(width=1280, height=720, codecName='libsvtav1', videoPath='test-video-av1.mp4') +... +``` + +### Use multi-thread encoding + +```python +... +enc = mpegCoder.MpegEncoder() +enc.setParameter(nthread=8) +... +``` + +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" +[wiki-gop]:https://en.wikipedia.org/wiki/Group_of_pictures "Group of pictures | Wikipedia" +[ffmpeg-encoder]:https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders "Video encoders of FFMpeg" +[ffmpeg-avrational]:https://ffmpeg.org/doxygen/trunk/structAVRational.html "AVRational" diff --git a/docs/apis/MpegServer.mdx b/docs/apis/MpegServer.mdx new file mode 100644 index 0000000..759e4bb --- /dev/null +++ b/docs/apis/MpegServer.mdx @@ -0,0 +1,298 @@ +--- +id: MpegServer +title: MpegServer +sidebar_label: MpegServer +slug: /apis/MpegServer +description: This class has wrapped the C-API of FFMpeg stream server so that users could call its methods to server streamed frames by using numpy-data quickly. +--- + +import IconExternalLink from '@theme/IconExternalLink'; +import InlineIcon from '@site/src/components/InlineIcon'; +import vsiSymbolClass from '@iconify-icons/codicon/symbol-class'; +import vsiCheckIcon from '@iconify-icons/codicon/check'; +import octFileCode16 from '@iconify-icons/octicon/file-code-16'; +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +

+ Class + + + Source + +

+ +```python +sev = mpegCoder.MpegServer() +``` + +The frame-level video stream service used for pushing an online video stream. + +This service instance is integrated with the features of [`MpegEncoder`](./MpegEncoder). Like the [FFMpeg CLI usages][ffmpeg-stream], `MpegServer` could not be run independently. A server program is required to be launched before the instance getting set up. We recommend some server programs [here](../examples/server#preparation). + +In practice, we recommend to split this instance into a sub-process, and use the [`multiprocessing`][python-mp] to feed the served data. See the [tutorial](../examples/server#dual-process-example) to find the example. Although this class also provides a non-blocking style API, we do not recommend users to use that. + +## Arguments + +This class does not has initialization arguments. + +## Methods + +### `clear` + +```python +sev.clear() +``` + +Clear all configurations **including** the default video path. If a video is being pushed by the server, `clear()` will close the video automatically. + +:::tip + +We suggest that users should call `clear()` manually, like using other file writers. + +::: + +---------- + +### `resetPath` + +```python +sev.resetPath(videoAddress) +``` + +Reset the default video address to a specific value. Configuring this value will not cause the video to be pushed. This method is merely used as a configuration. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoAddress` | `str` or `bytes` | | The address of the video stream to be pushed. | + +---------- + +### `getParameter` + +```python +param = sev.getParameter(paramName=None) +``` + +Get the video parameter or configuration value. Each time `paramName` only accepts one parameter name. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `paramName` | `str` or `bytes` | | The name of the parameter to be checked. If not give, all important parameters, including some private parameters will be returned as a `dict`. | + +Here is a list of checkable `paramName`: + +| Parameter | Type |
Description
| +| :------------: | :-----: | :----------------------------- | +| `videoAddress` | `str` | The current address of the pushed video. If the video is not being pushed, will return the default video address. | +| `codecName` | `str` | The name of the encoder. See [here][ffmpeg-encoder] to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries. | +| `formatName` | `str` | The video format name guessed from `videoAddress`. | +| `nthread` | `int` | The number of encoder threads. | +| `bitRate` | `float` | The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly. | +| `width` | `int` | The width of the pushed video stream. This value is mainly determined by the user configurations. | +| `height` | `int` | The height of the pushed video stream. This value is mainly determined by the user configurations. | +| `widthSrc` | `int` | The width of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `width`. | +| `heightSrc` | `int` | The height of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `height`. | +| `GOPSize` | `int` | The size of one [GOP][wiki-gop]. | +| `maxBframe` | `int` | The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than `16`. | +| `frameRate` | `tuple` | The target frame rate of the pushed video stream. This value should be a tuple of two `int`s: `(numerator, denominator)`. This format is consistent with [`AVRational`][ffmpeg-avrational] | +| `waitRef` | `float` | A wait reference with the unit of `second`. This value shows that how much seconds the served data is ahead of played data. This value is required to be used with the non-blocking API [ServeFrame()](#serveframe). | +| `ptsAhead` | `int` | The target ahead time duration in the unit of time stamp. This value is used for controlling the amount of `waitRef` and the waiting time of the blocking API. It is converted from the configuration `frameAhead`. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `param` | Determined by `paramName` | The returned value of the parameter. If no `paramName` is given, will return all important parameters. | + +---------- + +### `setParameter` + +```python +sev.setParameter( + decoder=None, configDict=None, videoPath=None, codecName=None, + nthread=None, bitRate=None, width=None, height=None, widthSrc=None, heightSrc=None, + GOPSize=None, maxBframe=None, frameRate=None, frameAhead=None +) +``` + +Set the configurations of the decoder. To make the configurations take effects, these parameters need to be configured before [`FFmpegSetup()`](#ffmpegsetup). + +#### Requires + +| Argument | Type | Required |
Description
| +| :------------: | :-----: | :--------: | :----------------------------- | +| `decoder` | [`MpegDecoder`](./MpegDecoder) or [`MpegClient`](./MpegClient) | | When configure this argument, the required configurations will be copied from a decoder or a client. This argument is useful when trancoding a video. | +| `configDict` | `dict` | | An alternative of the argument `decoder` when the parameters need to be passed through different processes. Using `configDict=decoder.getParameter()` is equivalent to using `decoder=decoder`. | +| `videoAddress` | `str` | | The current address of the pushed video. If the video is not being pushed, will return the default video address. | +| `codecName` | `str` | | The name of the encoder. See [here][ffmpeg-encoder] to view a list of FFMpeg encoders. Note that not all encoders could be used, the avaliable encoders depends on the current FFMpeg built libraries. | +| `formatName` | `str` | | The video format name guessed from `videoAddress`. | +| `nthread` | `int` | | The number of encoder threads. | +| `bitRate` | `float` | | The bit rate of the pushed video stream (Kb/s). This value determines the served stream size directly. | +| `width` | `int` | | The width of the pushed video stream. | +| `height` | `int` | | The height of the pushed video stream. | +| `widthSrc` | `int` | | The width of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `width`. | +| `heightSrc` | `int` | | The height of the source frame. This value should be consistent with the size of the [`np.ndarray`][link-ndarray]. If not given, will use `height`. | +| `GOPSize` | `int` | | The size of one [GOP][wiki-gop]. | +| `maxBframe` | `int` | | The maximal number of consecutive B frames in a GOP. In most cases, this value could not be greater than `16`. | +| `frameRate` | `tuple` | | The target frame rate of the pushed video stream. This value should be a tuple of two `int`s: `(numerator, denominator)`. This format is consistent with [`AVRational`][ffmpeg-avrational] | +| `frameAhead` | `int` | | The target ahead frame number. This value is used for controlling the number of served frames. For example, `waitRef` will be calculated by the half of the duration between the played framed number and this value. The `waitRef` and the waiting time of the blocking API [`ServeFrameBlock()`](#serveframeblock) will be controlled by this value. Users do not need to specify it explicitly, because it could be calculated from the configured `GOPSize`. | + +---------- + +### `FFmpegSetup` + +```python +sev.FFmpegSetup(videoAddress=None) +``` + +Open the video file, and initialize the encoder. During the encoder initialization, the codec and the video format will be configured according to the file name and the user configurations set by [`setParameter()`](#setparameter). If an video is opening by the encoder now, this video will be closed first, then the new video will be opened with the same configurations. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `videoAddress` | `str` or `bytes` | | The address of the video stream to be pushed. If not given, will use the default path configured by [`resetPath()`](#resetpath). Setting this argument will also cause the default video address to change. | + +---------- + +### `dumpFile` + +```python +sev.dumpFile() +``` + +Print out a brief preview of the video meta-data to the standard output. + +:::caution + +This method is based on C stdout. Therefore, these results could not be redirected or catched by python. + +::: + +---------- + +### `ServeFrame` + +```python +is_success = sev.ServeFrame(PyArrayFrame) +``` + +Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when [`FFmpegClose()`](#ffmpegclose) is called, the frames in the buffer will be flushed into the stream. + +This is the non-blocking API, which means the current thread will be only blocked by the frame encoding operations. Users need to use this API with `sev.getParameter('waitRef')` to control the served frame number. Otherwise, serving too many frames will make the data to be dropped or cause the video server to collapse. The example of this API could be found [here](../examples/server#non-blocking-example). + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `PyArrayFrame` | `np.ndarray` | | An array with a shape of `(H, W, C)`, where `(H, W)` are the source height (`heightSrc`) and source width (`widthSrc`) respectively. `C` means the 3 RGB channel. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `is_success` | `bool` | The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return `True`; Otherwise, will return `False`. | + +---------- + +### `ServeFrameBlock` + +```python +is_success = sev.ServeFrameBlock(PyArrayFrame) +``` + +Push one frame to the video stream. Note that in most cases, the frame will not be pushed instantly. Instead of, the frames will be saved in a low-level buffer of the codec. Only when [`FFmpegClose()`](#ffmpegclose) is called, the frames in the buffer will be flushed into the stream. + +This is the **recommended** blocking API, which means the method will cause the current thread blocked if the served frames are ahead of the playing time too much. In this case, the method will wait until the playing time catch the half of the served but not played frames. This method will ensure the safety of the video server. + +#### Requires + +| Argument | Type | Required |
Description
| +| :--------: | :-----: | :--------: | :----------------------------- | +| `PyArrayFrame` | `np.ndarray` | | An array with a shape of `(H, W, C)`, where `(H, W)` are the source height (`heightSrc`) and source width (`widthSrc`) respectively. `C` means the 3 RGB channel. | + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `is_success` | `bool` | The status of the frame pushing. If the given frame succeeds to be encoded and pushed, will return `True`; Otherwise, will return `False`. | + +---------- + +### `FFmpegClose` + +```python +sev.FFmpegClose() +``` + +Close the video stream and release the connection. Calling this method will flush all buffered frames into the video stream. In some cases, the video tail will be writen to the stream. If users does not call this method explicitly, it will be called when `clear()` is called or when the server is destructed. + +## Operators + +### `__str__` + +```python +info = str(enc) +``` + +Return a brief report of the current stream encoder status. + +#### Returns + +| Argument | Type |
Description
| +| :--------: | :-----: | :----------------------------- | +| `info` | `str` | A brief report of the stream encoder status, the configurations and parameters will be listed as formatted texts. | + +## Examples + +See [*`Server`*](../examples/server) in the tutorial. Here we also show some specific configurations: + +### Optimize the video encoding + +```python +... +dec = mpegCoder.MpegDecoder() +... +sev = mpegCoder.MpegServer() +sev.setParameter(decoder=dec, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, maxBframe=16) +... +``` + +### Rescale and resample the video + +```python +... +sev = mpegCoder.MpegServer() +sev.setParameter(width=1280, height=720, frameRate=(5, 1), GOPSize=12, codecName='libx265', videoAddress='rtsp://localhost:8554/video') +... +``` + +### Use multi-thread encoding + +```python +... +sev = mpegCoder.MpegServer() +sev.setParameter(nthread=8) +... +``` + +### Configure the ahead frame number manually + +```python +... +sev = mpegCoder.MpegServer() +sev.setParameter(decoder=d, codecName='libx265', videoAddress='rtsp://localhost:8554/video', GOPSize=24, frameAhead=48) +... +``` + +[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" +[python-mp]:https://docs.python.org/3/library/multiprocessing.html "multiprocessing | Python" +[wiki-gop]:https://en.wikipedia.org/wiki/Group_of_pictures "Group of pictures | Wikipedia" +[ffmpeg-stream]:https://trac.ffmpeg.org/wiki/StreamingGuide "FFMpeg used for streaming" +[ffmpeg-encoder]:https://ffmpeg.org/ffmpeg-codecs.html#toc-Video-Encoders "Video encoders of FFMpeg" +[ffmpeg-avrational]:https://ffmpeg.org/doxygen/trunk/structAVRational.html "AVRational" diff --git a/docs/apis/readme.mdx b/docs/apis/readme.mdx new file mode 100644 index 0000000..08f2b45 --- /dev/null +++ b/docs/apis/readme.mdx @@ -0,0 +1,37 @@ +--- +id: readme +title: readme +sidebar_label: readme +slug: /apis/readme +description: Use it to see README and some useful instructions. +--- + +import InlineIcon from '@site/src/components/InlineIcon'; +import mdiFunctionVariant from '@iconify-icons/mdi/function-variant'; +import octFileCode16 from '@iconify-icons/octicon/file-code-16'; + +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +

+ Function + + + Source + +

+ +```python +mpegCoder.readme() +``` + +A function used for showing a short README and updating logs. + +## Arguments + +This function does not has arguments. + +## Example + +```python +mpegCoder.readme() +``` diff --git a/docs/apis/setGlobal.mdx b/docs/apis/setGlobal.mdx new file mode 100644 index 0000000..a5ada90 --- /dev/null +++ b/docs/apis/setGlobal.mdx @@ -0,0 +1,43 @@ +--- +id: setGlobal +title: setGlobal +sidebar_label: setGlobal +slug: /apis/setGlobal +description: Set global configurations. +--- + +import InlineIcon from '@site/src/components/InlineIcon'; +import mdiFunctionVariant from '@iconify-icons/mdi/function-variant'; +import octFileCode16 from '@iconify-icons/octicon/file-code-16'; + +import { SourceURL, Splitter } from '@site/src/envs/variables'; + +

+ Function + + + Source + +

+ +```python +mpegCoder.setGlobal(dumpLevel=None) +``` + +A function used for setting global configurations. If a configuration is not specified, that item will not be changed. + +## Arguments + +### Requires + +| Argument | Type | Required |
Description
| +| :---------: | :----: | :--------: | :----------------------------- | +| `dumpLevel` | `int` | The level of dumped log. This level will only influence `mpegCoder` logs, FFMpeg logs and some codec logs. A few codec, like `libx265` is not influenced by this configuration. Avaliable values: `0`: Silent executing; `1`: (default) Dump basic informations; `2`: Dump all informations. | + +## Example + +### Disable all logs except errors + +```python +mpegCoder.setGlobal(dumpLevel=0) +``` diff --git a/docs/guides/examples/client.mdx b/docs/guides/examples/client.mdx index ff31941..c61cfa7 100644 --- a/docs/guides/examples/client.mdx +++ b/docs/guides/examples/client.mdx @@ -19,9 +19,9 @@ The following figure show the theory of `mpegCoder.MpegClient`. Assuming that we -When connecting to the remote server, `mpegCoder.MpegClient` would create a sub-thread ("*writer*" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two pointer maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting pointer is kept stepping each time a new frame is received. +When connecting to the remote server, `mpegCoder.MpegClient` would create a sub-thread ("*writer*" in the figure). The writer thread would work as a backend service, and keep accepting frames from the remote side, even if we do not read the frames. The accepted frames are stored in a circular buffer (In the figure, the buffer size is 12). There are two cursors maintained by the writer and the reader respectively (shown as the arrows connected to the threads in the figure). The writting cursor is kept stepping each time a new frame is received. -The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading pointer, and read several frames from the buffer. After the reading results are collected, the lock would be released. A locked position would not be updated. In other words, during the reading events, if the writting pointer moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10. +The reading events would be triggered by the Python-C-API. When a new reading event comes from the main thread, the reader would lock the current position of the reading cursor, and read several frames from the buffer. After the reading results are collected, the lock would be released. A locked position would not be updated. In other words, during the reading events, if the writting cursor moves to the locked position, the writer will wait until the reading is finished. Because the reading events are merely data-collecting operations, in most cases the reading events would not block the writer. If the writer is blocked for too long, the demuxing of the online stream may fail. So we recommend users to set a rational buffer size. For example, if we always read 5 frames each time, the buffer size is recommended to be double of the reading size, i.e. 10. ## Codes diff --git a/package.json b/package.json index 79e9700..65c3756 100644 --- a/package.json +++ b/package.json @@ -14,21 +14,21 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "2.0.0-beta.3", - "@docusaurus/preset-classic": "2.0.0-beta.3", - "@mdx-js/react": "^1.6.21", - "@svgr/webpack": "^5.5.0", + "@docusaurus/core": "^2.0.0-beta.3", + "@docusaurus/preset-classic": "^2.0.0-beta.3", "@iconify-icons/codicon": "^1.1.15", "@iconify-icons/mdi": "^1.1.15", "@iconify-icons/octicon": "^1.1.8", "@iconify/react": "^1.1.4", + "@mdx-js/react": "^1.6.21", + "@svgr/webpack": "^5.5.0", "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.1", - "sass": "^1.35.2", "file-loader": "^6.2.0", "prism-react-renderer": "^1.2.1", "react": "^17.0.1", "react-dom": "^17.0.1", + "sass": "^1.35.2", "url-loader": "^4.1.1" }, "browserslist": { @@ -43,4 +43,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/sidebars.js b/sidebars.js index 826a64b..edf39a0 100644 --- a/sidebars.js +++ b/sidebars.js @@ -35,6 +35,12 @@ module.exports = { ], apis: [ 'apis', + `apis/readme`, + `apis/setGlobal`, + `apis/MpegDecoder`, + `apis/MpegEncoder`, + `apis/MpegClient`, + `apis/MpegServer` ] // By default, Docusaurus generates a sidebar from the docs folder structure diff --git a/yarn.lock b/yarn.lock index 5c2621e..796c384 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1160,7 +1160,7 @@ "@docsearch/css" "3.0.0-alpha.37" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-beta.3": +"@docusaurus/core@2.0.0-beta.3", "@docusaurus/core@^2.0.0-beta.3": version "2.0.0-beta.3" resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.3.tgz#3af14897dcf5b73554314f6ed02c46cf0f463336" integrity sha512-vzKmQsvOCte9odf0ZRU2h5UzdI1km5D0NU3Ee6xn06VydYZ169B1IF5KV1LWHSYklnsEmzizJ/jeopFCry0cGg== @@ -1381,7 +1381,7 @@ sitemap "^7.0.0" tslib "^2.2.0" -"@docusaurus/preset-classic@2.0.0-beta.3": +"@docusaurus/preset-classic@^2.0.0-beta.3": version "2.0.0-beta.3" resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.3.tgz#44fe60bb73e671cce56a028c8731d97631fe57b2" integrity sha512-32B/7X3H8XX5jBqg23veEqNJ0JtKCG0Va+7wTX9+B36tMyPnsq3H3m0m5XICfX/NGfPICfjw/oCN2CEAYFd47Q== From e9fa39189344ea1fdd12ae39e394130dbb0e1d2c Mon Sep 17 00:00:00 2001 From: cainmagi Date: Mon, 26 Jul 2021 09:43:30 -0500 Subject: [PATCH 08/33] 7/26/2021 Refactor the introduction page. --- docs/introduction.mdx | 65 +++++++--- docusaurus.config.js | 2 +- package.json | 1 + src/components/FeatureCase.js | 20 ++++ src/components/FeatureCase.module.css | 13 ++ src/components/KeenSlider.js | 113 ++++++++++++++++++ src/components/KeenSlider.module.scss | 65 ++++++++++ src/envs/variables.js | 2 +- static/img/undraw_circuit_board_4c4d.svg | 1 + static/img/undraw_completing_6bhr.svg | 1 + static/img/undraw_compose_music_ovo2.svg | 1 + static/img/undraw_creativity_wqmm.svg | 1 + static/img/undraw_design_components_9vy6.svg | 1 + static/img/undraw_image_focus_wm20.svg | 1 + static/img/undraw_version_control_re_mg66.svg | 1 + static/img/undraw_video_files_fu10.svg | 1 + yarn.lock | 5 + 17 files changed, 276 insertions(+), 18 deletions(-) create mode 100644 src/components/FeatureCase.js create mode 100644 src/components/FeatureCase.module.css create mode 100644 src/components/KeenSlider.js create mode 100644 src/components/KeenSlider.module.scss create mode 100644 static/img/undraw_circuit_board_4c4d.svg create mode 100644 static/img/undraw_completing_6bhr.svg create mode 100644 static/img/undraw_compose_music_ovo2.svg create mode 100644 static/img/undraw_creativity_wqmm.svg create mode 100644 static/img/undraw_design_components_9vy6.svg create mode 100644 static/img/undraw_image_focus_wm20.svg create mode 100644 static/img/undraw_version_control_re_mg66.svg create mode 100644 static/img/undraw_video_files_fu10.svg diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 5370202..62b2aa7 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -5,27 +5,68 @@ description: The introduction of mpegCoder. The package mpegCoder is used for en slug: / --- +import Link from '@docusaurus/Link'; import DarkButton from '@site/src/components/DarkButton'; +import FeatureCase from '@site/src/components/FeatureCase'; +import KeenSlider from '@site/src/components/KeenSlider'; import IconExternalLink from '@theme/IconExternalLink'; import octLaw16 from '@iconify-icons/octicon/law-16'; import octRepoForked16 from '@iconify-icons/octicon/repo-forked-16'; import octShareAndroid16 from '@iconify-icons/octicon/share-android-16'; +import OverviewSvg from '/img/icon_python.svg'; + This project is also named as "*FFmpeg-Encoder-Decoder-for-Python*". It is implemented based on [FFMpeg][link-ffmpeg], [Python-C-API][link-python-c-api] and [C++11][link-cpp11]. It is under [GPL v3 License][git-license], and recommended for researching purposes. With this package, users could: -* Make use of **all** FFMpeg video encoders and decoders. When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters. -* Work with FFMpeg directly. This project invokes the FFMpeg C APIs in the bottom level. Unlike [ffmpeg-python][git-ffmpeg-python] and [pyffmpeg][git-pyffmpeg], our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is [`np.ndarray`][link-ndarray]. In other words, our project enables users to combine [Numpy][link-numpy] and FFMpeg directly. -* Frame-level APIs. Unlike [pyffmpeg][git-pyffmpeg], this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D [`np.ndarray`][link-ndarray]. -* Pre-compiled package. This package has been pre-compiled by the author. If users download the dependent dynamic libraries (`.so` or `.dll`), they do not need to compile the package by themself. + + + When decoding a video (or an online stream), like the original FFMpeg (C version), the provided APIs could detect the video format and codec format automatically. When encoding a video, users could control the codec format, bit rate and some other options by setting parameters. + + + This project invokes the FFMpeg C APIs in the bottom level. Unlike ffmpeg-python and pyffmpeg, our project is not driven by the FFMpeg CLI interfaces. The data format used by this package is np.ndarray. In other words, our project enables users to combine Numpy and FFMpeg directly. + + + Unlike pyffmpeg, this package is not a simple wrapper of FFMpeg. Users could works on the frame-level APIs. For example, when decoding a video, users could get the data frame-by-frame. Each frame is a 3D np.ndarray. + + + This package has been pre-compiled by the author. If users download the dependent dynamic libraries (.so or .dll), they do not need to compile the package by themself. + + However, users could not work with this project in such cases: -* Platform limited. Currently, we only support Linux and Windows. The Linux release is pre-compiled on Debian. It has been only tested in Ubuntu, Debian and Windows. In other cases, the pre-compiled library may not work. Users may need to compile the package by themselves. -* Version limited. Currently, our project only works with FFMpeg `4.4`. Users need to download the dependent dynamic libraries to make the package work. The legacy versions of this project supports FFMpeg `3.3`, `3.4.2` and `4.0`. However, the legacy built packages are not technically supported now. -* Audio not supported. Although the original FFMpeg supports both video and audio streams, our project only works on video streams. For example, if a video contains audio streams, our package would omit all audio frames in the bottom level. In other words, you **could not** perform audio analysis now. In the future (`v4`), we may support the audio frame analysis. -* Filters not supported. Although the original FFMpeg supports some video processing tools ([`avfilter`][link-avfilter] and [`postproc`][link-postproc]), our implementation drops these modules. Instead, we suggest that users should process the frames with [pillow][pip-pillow] or [openCV][pip-opencv]. On the other hand, our implementation still supports frame scaling and re-sampling (supported by [`swscale`][link-swscale] and [`swresample`][link-swresample]). + + + Currently, we only support Linux and Windows. The Linux release is pre-compiled on Debian. It has been only tested in Ubuntu, Debian and Windows. In other cases, the pre-compiled library may not work. Users may need to compile the package by themselves. + + + Currently, our project only works with FFMpeg 4.4. Users need to download the dependent dynamic libraries to make the package work. The legacy versions of this project supports FFMpeg 3.3, 3.4.2 and 4.0. However, the legacy built packages are not technically supported now. + + + Although the original FFMpeg supports both video and audio streams, our project only works on video streams. For example, if a video contains audio streams, our package would omit all audio frames in the bottom level. In other words, you could not perform audio analysis now. In the future (v4), we may support the audio frame analysis. + + + Although the original FFMpeg supports some video processing tools (avfilter and postproc), our implementation drops these modules. Instead, we suggest that users should process the frames with pillow or openCV. On the other hand, our implementation still supports frame scaling and re-sampling (supported by swscale and swresample). + + ## Related materials @@ -57,14 +98,6 @@ Contributor covenant code of conduct: [git-ffmpeg-python]:https://github.com/kkroening/ffmpeg-python "ffmpeg-python" [git-pyffmpeg]:https://github.com/deuteronomy-works/pyffmpeg "pyffmpeg" [git-license]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/master/LICENSE -[pip-pillow]:https://pypi.org/project/Pillow "Pillow" -[pip-opencv]:https://pypi.org/project/opencv-python "OpenCV Python" [link-cpp11]:https://en.cppreference.com/w/ "C++ 11" [link-python-c-api]:https://docs.python.org/3/c-api/index.html "Python-C-API" -[link-numpy]:https://numpy.org "Numpy" -[link-ndarray]:https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html "np.ndarray" [link-ffmpeg]:https://ffmpeg.org "FFMpeg" -[link-avfilter]:http://ffmpeg.org/doxygen/trunk/group__lavfi.html "libavfilter" -[link-postproc]:http://ffmpeg.org/doxygen/trunk/group__lpp.html "libpostproc" -[link-swscale]:http://ffmpeg.org/doxygen/trunk/group__libsws.html "libswscale" -[link-swresample]:http://ffmpeg.org/doxygen/trunk/group__lswr.html "libswresample" diff --git a/docusaurus.config.js b/docusaurus.config.js index 9492ad9..6a80728 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -96,7 +96,7 @@ module.exports = { ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, + copyright: `Copyright © ${new Date().getFullYear()} mpegCoder, Yuchen Jin. Built with Docusaurus.`, }, prism: { theme: lightCodeTheme, diff --git a/package.json b/package.json index 65c3756..cd1fd71 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.1", "file-loader": "^6.2.0", + "keen-slider": "^5.5.1", "prism-react-renderer": "^1.2.1", "react": "^17.0.1", "react-dom": "^17.0.1", diff --git a/src/components/FeatureCase.js b/src/components/FeatureCase.js new file mode 100644 index 0000000..bc79574 --- /dev/null +++ b/src/components/FeatureCase.js @@ -0,0 +1,20 @@ +import React from 'react'; +import styles from './FeatureCase.module.css'; + + +function FeatureCase({Svg, title, children}) { + return ( +
+
+ +
+
+

{title}

+

{children}

+
+
+ ); +} + + +export default FeatureCase; diff --git a/src/components/FeatureCase.module.css b/src/components/FeatureCase.module.css new file mode 100644 index 0000000..9dcb82c --- /dev/null +++ b/src/components/FeatureCase.module.css @@ -0,0 +1,13 @@ +/* stylelint-disable docusaurus/copyright-header */ + +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/src/components/KeenSlider.js b/src/components/KeenSlider.js new file mode 100644 index 0000000..d1ef327 --- /dev/null +++ b/src/components/KeenSlider.js @@ -0,0 +1,113 @@ +import React from 'react'; +import clsx from 'clsx'; + +import { useKeenSlider } from "keen-slider/react"; +import "keen-slider/keen-slider.scss"; +import styles from "./KeenSlider.module.scss"; + + +function ArrowLeft(props) { + const disabled = props.disabled ? " ${styles.disabled}" : "" + return ( + + + + ) +}; + + +function ArrowRight(props) { + const disabled = props.disabled ? ` ${styles.disabled}` : "" + return ( + + + + ) +}; + + +function KeenSlider(props) { + const [currentSlide, setCurrentSlide] = React.useState(0) + const [sliderRef, slider] = useKeenSlider({ + initial: props.initial !== undefined ? props.initial : 0, + slidesPerView: props.slidesPerView !== undefined ? props.slidesPerView : 1, + spacing: props.spacing !== undefined ? props.spacing : 15, + loop: props.loop !== undefined ? props.loop : true, + centered: props.centered !== undefined ? props.centered : true, + breakpoints: props.breakpoints !== undefined ? props.breakpoints : { + "(min-width: 768px)": { + slidesPerView: 2, + }, + "(min-width: 1280px)": { + slidesPerView: 3, + }, + "(min-width: 1920px)": { + slidesPerView: 4, + }, + "(min-width: 3096px)": { + slidesPerView: 5, + }, + }, + slideChanged(s) { + setCurrentSlide(s.details().relativeSlide) + }, + }) + + return ( + <> +
+
+ {props.children && ( + React.Children.map(props.children, child => { + return ( +
+ {child} +
+ ); + }) + )} +
+ {slider && ( + <> + e.stopPropagation() || slider.prev()} + disabled={currentSlide === 0} + /> + e.stopPropagation() || slider.next()} + disabled={currentSlide === slider.details().size - 1} + /> + + )} +
+ {slider && ( +
+ {[...Array(slider.details().size).keys()].map((idx) => { + return ( +
+ )} + + ) +} + + +export default KeenSlider; diff --git a/src/components/KeenSlider.module.scss b/src/components/KeenSlider.module.scss new file mode 100644 index 0000000..7694a14 --- /dev/null +++ b/src/components/KeenSlider.module.scss @@ -0,0 +1,65 @@ +/* stylelint-disable */ + +.navigationWrapper { + position: relative; +} + +.dots { + display: flex; + padding: 10px 0; + justify-content: center; + .dot { + border: none; + width: 10px; + height: 10px; + background: #c5c5c5; + html[data-theme='dark'] & { + background: #444; + } + border-radius: 50%; + margin: 0 5px; + padding: 5px; + cursor: pointer; + &:focus{ + outline: none; + } + &.active { + background: #000; + html[data-theme='dark'] & { + background: #fff; + } + } + } +} + +.arrow { + width: 30px; + height: 30px; + position: absolute; + top: 50%; + transform: translateY(-50%); + -webkit-transform: translateY(-50%); + fill: #0009; + html[data-theme='dark'] & { + fill: #fff9; + } + cursor: pointer; + &.left { + left: 5px; + } + &.right { + left: auto; + right: 5px; + } + &.disabled { + fill: #6668; + html[data-theme='dark'] &.disabled { + fill: #aaa8; + } + } +} + +.slideItem { + min-height: 5em; + margin: 0 auto; +} diff --git a/src/envs/variables.js b/src/envs/variables.js index b1fb2bc..ce02b4a 100644 --- a/src/envs/variables.js +++ b/src/envs/variables.js @@ -7,7 +7,7 @@ import React from 'react'; import Link from '@docusaurus/Link'; const variables = { - sourceURL: 'https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/c2f41bfc95c9c87f91e3a6f59df9b2e6b66e683b/MpegCoder' + sourceURL: 'https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/blob/e5d48b9c65152a303eddccbe65dad8059d0556ae/MpegCoder' }; function SourceURL(props) { diff --git a/static/img/undraw_circuit_board_4c4d.svg b/static/img/undraw_circuit_board_4c4d.svg new file mode 100644 index 0000000..8ced3fb --- /dev/null +++ b/static/img/undraw_circuit_board_4c4d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/undraw_completing_6bhr.svg b/static/img/undraw_completing_6bhr.svg new file mode 100644 index 0000000..d8e4c74 --- /dev/null +++ b/static/img/undraw_completing_6bhr.svg @@ -0,0 +1 @@ +3333 \ No newline at end of file diff --git a/static/img/undraw_compose_music_ovo2.svg b/static/img/undraw_compose_music_ovo2.svg new file mode 100644 index 0000000..b5cfd3a --- /dev/null +++ b/static/img/undraw_compose_music_ovo2.svg @@ -0,0 +1 @@ +compose music \ No newline at end of file diff --git a/static/img/undraw_creativity_wqmm.svg b/static/img/undraw_creativity_wqmm.svg new file mode 100644 index 0000000..3090892 --- /dev/null +++ b/static/img/undraw_creativity_wqmm.svg @@ -0,0 +1 @@ +creativity \ No newline at end of file diff --git a/static/img/undraw_design_components_9vy6.svg b/static/img/undraw_design_components_9vy6.svg new file mode 100644 index 0000000..7242a70 --- /dev/null +++ b/static/img/undraw_design_components_9vy6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/undraw_image_focus_wm20.svg b/static/img/undraw_image_focus_wm20.svg new file mode 100644 index 0000000..69eef9e --- /dev/null +++ b/static/img/undraw_image_focus_wm20.svg @@ -0,0 +1 @@ +image_focus \ No newline at end of file diff --git a/static/img/undraw_version_control_re_mg66.svg b/static/img/undraw_version_control_re_mg66.svg new file mode 100644 index 0000000..06bd281 --- /dev/null +++ b/static/img/undraw_version_control_re_mg66.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/undraw_video_files_fu10.svg b/static/img/undraw_video_files_fu10.svg new file mode 100644 index 0000000..6d0f339 --- /dev/null +++ b/static/img/undraw_video_files_fu10.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 796c384..a286e6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5233,6 +5233,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +keen-slider@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/keen-slider/-/keen-slider-5.5.1.tgz#1493f552eadf0f5b8229defd83c626eb6dd58c13" + integrity sha512-QXGZGt5Hbe0YufR/RYbOG03MmOk43RQEXqkkSvjr8ZS67sVR7LRp5RIvJALfjl+A7BnHNr1wd1QBOemwy65Lfw== + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" From d48a26b6f13c19226b2e19309b55f18849c36d6b Mon Sep 17 00:00:00 2001 From: cainmagi Date: Mon, 26 Jul 2021 09:58:08 -0500 Subject: [PATCH 09/33] 7/26/2021 - 3 Try to fix a bug caused by keen-slider. --- src/components/KeenSlider.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/components/KeenSlider.js b/src/components/KeenSlider.js index d1ef327..5c90bd4 100644 --- a/src/components/KeenSlider.js +++ b/src/components/KeenSlider.js @@ -54,9 +54,6 @@ function KeenSlider(props) { "(min-width: 1920px)": { slidesPerView: 4, }, - "(min-width: 3096px)": { - slidesPerView: 5, - }, }, slideChanged(s) { setCurrentSlide(s.details().relativeSlide) @@ -91,7 +88,7 @@ function KeenSlider(props) { )}
{slider && ( -
+
{[...Array(slider.details().size).keys()].map((idx) => { return (
{slider && ( -
- {[...Array(slider.details().size).keys()].map((idx) => { +
+ {[...Array(slidesSize).keys()].map((idx) => { return (
{slider && (
- {[...Array(slidesSize).keys()].map((idx) => { - console.log({'idx': idx, 'checkidx': idx.toString()}) + {Array(slidesSize).keys().map((idx) => { return (
{slider && (
- {Array(slidesSize).keys().map((idx) => { + {Array.from(Array(slidesSize).keys()).map((idx) => { return (
{slider && (
- {Array.from(Array(slidesSize).keys()).map((idx) => { + {Array.from(Array(slider.details().size).keys()).map((idx) => { return (