├── .editorconfig ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── build-docker-image.sh ├── bundle-client.sh ├── client ├── .babelrc ├── .gitignore ├── config │ ├── custom-environment-variables.toml │ ├── default.toml │ └── production.toml ├── next.config.js ├── package.json ├── public │ └── img │ │ └── header-background.jpg ├── src │ ├── .babelrc │ ├── backend │ │ ├── auth.js │ │ ├── getMeta.js │ │ ├── listClips.js │ │ └── requireAuth.js │ ├── checkLogin.js │ ├── components │ │ ├── ClipfaceLayout.jsx │ │ ├── Container.jsx │ │ ├── CopyClipLink.jsx │ │ └── Pagination.jsx │ ├── createSingleClipToken.js │ ├── localSettings.js │ ├── pages │ │ ├── _app.jsx │ │ ├── _document.jsx │ │ ├── api │ │ │ ├── create-single-clip-token.js │ │ │ ├── login.js │ │ │ ├── logout.js │ │ │ └── video │ │ │ │ └── [name].js │ │ ├── index.jsx │ │ ├── login.jsx │ │ └── watch │ │ │ └── [name].jsx │ └── util.js └── yarn.lock └── screenshots ├── clip-list.png └── watch-page.png /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.md] 11 | trim_trailing_whitespace = false 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .env 3 | .envrc 4 | *.log 5 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | 3 | # App setup 4 | 5 | ADD client/docker-bundle.tgz / 6 | 7 | WORKDIR /app 8 | 9 | RUN yarn --prod 10 | 11 | # Configuration 12 | 13 | ENV NODE_CONFIG_DIR=/config 14 | ENV NODE_ENV production 15 | ENV PORT 80 16 | EXPOSE 80 17 | VOLUME /clips 18 | VOLUME /config 19 | 20 | CMD yarn start -p ${PORT} 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [year] [fullname] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Clippy Mc. Clipface 2 | 3 | Super simple, self hosted clip sharing application. 4 | 5 | ## Features 6 | 7 | - Simple, intuitive user interface 8 | - No config required, hosts your existing clip folder 9 | - Super simple deployement with official Docker image 10 | - Simple but informative clip list with real time search 11 | - Optional authentication to protect your clips 12 | - "Copy public link" for copying clip links that circumvents user 13 | authentication for a single clip 14 | - Uses OpenGraph metadata so videos are automatically embedded in Facebook 15 | posts, Discord messages etc. 16 | 17 | ![Watch page](screenshots/watch-page.png) 18 | 19 | ![Clip list](screenshots/clip-list.png) 20 | 21 | ## Usage with Docker 22 | 23 | First of all pull the Docker image: 24 | 25 | ``` 26 | $ docker pull tomsan/clipface 27 | ``` 28 | 29 | Very simple usage, no authentication, port 80: 30 | 31 | ``` 32 | docker run -d \ 33 | --name clipface \ 34 | -v /host/path/to/clips:/clips \ 35 | -p 80:80 \ 36 | tomsan/clipface:latest 37 | ``` 38 | 39 | For more advanced usage, you need to provide Clipface with some 40 | configuration. (See [Configuration](#configuration).) Here is an example 41 | where we require authentication and set the clip list page title to "Bob's 42 | clips": 43 | 44 | ``` 45 | docker run -d \ 46 | --name clipface \ 47 | -v /host/path/to/clips:/clips \ 48 | -p 80:80 \ 49 | -e CLIPFACE_USER_PASSWORD="password123" \ 50 | -e CLIPFACE_CLIPS_PAGE_TITLE="Bob's clips" \ 51 | tomsan/clipface:latest 52 | ``` 53 | 54 | ## Configuration 55 | 56 | Clipface uses [node-config](https://github.com/lorenwest/node-config) for 57 | configuration management. This means that Clipface can be configured using a 58 | config file or by setting environment variables (or both.) For Docker 59 | deployments, using environment variables is the most convenient option. 60 | 61 | If you would rather use a config file than environment variables, you can 62 | use [config/default.toml](client/config/default.toml) as a reference. Mount the 63 | resulting file to `/config/local.toml` inside the container. Any setting you 64 | put in your config file will override the corresponding setting from the 65 | default config file. If you want to leave a parameter at its default value, 66 | simply omit it from your config file. 67 | 68 | List of config parameters: 69 | 70 | - `clips_path` - The absolute path of the directory containing the clips 71 | that Clipface should host. This defaults to `"/clips"`, which is a 72 | convenient value for Docker images. 73 | 74 | **Default value**: `"/clips"`
75 | **Environment variable**: `CLIPFACE_CLIPS_PATH` 76 | 77 | - `pagination` - If true, the clip list will be split into pages. This is 78 | highly recommended if your clip count is in the hundreds, as it will hugely 79 | improve the responsiveness of the site. The end user can choose the amount of 80 | clips displayed per page. 81 | 82 | **Default value**: `true`
83 | **Environment variable**: `CLIPFACE_PAGINATION` 84 | 85 | - `user_password` - A password used to protect this Clipface instance. If 86 | set, users must input this password before they can watch any clips or see 87 | the list of clips. By default this parameter is not set, which will allow 88 | anybody to browse and watch all your clips. 89 | 90 | **Default value**: *(unset)*
91 | **Environment variable**: `CLIPFACE_USER_PASSWORD` 92 | 93 | - `secure_cookies` - If set to true (which is the default value), the 94 | "secure" setting will be used for the authication cookie, which means the 95 | cookie will only be included when using SSL (HTTPS). If you are not using 96 | SSL, you need to set this option to false, or authentication won't work. 97 | 98 | **Default value**: `true`
99 | **Environment variable**: `CLIPFACE_SECURE_COOKIES` 100 | 101 | - `header_title` - Title displayed in the header on all pages 102 | 103 | **Default value**: `"Clippy Mc. Clipface"`
104 | **Environment variable**: `CLIPFACE_HEADER_TITLE` 105 | 106 | - `clips_page_title` - Title displayed on the clip list page 107 | 108 | If not set (which is the default), no title will be displayed and the 109 | header will be significantly smaller. 110 | 111 | **Default value**: *(unset)*
112 | **Environment variable**: `CLIPFACE_CLIPS_PAGE_TITLE` 113 | 114 | ## NGINX reverse proxy with SSL 115 | 116 | For the best security, you should run Clipface behind a SSL-enabled reverse 117 | proxy, especially if you are using authentication. Otherwise, passwords will 118 | be transferred in plain text over the internet, which is always a bad idea. 119 | 120 | Here is an example NGINX configuration that uses certificates from Let's 121 | Encrypt: 122 | 123 | ```nginx 124 | server { 125 | listen 443 ssl http2; 126 | listen [::]:443 ssl http2; 127 | server_name my-clipface-domain.com; 128 | 129 | ssl_certificate /etc/letsencrypt/live/my-clipface-domain.com/fullchain.pem; 130 | ssl_certificate_key /etc/letsencrypt/live/my-clipface-domain.com/privkey.pem; 131 | 132 | # SSL config below generated by: ssl-config.mozilla.org 133 | 134 | ssl_session_timeout 1d; 135 | ssl_session_cache shared:MozSSL:10m; # about 40000 sessions 136 | ssl_session_tickets off; 137 | 138 | ssl_dhparam dhparam.pem; 139 | 140 | # Intermediate configuration 141 | ssl_protocols TLSv1.2 TLSv1.3; 142 | ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; 143 | ssl_prefer_server_ciphers off; 144 | 145 | # HSTS (ngx_http_headers_module is required) (63072000 seconds) 146 | add_header Strict-Transport-Security "max-age=63072000" always; 147 | 148 | # OCSP stapling 149 | ssl_stapling on; 150 | ssl_stapling_verify on; 151 | 152 | # Replace with the IP address of your resolver 153 | resolver 1.1.1.1 1.1.2.2; 154 | 155 | location / { 156 | proxy_pass http://clipface/; 157 | proxy_set_header X-Forwarded-Host $host; 158 | proxy_set_header X-Forwarded-Proto $scheme; 159 | proxy_connect_timeout 3s; 160 | proxy_send_timeout 10s; 161 | proxy_read_timeout 300s; 162 | client_max_body_size 100m; 163 | } 164 | } 165 | ``` 166 | 167 | You must replace the URL in `proxy_pass http://clipface/` with your local 168 | Clipface address, for example `http://127.0.0.1:3000`. In my case I'm 169 | running both Clipface and NGINX as Docker containers in the same Docker 170 | network, so I'm simply referring to Clipface by its container name, 171 | "clipface". 172 | 173 | **NB:** The "X-Forwarded-\*" headers are required for the server to know its 174 | own URL, which is needed for certain server-side rendered meta tags. If you 175 | don't configure these headers, things like embedding Discord videos will 176 | fail. 177 | 178 | **NB:** This config assumes you have the file "dhparam.pem" in your NGINX 179 | root config directory. If you don't, you can generate it like this: `openssl 180 | dhparam -out /my/nginx/config/path/dhparam.pem 2048`. 181 | 182 | **NB:** The `Strict-Transport-Security` header informs browsers to always use 183 | HTTPS towards your domain. This will break any HTTP (not HTTPS) applications 184 | you are hosting on your domain, so enable with care. 185 | 186 | ## Authentication 187 | 188 | Clipface supports simple password authentication by setting the 189 | `user_password` option in the config file. This will redirect users to a 190 | login screen where the configured password must be entered before the user 191 | can proceed. 192 | 193 | For security reasons, the hashed password is stored in a HTTP-only cookie. 194 | Clipface assumes (again for security reasons) that you will be running it 195 | behind a reverse proxy with SSL enabled, so the "secure_cookies" config 196 | option defaults to `true`. This means that the authentication cookie is 197 | created with the "secure" flag, which means it will only be transferred when 198 | the HTTPS protocol is used. If you are running Clipface without SSL (not 199 | using HTTPS), you should set the "secure_cookies" option to `false` in the 200 | config file, otherwise authentication will not work. Be aware that passwords 201 | will be transferred in plain text in this case. 202 | 203 | If you see any issues or have any concerns about security, please [open an 204 | issue on Github](https://github.com/Hubro/clipface/issues/new). 205 | 206 | ## Single clip tokens 207 | 208 | Clipface will automatically generate single clip authentication tokens when 209 | the "Copy public link" button is pressed. These tokens only allow access to 210 | a single clip. 211 | 212 | They are generated by hashing the clip name with the configured user 213 | password (plus some salt). This means that all single clip auth tokens can 214 | be invalidated by changing the user password. Single clip auth tokens for a 215 | specific clip can be invalidated by renaming the clip. 216 | 217 | ## Roadmap 218 | 219 | See the [Milestones][milestones] on GitHub for planned features. 220 | 221 | [milestones]: https://github.com/Hubro/clipface/milestones?direction=asc&sort=title&state=open 222 | 223 | ## Troubleshooting 224 | 225 | If you have an issue with Clipface, please skim the list of known issues below. 226 | If they don't apply to you, please ask a question in the 227 | [Discussions][discussions] page or open a [new issue][new-issue]. 228 | 229 | [discussions]: https://github.com/Hubro/clipface/discussions 230 | [new-issue]: https://github.com/Hubro/clipface/issues/new 231 | 232 | ### Embeds in Discord are slow / not loading 233 | 234 | This is probably not an issue with Clipface. Discord seems to have an issue 235 | with larger clips, since all clips are proxied through Discord's servers. Clips 236 | above 100MB will fail entirely. Ref: https://github.com/Hubro/clipface/issues/20#issuecomment-898934004 237 | 238 | If your clips are of a reasonable bitrate and size, please confirm that the 239 | server you are hosting Clipface on has sufficient bandwidth. 240 | -------------------------------------------------------------------------------- /build-docker-image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xe 4 | 5 | cd client 6 | rm -rf .next 7 | yarn 8 | yarn build 9 | cd .. 10 | 11 | bash ./bundle-client.sh 12 | docker build --network=host -t clipface:latest . 13 | rm client/docker-bundle.tgz 14 | -------------------------------------------------------------------------------- /bundle-client.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This script bundles the built application into a neat tar archive that can be 4 | # added to the Docker image in one operation, reducing the number of images. 5 | # 6 | 7 | set -xe 8 | 9 | cd client 10 | 11 | TMPDIR="$(mktemp -d)" 12 | CLEANUP+=($TMPDIR) 13 | 14 | mkdir $TMPDIR/app 15 | 16 | cp package.json $TMPDIR/app 17 | cp yarn.lock $TMPDIR/app 18 | cp next.config.js $TMPDIR/app 19 | cp -r .next $TMPDIR/app 20 | cp -r public/ $TMPDIR/app 21 | cp -r config $TMPDIR 22 | 23 | rm -f $TMPDIR/config/local.toml | true # Don't deploy the local config file 24 | 25 | tar -czf docker-bundle.tgz -C $TMPDIR . 26 | -------------------------------------------------------------------------------- /client/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["next/babel"], 3 | "plugins": [["babel-plugin-styled-components", { "ssr": true }]] 4 | } 5 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Local config file 3 | /config/local.toml 4 | 5 | # Auto-generated files and directories 6 | /yarn.lock 7 | /node_modules 8 | /.next 9 | -------------------------------------------------------------------------------- /client/config/custom-environment-variables.toml: -------------------------------------------------------------------------------- 1 | # 2 | # Contains environment variable config mapping 3 | # 4 | # See: https://github.com/lorenwest/node-config/wiki/Environment-Variables#custom-environment-variables 5 | # 6 | clips_path = "CLIPFACE_CLIPS_PATH" 7 | user_password = "CLIPFACE_USER_PASSWORD" 8 | secure_cookies = "CLIPFACE_SECURE_COOKIES" 9 | clips_page_title = "CLIPFACE_CLIPS_PAGE_TITLE" 10 | header_title = "CLIPFACE_HEADER_TITLE" 11 | pagination = "CLIPFACE_PAGINATION" 12 | -------------------------------------------------------------------------------- /client/config/default.toml: -------------------------------------------------------------------------------- 1 | # 2 | # Default config for Clipface 3 | # 4 | # Each option is documented in README.md 5 | # 6 | clips_path = "/clips" 7 | # user_password = 8 | secure_cookies = true 9 | # clips_page_title = 10 | header_title = "Clippy Mc. Clipface" 11 | pagination = true 12 | -------------------------------------------------------------------------------- /client/config/production.toml: -------------------------------------------------------------------------------- 1 | # This file is only here to silence a warning from node-config 2 | -------------------------------------------------------------------------------- /client/next.config.js: -------------------------------------------------------------------------------- 1 | const config = require("config"); 2 | 3 | module.exports = { 4 | publicRuntimeConfig: { 5 | // Will be available on both server and client 6 | headerTitle: config.get("header_title"), 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clipface", 3 | "version": "1.0.0", 4 | "author": "Tomas Sandven", 5 | "license": "MIT", 6 | "private": true, 7 | "dependencies": { 8 | "@tippyjs/react": "^4.2.0", 9 | "bcrypt": "^5.0.0", 10 | "config": "^3.3.6", 11 | "cookie": "^0.4.1", 12 | "glob": "^7.1.7", 13 | "lodash": "^4.17.20", 14 | "mime-types": "^2.1.30", 15 | "next": "^11.1.0", 16 | "pretty-bytes": "^5.3.0", 17 | "prop-types": "^15.7.2", 18 | "react": "^17.0.2", 19 | "react-detect-click-outside": "^1.1.1", 20 | "react-dom": "^17.0.2", 21 | "react-markdown": "^5.0.3", 22 | "react-timeago": "^4.4.0", 23 | "reactjs-popup": "^2.0.5", 24 | "styled-components": "^5.1.1", 25 | "tippy.js": "^6.2.7", 26 | "toml": "^3.0.0" 27 | }, 28 | "scripts": { 29 | "dev": "next", 30 | "build": "next build", 31 | "start": "next start", 32 | "gensalt": "node -e \"const bcrypt = require('bcrypt'); console.log(bcrypt.genSaltSync())\"" 33 | }, 34 | "devDependencies": { 35 | "prettier": "^2.3.2", 36 | "typescript": "^4.3.5", 37 | "typescript-language-server": "^0.6.1" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /client/public/img/header-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hubro/clipface/920d2be93a902caa1d1fb72adc4c867983cbf7a0/client/public/img/header-background.jpg -------------------------------------------------------------------------------- /client/src/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["next/babel"], 3 | "plugins": [["styled-components", { "ssr": true }]] 4 | } 5 | -------------------------------------------------------------------------------- /client/src/backend/auth.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Handles authentication 3 | * 4 | * This module should only be imported from server code. 5 | */ 6 | 7 | import bcrypt from "bcrypt"; 8 | import cookie from "cookie"; 9 | import path from "path"; 10 | import config from "config"; 11 | 12 | /** 13 | * Middleware for handling authentication 14 | * 15 | * If no authentication is configured, this wrapper does nothing. 16 | * 17 | * @param {function} handler 18 | * @returns {function} 19 | */ 20 | export function useAuth(handler) { 21 | const wrapper = async (req, res) => { 22 | if (await checkAuth(req)) { 23 | return handler(req, res); 24 | } else if (await checkSingleClipAuth(req)) { 25 | return handler(req, res); 26 | } else { 27 | res.statusCode = 401; 28 | res.end(); 29 | return; 30 | } 31 | }; 32 | 33 | return wrapper; 34 | } 35 | 36 | /** 37 | * Checks authentication given a http.IncomingMessage object 38 | * 39 | * @async 40 | * @param {IncomingMessage} req See https://nodejs.org/api/http.html 41 | * @returns {Promise} Whether or not the user is authenticated 42 | */ 43 | export async function checkAuth(req) { 44 | // Fetches the auth token (the hashed user password) from the cookie, or 45 | // null if none is found 46 | const getAuthToken = () => { 47 | const rawCookie = req.headers["cookie"]; 48 | 49 | if (!rawCookie) { 50 | return null; 51 | } 52 | 53 | return cookie.parse(rawCookie)["auth"] || null; 54 | }; 55 | 56 | // Always succeed auth check when no user authentication has been configured 57 | if (!config.has("user_password")) { 58 | return true; 59 | } 60 | 61 | const authToken = getAuthToken(); 62 | 63 | return authToken && (await checkHashedPassword("default", authToken)); 64 | } 65 | 66 | /** 67 | * Checks if this request has a valid single clip authentication token 68 | * 69 | * @param {http.IncomingMessage} req 70 | * @returns {Promise} 71 | */ 72 | export async function checkSingleClipAuth(req) { 73 | const url = new URL(req.url, `http://${req.headers.host}`); 74 | const token = getToken(req); 75 | 76 | // Paths that should be validated by the single clip auth token 77 | const clipPaths = ["/watch", "/api/video"]; 78 | 79 | const dirname = path.dirname(url.pathname); 80 | const clipname = decodeURIComponent(path.basename(url.pathname)); 81 | 82 | if (token && clipPaths.includes(dirname)) { 83 | const singlePageAuthenticated = await checkSingleClipToken(token, clipname); 84 | 85 | return singlePageAuthenticated; 86 | } 87 | 88 | return false; 89 | } 90 | 91 | /** 92 | * Checks if a hashed password is valid 93 | * 94 | * @async 95 | * @param {string} user 96 | * @param {string} password 97 | * @returns {Promise<(object|null)>} Resulting hash, or null if login failed 98 | */ 99 | export async function checkHashedPassword(user, hashedPassword) { 100 | if (user != "default") { 101 | throw "Logging in as non-default user is not yet supported"; 102 | } 103 | 104 | const userPassword = config.get("user_password"); 105 | 106 | return await bcrypt.compare(userPassword, hashedPassword); 107 | } 108 | 109 | /** 110 | * Hashes a password using bcrypt 111 | * 112 | * @async 113 | * @param {string} password 114 | * @return {Promise} The hashed password 115 | */ 116 | export async function hashPassword(password) { 117 | const salt = await bcrypt.genSalt(); 118 | 119 | return await bcrypt.hash(password, salt); 120 | } 121 | 122 | /** 123 | * Generates a token that will authenticate the user for viewing a single clip. 124 | * 125 | * This is done by hashing the name of the clip with the configured user 126 | * password. This means that all public clip links can be invalidated by 127 | * changing the user password, or the link for a single clip can be 128 | * invalidated by renaming the clip. 129 | * 130 | * @async 131 | * @param {string} clipName 132 | * @returns {string} The token 133 | */ 134 | export async function makeSingleClipToken(clipName) { 135 | console.debug("Generating single clip token for clip:", clipName); 136 | 137 | if (!config.has("user_password")) { 138 | throw "Can't generate single clip tokens with no configured user password"; 139 | } 140 | 141 | const userPassword = config.get("user_password"); 142 | 143 | const salt = await bcrypt.genSalt(); 144 | const token = await bcrypt.hash(userPassword + clipName, salt); 145 | 146 | console.debug("Generated single clip token:", token); 147 | 148 | return token; 149 | } 150 | 151 | /** 152 | * Checks if a single page token is valid for the given path 153 | * 154 | * @async 155 | * @param {string} token 156 | * @param {string} clipName 157 | * @returns {Promise} 158 | */ 159 | export async function checkSingleClipToken(token, clipName) { 160 | console.debug("Validating token", token, "for clip name", clipName); 161 | 162 | if (!config.has("user_password")) { 163 | throw "Can't validate single clip tokens with no configured user password"; 164 | } 165 | 166 | const userPassword = config.get("user_password"); 167 | const result = await bcrypt.compare(userPassword + clipName, token); 168 | 169 | console.debug("Result", result); 170 | 171 | return result; 172 | } 173 | 174 | /** 175 | * Helper for fetching the token from a http.IncomingMessage object 176 | * 177 | * @param {http.IncomingMessage} req 178 | * @returns {string|null} 179 | */ 180 | export function getToken(req) { 181 | const url = new URL(req.url, `http://${req.headers.host}`); 182 | 183 | if (url.searchParams.has("token")) { 184 | // Token is Base64 encoded 185 | try { 186 | return Buffer.from(url.searchParams.get("token"), "base64").toString(); 187 | } catch (e) { 188 | console.error("Failed to get token from query params:", e); 189 | return null; 190 | } 191 | } 192 | 193 | return null; 194 | } 195 | -------------------------------------------------------------------------------- /client/src/backend/getMeta.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Exports a function for fetching clip metadata 3 | */ 4 | 5 | import fs from "fs"; 6 | import path from "path"; 7 | import config from "config"; 8 | 9 | import * as mime from "mime-types"; 10 | 11 | const CLIPS_PATH = config.get("clips_path"); 12 | 13 | /** 14 | * Returns metadata for a clip 15 | * 16 | * @param {string} clipFileName The name of the clip including the file extension 17 | * @returns {object} 18 | */ 19 | export default function getMeta(clipFileName) { 20 | const stats = fs.statSync(path.join(CLIPS_PATH, clipFileName)); 21 | const clipBaseName = path.basename(clipFileName, path.extname(clipFileName)); 22 | 23 | let meta = null; 24 | const metadataPath = path.join(CLIPS_PATH, clipBaseName + ".json"); 25 | 26 | try { 27 | meta = JSON.parse(fs.readFileSync(metadataPath)); 28 | } catch { 29 | meta = {}; 30 | } 31 | 32 | return { 33 | name: clipFileName, 34 | mime: mime.lookup(clipFileName), 35 | size: stats.size, 36 | saved: stats.mtimeMs, 37 | title: meta.title || null, 38 | description: meta.description || null, 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /client/src/backend/listClips.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Lists all clips 3 | * 4 | * This module should only be imported from server side code. 5 | */ 6 | 7 | import fs from "fs"; 8 | import path from "path"; 9 | import glob from "glob"; 10 | import config from "config"; 11 | 12 | const CLIPS_PATH = config.get("clips_path"); 13 | const CLIPS_GLOB = `${CLIPS_PATH}/*.@(mkv|mp4|webm|mov|mpeg|avi|wmv|json)`; 14 | 15 | export default function listClips() { 16 | let clips = glob.sync(CLIPS_GLOB).sort().reverse(); 17 | 18 | const clipsMeta = {}; 19 | 20 | clips 21 | .filter((clipPath) => clipPath.endsWith(".json")) 22 | .forEach((metaPath) => { 23 | clipsMeta[path.basename(metaPath, ".json")] = JSON.parse( 24 | fs.readFileSync(metaPath) 25 | ); 26 | }); 27 | 28 | // Remove the metadata files from the clip list 29 | clips = clips.filter((clipPath) => !clipPath.endsWith(".json")); 30 | 31 | return clips.map((filePath) => { 32 | const stats = fs.statSync(filePath); 33 | const fileName = path.basename(filePath, path.extname(filePath)); 34 | const meta = clipsMeta[fileName] || {}; 35 | 36 | return { 37 | name: path.basename(filePath), 38 | size: stats.size, 39 | saved: stats.mtimeMs, 40 | title: meta.title || null, 41 | description: meta.description || null, 42 | }; 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /client/src/backend/requireAuth.js: -------------------------------------------------------------------------------- 1 | /* Convenience wrapper for getServerSideProps to enforce authentication */ 2 | 3 | import config from "config"; 4 | 5 | import { checkAuth, checkSingleClipAuth, getToken } from "./auth"; 6 | 7 | /** 8 | * Wrapper around getServerSideProps to enforce authentication 9 | * 10 | * This handles regular user authentication as well as single page 11 | * authentication. 12 | * 13 | * @param {function} fn 14 | * @returns {function} 15 | */ 16 | export default function (fn) { 17 | return async (context) => { 18 | const authenticated = await checkAuth(context.req); 19 | const singlePageAuthenticated = await checkSingleClipAuth(context.req); 20 | 21 | if ( 22 | !authenticated && 23 | !singlePageAuthenticated && 24 | context.req.url != "/login" 25 | ) { 26 | return { 27 | redirect: { 28 | destination: "/login?next=" + encodeURIComponent(context.req.url), 29 | permanent: false, 30 | }, 31 | }; 32 | } 33 | 34 | const props = await fn(context); 35 | 36 | if (props.props) { 37 | var authStatus; 38 | 39 | if (!config.has("user_password")) { 40 | authStatus = "NO_AUTHENTICATION"; 41 | } else if (authenticated) { 42 | authStatus = "AUTHENTICATED"; 43 | } else if (singlePageAuthenticated) { 44 | authStatus = "SINGLE_PAGE_AUTHENTICATED"; 45 | } else { 46 | throw "Unexpected situation"; 47 | } 48 | 49 | props.props.authInfo = { status: authStatus }; 50 | 51 | if (singlePageAuthenticated) { 52 | props.props.authInfo.token = getToken(context.req); 53 | } 54 | } 55 | 56 | return props; 57 | }; 58 | } 59 | -------------------------------------------------------------------------------- /client/src/checkLogin.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Function for checking login status 3 | */ 4 | 5 | /** 6 | * Checks the login status with the API 7 | * 8 | * @async 9 | * @returns {Promise} 10 | */ 11 | export default async function checkLogin() { 12 | const response = await fetch("/api/check-login"); 13 | return await response.json(); 14 | } 15 | -------------------------------------------------------------------------------- /client/src/components/ClipfaceLayout.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * The base layout of the application 3 | */ 4 | 5 | import { useRouter } from "next/router"; 6 | import styled from "styled-components"; 7 | import getConfig from "next/config"; 8 | import Container from "./Container"; 9 | 10 | const { publicRuntimeConfig } = getConfig(); 11 | 12 | const Header = styled.header` 13 | background-image: url(/img/header-background.jpg); 14 | background-size: 1920px auto; 15 | background-position: center center; 16 | background-repeat: no-repeat; 17 | `; 18 | 19 | const NavbarContainer = styled(Container)` 20 | min-height: 3.25rem; 21 | display: flex; 22 | align-items: center; 23 | width: 100%; 24 | `; 25 | 26 | const NavbarMenu = styled.div` 27 | flex: 1; 28 | display: flex; 29 | justify-content: end; 30 | ` 31 | 32 | const ApplicationDiv = styled.div` 33 | padding: 50px 0; 34 | position: static; 35 | 36 | @media (max-width: 1344px) { 37 | padding: 20px 0; 38 | } 39 | `; 40 | 41 | const Footer = styled.footer` 42 | position: absolute; 43 | right: 0px; 44 | bottom: 0px; 45 | left: 0px; 46 | height: 33px; 47 | 48 | display: flex; 49 | align-items: center; 50 | 51 | background-color: rgba(0, 0, 0, 0.07); 52 | color: rgba(0, 0, 0, 0.7); 53 | text-align: center; 54 | font-size: 0.8rem; 55 | 56 | i { 57 | position: relative; 58 | top: 1px; 59 | font-size: 1rem; 60 | margin-right: 2px; 61 | } 62 | 63 | a, 64 | a:hover, 65 | a:visited { 66 | padding: 6px; 67 | color: rgba(0, 0, 0, 0.75); 68 | } 69 | 70 | .dot { 71 | margin: 0px 4px; 72 | } 73 | `; 74 | 75 | export function ClipfaceLayout({ 76 | children, 77 | authInfo = { status: "NOT_AUTHENTICATED" }, 78 | pageName = null, 79 | pageTitle = null, 80 | pageSubtitle = null, 81 | }) { 82 | const router = useRouter(); 83 | const contentClassName = pageName ? `page-${pageName}` : ''; 84 | 85 | const onSignOut = () => { 86 | logout().then((ok) => { 87 | if (ok) { 88 | router.push("/login"); 89 | } else { 90 | alert("Failed to log out, please check your network connection"); 91 | } 92 | }); 93 | }; 94 | 95 | return ( 96 | <> 97 |
98 |
99 | 115 |
116 | 117 | {pageTitle && ( 118 |
119 |
120 |

{pageTitle}

121 | 122 | {pageSubtitle &&

{subtitle}

} 123 |
124 |
125 | )} 126 |
127 | 128 | 129 | {children} 130 | 131 | 132 | 139 | 140 | ); 141 | } 142 | 143 | export default ClipfaceLayout; 144 | 145 | /** 146 | * Logs out through the API 147 | */ 148 | async function logout() { 149 | const response = await fetch("/api/logout", { method: "POST" }); 150 | 151 | if (response.ok) { 152 | return true; 153 | } 154 | 155 | console.error("Failed to log out", response); 156 | return false; 157 | } 158 | -------------------------------------------------------------------------------- /client/src/components/Container.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Adds left and right margin to maintain a minimum size 3 | */ 4 | 5 | import styled from "styled-components"; 6 | 7 | const width = 1344; 8 | const padding = 12; 9 | 10 | const Container = styled.div` 11 | max-width: ${props => props.noPadding ? width : width + padding * 2}px; 12 | margin: 0 auto; 13 | 14 | ${props => props.noPadding ? '' : ` 15 | padding-left: ${padding}px; 16 | padding-right: ${padding}px; 17 | `} 18 | `; 19 | 20 | export default Container; 21 | -------------------------------------------------------------------------------- /client/src/components/CopyClipLink.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Reusable button component for copying clip link 3 | */ 4 | 5 | import PropTypes from "prop-types"; 6 | import Tippy from "@tippyjs/react"; 7 | 8 | import { formatClipURL } from "../util"; 9 | import { useEffect, useState } from "react"; 10 | import createSingleClipToken from "../createSingleClipToken"; 11 | 12 | export default function CopyClipLink(props) { 13 | const [linkCopied, setLinkCopied] = useState(false); 14 | 15 | // Hide confirmation message after 1 second 16 | useEffect(() => { 17 | const hideMessageTimeout = setTimeout(() => { 18 | setLinkCopied(false); 19 | }, 500); 20 | 21 | return () => { 22 | clearTimeout(hideMessageTimeout); 23 | }; 24 | }); 25 | 26 | const { clipName, className, noText = false, publicLink = false } = props; 27 | 28 | const classNames = ["button", "is-small"]; 29 | 30 | if (className) { 31 | classNames.push(className); 32 | } 33 | 34 | const onClick = async (e) => { 35 | var clipURL = formatClipURL(clipName); 36 | 37 | // If we're making a public link, we need to append a single clip 38 | // authentication token 39 | if (publicLink) { 40 | const token = await createSingleClipToken(clipName); 41 | clipURL.searchParams.append("token", btoa(token)); 42 | } 43 | 44 | try { 45 | await navigator.clipboard.writeText(clipURL.href); 46 | setLinkCopied(true); 47 | } catch (e) { 48 | console.error(e); 49 | alert("Failed to copy link!"); 50 | } 51 | }; 52 | 53 | return ( 54 | 60 | 61 | 75 | 76 | 77 | ); 78 | } 79 | 80 | CopyClipLink.propTypes = { 81 | clipName: PropTypes.string, 82 | className: PropTypes.string, 83 | noText: PropTypes.bool, 84 | publicLink: PropTypes.bool, 85 | }; 86 | -------------------------------------------------------------------------------- /client/src/components/Pagination.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Pagination component for the clip list page 3 | */ 4 | 5 | import PropTypes from "prop-types"; 6 | import styled from "styled-components"; 7 | import range from "lodash/range"; 8 | import Popup from "reactjs-popup"; 9 | 10 | const PaginationBar = styled.div` 11 | margin: 10px 0px; 12 | margin-bottom: 10px; 13 | border-radius: 2px; 14 | `; 15 | 16 | const SubmenuButton = styled.div` 17 | cursor: pointer; 18 | box-sizing: border-box; 19 | padding: 3px 5px; 20 | opacity: 0.5; 21 | `; 22 | 23 | const ClickableTag = styled.span` 24 | cursor: pointer; 25 | `; 26 | 27 | export default function Pagination(props) { 28 | const { 29 | totalPages, 30 | currentPage, 31 | clipsPerPage, 32 | onChangePage, 33 | onChangeClipsPerPage, 34 | showLabel, 35 | } = props; 36 | 37 | const onFirstPage = currentPage == 0; 38 | const onLastPage = currentPage == totalPages - 1; 39 | 40 | const changeClipsPerPage = (newNumber) => { 41 | onChangeClipsPerPage && onChangeClipsPerPage(newNumber); 42 | }; 43 | 44 | return ( 45 |
46 | {showLabel && } 47 | 48 | 49 | 172 | 173 |
174 | ); 175 | } 176 | 177 | Pagination.propTypes = { 178 | totalPages: PropTypes.number.isRequired, 179 | currentPage: PropTypes.number.isRequired, 180 | totalClips: PropTypes.number.isRequired, 181 | clipsPerPage: PropTypes.number.isRequired, 182 | onChangePage: PropTypes.func.isRequired, 183 | onChangeClipsPerPage: PropTypes.func.isRequired, 184 | showLabel: PropTypes.bool, 185 | }; 186 | -------------------------------------------------------------------------------- /client/src/createSingleClipToken.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Function for creating a single page token 3 | */ 4 | 5 | /** 6 | * Creates a single page token using the API 7 | * 8 | * @async 9 | * @param {string} clipName The clip name that the new token will be valid for 10 | * @returns {Promise} 11 | */ 12 | export default async function createSinglePageToken(clipName) { 13 | console.log("Requesting a single page token for path", clipName); 14 | 15 | const response = await fetch("/api/create-single-clip-token", { 16 | method: "POST", 17 | headers: { "Content-Type": "application/json" }, 18 | body: JSON.stringify({ clipName: clipName }), 19 | }); 20 | 21 | const data = await response.json(); 22 | 23 | return data["token"]; 24 | } 25 | -------------------------------------------------------------------------------- /client/src/localSettings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Browser-local settings with an accompanying hook 3 | */ 4 | 5 | import { useState, useEffect } from "react"; 6 | import isEqual from "lodash/isEqual"; 7 | import clone from "lodash/clone"; 8 | 9 | const globalSettings = 10 | typeof localStorage === "undefined" 11 | ? {} 12 | : JSON.parse(localStorage["settings"] || "{}"); 13 | 14 | const subscriptions = new Set(); 15 | 16 | const subscribe = (subscriber) => { 17 | subscriptions.add(subscriber); 18 | }; 19 | 20 | const unsubscribe = (subscriber) => { 21 | subscriptions.delete(subscriber); 22 | }; 23 | 24 | const updateSettings = (settings) => { 25 | Object.assign(globalSettings, settings); 26 | 27 | saveLocalSettings(); 28 | 29 | subscriptions.forEach((sub) => { 30 | sub(clone(globalSettings)); 31 | }); 32 | }; 33 | 34 | // Sets default values for missing local settings 35 | const initLocalSettings = () => { 36 | if (!globalSettings.theaterMode) globalSettings.theaterMode = false; 37 | if (!globalSettings.videoVolume) globalSettings.videoVolume = 1; 38 | if (!globalSettings.clipsPerPage) globalSettings.clipsPerPage = 40; 39 | 40 | saveLocalSettings(); 41 | }; 42 | 43 | // Saves the current local settings to localStorage and a cookie 44 | const saveLocalSettings = () => { 45 | // Don't try to save settings when server side rendering 46 | if (typeof window === "undefined") { 47 | return; 48 | } 49 | 50 | localStorage["settings"] = JSON.stringify(globalSettings); 51 | 52 | // Also save the settings in a cookie. This allows the server to read the 53 | // settings when server side rendering. 54 | document.cookie = 55 | "localSettings=" + JSON.stringify(globalSettings) + ";path=/"; 56 | }; 57 | 58 | export const useLocalSettings = () => { 59 | initLocalSettings(); 60 | 61 | const [settings, setSettings] = useState(clone(globalSettings)); 62 | 63 | const sub = (newSettings) => { 64 | if (!isEqual(newSettings, settings)) { 65 | setSettings(newSettings); 66 | } 67 | }; 68 | 69 | useEffect(() => { 70 | subscribe(sub); 71 | 72 | return () => { 73 | unsubscribe(sub); 74 | }; 75 | }); 76 | 77 | return [settings, updateSettings]; 78 | }; 79 | 80 | export const setLocalSettings = (settings) => { 81 | console.log("Local settings set to", settings); 82 | Object.assign(globalSettings, settings); 83 | }; 84 | 85 | export default useLocalSettings; 86 | -------------------------------------------------------------------------------- /client/src/pages/_app.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Custom app component, used to redirect if authentication is missing 3 | */ 4 | 5 | import * as cookie from "cookie"; 6 | import { createGlobalStyle } from "styled-components"; 7 | 8 | import { setLocalSettings } from "../localSettings"; 9 | 10 | const GlobalStyle = createGlobalStyle` 11 | html { 12 | font-family: "Roboto", sans-serif; 13 | } 14 | 15 | body { 16 | position: relative; 17 | font-family: inherit; 18 | min-height: 100vh; 19 | box-sizing: border-box; 20 | padding-bottom: 33px; 21 | } 22 | `; 23 | 24 | function MyApp({ Component, pageProps }) { 25 | return ( 26 | <> 27 | 28 | 29 | 30 | ); 31 | } 32 | 33 | // This applies local settings when server side rendering if provided by the 34 | // localSettings cookie 35 | MyApp.getInitialProps = async ({ ctx }) => { 36 | const parsedCookie = cookie.parse(ctx.req?.headers.cookie || ""); 37 | let localSettings; 38 | 39 | if ("localSettings" in parsedCookie) { 40 | try { 41 | localSettings = JSON.parse(parsedCookie["localSettings"]); 42 | } catch { 43 | // No local settings for us :( 44 | } 45 | } 46 | 47 | if (localSettings) { 48 | setLocalSettings(localSettings); 49 | } 50 | 51 | return {}; 52 | }; 53 | 54 | export default MyApp; 55 | -------------------------------------------------------------------------------- /client/src/pages/_document.jsx: -------------------------------------------------------------------------------- 1 | import Document, { Html, Head, Main, NextScript } from "next/document"; 2 | 3 | class MyDocument extends Document { 4 | render() { 5 | return ( 6 | 7 | 8 | 9 | 10 | 14 | 15 | 21 | 27 | 33 | 39 | 40 | 41 |
42 | 43 | 44 | 45 | ); 46 | } 47 | } 48 | 49 | export default MyDocument; 50 | -------------------------------------------------------------------------------- /client/src/pages/api/create-single-clip-token.js: -------------------------------------------------------------------------------- 1 | /* 2 | * API route for generating tokens to authenticate single pages 3 | */ 4 | 5 | import config from "config"; 6 | 7 | import { useAuth, makeSingleClipToken } from "../../backend/auth"; 8 | 9 | export default useAuth(async (req, res) => { 10 | // Only POST is allowed on this route 11 | if (req.method != "POST") { 12 | res.statusCode = 405; 13 | res.end(); 14 | return; 15 | } 16 | 17 | res.setHeader("Content-Type", "application/json"); 18 | 19 | if (!config.has("user_password")) { 20 | res.statusCode = 400; 21 | res.end("Can't generate tokens when authentication is not configured\n"); 22 | return; 23 | } 24 | 25 | if (!req.body || !("clipName" in req.body)) { 26 | res.statusCode = 400; 27 | res.end("Expected parameter: clipName\n"); 28 | return; 29 | } 30 | 31 | const clipName = req.body["clipName"]; 32 | 33 | const token = await makeSingleClipToken(clipName); 34 | 35 | res.end(JSON.stringify({ token: token }) + "\n"); 36 | }); 37 | -------------------------------------------------------------------------------- /client/src/pages/api/login.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Login handler 3 | */ 4 | 5 | import cookie from "cookie"; 6 | import config from "config"; 7 | 8 | import { hashPassword } from "../../backend/auth"; 9 | import { booleanify } from "../../util"; 10 | 11 | export default function login(req, res) { 12 | // Only POST is allowed on this route 13 | if (req.method != "POST") { 14 | res.statusCode = 405; 15 | res.end(); 16 | return; 17 | } 18 | 19 | if (!config.has("user_password")) { 20 | res.statusCode = 400; 21 | res.end("User authentication not configured\n"); 22 | return; 23 | } 24 | 25 | const userPassword = config.get("user_password"); 26 | const useSecureCookies = booleanify(config.get("secure_cookies")); 27 | 28 | if (req.body && "password" in req.body) { 29 | if (userPassword == req.body["password"]) { 30 | console.log("User logged in successfully"); 31 | 32 | hashPassword(userPassword).then((hashedPassword) => { 33 | res.setHeader( 34 | "Set-Cookie", 35 | cookie.serialize("auth", hashedPassword, { 36 | httpOnly: true, 37 | sameSite: true, 38 | secure: useSecureCookies, 39 | path: "/", 40 | maxAge: 31536000, // One year 41 | }) 42 | ); 43 | res.end("OK\n"); 44 | }); 45 | 46 | return; 47 | } 48 | } 49 | 50 | res.statusCode = 400; 51 | res.end("Invalid password\n"); 52 | } 53 | -------------------------------------------------------------------------------- /client/src/pages/api/logout.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Logout handler 3 | * 4 | * All this does is remove the auth cookie. 5 | */ 6 | 7 | import cookie from "cookie"; 8 | import config from "config"; 9 | 10 | export default function login(req, res) { 11 | // Only POST is allowed on this route 12 | if (req.method != "POST") { 13 | res.statusCode = 405; 14 | res.end(); 15 | return; 16 | } 17 | 18 | res.setHeader( 19 | "Set-Cookie", 20 | cookie.serialize("auth", "", { 21 | expires: new Date("1900-01-01"), 22 | httpOnly: true, 23 | sameSite: true, 24 | secure: config.get("secure_cookies"), 25 | path: "/", 26 | }) 27 | ); 28 | res.end("OK\n"); 29 | } 30 | -------------------------------------------------------------------------------- /client/src/pages/api/video/[name].js: -------------------------------------------------------------------------------- 1 | /* 2 | * API route for downloading clips by name 3 | */ 4 | 5 | import fs from "fs"; 6 | import path from "path"; 7 | 8 | import config from "config"; 9 | import * as mime from "mime-types"; 10 | 11 | import { useAuth } from "../../../backend/auth"; 12 | 13 | const CLIPS_PATH = config.get("clips_path"); 14 | 15 | export default useAuth((req, res) => { 16 | const name = req.query.name; 17 | const clipPath = path.join(CLIPS_PATH, name); 18 | 19 | if (!fs.existsSync(clipPath)) { 20 | res.statusCode = 404; 21 | res.end(); 22 | return; 23 | } 24 | 25 | serveVideo(req, res, clipPath); 26 | }); 27 | 28 | /* 29 | * Serves a video using chunks 30 | * 31 | * Source: https://betterprogramming.pub/video-stream-with-node-js-and-html5-320b3191a6b6 32 | */ 33 | function serveVideo(req, res, videoPath) { 34 | const stat = fs.statSync(videoPath); 35 | const fileSize = stat.size; 36 | const range = req.headers.range; 37 | 38 | if (range) { 39 | const parts = range.replace(/bytes=/, "").split("-"); 40 | const start = parseInt(parts[0], 10); 41 | const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1; 42 | const chunksize = end - start + 1; 43 | const file = fs.createReadStream(videoPath, { start, end }); 44 | const head = { 45 | "Content-Range": `bytes ${start}-${end}/${fileSize}`, 46 | "Accept-Ranges": "bytes", 47 | "Content-Length": chunksize, 48 | "Content-Type": mime.lookup(videoPath), 49 | }; 50 | res.writeHead(206, head); 51 | file.pipe(res); 52 | } else { 53 | const head = { 54 | "Content-Length": fileSize, 55 | "Content-Type": mime.lookup(videoPath), 56 | }; 57 | res.writeHead(200, head); 58 | fs.createReadStream(videoPath).pipe(res); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /client/src/pages/index.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Index page - shows a list of available clips 3 | */ 4 | 5 | import { useEffect, useRef, useState } from "react"; 6 | import Router from "next/router"; 7 | import styled from "styled-components"; 8 | import TimeAgo from "react-timeago"; 9 | import prettyBytes from "pretty-bytes"; 10 | import debounce from "lodash/debounce"; 11 | 12 | import Pagination from "../components/Pagination"; 13 | import ClipfaceLayout from "../components/ClipfaceLayout"; 14 | import CopyClipLink from "../components/CopyClipLink"; 15 | import useLocalSettings from "../localSettings"; 16 | import requireAuth from "../backend/requireAuth"; 17 | import Container from "../components/Container"; 18 | 19 | const ClearFilterButton = styled.span` 20 | cursor: pointer; 21 | pointer-events: initial !important; 22 | `; 23 | 24 | const LinkRow = styled.tr` 25 | cursor: pointer; 26 | 27 | &:hover { 28 | background-color: #3273dc; 29 | color: white; 30 | } 31 | `; 32 | 33 | const RowButtons = styled.div` 34 | float: right; 35 | margin: -3px; 36 | display: flex; 37 | flex-direction: row; 38 | 39 | * { 40 | margin-right: 5px; 41 | 42 | &:last-child { 43 | margin-right: 0px; 44 | } 45 | } 46 | `; 47 | 48 | const NoVideosPlaceholder = styled.div` 49 | background-color: #eee; 50 | text-align: center; 51 | padding: 50px; 52 | `; 53 | 54 | const IndexPage = ({ videos, title, pagination, authInfo }) => { 55 | const [filter, setFilter] = useState(""); 56 | const [currentPage, setCurrentPage] = useState(0); 57 | const [localSettings, setLocalSettings] = useLocalSettings(); 58 | const filterBox = useRef(); 59 | 60 | // Focus filter box on load 61 | useEffect(() => { 62 | filterBox.current.focus(); 63 | }, []); 64 | 65 | const { clipsPerPage } = localSettings; 66 | 67 | /* 68 | * Filter clips 69 | */ 70 | 71 | if (filter) { 72 | videos = videos.filter((clip) => clip.name.toLowerCase().includes(filter)); 73 | } 74 | 75 | /* 76 | * Paginate clips 77 | */ 78 | 79 | const totalClipCount = videos.length; 80 | const pageCount = Math.ceil(totalClipCount / clipsPerPage); 81 | 82 | if (pagination) { 83 | videos = videos.slice( 84 | currentPage * clipsPerPage, 85 | currentPage * clipsPerPage + clipsPerPage 86 | ); 87 | } 88 | 89 | // Setting the filter text for every keypress is terrible for performance, so 90 | // we only do it 50ms after the user stops typing 91 | const debouncedSetFilter = debounce((text) => { 92 | setFilter(text); 93 | }, 50); 94 | 95 | const onFilterChange = (e) => { 96 | debouncedSetFilter(e.target.value); 97 | }; 98 | 99 | const onClearFilterClick = () => { 100 | filterBox.current.value = ""; 101 | setFilter(""); 102 | }; 103 | 104 | const handleLinkClick = (clipName) => { 105 | Router.push(`/watch/${clipName}`); 106 | }; 107 | 108 | const handleChangeClipsPerPage = (newClipsPerPage) => { 109 | setLocalSettings({ ...localSettings, clipsPerPage: newClipsPerPage }); 110 | }; 111 | 112 | return ( 113 | 114 | 115 |
116 | 117 | 118 |
119 | 125 | 126 | 130 | 131 | 132 |
133 |
134 | 135 | {pagination && ( 136 | setCurrentPage(newPageNumber)} 142 | onChangeClipsPerPage={handleChangeClipsPerPage} 143 | showLabel 144 | /> 145 | )} 146 | 147 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | {videos.map((clip) => ( 161 | { 164 | handleLinkClick(clip.name); 165 | }} 166 | > 167 | 170 | 171 | 184 | 185 | ))} 186 | 187 |
SavedClip sizeClip name
168 | 169 | {prettyBytes(clip.size)} 172 | {clip.title || clip.name} 173 | 174 | 175 | 176 | 177 | {authInfo.status == "AUTHENTICATED" && ( 178 | // There's no point in showing the "Copy public link" 179 | // button if Clipface is not password protected 180 | 181 | )} 182 | 183 |
188 | 189 | {videos.length == 0 && ( 190 | No clips here yet 191 | )} 192 | 193 | {pagination && ( 194 | setCurrentPage(newPageNumber)} 201 | /> 202 | )} 203 |
204 |
205 | ); 206 | }; 207 | 208 | export const getServerSideProps = requireAuth(async (context) => { 209 | const config = require("config"); 210 | 211 | const { checkAuth } = require("../backend/auth"); 212 | 213 | let videos = []; 214 | 215 | if (await checkAuth(context.req)) { 216 | const listClips = require("../backend/listClips").default; 217 | 218 | videos = listClips(); 219 | } 220 | 221 | return { 222 | props: { 223 | videos, 224 | pagination: config.get("pagination"), 225 | title: config.has("clips_page_title") 226 | ? config.get("clips_page_title") 227 | : null, 228 | }, 229 | }; 230 | }); 231 | 232 | export default IndexPage; 233 | -------------------------------------------------------------------------------- /client/src/pages/login.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Login page 3 | */ 4 | 5 | import { useRouter } from "next/router"; 6 | import { useEffect, useRef, useState } from "react"; 7 | import styled from "styled-components"; 8 | import config from "config"; 9 | 10 | import ClipfaceLayout from "../components/ClipfaceLayout"; 11 | import Container from "../components/Container"; 12 | 13 | const LoginBox = styled.div` 14 | margin: 0px auto; 15 | max-width: 500px; 16 | margin-top: 25vh; 17 | `; 18 | 19 | const Form = styled.form` 20 | margin-top: 25px; 21 | `; 22 | 23 | const LoginButton = styled.button` 24 | width: 100%; 25 | height: 48px; 26 | `; 27 | 28 | const LoginPage = ({ authEnabled }) => { 29 | const router = useRouter(); 30 | const [isLoading, setIsLoading] = useState(false); 31 | const [error, setError] = useState(""); 32 | const [password, setPassword] = useState(""); 33 | const passwordFieldRef = useRef(); 34 | 35 | useEffect(() => { 36 | passwordFieldRef.current.focus(); 37 | }); 38 | 39 | const next = "next" in router.query ? router.query["next"] : "/"; 40 | 41 | const onPasswordChange = (e) => { 42 | setPassword(e.target.value); 43 | }; 44 | 45 | const onSubmit = (e) => { 46 | e.preventDefault(); 47 | 48 | setIsLoading(true); 49 | 50 | console.log("Logging in with password", password); 51 | 52 | login(password) 53 | .then((loggedIn) => { 54 | if (loggedIn) { 55 | router.push(next); 56 | } else { 57 | setIsLoading(false); 58 | setError("Invalid user name or password, please try again"); 59 | } 60 | }) 61 | .catch((e) => { 62 | setIsLoading(false); 63 | setError("Login failed due to an unexpected error"); 64 | console.error("Login failed horribly", e); 65 | }); 66 | }; 67 | 68 | return ( 69 | 70 | 71 | 72 |

73 | This page is password protected 74 |

75 | 76 |
77 |
78 |

79 | {/* The username field is not used for anything but Chrome 80 | * complains if it's missing */} 81 | 88 | 89 | 99 | 100 | {error &&

{error}

} 101 | 102 | 103 | 104 | 105 |

106 |
107 |
108 |

109 | 110 | {isLoading && } 111 | {!isLoading && "Login"} 112 | 113 |

114 |
115 | 116 |
117 |
118 |
119 | ); 120 | }; 121 | 122 | /** 123 | * Attempts to log in, yields true if login succeeds, false otherwise 124 | * 125 | * @param {string} password 126 | */ 127 | async function login(password) { 128 | const response = await fetch("/api/login", { 129 | method: "POST", 130 | cache: "no-cache", 131 | headers: { "Content-Type": "application/json" }, 132 | body: JSON.stringify({ password: encodeURIComponent(password) }), 133 | }); 134 | 135 | if (response.ok) { 136 | return true; 137 | } 138 | 139 | console.error("Failed to log in", response); 140 | return false; 141 | } 142 | 143 | export async function getServerSideProps(context) { 144 | // If no user authentication is configured, forward to the index page 145 | if (!config.has("user_password")) { 146 | return { 147 | redirect: { 148 | destination: "/", 149 | permanent: false, 150 | }, 151 | }; 152 | } 153 | 154 | return { 155 | props: {}, 156 | }; 157 | } 158 | 159 | export default LoginPage; 160 | -------------------------------------------------------------------------------- /client/src/pages/watch/[name].jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Watch page - this is where the video is displayed 3 | */ 4 | 5 | import { useRouter } from "next/router"; 6 | import Head from "next/head"; 7 | import { useEffect, useRef } from "react"; 8 | import styled from "styled-components"; 9 | import TimeAgo from "react-timeago"; 10 | import prettyBytes from "pretty-bytes"; 11 | import ReactMarkdown from "react-markdown"; 12 | 13 | import ClipfaceLayout from "../../components/ClipfaceLayout"; 14 | import CopyClipLink from "../../components/CopyClipLink"; 15 | import useLocalSettings from "../../localSettings"; 16 | import requireAuth from "../../backend/requireAuth"; 17 | import { getPublicURL } from "../../util"; 18 | import Container from "../../components/Container"; 19 | 20 | const ButtonRow = styled.div` 21 | display: flex; 22 | flex-direction: row; 23 | flex-wrap: wrap; 24 | justify-content: end; 25 | align-items: center; 26 | gap: 5px; 27 | padding-bottom: 10px; 28 | `; 29 | 30 | const BackLink = styled.a` 31 | display: inline-block; 32 | margin-right: auto; 33 | 34 | @media (max-width: 640px) { 35 | width: 100%; 36 | } 37 | `; 38 | 39 | const SingleClipAuthNotice = styled.p` 40 | opacity: 0.5; 41 | `; 42 | 43 | const InlineIcon = styled.i` 44 | position: relative; 45 | top: 1px; 46 | margin-right: 5px; 47 | `; 48 | 49 | // The height of the video container when in theatre mode 50 | const videoContainerTheatreHeight = "calc(100vh - 136px - 150px)"; 51 | 52 | const VideoContainer = styled(Container).attrs({ noPadding: true })` 53 | &.theater-mode { 54 | background-color: black; 55 | position: absolute; 56 | left: 0px; 57 | right: 0px; 58 | max-width: initial; 59 | margin: 0px; 60 | height: ${videoContainerTheatreHeight}; 61 | 62 | & video { 63 | width: 100%; 64 | height: 100%; 65 | } 66 | } 67 | `; 68 | 69 | // Spacer to push the contents behind the video container down 70 | const VideoSpacer = styled.div` 71 | height: ${videoContainerTheatreHeight}; 72 | `; 73 | 74 | const VideoInfo = styled.div` 75 | margin-top: 25px; 76 | padding-bottom: 50px; 77 | `; 78 | 79 | const VideoDescription = styled.div` 80 | margin-top: 25px; 81 | `; 82 | 83 | const WatchPage = ({ clipMeta, authInfo, currentURL }) => { 84 | const router = useRouter(); 85 | const videoRef = useRef(); 86 | const [localSettings, setLocalSettings] = useLocalSettings(); 87 | 88 | // The video volume can't be set directly on the element for some reason, so 89 | // we set it immediately after rendering 90 | useEffect(() => { 91 | videoRef.current.volume = localSettings.videoVolume; 92 | }); 93 | 94 | // Rehydrate serialized value from getServerSideProps 95 | currentURL = new URL(currentURL); 96 | 97 | const clipName = router.query.name; 98 | const theaterMode = localSettings.theaterMode; 99 | 100 | if (!clipName) { 101 | return
No clip specified
; 102 | } 103 | 104 | if (!clipMeta) { 105 | return
Clip doesn't exist
; 106 | } 107 | 108 | const handleBackClick = () => { 109 | videoRef.current.pause(); 110 | 111 | router.push("/"); 112 | }; 113 | 114 | const handleVideoError = (e) => { 115 | console.log("VIDEO ERROR", e.target.error); 116 | }; 117 | 118 | const handleVolumeChange = (e) => { 119 | setLocalSettings({ 120 | ...localSettings, 121 | videoVolume: videoRef.current.volume, 122 | }); 123 | }; 124 | 125 | const toggleTheaterMode = () => { 126 | setLocalSettings({ 127 | ...localSettings, 128 | theaterMode: !localSettings.theaterMode, 129 | }); 130 | }; 131 | 132 | var videoSrc = "/api/video/" + encodeURIComponent(clipName); 133 | 134 | // Forward the single clip auth token to the clip URL 135 | if (authInfo.status == "SINGLE_PAGE_AUTHENTICATED") { 136 | videoSrc += "?token=" + Buffer.from(authInfo.token).toString("base64"); 137 | } 138 | 139 | const fullVideoURL = `${currentURL.protocol}//${currentURL.host}${videoSrc}`; 140 | 141 | const videoProps = { 142 | src: videoSrc, 143 | controls: true, 144 | autoPlay: true, 145 | onError: handleVideoError, 146 | onVolumeChange: handleVolumeChange, 147 | style: { outline: "none" }, 148 | ref: videoRef, 149 | }; 150 | 151 | return ( 152 | <> 153 | 154 | 155 | 156 | 157 | 158 | 159 | {clipMeta.description && ( 160 | 161 | )} 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | {/* Only show "Back to clips" button to authenticated users */} 175 | {authInfo.status == "AUTHENTICATED" && ( 176 | 177 | 178 | 179 | 180 | Back to clips 181 | 182 | )} 183 | 184 | {authInfo.status == "SINGLE_PAGE_AUTHENTICATED" && ( 185 | 186 | 187 | You are using a public link for this clip 188 | 189 | )} 190 | 191 | 200 | 201 | {/* Only show link copying buttons to authenticated users */} 202 | {authInfo.status == "AUTHENTICATED" && ( 203 | <> 204 | 205 | 206 | 207 | )} 208 | 209 | 210 | 211 | 212 | 214 | 215 | {theaterMode && } 216 | 217 | 218 | 219 |

{clipMeta.title || clipMeta.name}

220 |

221 | Saved 222 | 223 | {prettyBytes(clipMeta.size)} 224 |

225 | 226 | {clipMeta.title && Filename: {clipMeta.name}} 227 | 228 |
229 | 230 | {clipMeta.description && ( 231 | 232 | {clipMeta.description} 233 | 234 | )} 235 |
236 |
237 |
238 | 239 | ); 240 | }; 241 | 242 | export const getServerSideProps = requireAuth(async ({ query, req }) => { 243 | const getMeta = require("../../backend/getMeta").default; 244 | 245 | const clipName = query.name; 246 | const clipMeta = getMeta(clipName); 247 | 248 | return { 249 | props: { clipMeta, currentURL: getPublicURL(req).toString() }, 250 | }; 251 | }); 252 | 253 | export default WatchPage; 254 | -------------------------------------------------------------------------------- /client/src/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns the full URL of the named clip 3 | * 4 | * This function can only be run in the browser, as it formats the URL using 5 | * the current location. 6 | * 7 | * @param {string} clipName 8 | * @returns {URL} 9 | */ 10 | export function formatClipURL(clipName) { 11 | return new URL( 12 | `/watch/${encodeURIComponent(clipName)}`, 13 | `${location.protocol}//${location.host}` 14 | ); 15 | } 16 | 17 | /** 18 | * Resolves the public URL for the current page 19 | * 20 | * This is needed to resolve public URLs for server side rendering, since we 21 | * don't have access to the value of the browser address bar. 22 | * 23 | * By default this function uses the path and "Host" header from the incoming 24 | * request to determine the current URL, and HTTP is assumed. However, the 25 | * host and protocol can be overridden with the X-Forwarded-Host and 26 | * X-Forwarded-Proto headers. 27 | * 28 | * In the future this function will also apply any "Public URL" override 29 | * configured in the config file. 30 | * 31 | * @param {http.IncomingRequest} req 32 | * @returns {URL} 33 | */ 34 | export function getPublicURL(req) { 35 | const protocol = req.headers["x-forwarded-proto"] || "http"; 36 | const hostname = req.headers["x-forwarded-host"] || req.headers["host"]; 37 | 38 | // TODO: Allow config override 39 | 40 | return new URL(req.url, `${protocol}://${hostname}`); 41 | } 42 | 43 | /** 44 | * Coaxes the input value into a boolean 45 | * 46 | * @param {string|number|boolean} value 47 | */ 48 | export function booleanify(value) { 49 | if (value === true) return true; 50 | if (value === false) return true; 51 | 52 | if (typeof value === "string") { 53 | value = value.trim().toLocaleLowerCase(); 54 | 55 | if (value == "true") return true; 56 | if (value == "false") return false; 57 | if (value == "1") return true; 58 | if (value == "0") return false; 59 | 60 | throw `Can't convert string value to boolean: ${value}`; 61 | } 62 | 63 | if (typeof value === "number") { 64 | if (value === 1) return true; 65 | if (value === 0) return false; 66 | 67 | throw `Can't convert number to boolean: ${value}`; 68 | } 69 | 70 | throw `Can't convert value of type "${typeof value}" to boolean`; 71 | } 72 | -------------------------------------------------------------------------------- /client/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/code-frame@^7.14.5": 13 | version "7.14.5" 14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 15 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 16 | dependencies: 17 | "@babel/highlight" "^7.14.5" 18 | 19 | "@babel/generator@^7.15.0": 20 | version "7.15.0" 21 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" 22 | integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== 23 | dependencies: 24 | "@babel/types" "^7.15.0" 25 | jsesc "^2.5.1" 26 | source-map "^0.5.0" 27 | 28 | "@babel/helper-annotate-as-pure@^7.0.0": 29 | version "7.14.5" 30 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" 31 | integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== 32 | dependencies: 33 | "@babel/types" "^7.14.5" 34 | 35 | "@babel/helper-function-name@^7.14.5": 36 | version "7.14.5" 37 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" 38 | integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== 39 | dependencies: 40 | "@babel/helper-get-function-arity" "^7.14.5" 41 | "@babel/template" "^7.14.5" 42 | "@babel/types" "^7.14.5" 43 | 44 | "@babel/helper-get-function-arity@^7.14.5": 45 | version "7.14.5" 46 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" 47 | integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== 48 | dependencies: 49 | "@babel/types" "^7.14.5" 50 | 51 | "@babel/helper-hoist-variables@^7.14.5": 52 | version "7.14.5" 53 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" 54 | integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== 55 | dependencies: 56 | "@babel/types" "^7.14.5" 57 | 58 | "@babel/helper-module-imports@^7.0.0": 59 | version "7.14.5" 60 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" 61 | integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== 62 | dependencies: 63 | "@babel/types" "^7.14.5" 64 | 65 | "@babel/helper-plugin-utils@^7.14.5": 66 | version "7.14.5" 67 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" 68 | integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== 69 | 70 | "@babel/helper-split-export-declaration@^7.14.5": 71 | version "7.14.5" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" 73 | integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== 74 | dependencies: 75 | "@babel/types" "^7.14.5" 76 | 77 | "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": 78 | version "7.14.9" 79 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" 80 | integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== 81 | 82 | "@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": 83 | version "7.14.5" 84 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 85 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 86 | dependencies: 87 | "@babel/helper-validator-identifier" "^7.14.5" 88 | chalk "^2.0.0" 89 | js-tokens "^4.0.0" 90 | 91 | "@babel/parser@^7.14.5", "@babel/parser@^7.15.0": 92 | version "7.15.3" 93 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" 94 | integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== 95 | 96 | "@babel/plugin-syntax-jsx@7.14.5": 97 | version "7.14.5" 98 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" 99 | integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== 100 | dependencies: 101 | "@babel/helper-plugin-utils" "^7.14.5" 102 | 103 | "@babel/runtime@7.12.5": 104 | version "7.12.5" 105 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" 106 | integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== 107 | dependencies: 108 | regenerator-runtime "^0.13.4" 109 | 110 | "@babel/template@^7.14.5": 111 | version "7.14.5" 112 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" 113 | integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== 114 | dependencies: 115 | "@babel/code-frame" "^7.14.5" 116 | "@babel/parser" "^7.14.5" 117 | "@babel/types" "^7.14.5" 118 | 119 | "@babel/traverse@^7.4.5": 120 | version "7.15.0" 121 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" 122 | integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== 123 | dependencies: 124 | "@babel/code-frame" "^7.14.5" 125 | "@babel/generator" "^7.15.0" 126 | "@babel/helper-function-name" "^7.14.5" 127 | "@babel/helper-hoist-variables" "^7.14.5" 128 | "@babel/helper-split-export-declaration" "^7.14.5" 129 | "@babel/parser" "^7.15.0" 130 | "@babel/types" "^7.15.0" 131 | debug "^4.1.0" 132 | globals "^11.1.0" 133 | 134 | "@babel/types@7.15.0", "@babel/types@^7.14.5", "@babel/types@^7.15.0": 135 | version "7.15.0" 136 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" 137 | integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== 138 | dependencies: 139 | "@babel/helper-validator-identifier" "^7.14.9" 140 | to-fast-properties "^2.0.0" 141 | 142 | "@emotion/is-prop-valid@^0.8.8": 143 | version "0.8.8" 144 | resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" 145 | integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== 146 | dependencies: 147 | "@emotion/memoize" "0.7.4" 148 | 149 | "@emotion/memoize@0.7.4": 150 | version "0.7.4" 151 | resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" 152 | integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== 153 | 154 | "@emotion/stylis@^0.8.4": 155 | version "0.8.5" 156 | resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" 157 | integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== 158 | 159 | "@emotion/unitless@^0.7.4": 160 | version "0.7.5" 161 | resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" 162 | integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== 163 | 164 | "@hapi/accept@5.0.2": 165 | version "5.0.2" 166 | resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.2.tgz#ab7043b037e68b722f93f376afb05e85c0699523" 167 | integrity sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw== 168 | dependencies: 169 | "@hapi/boom" "9.x.x" 170 | "@hapi/hoek" "9.x.x" 171 | 172 | "@hapi/boom@9.x.x": 173 | version "9.1.3" 174 | resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.3.tgz#22cad56e39b7a4819161a99b1db19eaaa9b6cc6e" 175 | integrity sha512-RlrGyZ603hE/eRTZtTltocRm50HHmrmL3kGOP0SQ9MasazlW1mt/fkv4C5P/6rnpFXjwld/POFX1C8tMZE3ldg== 176 | dependencies: 177 | "@hapi/hoek" "9.x.x" 178 | 179 | "@hapi/hoek@9.x.x": 180 | version "9.2.0" 181 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" 182 | integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== 183 | 184 | "@mapbox/node-pre-gyp@^1.0.0": 185 | version "1.0.5" 186 | resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz#2a0b32fcb416fb3f2250fd24cb2a81421a4f5950" 187 | integrity sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA== 188 | dependencies: 189 | detect-libc "^1.0.3" 190 | https-proxy-agent "^5.0.0" 191 | make-dir "^3.1.0" 192 | node-fetch "^2.6.1" 193 | nopt "^5.0.0" 194 | npmlog "^4.1.2" 195 | rimraf "^3.0.2" 196 | semver "^7.3.4" 197 | tar "^6.1.0" 198 | 199 | "@napi-rs/triples@^1.0.3": 200 | version "1.0.3" 201 | resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c" 202 | integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA== 203 | 204 | "@next/env@11.1.0": 205 | version "11.1.0" 206 | resolved "https://registry.yarnpkg.com/@next/env/-/env-11.1.0.tgz#cae83d8e0a65aa9f2af3368f8269ffd9d911746a" 207 | integrity sha512-zPJkMFRenSf7BLlVee8987G0qQXAhxy7k+Lb/5hLAGkPVHAHm+oFFeL+2ipbI2KTEFlazdmGY0M+AlLQn7pWaw== 208 | 209 | "@next/polyfill-module@11.1.0": 210 | version "11.1.0" 211 | resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-11.1.0.tgz#ee6b9117a1f9bb137479dfa51d5a9e38e066a62f" 212 | integrity sha512-64EgW8SzJRQls2yJ5DkuljRxgE24o2kYtX/ghTkPUJYsfidHMWzQGwg26IgRbb/uHqTd1G0W5UkKag+Nt8TWaQ== 213 | 214 | "@next/react-dev-overlay@11.1.0": 215 | version "11.1.0" 216 | resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-11.1.0.tgz#8d4e8020a4cbdacbca431a0bf40c4d28187083af" 217 | integrity sha512-h+ry0sTk1W3mJw+TwEf91aqLbBJ5oqAsxfx+QryqEItNtfW6zLSSjxkyTYTqX8DkgSssQQutQfATkzBVgOR+qQ== 218 | dependencies: 219 | "@babel/code-frame" "7.12.11" 220 | anser "1.4.9" 221 | chalk "4.0.0" 222 | classnames "2.2.6" 223 | css.escape "1.5.1" 224 | data-uri-to-buffer "3.0.1" 225 | platform "1.3.6" 226 | shell-quote "1.7.2" 227 | source-map "0.8.0-beta.0" 228 | stacktrace-parser "0.1.10" 229 | strip-ansi "6.0.0" 230 | 231 | "@next/react-refresh-utils@11.1.0": 232 | version "11.1.0" 233 | resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-11.1.0.tgz#60c3c7b127a5dab8b0a2889a7dcf8a90d2c4e592" 234 | integrity sha512-g5DtFTpLTGa36iy9DuZawtJeitI11gysFGKPQQqy+mNbSFazguArcJ10gAYFlbqpIi4boUamWNI5mAoSPx3kog== 235 | 236 | "@node-rs/helper@1.2.1": 237 | version "1.2.1" 238 | resolved "https://registry.yarnpkg.com/@node-rs/helper/-/helper-1.2.1.tgz#e079b05f21ff4329d82c4e1f71c0290e4ecdc70c" 239 | integrity sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg== 240 | dependencies: 241 | "@napi-rs/triples" "^1.0.3" 242 | 243 | "@nodelib/fs.scandir@2.1.5": 244 | version "2.1.5" 245 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 246 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 247 | dependencies: 248 | "@nodelib/fs.stat" "2.0.5" 249 | run-parallel "^1.1.9" 250 | 251 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 252 | version "2.0.5" 253 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 254 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 255 | 256 | "@nodelib/fs.walk@^1.2.3": 257 | version "1.2.8" 258 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 259 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 260 | dependencies: 261 | "@nodelib/fs.scandir" "2.1.5" 262 | fastq "^1.6.0" 263 | 264 | "@popperjs/core@^2.8.3": 265 | version "2.9.3" 266 | resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.3.tgz#8b68da1ebd7fc603999cf6ebee34a4899a14b88e" 267 | integrity sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ== 268 | 269 | "@tippyjs/react@^4.2.0": 270 | version "4.2.5" 271 | resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.2.5.tgz#9b5837db93a1cac953962404df906aef1a18e80d" 272 | integrity sha512-YBLgy+1zznBNbx4JOoOdFXWMLXjBh9hLPwRtq3s8RRdrez2l3tPBRt2m2909wZd9S1KUeKjOOYYsnitccI9I3A== 273 | dependencies: 274 | tippy.js "^6.3.1" 275 | 276 | "@types/mdast@^3.0.0", "@types/mdast@^3.0.3": 277 | version "3.0.7" 278 | resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.7.tgz#cba63d0cc11eb1605cea5c0ad76e02684394166b" 279 | integrity sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg== 280 | dependencies: 281 | "@types/unist" "*" 282 | 283 | "@types/node@*": 284 | version "16.6.1" 285 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.1.tgz#aee62c7b966f55fc66c7b6dfa1d58db2a616da61" 286 | integrity sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw== 287 | 288 | "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": 289 | version "2.0.6" 290 | resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" 291 | integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== 292 | 293 | abbrev@1: 294 | version "1.1.1" 295 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 296 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 297 | 298 | agent-base@6: 299 | version "6.0.2" 300 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 301 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 302 | dependencies: 303 | debug "4" 304 | 305 | aggregate-error@^3.0.0: 306 | version "3.1.0" 307 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 308 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 309 | dependencies: 310 | clean-stack "^2.0.0" 311 | indent-string "^4.0.0" 312 | 313 | anser@1.4.9: 314 | version "1.4.9" 315 | resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" 316 | integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== 317 | 318 | ansi-regex@^2.0.0: 319 | version "2.1.1" 320 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 321 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 322 | 323 | ansi-regex@^3.0.0: 324 | version "3.0.0" 325 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 326 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 327 | 328 | ansi-regex@^5.0.0: 329 | version "5.0.0" 330 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 331 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 332 | 333 | ansi-styles@^3.2.1: 334 | version "3.2.1" 335 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 336 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 337 | dependencies: 338 | color-convert "^1.9.0" 339 | 340 | ansi-styles@^4.1.0: 341 | version "4.3.0" 342 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 343 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 344 | dependencies: 345 | color-convert "^2.0.1" 346 | 347 | anymatch@~3.1.1: 348 | version "3.1.2" 349 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 350 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 351 | dependencies: 352 | normalize-path "^3.0.0" 353 | picomatch "^2.0.4" 354 | 355 | aproba@^1.0.3: 356 | version "1.2.0" 357 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 358 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 359 | 360 | are-we-there-yet@~1.1.2: 361 | version "1.1.5" 362 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 363 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 364 | dependencies: 365 | delegates "^1.0.0" 366 | readable-stream "^2.0.6" 367 | 368 | array-union@^2.1.0: 369 | version "2.1.0" 370 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 371 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 372 | 373 | asn1.js@^5.2.0: 374 | version "5.4.1" 375 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" 376 | integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== 377 | dependencies: 378 | bn.js "^4.0.0" 379 | inherits "^2.0.1" 380 | minimalistic-assert "^1.0.0" 381 | safer-buffer "^2.1.0" 382 | 383 | assert@2.0.0: 384 | version "2.0.0" 385 | resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" 386 | integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== 387 | dependencies: 388 | es6-object-assign "^1.1.0" 389 | is-nan "^1.2.1" 390 | object-is "^1.0.1" 391 | util "^0.12.0" 392 | 393 | assert@^1.1.1: 394 | version "1.5.0" 395 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" 396 | integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== 397 | dependencies: 398 | object-assign "^4.1.1" 399 | util "0.10.3" 400 | 401 | ast-types@0.13.2: 402 | version "0.13.2" 403 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" 404 | integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== 405 | 406 | available-typed-arrays@^1.0.4: 407 | version "1.0.4" 408 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9" 409 | integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== 410 | 411 | "babel-plugin-styled-components@>= 1.12.0": 412 | version "1.13.2" 413 | resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz#ebe0e6deff51d7f93fceda1819e9b96aeb88278d" 414 | integrity sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA== 415 | dependencies: 416 | "@babel/helper-annotate-as-pure" "^7.0.0" 417 | "@babel/helper-module-imports" "^7.0.0" 418 | babel-plugin-syntax-jsx "^6.18.0" 419 | lodash "^4.17.11" 420 | 421 | babel-plugin-syntax-jsx@^6.18.0: 422 | version "6.18.0" 423 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" 424 | integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= 425 | 426 | bail@^1.0.0: 427 | version "1.0.5" 428 | resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" 429 | integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== 430 | 431 | balanced-match@^1.0.0: 432 | version "1.0.2" 433 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 434 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 435 | 436 | base64-js@^1.0.2: 437 | version "1.5.1" 438 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 439 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 440 | 441 | bcrypt@^5.0.0: 442 | version "5.0.1" 443 | resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.0.1.tgz#f1a2c20f208e2ccdceea4433df0c8b2c54ecdf71" 444 | integrity sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw== 445 | dependencies: 446 | "@mapbox/node-pre-gyp" "^1.0.0" 447 | node-addon-api "^3.1.0" 448 | 449 | big.js@^5.2.2: 450 | version "5.2.2" 451 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 452 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== 453 | 454 | binary-extensions@^2.0.0: 455 | version "2.2.0" 456 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 457 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 458 | 459 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: 460 | version "4.12.0" 461 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" 462 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== 463 | 464 | bn.js@^5.0.0, bn.js@^5.1.1: 465 | version "5.2.0" 466 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" 467 | integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== 468 | 469 | brace-expansion@^1.1.7: 470 | version "1.1.11" 471 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 472 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 473 | dependencies: 474 | balanced-match "^1.0.0" 475 | concat-map "0.0.1" 476 | 477 | braces@^3.0.1, braces@~3.0.2: 478 | version "3.0.2" 479 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 480 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 481 | dependencies: 482 | fill-range "^7.0.1" 483 | 484 | brorand@^1.0.1, brorand@^1.1.0: 485 | version "1.1.0" 486 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 487 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 488 | 489 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 490 | version "1.2.0" 491 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" 492 | integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== 493 | dependencies: 494 | buffer-xor "^1.0.3" 495 | cipher-base "^1.0.0" 496 | create-hash "^1.1.0" 497 | evp_bytestokey "^1.0.3" 498 | inherits "^2.0.1" 499 | safe-buffer "^5.0.1" 500 | 501 | browserify-cipher@^1.0.0: 502 | version "1.0.1" 503 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" 504 | integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== 505 | dependencies: 506 | browserify-aes "^1.0.4" 507 | browserify-des "^1.0.0" 508 | evp_bytestokey "^1.0.0" 509 | 510 | browserify-des@^1.0.0: 511 | version "1.0.2" 512 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" 513 | integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== 514 | dependencies: 515 | cipher-base "^1.0.1" 516 | des.js "^1.0.0" 517 | inherits "^2.0.1" 518 | safe-buffer "^5.1.2" 519 | 520 | browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: 521 | version "4.1.0" 522 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" 523 | integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== 524 | dependencies: 525 | bn.js "^5.0.0" 526 | randombytes "^2.0.1" 527 | 528 | browserify-sign@^4.0.0: 529 | version "4.2.1" 530 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" 531 | integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== 532 | dependencies: 533 | bn.js "^5.1.1" 534 | browserify-rsa "^4.0.1" 535 | create-hash "^1.2.0" 536 | create-hmac "^1.1.7" 537 | elliptic "^6.5.3" 538 | inherits "^2.0.4" 539 | parse-asn1 "^5.1.5" 540 | readable-stream "^3.6.0" 541 | safe-buffer "^5.2.0" 542 | 543 | browserify-zlib@0.2.0, browserify-zlib@^0.2.0: 544 | version "0.2.0" 545 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" 546 | integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== 547 | dependencies: 548 | pako "~1.0.5" 549 | 550 | browserslist@4.16.6: 551 | version "4.16.6" 552 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" 553 | integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== 554 | dependencies: 555 | caniuse-lite "^1.0.30001219" 556 | colorette "^1.2.2" 557 | electron-to-chromium "^1.3.723" 558 | escalade "^3.1.1" 559 | node-releases "^1.1.71" 560 | 561 | buffer-xor@^1.0.3: 562 | version "1.0.3" 563 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 564 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= 565 | 566 | buffer@5.6.0: 567 | version "5.6.0" 568 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" 569 | integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== 570 | dependencies: 571 | base64-js "^1.0.2" 572 | ieee754 "^1.1.4" 573 | 574 | buffer@^4.3.0: 575 | version "4.9.2" 576 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" 577 | integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== 578 | dependencies: 579 | base64-js "^1.0.2" 580 | ieee754 "^1.1.4" 581 | isarray "^1.0.0" 582 | 583 | builtin-status-codes@^3.0.0: 584 | version "3.0.0" 585 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 586 | integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= 587 | 588 | bytes@3.1.0: 589 | version "3.1.0" 590 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 591 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 592 | 593 | call-bind@^1.0.0, call-bind@^1.0.2: 594 | version "1.0.2" 595 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 596 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 597 | dependencies: 598 | function-bind "^1.1.1" 599 | get-intrinsic "^1.0.2" 600 | 601 | camelize@^1.0.0: 602 | version "1.0.0" 603 | resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" 604 | integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= 605 | 606 | caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228: 607 | version "1.0.30001251" 608 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" 609 | integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== 610 | 611 | chalk@2.4.2, chalk@^2.0.0: 612 | version "2.4.2" 613 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 614 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 615 | dependencies: 616 | ansi-styles "^3.2.1" 617 | escape-string-regexp "^1.0.5" 618 | supports-color "^5.3.0" 619 | 620 | chalk@4.0.0: 621 | version "4.0.0" 622 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" 623 | integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== 624 | dependencies: 625 | ansi-styles "^4.1.0" 626 | supports-color "^7.1.0" 627 | 628 | character-entities-legacy@^1.0.0: 629 | version "1.1.4" 630 | resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" 631 | integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== 632 | 633 | character-entities@^1.0.0: 634 | version "1.2.4" 635 | resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" 636 | integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== 637 | 638 | character-reference-invalid@^1.0.0: 639 | version "1.1.4" 640 | resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" 641 | integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== 642 | 643 | chokidar@3.5.1: 644 | version "3.5.1" 645 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 646 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 647 | dependencies: 648 | anymatch "~3.1.1" 649 | braces "~3.0.2" 650 | glob-parent "~5.1.0" 651 | is-binary-path "~2.1.0" 652 | is-glob "~4.0.1" 653 | normalize-path "~3.0.0" 654 | readdirp "~3.5.0" 655 | optionalDependencies: 656 | fsevents "~2.3.1" 657 | 658 | chownr@^2.0.0: 659 | version "2.0.0" 660 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 661 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 662 | 663 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 664 | version "1.0.4" 665 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" 666 | integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== 667 | dependencies: 668 | inherits "^2.0.1" 669 | safe-buffer "^5.0.1" 670 | 671 | classnames@2.2.6: 672 | version "2.2.6" 673 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" 674 | integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== 675 | 676 | clean-stack@^2.0.0: 677 | version "2.2.0" 678 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 679 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 680 | 681 | code-point-at@^1.0.0: 682 | version "1.1.0" 683 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 684 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 685 | 686 | color-convert@^1.9.0: 687 | version "1.9.3" 688 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 689 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 690 | dependencies: 691 | color-name "1.1.3" 692 | 693 | color-convert@^2.0.1: 694 | version "2.0.1" 695 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 696 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 697 | dependencies: 698 | color-name "~1.1.4" 699 | 700 | color-name@1.1.3: 701 | version "1.1.3" 702 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 703 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 704 | 705 | color-name@~1.1.4: 706 | version "1.1.4" 707 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 708 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 709 | 710 | colorette@^1.2.2: 711 | version "1.3.0" 712 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" 713 | integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== 714 | 715 | command-exists@^1.2.6: 716 | version "1.2.9" 717 | resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" 718 | integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== 719 | 720 | commander@^7.2.0: 721 | version "7.2.0" 722 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 723 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 724 | 725 | commondir@^1.0.1: 726 | version "1.0.1" 727 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 728 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 729 | 730 | concat-map@0.0.1: 731 | version "0.0.1" 732 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 733 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 734 | 735 | config@^3.3.6: 736 | version "3.3.6" 737 | resolved "https://registry.yarnpkg.com/config/-/config-3.3.6.tgz#b87799db7399cc34988f55379b5f43465b1b065c" 738 | integrity sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg== 739 | dependencies: 740 | json5 "^2.1.1" 741 | 742 | console-browserify@^1.1.0: 743 | version "1.2.0" 744 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" 745 | integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== 746 | 747 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 748 | version "1.1.0" 749 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 750 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 751 | 752 | constants-browserify@1.0.0, constants-browserify@^1.0.0: 753 | version "1.0.0" 754 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 755 | integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= 756 | 757 | convert-source-map@1.7.0: 758 | version "1.7.0" 759 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 760 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 761 | dependencies: 762 | safe-buffer "~5.1.1" 763 | 764 | cookie@^0.4.1: 765 | version "0.4.1" 766 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" 767 | integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== 768 | 769 | core-util-is@~1.0.0: 770 | version "1.0.2" 771 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 772 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 773 | 774 | create-ecdh@^4.0.0: 775 | version "4.0.4" 776 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" 777 | integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== 778 | dependencies: 779 | bn.js "^4.1.0" 780 | elliptic "^6.5.3" 781 | 782 | create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: 783 | version "1.2.0" 784 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" 785 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== 786 | dependencies: 787 | cipher-base "^1.0.1" 788 | inherits "^2.0.1" 789 | md5.js "^1.3.4" 790 | ripemd160 "^2.0.1" 791 | sha.js "^2.4.0" 792 | 793 | create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: 794 | version "1.1.7" 795 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" 796 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== 797 | dependencies: 798 | cipher-base "^1.0.3" 799 | create-hash "^1.1.0" 800 | inherits "^2.0.1" 801 | ripemd160 "^2.0.0" 802 | safe-buffer "^5.0.1" 803 | sha.js "^2.4.8" 804 | 805 | crypto-browserify@3.12.0, crypto-browserify@^3.11.0: 806 | version "3.12.0" 807 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" 808 | integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== 809 | dependencies: 810 | browserify-cipher "^1.0.0" 811 | browserify-sign "^4.0.0" 812 | create-ecdh "^4.0.0" 813 | create-hash "^1.1.0" 814 | create-hmac "^1.1.0" 815 | diffie-hellman "^5.0.0" 816 | inherits "^2.0.1" 817 | pbkdf2 "^3.0.3" 818 | public-encrypt "^4.0.0" 819 | randombytes "^2.0.0" 820 | randomfill "^1.0.3" 821 | 822 | crypto-random-string@^2.0.0: 823 | version "2.0.0" 824 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 825 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 826 | 827 | css-color-keywords@^1.0.0: 828 | version "1.0.0" 829 | resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" 830 | integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= 831 | 832 | css-to-react-native@^3.0.0: 833 | version "3.0.0" 834 | resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" 835 | integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== 836 | dependencies: 837 | camelize "^1.0.0" 838 | css-color-keywords "^1.0.0" 839 | postcss-value-parser "^4.0.2" 840 | 841 | css.escape@1.5.1: 842 | version "1.5.1" 843 | resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" 844 | integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= 845 | 846 | cssnano-preset-simple@^3.0.0: 847 | version "3.0.0" 848 | resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz#e95d0012699ca2c741306e9a3b8eeb495a348dbe" 849 | integrity sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w== 850 | dependencies: 851 | caniuse-lite "^1.0.30001202" 852 | 853 | cssnano-simple@3.0.0: 854 | version "3.0.0" 855 | resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-3.0.0.tgz#a4b8ccdef4c7084af97e19bc5b93b4ecf211e90f" 856 | integrity sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg== 857 | dependencies: 858 | cssnano-preset-simple "^3.0.0" 859 | 860 | data-uri-to-buffer@3.0.1: 861 | version "3.0.1" 862 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" 863 | integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== 864 | 865 | debug@2: 866 | version "2.6.9" 867 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 868 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 869 | dependencies: 870 | ms "2.0.0" 871 | 872 | debug@4, debug@^4.0.0, debug@^4.1.0: 873 | version "4.3.2" 874 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 875 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 876 | dependencies: 877 | ms "2.1.2" 878 | 879 | define-properties@^1.1.3: 880 | version "1.1.3" 881 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 882 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 883 | dependencies: 884 | object-keys "^1.0.12" 885 | 886 | del@^6.0.0: 887 | version "6.0.0" 888 | resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" 889 | integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== 890 | dependencies: 891 | globby "^11.0.1" 892 | graceful-fs "^4.2.4" 893 | is-glob "^4.0.1" 894 | is-path-cwd "^2.2.0" 895 | is-path-inside "^3.0.2" 896 | p-map "^4.0.0" 897 | rimraf "^3.0.2" 898 | slash "^3.0.0" 899 | 900 | delegates@^1.0.0: 901 | version "1.0.0" 902 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 903 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 904 | 905 | depd@~1.1.2: 906 | version "1.1.2" 907 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 908 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 909 | 910 | des.js@^1.0.0: 911 | version "1.0.1" 912 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" 913 | integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== 914 | dependencies: 915 | inherits "^2.0.1" 916 | minimalistic-assert "^1.0.0" 917 | 918 | detect-libc@^1.0.3: 919 | version "1.0.3" 920 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 921 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 922 | 923 | diffie-hellman@^5.0.0: 924 | version "5.0.3" 925 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" 926 | integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== 927 | dependencies: 928 | bn.js "^4.1.0" 929 | miller-rabin "^4.0.0" 930 | randombytes "^2.0.0" 931 | 932 | dir-glob@^3.0.1: 933 | version "3.0.1" 934 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 935 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 936 | dependencies: 937 | path-type "^4.0.0" 938 | 939 | dom-serializer@^1.0.1: 940 | version "1.3.2" 941 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" 942 | integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== 943 | dependencies: 944 | domelementtype "^2.0.1" 945 | domhandler "^4.2.0" 946 | entities "^2.0.0" 947 | 948 | domain-browser@4.19.0: 949 | version "4.19.0" 950 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" 951 | integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ== 952 | 953 | domain-browser@^1.1.1: 954 | version "1.2.0" 955 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" 956 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== 957 | 958 | domelementtype@^2.0.1, domelementtype@^2.2.0: 959 | version "2.2.0" 960 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" 961 | integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== 962 | 963 | domhandler@^3.3.0: 964 | version "3.3.0" 965 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" 966 | integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== 967 | dependencies: 968 | domelementtype "^2.0.1" 969 | 970 | domhandler@^4.2.0: 971 | version "4.2.0" 972 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" 973 | integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== 974 | dependencies: 975 | domelementtype "^2.2.0" 976 | 977 | domutils@^2.4.2: 978 | version "2.7.0" 979 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" 980 | integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== 981 | dependencies: 982 | dom-serializer "^1.0.1" 983 | domelementtype "^2.2.0" 984 | domhandler "^4.2.0" 985 | 986 | electron-to-chromium@^1.3.723: 987 | version "1.3.806" 988 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.806.tgz#21502100f11aead6c501d1cd7f2504f16c936642" 989 | integrity sha512-AH/otJLAAecgyrYp0XK1DPiGVWcOgwPeJBOLeuFQ5l//vhQhwC9u6d+GijClqJAmsHG4XDue81ndSQPohUu0xA== 990 | 991 | elliptic@^6.5.3: 992 | version "6.5.4" 993 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 994 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== 995 | dependencies: 996 | bn.js "^4.11.9" 997 | brorand "^1.1.0" 998 | hash.js "^1.0.0" 999 | hmac-drbg "^1.0.1" 1000 | inherits "^2.0.4" 1001 | minimalistic-assert "^1.0.1" 1002 | minimalistic-crypto-utils "^1.0.1" 1003 | 1004 | emojis-list@^2.0.0: 1005 | version "2.1.0" 1006 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 1007 | integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= 1008 | 1009 | encoding@0.1.13: 1010 | version "0.1.13" 1011 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" 1012 | integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== 1013 | dependencies: 1014 | iconv-lite "^0.6.2" 1015 | 1016 | entities@^2.0.0: 1017 | version "2.2.0" 1018 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 1019 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 1020 | 1021 | es-abstract@^1.18.5: 1022 | version "1.18.5" 1023 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" 1024 | integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== 1025 | dependencies: 1026 | call-bind "^1.0.2" 1027 | es-to-primitive "^1.2.1" 1028 | function-bind "^1.1.1" 1029 | get-intrinsic "^1.1.1" 1030 | has "^1.0.3" 1031 | has-symbols "^1.0.2" 1032 | internal-slot "^1.0.3" 1033 | is-callable "^1.2.3" 1034 | is-negative-zero "^2.0.1" 1035 | is-regex "^1.1.3" 1036 | is-string "^1.0.6" 1037 | object-inspect "^1.11.0" 1038 | object-keys "^1.1.1" 1039 | object.assign "^4.1.2" 1040 | string.prototype.trimend "^1.0.4" 1041 | string.prototype.trimstart "^1.0.4" 1042 | unbox-primitive "^1.0.1" 1043 | 1044 | es-to-primitive@^1.2.1: 1045 | version "1.2.1" 1046 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1047 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1048 | dependencies: 1049 | is-callable "^1.1.4" 1050 | is-date-object "^1.0.1" 1051 | is-symbol "^1.0.2" 1052 | 1053 | es6-object-assign@^1.1.0: 1054 | version "1.1.0" 1055 | resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" 1056 | integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= 1057 | 1058 | escalade@^3.1.1: 1059 | version "3.1.1" 1060 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1061 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1062 | 1063 | escape-string-regexp@^1.0.5: 1064 | version "1.0.5" 1065 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1066 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1067 | 1068 | etag@1.8.1: 1069 | version "1.8.1" 1070 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1071 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1072 | 1073 | events@^3.0.0: 1074 | version "3.3.0" 1075 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 1076 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 1077 | 1078 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 1079 | version "1.0.3" 1080 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" 1081 | integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== 1082 | dependencies: 1083 | md5.js "^1.3.4" 1084 | safe-buffer "^5.1.1" 1085 | 1086 | extend@^3.0.0: 1087 | version "3.0.2" 1088 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1089 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 1090 | 1091 | fast-glob@^3.1.1: 1092 | version "3.2.7" 1093 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" 1094 | integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== 1095 | dependencies: 1096 | "@nodelib/fs.stat" "^2.0.2" 1097 | "@nodelib/fs.walk" "^1.2.3" 1098 | glob-parent "^5.1.2" 1099 | merge2 "^1.3.0" 1100 | micromatch "^4.0.4" 1101 | 1102 | fastq@^1.6.0: 1103 | version "1.12.0" 1104 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.12.0.tgz#ed7b6ab5d62393fb2cc591c853652a5c318bf794" 1105 | integrity sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg== 1106 | dependencies: 1107 | reusify "^1.0.4" 1108 | 1109 | fill-range@^7.0.1: 1110 | version "7.0.1" 1111 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1112 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1113 | dependencies: 1114 | to-regex-range "^5.0.1" 1115 | 1116 | find-cache-dir@3.3.1: 1117 | version "3.3.1" 1118 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" 1119 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== 1120 | dependencies: 1121 | commondir "^1.0.1" 1122 | make-dir "^3.0.2" 1123 | pkg-dir "^4.1.0" 1124 | 1125 | find-up@^4.0.0: 1126 | version "4.1.0" 1127 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1128 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1129 | dependencies: 1130 | locate-path "^5.0.0" 1131 | path-exists "^4.0.0" 1132 | 1133 | foreach@^2.0.5: 1134 | version "2.0.5" 1135 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 1136 | integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= 1137 | 1138 | fs-extra@^10.0.0: 1139 | version "10.0.0" 1140 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" 1141 | integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== 1142 | dependencies: 1143 | graceful-fs "^4.2.0" 1144 | jsonfile "^6.0.1" 1145 | universalify "^2.0.0" 1146 | 1147 | fs-minipass@^2.0.0: 1148 | version "2.1.0" 1149 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 1150 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 1151 | dependencies: 1152 | minipass "^3.0.0" 1153 | 1154 | fs.realpath@^1.0.0: 1155 | version "1.0.0" 1156 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1157 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1158 | 1159 | fsevents@~2.3.1: 1160 | version "2.3.2" 1161 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1162 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1163 | 1164 | function-bind@^1.1.1: 1165 | version "1.1.1" 1166 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1167 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1168 | 1169 | gauge@~2.7.3: 1170 | version "2.7.4" 1171 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1172 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 1173 | dependencies: 1174 | aproba "^1.0.3" 1175 | console-control-strings "^1.0.0" 1176 | has-unicode "^2.0.0" 1177 | object-assign "^4.1.0" 1178 | signal-exit "^3.0.0" 1179 | string-width "^1.0.1" 1180 | strip-ansi "^3.0.1" 1181 | wide-align "^1.1.0" 1182 | 1183 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 1184 | version "1.1.1" 1185 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 1186 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1187 | dependencies: 1188 | function-bind "^1.1.1" 1189 | has "^1.0.3" 1190 | has-symbols "^1.0.1" 1191 | 1192 | get-orientation@1.1.2: 1193 | version "1.1.2" 1194 | resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947" 1195 | integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ== 1196 | dependencies: 1197 | stream-parser "^0.3.1" 1198 | 1199 | glob-parent@^5.1.2, glob-parent@~5.1.0: 1200 | version "5.1.2" 1201 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1202 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1203 | dependencies: 1204 | is-glob "^4.0.1" 1205 | 1206 | glob-to-regexp@^0.4.1: 1207 | version "0.4.1" 1208 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 1209 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 1210 | 1211 | glob@^7.1.3, glob@^7.1.7: 1212 | version "7.1.7" 1213 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 1214 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 1215 | dependencies: 1216 | fs.realpath "^1.0.0" 1217 | inflight "^1.0.4" 1218 | inherits "2" 1219 | minimatch "^3.0.4" 1220 | once "^1.3.0" 1221 | path-is-absolute "^1.0.0" 1222 | 1223 | globals@^11.1.0: 1224 | version "11.12.0" 1225 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1226 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1227 | 1228 | globby@^11.0.1: 1229 | version "11.0.4" 1230 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" 1231 | integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== 1232 | dependencies: 1233 | array-union "^2.1.0" 1234 | dir-glob "^3.0.1" 1235 | fast-glob "^3.1.1" 1236 | ignore "^5.1.4" 1237 | merge2 "^1.3.0" 1238 | slash "^3.0.0" 1239 | 1240 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: 1241 | version "4.2.8" 1242 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" 1243 | integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== 1244 | 1245 | has-bigints@^1.0.1: 1246 | version "1.0.1" 1247 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" 1248 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 1249 | 1250 | has-flag@^3.0.0: 1251 | version "3.0.0" 1252 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1253 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1254 | 1255 | has-flag@^4.0.0: 1256 | version "4.0.0" 1257 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1258 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1259 | 1260 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1261 | version "1.0.2" 1262 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 1263 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1264 | 1265 | has-tostringtag@^1.0.0: 1266 | version "1.0.0" 1267 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 1268 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1269 | dependencies: 1270 | has-symbols "^1.0.2" 1271 | 1272 | has-unicode@^2.0.0: 1273 | version "2.0.1" 1274 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1275 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1276 | 1277 | has@^1.0.3: 1278 | version "1.0.3" 1279 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1280 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1281 | dependencies: 1282 | function-bind "^1.1.1" 1283 | 1284 | hash-base@^3.0.0: 1285 | version "3.1.0" 1286 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" 1287 | integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== 1288 | dependencies: 1289 | inherits "^2.0.4" 1290 | readable-stream "^3.6.0" 1291 | safe-buffer "^5.2.0" 1292 | 1293 | hash.js@^1.0.0, hash.js@^1.0.3: 1294 | version "1.1.7" 1295 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 1296 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 1297 | dependencies: 1298 | inherits "^2.0.3" 1299 | minimalistic-assert "^1.0.1" 1300 | 1301 | he@1.2.0: 1302 | version "1.2.0" 1303 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1304 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1305 | 1306 | hmac-drbg@^1.0.1: 1307 | version "1.0.1" 1308 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1309 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 1310 | dependencies: 1311 | hash.js "^1.0.3" 1312 | minimalistic-assert "^1.0.0" 1313 | minimalistic-crypto-utils "^1.0.1" 1314 | 1315 | hoist-non-react-statics@^3.0.0: 1316 | version "3.3.2" 1317 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" 1318 | integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== 1319 | dependencies: 1320 | react-is "^16.7.0" 1321 | 1322 | html-to-react@^1.3.4: 1323 | version "1.4.5" 1324 | resolved "https://registry.yarnpkg.com/html-to-react/-/html-to-react-1.4.5.tgz#59091c11021d1ef315ef738460abb6a4a41fe1ce" 1325 | integrity sha512-KONZUDFPg5OodWaQu2ymfkDmU0JA7zB1iPfvyHehTmMUZnk0DS7/TyCMTzsLH6b4BvxX15g88qZCXFhJWktsmA== 1326 | dependencies: 1327 | domhandler "^3.3.0" 1328 | htmlparser2 "^5.0" 1329 | lodash.camelcase "^4.3.0" 1330 | ramda "^0.27.1" 1331 | 1332 | htmlparser2@^5.0: 1333 | version "5.0.1" 1334 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" 1335 | integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== 1336 | dependencies: 1337 | domelementtype "^2.0.1" 1338 | domhandler "^3.3.0" 1339 | domutils "^2.4.2" 1340 | entities "^2.0.0" 1341 | 1342 | http-errors@1.7.3: 1343 | version "1.7.3" 1344 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1345 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1346 | dependencies: 1347 | depd "~1.1.2" 1348 | inherits "2.0.4" 1349 | setprototypeof "1.1.1" 1350 | statuses ">= 1.5.0 < 2" 1351 | toidentifier "1.0.0" 1352 | 1353 | https-browserify@1.0.0, https-browserify@^1.0.0: 1354 | version "1.0.0" 1355 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" 1356 | integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= 1357 | 1358 | https-proxy-agent@^5.0.0: 1359 | version "5.0.0" 1360 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" 1361 | integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== 1362 | dependencies: 1363 | agent-base "6" 1364 | debug "4" 1365 | 1366 | iconv-lite@0.4.24: 1367 | version "0.4.24" 1368 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1369 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1370 | dependencies: 1371 | safer-buffer ">= 2.1.2 < 3" 1372 | 1373 | iconv-lite@^0.6.2: 1374 | version "0.6.3" 1375 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 1376 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 1377 | dependencies: 1378 | safer-buffer ">= 2.1.2 < 3.0.0" 1379 | 1380 | ieee754@^1.1.4: 1381 | version "1.2.1" 1382 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1383 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1384 | 1385 | ignore@^5.1.4: 1386 | version "5.1.8" 1387 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 1388 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1389 | 1390 | image-size@1.0.0: 1391 | version "1.0.0" 1392 | resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.0.tgz#58b31fe4743b1cec0a0ac26f5c914d3c5b2f0750" 1393 | integrity sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw== 1394 | dependencies: 1395 | queue "6.0.2" 1396 | 1397 | indent-string@^4.0.0: 1398 | version "4.0.0" 1399 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1400 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1401 | 1402 | inflight@^1.0.4: 1403 | version "1.0.6" 1404 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1405 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1406 | dependencies: 1407 | once "^1.3.0" 1408 | wrappy "1" 1409 | 1410 | inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: 1411 | version "2.0.4" 1412 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1413 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1414 | 1415 | inherits@2.0.1: 1416 | version "2.0.1" 1417 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1418 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= 1419 | 1420 | inherits@2.0.3: 1421 | version "2.0.3" 1422 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1423 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1424 | 1425 | internal-slot@^1.0.3: 1426 | version "1.0.3" 1427 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" 1428 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 1429 | dependencies: 1430 | get-intrinsic "^1.1.0" 1431 | has "^1.0.3" 1432 | side-channel "^1.0.4" 1433 | 1434 | is-alphabetical@^1.0.0: 1435 | version "1.0.4" 1436 | resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" 1437 | integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== 1438 | 1439 | is-alphanumerical@^1.0.0: 1440 | version "1.0.4" 1441 | resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" 1442 | integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== 1443 | dependencies: 1444 | is-alphabetical "^1.0.0" 1445 | is-decimal "^1.0.0" 1446 | 1447 | is-arguments@^1.0.4: 1448 | version "1.1.1" 1449 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" 1450 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== 1451 | dependencies: 1452 | call-bind "^1.0.2" 1453 | has-tostringtag "^1.0.0" 1454 | 1455 | is-bigint@^1.0.1: 1456 | version "1.0.4" 1457 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 1458 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1459 | dependencies: 1460 | has-bigints "^1.0.1" 1461 | 1462 | is-binary-path@~2.1.0: 1463 | version "2.1.0" 1464 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1465 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1466 | dependencies: 1467 | binary-extensions "^2.0.0" 1468 | 1469 | is-boolean-object@^1.1.0: 1470 | version "1.1.2" 1471 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 1472 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1473 | dependencies: 1474 | call-bind "^1.0.2" 1475 | has-tostringtag "^1.0.0" 1476 | 1477 | is-buffer@^2.0.0: 1478 | version "2.0.5" 1479 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" 1480 | integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== 1481 | 1482 | is-callable@^1.1.4, is-callable@^1.2.3: 1483 | version "1.2.4" 1484 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" 1485 | integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== 1486 | 1487 | is-date-object@^1.0.1: 1488 | version "1.0.5" 1489 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 1490 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1491 | dependencies: 1492 | has-tostringtag "^1.0.0" 1493 | 1494 | is-decimal@^1.0.0: 1495 | version "1.0.4" 1496 | resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" 1497 | integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== 1498 | 1499 | is-extglob@^2.1.1: 1500 | version "2.1.1" 1501 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1502 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1503 | 1504 | is-fullwidth-code-point@^1.0.0: 1505 | version "1.0.0" 1506 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1507 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1508 | dependencies: 1509 | number-is-nan "^1.0.0" 1510 | 1511 | is-fullwidth-code-point@^2.0.0: 1512 | version "2.0.0" 1513 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1514 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1515 | 1516 | is-generator-function@^1.0.7: 1517 | version "1.0.10" 1518 | resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" 1519 | integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== 1520 | dependencies: 1521 | has-tostringtag "^1.0.0" 1522 | 1523 | is-glob@^4.0.1, is-glob@~4.0.1: 1524 | version "4.0.1" 1525 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1526 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1527 | dependencies: 1528 | is-extglob "^2.1.1" 1529 | 1530 | is-hexadecimal@^1.0.0: 1531 | version "1.0.4" 1532 | resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" 1533 | integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== 1534 | 1535 | is-nan@^1.2.1: 1536 | version "1.3.2" 1537 | resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" 1538 | integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== 1539 | dependencies: 1540 | call-bind "^1.0.0" 1541 | define-properties "^1.1.3" 1542 | 1543 | is-negative-zero@^2.0.1: 1544 | version "2.0.1" 1545 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 1546 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1547 | 1548 | is-number-object@^1.0.4: 1549 | version "1.0.6" 1550 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" 1551 | integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== 1552 | dependencies: 1553 | has-tostringtag "^1.0.0" 1554 | 1555 | is-number@^7.0.0: 1556 | version "7.0.0" 1557 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1558 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1559 | 1560 | is-path-cwd@^2.2.0: 1561 | version "2.2.0" 1562 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" 1563 | integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== 1564 | 1565 | is-path-inside@^3.0.2: 1566 | version "3.0.3" 1567 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1568 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1569 | 1570 | is-plain-obj@^2.0.0: 1571 | version "2.1.0" 1572 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1573 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1574 | 1575 | is-regex@^1.1.3: 1576 | version "1.1.4" 1577 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 1578 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1579 | dependencies: 1580 | call-bind "^1.0.2" 1581 | has-tostringtag "^1.0.0" 1582 | 1583 | is-stream@^2.0.0: 1584 | version "2.0.1" 1585 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1586 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1587 | 1588 | is-string@^1.0.5, is-string@^1.0.6: 1589 | version "1.0.7" 1590 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 1591 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1592 | dependencies: 1593 | has-tostringtag "^1.0.0" 1594 | 1595 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1596 | version "1.0.4" 1597 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1598 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1599 | dependencies: 1600 | has-symbols "^1.0.2" 1601 | 1602 | is-typed-array@^1.1.3, is-typed-array@^1.1.6: 1603 | version "1.1.7" 1604 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.7.tgz#881ddc660b13cb8423b2090fa88c0fe37a83eb2f" 1605 | integrity sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA== 1606 | dependencies: 1607 | available-typed-arrays "^1.0.4" 1608 | call-bind "^1.0.2" 1609 | es-abstract "^1.18.5" 1610 | foreach "^2.0.5" 1611 | has-tostringtag "^1.0.0" 1612 | 1613 | isarray@^1.0.0, isarray@~1.0.0: 1614 | version "1.0.0" 1615 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1616 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1617 | 1618 | jest-worker@27.0.0-next.5: 1619 | version "27.0.0-next.5" 1620 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28" 1621 | integrity sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g== 1622 | dependencies: 1623 | "@types/node" "*" 1624 | merge-stream "^2.0.0" 1625 | supports-color "^8.0.0" 1626 | 1627 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1628 | version "4.0.0" 1629 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1630 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1631 | 1632 | jsesc@^2.5.1: 1633 | version "2.5.2" 1634 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1635 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1636 | 1637 | json5@^1.0.1: 1638 | version "1.0.1" 1639 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 1640 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1641 | dependencies: 1642 | minimist "^1.2.0" 1643 | 1644 | json5@^2.1.1: 1645 | version "2.2.0" 1646 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 1647 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 1648 | dependencies: 1649 | minimist "^1.2.5" 1650 | 1651 | jsonfile@^6.0.1: 1652 | version "6.1.0" 1653 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 1654 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1655 | dependencies: 1656 | universalify "^2.0.0" 1657 | optionalDependencies: 1658 | graceful-fs "^4.1.6" 1659 | 1660 | loader-utils@1.2.3: 1661 | version "1.2.3" 1662 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" 1663 | integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== 1664 | dependencies: 1665 | big.js "^5.2.2" 1666 | emojis-list "^2.0.0" 1667 | json5 "^1.0.1" 1668 | 1669 | locate-path@^5.0.0: 1670 | version "5.0.0" 1671 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1672 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1673 | dependencies: 1674 | p-locate "^4.1.0" 1675 | 1676 | lodash.camelcase@^4.3.0: 1677 | version "4.3.0" 1678 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 1679 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 1680 | 1681 | lodash.sortby@^4.7.0: 1682 | version "4.7.0" 1683 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1684 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 1685 | 1686 | lodash@^4.17.11, lodash@^4.17.20: 1687 | version "4.17.21" 1688 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1689 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1690 | 1691 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1692 | version "1.4.0" 1693 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1694 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1695 | dependencies: 1696 | js-tokens "^3.0.0 || ^4.0.0" 1697 | 1698 | lru-cache@^6.0.0: 1699 | version "6.0.0" 1700 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1701 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1702 | dependencies: 1703 | yallist "^4.0.0" 1704 | 1705 | make-dir@^3.0.2, make-dir@^3.1.0: 1706 | version "3.1.0" 1707 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1708 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1709 | dependencies: 1710 | semver "^6.0.0" 1711 | 1712 | md5.js@^1.3.4: 1713 | version "1.3.5" 1714 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" 1715 | integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== 1716 | dependencies: 1717 | hash-base "^3.0.0" 1718 | inherits "^2.0.1" 1719 | safe-buffer "^5.1.2" 1720 | 1721 | mdast-add-list-metadata@1.0.1: 1722 | version "1.0.1" 1723 | resolved "https://registry.yarnpkg.com/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz#95e73640ce2fc1fa2dcb7ec443d09e2bfe7db4cf" 1724 | integrity sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA== 1725 | dependencies: 1726 | unist-util-visit-parents "1.1.2" 1727 | 1728 | mdast-util-from-markdown@^0.8.0: 1729 | version "0.8.5" 1730 | resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" 1731 | integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== 1732 | dependencies: 1733 | "@types/mdast" "^3.0.0" 1734 | mdast-util-to-string "^2.0.0" 1735 | micromark "~2.11.0" 1736 | parse-entities "^2.0.0" 1737 | unist-util-stringify-position "^2.0.0" 1738 | 1739 | mdast-util-to-string@^2.0.0: 1740 | version "2.0.0" 1741 | resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" 1742 | integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== 1743 | 1744 | merge-stream@^2.0.0: 1745 | version "2.0.0" 1746 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1747 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1748 | 1749 | merge2@^1.3.0: 1750 | version "1.4.1" 1751 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1752 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1753 | 1754 | micromark@~2.11.0: 1755 | version "2.11.4" 1756 | resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" 1757 | integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== 1758 | dependencies: 1759 | debug "^4.0.0" 1760 | parse-entities "^2.0.0" 1761 | 1762 | micromatch@^4.0.4: 1763 | version "4.0.4" 1764 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1765 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1766 | dependencies: 1767 | braces "^3.0.1" 1768 | picomatch "^2.2.3" 1769 | 1770 | miller-rabin@^4.0.0: 1771 | version "4.0.1" 1772 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" 1773 | integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== 1774 | dependencies: 1775 | bn.js "^4.0.0" 1776 | brorand "^1.0.1" 1777 | 1778 | mime-db@1.49.0: 1779 | version "1.49.0" 1780 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" 1781 | integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== 1782 | 1783 | mime-types@^2.1.30: 1784 | version "2.1.32" 1785 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" 1786 | integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== 1787 | dependencies: 1788 | mime-db "1.49.0" 1789 | 1790 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 1791 | version "1.0.1" 1792 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 1793 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 1794 | 1795 | minimalistic-crypto-utils@^1.0.1: 1796 | version "1.0.1" 1797 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1798 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 1799 | 1800 | minimatch@^3.0.4: 1801 | version "3.0.4" 1802 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1803 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1804 | dependencies: 1805 | brace-expansion "^1.1.7" 1806 | 1807 | minimist@^1.2.0, minimist@^1.2.5: 1808 | version "1.2.5" 1809 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1810 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1811 | 1812 | minipass@^3.0.0: 1813 | version "3.1.3" 1814 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" 1815 | integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== 1816 | dependencies: 1817 | yallist "^4.0.0" 1818 | 1819 | minizlib@^2.1.1: 1820 | version "2.1.2" 1821 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 1822 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 1823 | dependencies: 1824 | minipass "^3.0.0" 1825 | yallist "^4.0.0" 1826 | 1827 | mkdirp@^1.0.3: 1828 | version "1.0.4" 1829 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1830 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1831 | 1832 | ms@2.0.0: 1833 | version "2.0.0" 1834 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1835 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1836 | 1837 | ms@2.1.2: 1838 | version "2.1.2" 1839 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1840 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1841 | 1842 | nanoid@^3.1.23: 1843 | version "3.1.25" 1844 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" 1845 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== 1846 | 1847 | native-url@0.3.4: 1848 | version "0.3.4" 1849 | resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8" 1850 | integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== 1851 | dependencies: 1852 | querystring "^0.2.0" 1853 | 1854 | next@^11.1.0: 1855 | version "11.1.0" 1856 | resolved "https://registry.yarnpkg.com/next/-/next-11.1.0.tgz#767d4c4fa0b9b0c768cdbd6c9f03dd86b5d701c0" 1857 | integrity sha512-GHBk/c7Wyr6YbFRFZF37I0X7HKzkHHI8pur/loyXo5AIE8wdkbGPGO0ds3vNAO6f8AxZAKGCRYtAzoGlVLoifA== 1858 | dependencies: 1859 | "@babel/runtime" "7.12.5" 1860 | "@hapi/accept" "5.0.2" 1861 | "@next/env" "11.1.0" 1862 | "@next/polyfill-module" "11.1.0" 1863 | "@next/react-dev-overlay" "11.1.0" 1864 | "@next/react-refresh-utils" "11.1.0" 1865 | "@node-rs/helper" "1.2.1" 1866 | assert "2.0.0" 1867 | ast-types "0.13.2" 1868 | browserify-zlib "0.2.0" 1869 | browserslist "4.16.6" 1870 | buffer "5.6.0" 1871 | caniuse-lite "^1.0.30001228" 1872 | chalk "2.4.2" 1873 | chokidar "3.5.1" 1874 | constants-browserify "1.0.0" 1875 | crypto-browserify "3.12.0" 1876 | cssnano-simple "3.0.0" 1877 | domain-browser "4.19.0" 1878 | encoding "0.1.13" 1879 | etag "1.8.1" 1880 | find-cache-dir "3.3.1" 1881 | get-orientation "1.1.2" 1882 | https-browserify "1.0.0" 1883 | image-size "1.0.0" 1884 | jest-worker "27.0.0-next.5" 1885 | native-url "0.3.4" 1886 | node-fetch "2.6.1" 1887 | node-html-parser "1.4.9" 1888 | node-libs-browser "^2.2.1" 1889 | os-browserify "0.3.0" 1890 | p-limit "3.1.0" 1891 | path-browserify "1.0.1" 1892 | pnp-webpack-plugin "1.6.4" 1893 | postcss "8.2.15" 1894 | process "0.11.10" 1895 | querystring-es3 "0.2.1" 1896 | raw-body "2.4.1" 1897 | react-is "17.0.2" 1898 | react-refresh "0.8.3" 1899 | stream-browserify "3.0.0" 1900 | stream-http "3.1.1" 1901 | string_decoder "1.3.0" 1902 | styled-jsx "4.0.0" 1903 | timers-browserify "2.0.12" 1904 | tty-browserify "0.0.1" 1905 | use-subscription "1.5.1" 1906 | util "0.12.3" 1907 | vm-browserify "1.1.2" 1908 | watchpack "2.1.1" 1909 | 1910 | node-addon-api@^3.1.0: 1911 | version "3.2.1" 1912 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" 1913 | integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== 1914 | 1915 | node-fetch@2.6.1, node-fetch@^2.6.1: 1916 | version "2.6.1" 1917 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 1918 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 1919 | 1920 | node-html-parser@1.4.9: 1921 | version "1.4.9" 1922 | resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" 1923 | integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== 1924 | dependencies: 1925 | he "1.2.0" 1926 | 1927 | node-libs-browser@^2.2.1: 1928 | version "2.2.1" 1929 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" 1930 | integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== 1931 | dependencies: 1932 | assert "^1.1.1" 1933 | browserify-zlib "^0.2.0" 1934 | buffer "^4.3.0" 1935 | console-browserify "^1.1.0" 1936 | constants-browserify "^1.0.0" 1937 | crypto-browserify "^3.11.0" 1938 | domain-browser "^1.1.1" 1939 | events "^3.0.0" 1940 | https-browserify "^1.0.0" 1941 | os-browserify "^0.3.0" 1942 | path-browserify "0.0.1" 1943 | process "^0.11.10" 1944 | punycode "^1.2.4" 1945 | querystring-es3 "^0.2.0" 1946 | readable-stream "^2.3.3" 1947 | stream-browserify "^2.0.1" 1948 | stream-http "^2.7.2" 1949 | string_decoder "^1.0.0" 1950 | timers-browserify "^2.0.4" 1951 | tty-browserify "0.0.0" 1952 | url "^0.11.0" 1953 | util "^0.11.0" 1954 | vm-browserify "^1.0.1" 1955 | 1956 | node-releases@^1.1.71: 1957 | version "1.1.74" 1958 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e" 1959 | integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw== 1960 | 1961 | nopt@^5.0.0: 1962 | version "5.0.0" 1963 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" 1964 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== 1965 | dependencies: 1966 | abbrev "1" 1967 | 1968 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1969 | version "3.0.0" 1970 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1971 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1972 | 1973 | npmlog@^4.1.2: 1974 | version "4.1.2" 1975 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1976 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 1977 | dependencies: 1978 | are-we-there-yet "~1.1.2" 1979 | console-control-strings "~1.1.0" 1980 | gauge "~2.7.3" 1981 | set-blocking "~2.0.0" 1982 | 1983 | number-is-nan@^1.0.0: 1984 | version "1.0.1" 1985 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1986 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1987 | 1988 | object-assign@^4.1.0, object-assign@^4.1.1: 1989 | version "4.1.1" 1990 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1991 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1992 | 1993 | object-inspect@^1.11.0, object-inspect@^1.9.0: 1994 | version "1.11.0" 1995 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" 1996 | integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== 1997 | 1998 | object-is@^1.0.1: 1999 | version "1.1.5" 2000 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" 2001 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== 2002 | dependencies: 2003 | call-bind "^1.0.2" 2004 | define-properties "^1.1.3" 2005 | 2006 | object-keys@^1.0.12, object-keys@^1.1.1: 2007 | version "1.1.1" 2008 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2009 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2010 | 2011 | object.assign@^4.1.2: 2012 | version "4.1.2" 2013 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 2014 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 2015 | dependencies: 2016 | call-bind "^1.0.0" 2017 | define-properties "^1.1.3" 2018 | has-symbols "^1.0.1" 2019 | object-keys "^1.1.1" 2020 | 2021 | once@^1.3.0: 2022 | version "1.4.0" 2023 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2024 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2025 | dependencies: 2026 | wrappy "1" 2027 | 2028 | os-browserify@0.3.0, os-browserify@^0.3.0: 2029 | version "0.3.0" 2030 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" 2031 | integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= 2032 | 2033 | p-debounce@^2.1.0: 2034 | version "2.1.0" 2035 | resolved "https://registry.yarnpkg.com/p-debounce/-/p-debounce-2.1.0.tgz#e79f70c6e325cbb9bddbcbec0b81025084671ad3" 2036 | integrity sha512-M9bMt62TTnozdZhqFgs+V7XD2MnuKCaz+7fZdlu2/T7xruI3uIE5CicQ0vx1hV7HIUYF0jF+4/R1AgfOkl74Qw== 2037 | 2038 | p-limit@3.1.0: 2039 | version "3.1.0" 2040 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2041 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2042 | dependencies: 2043 | yocto-queue "^0.1.0" 2044 | 2045 | p-limit@^2.2.0: 2046 | version "2.3.0" 2047 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2048 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2049 | dependencies: 2050 | p-try "^2.0.0" 2051 | 2052 | p-locate@^4.1.0: 2053 | version "4.1.0" 2054 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2055 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2056 | dependencies: 2057 | p-limit "^2.2.0" 2058 | 2059 | p-map@^4.0.0: 2060 | version "4.0.0" 2061 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" 2062 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 2063 | dependencies: 2064 | aggregate-error "^3.0.0" 2065 | 2066 | p-try@^2.0.0: 2067 | version "2.2.0" 2068 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2069 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2070 | 2071 | pako@~1.0.5: 2072 | version "1.0.11" 2073 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" 2074 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== 2075 | 2076 | parse-asn1@^5.0.0, parse-asn1@^5.1.5: 2077 | version "5.1.6" 2078 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" 2079 | integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== 2080 | dependencies: 2081 | asn1.js "^5.2.0" 2082 | browserify-aes "^1.0.0" 2083 | evp_bytestokey "^1.0.0" 2084 | pbkdf2 "^3.0.3" 2085 | safe-buffer "^5.1.1" 2086 | 2087 | parse-entities@^2.0.0: 2088 | version "2.0.0" 2089 | resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" 2090 | integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== 2091 | dependencies: 2092 | character-entities "^1.0.0" 2093 | character-entities-legacy "^1.0.0" 2094 | character-reference-invalid "^1.0.0" 2095 | is-alphanumerical "^1.0.0" 2096 | is-decimal "^1.0.0" 2097 | is-hexadecimal "^1.0.0" 2098 | 2099 | path-browserify@0.0.1: 2100 | version "0.0.1" 2101 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" 2102 | integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== 2103 | 2104 | path-browserify@1.0.1: 2105 | version "1.0.1" 2106 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" 2107 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== 2108 | 2109 | path-exists@^4.0.0: 2110 | version "4.0.0" 2111 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2112 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2113 | 2114 | path-is-absolute@^1.0.0: 2115 | version "1.0.1" 2116 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2117 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2118 | 2119 | path-type@^4.0.0: 2120 | version "4.0.0" 2121 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2122 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2123 | 2124 | pbkdf2@^3.0.3: 2125 | version "3.1.2" 2126 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" 2127 | integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== 2128 | dependencies: 2129 | create-hash "^1.1.2" 2130 | create-hmac "^1.1.4" 2131 | ripemd160 "^2.0.1" 2132 | safe-buffer "^5.0.1" 2133 | sha.js "^2.4.8" 2134 | 2135 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 2136 | version "2.3.0" 2137 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 2138 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 2139 | 2140 | pkg-dir@^4.1.0: 2141 | version "4.2.0" 2142 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2143 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2144 | dependencies: 2145 | find-up "^4.0.0" 2146 | 2147 | platform@1.3.6: 2148 | version "1.3.6" 2149 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" 2150 | integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== 2151 | 2152 | pnp-webpack-plugin@1.6.4: 2153 | version "1.6.4" 2154 | resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" 2155 | integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== 2156 | dependencies: 2157 | ts-pnp "^1.1.6" 2158 | 2159 | postcss-value-parser@^4.0.2: 2160 | version "4.1.0" 2161 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" 2162 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== 2163 | 2164 | postcss@8.2.15: 2165 | version "8.2.15" 2166 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65" 2167 | integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q== 2168 | dependencies: 2169 | colorette "^1.2.2" 2170 | nanoid "^3.1.23" 2171 | source-map "^0.6.1" 2172 | 2173 | prettier@^2.3.2: 2174 | version "2.3.2" 2175 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" 2176 | integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== 2177 | 2178 | pretty-bytes@^5.3.0: 2179 | version "5.6.0" 2180 | resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" 2181 | integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== 2182 | 2183 | process-nextick-args@~2.0.0: 2184 | version "2.0.1" 2185 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2186 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2187 | 2188 | process@0.11.10, process@^0.11.10: 2189 | version "0.11.10" 2190 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 2191 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 2192 | 2193 | prop-types@^15.7.2: 2194 | version "15.7.2" 2195 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 2196 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 2197 | dependencies: 2198 | loose-envify "^1.4.0" 2199 | object-assign "^4.1.1" 2200 | react-is "^16.8.1" 2201 | 2202 | public-encrypt@^4.0.0: 2203 | version "4.0.3" 2204 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" 2205 | integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== 2206 | dependencies: 2207 | bn.js "^4.1.0" 2208 | browserify-rsa "^4.0.0" 2209 | create-hash "^1.1.0" 2210 | parse-asn1 "^5.0.0" 2211 | randombytes "^2.0.1" 2212 | safe-buffer "^5.1.2" 2213 | 2214 | punycode@1.3.2: 2215 | version "1.3.2" 2216 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 2217 | integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= 2218 | 2219 | punycode@^1.2.4: 2220 | version "1.4.1" 2221 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2222 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 2223 | 2224 | punycode@^2.1.0: 2225 | version "2.1.1" 2226 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2227 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2228 | 2229 | querystring-es3@0.2.1, querystring-es3@^0.2.0: 2230 | version "0.2.1" 2231 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 2232 | integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= 2233 | 2234 | querystring@0.2.0: 2235 | version "0.2.0" 2236 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 2237 | integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= 2238 | 2239 | querystring@^0.2.0: 2240 | version "0.2.1" 2241 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" 2242 | integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== 2243 | 2244 | queue-microtask@^1.2.2: 2245 | version "1.2.3" 2246 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2247 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2248 | 2249 | queue@6.0.2: 2250 | version "6.0.2" 2251 | resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" 2252 | integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== 2253 | dependencies: 2254 | inherits "~2.0.3" 2255 | 2256 | ramda@^0.27.1: 2257 | version "0.27.1" 2258 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" 2259 | integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== 2260 | 2261 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: 2262 | version "2.1.0" 2263 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 2264 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 2265 | dependencies: 2266 | safe-buffer "^5.1.0" 2267 | 2268 | randomfill@^1.0.3: 2269 | version "1.0.4" 2270 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" 2271 | integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== 2272 | dependencies: 2273 | randombytes "^2.0.5" 2274 | safe-buffer "^5.1.0" 2275 | 2276 | raw-body@2.4.1: 2277 | version "2.4.1" 2278 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" 2279 | integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== 2280 | dependencies: 2281 | bytes "3.1.0" 2282 | http-errors "1.7.3" 2283 | iconv-lite "0.4.24" 2284 | unpipe "1.0.0" 2285 | 2286 | react-detect-click-outside@^1.1.1: 2287 | version "1.1.1" 2288 | resolved "https://registry.yarnpkg.com/react-detect-click-outside/-/react-detect-click-outside-1.1.1.tgz#3a3855639aeb19fb0d28524aac9f283e8ffd1542" 2289 | integrity sha512-1MqRw9+RaA3dF4zJePSngxBqXut/RgHajFLR91cTV7PRmQyCIrQAUtv979IhQoaoWhVM8rdSx9Eg4/vc/hcReQ== 2290 | 2291 | react-dom@^17.0.2: 2292 | version "17.0.2" 2293 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" 2294 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== 2295 | dependencies: 2296 | loose-envify "^1.1.0" 2297 | object-assign "^4.1.1" 2298 | scheduler "^0.20.2" 2299 | 2300 | react-is@17.0.2: 2301 | version "17.0.2" 2302 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" 2303 | integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== 2304 | 2305 | react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: 2306 | version "16.13.1" 2307 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 2308 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 2309 | 2310 | react-markdown@^5.0.3: 2311 | version "5.0.3" 2312 | resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-5.0.3.tgz#41040ea7a9324b564b328fb81dd6c04f2a5373ac" 2313 | integrity sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w== 2314 | dependencies: 2315 | "@types/mdast" "^3.0.3" 2316 | "@types/unist" "^2.0.3" 2317 | html-to-react "^1.3.4" 2318 | mdast-add-list-metadata "1.0.1" 2319 | prop-types "^15.7.2" 2320 | react-is "^16.8.6" 2321 | remark-parse "^9.0.0" 2322 | unified "^9.0.0" 2323 | unist-util-visit "^2.0.0" 2324 | xtend "^4.0.1" 2325 | 2326 | react-refresh@0.8.3: 2327 | version "0.8.3" 2328 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" 2329 | integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== 2330 | 2331 | react-timeago@^4.4.0: 2332 | version "4.4.0" 2333 | resolved "https://registry.yarnpkg.com/react-timeago/-/react-timeago-4.4.0.tgz#4520dd9ba63551afc4d709819f52b14b9343ba2b" 2334 | integrity sha512-Zj8RchTqZEH27LAANemzMR2RpotbP2aMd+UIajfYMZ9KW4dMcViUVKzC7YmqfiqlFfz8B0bjDw2xUBjmcxDngA== 2335 | 2336 | react@^17.0.2: 2337 | version "17.0.2" 2338 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" 2339 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 2340 | dependencies: 2341 | loose-envify "^1.1.0" 2342 | object-assign "^4.1.1" 2343 | 2344 | reactjs-popup@^2.0.5: 2345 | version "2.0.5" 2346 | resolved "https://registry.yarnpkg.com/reactjs-popup/-/reactjs-popup-2.0.5.tgz#588a74966bb126699429d739948e3448d7771eac" 2347 | integrity sha512-b5hv9a6aGsHEHXFAgPO5s1Jw1eSkopueyUVxQewGdLgqk2eW0IVXZrPRpHR629YcgIpC2oxtX8OOZ8a7bQJbxA== 2348 | 2349 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.3, readable-stream@^2.3.6: 2350 | version "2.3.7" 2351 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 2352 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 2353 | dependencies: 2354 | core-util-is "~1.0.0" 2355 | inherits "~2.0.3" 2356 | isarray "~1.0.0" 2357 | process-nextick-args "~2.0.0" 2358 | safe-buffer "~5.1.1" 2359 | string_decoder "~1.1.1" 2360 | util-deprecate "~1.0.1" 2361 | 2362 | readable-stream@^3.5.0, readable-stream@^3.6.0: 2363 | version "3.6.0" 2364 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 2365 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 2366 | dependencies: 2367 | inherits "^2.0.3" 2368 | string_decoder "^1.1.1" 2369 | util-deprecate "^1.0.1" 2370 | 2371 | readdirp@~3.5.0: 2372 | version "3.5.0" 2373 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 2374 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 2375 | dependencies: 2376 | picomatch "^2.2.1" 2377 | 2378 | regenerator-runtime@^0.13.4: 2379 | version "0.13.9" 2380 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 2381 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 2382 | 2383 | remark-parse@^9.0.0: 2384 | version "9.0.0" 2385 | resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" 2386 | integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== 2387 | dependencies: 2388 | mdast-util-from-markdown "^0.8.0" 2389 | 2390 | reusify@^1.0.4: 2391 | version "1.0.4" 2392 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2393 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2394 | 2395 | rimraf@^3.0.2: 2396 | version "3.0.2" 2397 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2398 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2399 | dependencies: 2400 | glob "^7.1.3" 2401 | 2402 | ripemd160@^2.0.0, ripemd160@^2.0.1: 2403 | version "2.0.2" 2404 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" 2405 | integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== 2406 | dependencies: 2407 | hash-base "^3.0.0" 2408 | inherits "^2.0.1" 2409 | 2410 | run-parallel@^1.1.9: 2411 | version "1.2.0" 2412 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2413 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2414 | dependencies: 2415 | queue-microtask "^1.2.2" 2416 | 2417 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: 2418 | version "5.2.1" 2419 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2420 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2421 | 2422 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2423 | version "5.1.2" 2424 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2425 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2426 | 2427 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: 2428 | version "2.1.2" 2429 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2430 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2431 | 2432 | scheduler@^0.20.2: 2433 | version "0.20.2" 2434 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" 2435 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== 2436 | dependencies: 2437 | loose-envify "^1.1.0" 2438 | object-assign "^4.1.1" 2439 | 2440 | semver@^6.0.0: 2441 | version "6.3.0" 2442 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2443 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2444 | 2445 | semver@^7.3.4: 2446 | version "7.3.5" 2447 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 2448 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 2449 | dependencies: 2450 | lru-cache "^6.0.0" 2451 | 2452 | set-blocking@~2.0.0: 2453 | version "2.0.0" 2454 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2455 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2456 | 2457 | setimmediate@^1.0.4: 2458 | version "1.0.5" 2459 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 2460 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= 2461 | 2462 | setprototypeof@1.1.1: 2463 | version "1.1.1" 2464 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2465 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2466 | 2467 | sha.js@^2.4.0, sha.js@^2.4.8: 2468 | version "2.4.11" 2469 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" 2470 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== 2471 | dependencies: 2472 | inherits "^2.0.1" 2473 | safe-buffer "^5.0.1" 2474 | 2475 | shallowequal@^1.1.0: 2476 | version "1.1.0" 2477 | resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" 2478 | integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== 2479 | 2480 | shell-quote@1.7.2: 2481 | version "1.7.2" 2482 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" 2483 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 2484 | 2485 | side-channel@^1.0.4: 2486 | version "1.0.4" 2487 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 2488 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 2489 | dependencies: 2490 | call-bind "^1.0.0" 2491 | get-intrinsic "^1.0.2" 2492 | object-inspect "^1.9.0" 2493 | 2494 | signal-exit@^3.0.0: 2495 | version "3.0.3" 2496 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 2497 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 2498 | 2499 | slash@^3.0.0: 2500 | version "3.0.0" 2501 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2502 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2503 | 2504 | source-map@0.7.3: 2505 | version "0.7.3" 2506 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 2507 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 2508 | 2509 | source-map@0.8.0-beta.0: 2510 | version "0.8.0-beta.0" 2511 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" 2512 | integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== 2513 | dependencies: 2514 | whatwg-url "^7.0.0" 2515 | 2516 | source-map@^0.5.0: 2517 | version "0.5.7" 2518 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2519 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2520 | 2521 | source-map@^0.6.1: 2522 | version "0.6.1" 2523 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2524 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2525 | 2526 | stacktrace-parser@0.1.10: 2527 | version "0.1.10" 2528 | resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" 2529 | integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== 2530 | dependencies: 2531 | type-fest "^0.7.1" 2532 | 2533 | "statuses@>= 1.5.0 < 2": 2534 | version "1.5.0" 2535 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2536 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2537 | 2538 | stream-browserify@3.0.0: 2539 | version "3.0.0" 2540 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" 2541 | integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== 2542 | dependencies: 2543 | inherits "~2.0.4" 2544 | readable-stream "^3.5.0" 2545 | 2546 | stream-browserify@^2.0.1: 2547 | version "2.0.2" 2548 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" 2549 | integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== 2550 | dependencies: 2551 | inherits "~2.0.1" 2552 | readable-stream "^2.0.2" 2553 | 2554 | stream-http@3.1.1: 2555 | version "3.1.1" 2556 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564" 2557 | integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== 2558 | dependencies: 2559 | builtin-status-codes "^3.0.0" 2560 | inherits "^2.0.4" 2561 | readable-stream "^3.6.0" 2562 | xtend "^4.0.2" 2563 | 2564 | stream-http@^2.7.2: 2565 | version "2.8.3" 2566 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" 2567 | integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== 2568 | dependencies: 2569 | builtin-status-codes "^3.0.0" 2570 | inherits "^2.0.1" 2571 | readable-stream "^2.3.6" 2572 | to-arraybuffer "^1.0.0" 2573 | xtend "^4.0.0" 2574 | 2575 | stream-parser@^0.3.1: 2576 | version "0.3.1" 2577 | resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" 2578 | integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M= 2579 | dependencies: 2580 | debug "2" 2581 | 2582 | string-hash@1.1.3: 2583 | version "1.1.3" 2584 | resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" 2585 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= 2586 | 2587 | string-width@^1.0.1: 2588 | version "1.0.2" 2589 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2590 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2591 | dependencies: 2592 | code-point-at "^1.0.0" 2593 | is-fullwidth-code-point "^1.0.0" 2594 | strip-ansi "^3.0.0" 2595 | 2596 | "string-width@^1.0.2 || 2": 2597 | version "2.1.1" 2598 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2599 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2600 | dependencies: 2601 | is-fullwidth-code-point "^2.0.0" 2602 | strip-ansi "^4.0.0" 2603 | 2604 | string.prototype.trimend@^1.0.4: 2605 | version "1.0.4" 2606 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" 2607 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 2608 | dependencies: 2609 | call-bind "^1.0.2" 2610 | define-properties "^1.1.3" 2611 | 2612 | string.prototype.trimstart@^1.0.4: 2613 | version "1.0.4" 2614 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" 2615 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 2616 | dependencies: 2617 | call-bind "^1.0.2" 2618 | define-properties "^1.1.3" 2619 | 2620 | string_decoder@1.3.0, string_decoder@^1.0.0, string_decoder@^1.1.1: 2621 | version "1.3.0" 2622 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2623 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2624 | dependencies: 2625 | safe-buffer "~5.2.0" 2626 | 2627 | string_decoder@~1.1.1: 2628 | version "1.1.1" 2629 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2630 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2631 | dependencies: 2632 | safe-buffer "~5.1.0" 2633 | 2634 | strip-ansi@6.0.0: 2635 | version "6.0.0" 2636 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2637 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2638 | dependencies: 2639 | ansi-regex "^5.0.0" 2640 | 2641 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2642 | version "3.0.1" 2643 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2644 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2645 | dependencies: 2646 | ansi-regex "^2.0.0" 2647 | 2648 | strip-ansi@^4.0.0: 2649 | version "4.0.0" 2650 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2651 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2652 | dependencies: 2653 | ansi-regex "^3.0.0" 2654 | 2655 | styled-components@^5.1.1: 2656 | version "5.3.0" 2657 | resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.0.tgz#e47c3d3e9ddfff539f118a3dd0fd4f8f4fb25727" 2658 | integrity sha512-bPJKwZCHjJPf/hwTJl6TbkSZg/3evha+XPEizrZUGb535jLImwDUdjTNxXqjjaASt2M4qO4AVfoHJNe3XB/tpQ== 2659 | dependencies: 2660 | "@babel/helper-module-imports" "^7.0.0" 2661 | "@babel/traverse" "^7.4.5" 2662 | "@emotion/is-prop-valid" "^0.8.8" 2663 | "@emotion/stylis" "^0.8.4" 2664 | "@emotion/unitless" "^0.7.4" 2665 | babel-plugin-styled-components ">= 1.12.0" 2666 | css-to-react-native "^3.0.0" 2667 | hoist-non-react-statics "^3.0.0" 2668 | shallowequal "^1.1.0" 2669 | supports-color "^5.5.0" 2670 | 2671 | styled-jsx@4.0.0: 2672 | version "4.0.0" 2673 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-4.0.0.tgz#f7b90e7889d0a4f4635f8d1ae9ac32f3acaedc57" 2674 | integrity sha512-2USeoWMoJ/Lx5s2y1PxuvLy/cz2Yrr8cTySV3ILHU1Vmaw1bnV7suKdblLPjnyhMD+qzN7B1SWyh4UZTARn/WA== 2675 | dependencies: 2676 | "@babel/plugin-syntax-jsx" "7.14.5" 2677 | "@babel/types" "7.15.0" 2678 | convert-source-map "1.7.0" 2679 | loader-utils "1.2.3" 2680 | source-map "0.7.3" 2681 | string-hash "1.1.3" 2682 | stylis "3.5.4" 2683 | stylis-rule-sheet "0.0.10" 2684 | 2685 | stylis-rule-sheet@0.0.10: 2686 | version "0.0.10" 2687 | resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" 2688 | integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== 2689 | 2690 | stylis@3.5.4: 2691 | version "3.5.4" 2692 | resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" 2693 | integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== 2694 | 2695 | supports-color@^5.3.0, supports-color@^5.5.0: 2696 | version "5.5.0" 2697 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2698 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2699 | dependencies: 2700 | has-flag "^3.0.0" 2701 | 2702 | supports-color@^7.1.0: 2703 | version "7.2.0" 2704 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2705 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2706 | dependencies: 2707 | has-flag "^4.0.0" 2708 | 2709 | supports-color@^8.0.0: 2710 | version "8.1.1" 2711 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2712 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2713 | dependencies: 2714 | has-flag "^4.0.0" 2715 | 2716 | tar@^6.1.0: 2717 | version "6.1.8" 2718 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.8.tgz#4fc50cfe56511c538ce15b71e05eebe66530cbd4" 2719 | integrity sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A== 2720 | dependencies: 2721 | chownr "^2.0.0" 2722 | fs-minipass "^2.0.0" 2723 | minipass "^3.0.0" 2724 | minizlib "^2.1.1" 2725 | mkdirp "^1.0.3" 2726 | yallist "^4.0.0" 2727 | 2728 | temp-dir@^2.0.0: 2729 | version "2.0.0" 2730 | resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" 2731 | integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== 2732 | 2733 | tempy@^1.0.1: 2734 | version "1.0.1" 2735 | resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" 2736 | integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== 2737 | dependencies: 2738 | del "^6.0.0" 2739 | is-stream "^2.0.0" 2740 | temp-dir "^2.0.0" 2741 | type-fest "^0.16.0" 2742 | unique-string "^2.0.0" 2743 | 2744 | timers-browserify@2.0.12, timers-browserify@^2.0.4: 2745 | version "2.0.12" 2746 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" 2747 | integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== 2748 | dependencies: 2749 | setimmediate "^1.0.4" 2750 | 2751 | tippy.js@^6.2.7, tippy.js@^6.3.1: 2752 | version "6.3.1" 2753 | resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.1.tgz#3788a007be7015eee0fd589a66b98fb3f8f10181" 2754 | integrity sha512-JnFncCq+rF1dTURupoJ4yPie5Cof978inW6/4S6kmWV7LL9YOSEVMifED3KdrVPEG+Z/TFH2CDNJcQEfaeuQww== 2755 | dependencies: 2756 | "@popperjs/core" "^2.8.3" 2757 | 2758 | to-arraybuffer@^1.0.0: 2759 | version "1.0.1" 2760 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 2761 | integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= 2762 | 2763 | to-fast-properties@^2.0.0: 2764 | version "2.0.0" 2765 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2766 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2767 | 2768 | to-regex-range@^5.0.1: 2769 | version "5.0.1" 2770 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2771 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2772 | dependencies: 2773 | is-number "^7.0.0" 2774 | 2775 | toidentifier@1.0.0: 2776 | version "1.0.0" 2777 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2778 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2779 | 2780 | toml@^3.0.0: 2781 | version "3.0.0" 2782 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 2783 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 2784 | 2785 | tr46@^1.0.1: 2786 | version "1.0.1" 2787 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 2788 | integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= 2789 | dependencies: 2790 | punycode "^2.1.0" 2791 | 2792 | trough@^1.0.0: 2793 | version "1.0.5" 2794 | resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" 2795 | integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== 2796 | 2797 | ts-pnp@^1.1.6: 2798 | version "1.2.0" 2799 | resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" 2800 | integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== 2801 | 2802 | tty-browserify@0.0.0: 2803 | version "0.0.0" 2804 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 2805 | integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= 2806 | 2807 | tty-browserify@0.0.1: 2808 | version "0.0.1" 2809 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" 2810 | integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== 2811 | 2812 | type-fest@^0.16.0: 2813 | version "0.16.0" 2814 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" 2815 | integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== 2816 | 2817 | type-fest@^0.7.1: 2818 | version "0.7.1" 2819 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" 2820 | integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== 2821 | 2822 | typescript-language-server@^0.6.1: 2823 | version "0.6.1" 2824 | resolved "https://registry.yarnpkg.com/typescript-language-server/-/typescript-language-server-0.6.1.tgz#201dacbeee5162015859dc08cdfb56140fc1b5c7" 2825 | integrity sha512-ZqqD4XK1EgITEoW1SaOnNe473K5EMr7vSYwFeqK4Fe37TjNyEwB+2vXuqW01kPujiw7tRpv3teDAl7WtP9AmIw== 2826 | dependencies: 2827 | command-exists "^1.2.6" 2828 | commander "^7.2.0" 2829 | fs-extra "^10.0.0" 2830 | p-debounce "^2.1.0" 2831 | tempy "^1.0.1" 2832 | vscode-languageserver "^7.0.0" 2833 | vscode-languageserver-protocol "^3.16.0" 2834 | vscode-languageserver-textdocument "^1.0.1" 2835 | vscode-uri "^1.0.5" 2836 | 2837 | typescript@^4.3.5: 2838 | version "4.3.5" 2839 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" 2840 | integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== 2841 | 2842 | unbox-primitive@^1.0.1: 2843 | version "1.0.1" 2844 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" 2845 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 2846 | dependencies: 2847 | function-bind "^1.1.1" 2848 | has-bigints "^1.0.1" 2849 | has-symbols "^1.0.2" 2850 | which-boxed-primitive "^1.0.2" 2851 | 2852 | unified@^9.0.0: 2853 | version "9.2.2" 2854 | resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" 2855 | integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== 2856 | dependencies: 2857 | bail "^1.0.0" 2858 | extend "^3.0.0" 2859 | is-buffer "^2.0.0" 2860 | is-plain-obj "^2.0.0" 2861 | trough "^1.0.0" 2862 | vfile "^4.0.0" 2863 | 2864 | unique-string@^2.0.0: 2865 | version "2.0.0" 2866 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 2867 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 2868 | dependencies: 2869 | crypto-random-string "^2.0.0" 2870 | 2871 | unist-util-is@^4.0.0: 2872 | version "4.1.0" 2873 | resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" 2874 | integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== 2875 | 2876 | unist-util-stringify-position@^2.0.0: 2877 | version "2.0.3" 2878 | resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" 2879 | integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== 2880 | dependencies: 2881 | "@types/unist" "^2.0.2" 2882 | 2883 | unist-util-visit-parents@1.1.2: 2884 | version "1.1.2" 2885 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06" 2886 | integrity sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q== 2887 | 2888 | unist-util-visit-parents@^3.0.0: 2889 | version "3.1.1" 2890 | resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" 2891 | integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== 2892 | dependencies: 2893 | "@types/unist" "^2.0.0" 2894 | unist-util-is "^4.0.0" 2895 | 2896 | unist-util-visit@^2.0.0: 2897 | version "2.0.3" 2898 | resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" 2899 | integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== 2900 | dependencies: 2901 | "@types/unist" "^2.0.0" 2902 | unist-util-is "^4.0.0" 2903 | unist-util-visit-parents "^3.0.0" 2904 | 2905 | universalify@^2.0.0: 2906 | version "2.0.0" 2907 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 2908 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 2909 | 2910 | unpipe@1.0.0: 2911 | version "1.0.0" 2912 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2913 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2914 | 2915 | url@^0.11.0: 2916 | version "0.11.0" 2917 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 2918 | integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= 2919 | dependencies: 2920 | punycode "1.3.2" 2921 | querystring "0.2.0" 2922 | 2923 | use-subscription@1.5.1: 2924 | version "1.5.1" 2925 | resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" 2926 | integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== 2927 | dependencies: 2928 | object-assign "^4.1.1" 2929 | 2930 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 2931 | version "1.0.2" 2932 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2933 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2934 | 2935 | util@0.10.3: 2936 | version "0.10.3" 2937 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 2938 | integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= 2939 | dependencies: 2940 | inherits "2.0.1" 2941 | 2942 | util@0.12.3: 2943 | version "0.12.3" 2944 | resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" 2945 | integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== 2946 | dependencies: 2947 | inherits "^2.0.3" 2948 | is-arguments "^1.0.4" 2949 | is-generator-function "^1.0.7" 2950 | is-typed-array "^1.1.3" 2951 | safe-buffer "^5.1.2" 2952 | which-typed-array "^1.1.2" 2953 | 2954 | util@^0.11.0: 2955 | version "0.11.1" 2956 | resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" 2957 | integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== 2958 | dependencies: 2959 | inherits "2.0.3" 2960 | 2961 | util@^0.12.0: 2962 | version "0.12.4" 2963 | resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" 2964 | integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== 2965 | dependencies: 2966 | inherits "^2.0.3" 2967 | is-arguments "^1.0.4" 2968 | is-generator-function "^1.0.7" 2969 | is-typed-array "^1.1.3" 2970 | safe-buffer "^5.1.2" 2971 | which-typed-array "^1.1.2" 2972 | 2973 | vfile-message@^2.0.0: 2974 | version "2.0.4" 2975 | resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" 2976 | integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== 2977 | dependencies: 2978 | "@types/unist" "^2.0.0" 2979 | unist-util-stringify-position "^2.0.0" 2980 | 2981 | vfile@^4.0.0: 2982 | version "4.2.1" 2983 | resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" 2984 | integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== 2985 | dependencies: 2986 | "@types/unist" "^2.0.0" 2987 | is-buffer "^2.0.0" 2988 | unist-util-stringify-position "^2.0.0" 2989 | vfile-message "^2.0.0" 2990 | 2991 | vm-browserify@1.1.2, vm-browserify@^1.0.1: 2992 | version "1.1.2" 2993 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" 2994 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== 2995 | 2996 | vscode-jsonrpc@6.0.0: 2997 | version "6.0.0" 2998 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" 2999 | integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== 3000 | 3001 | vscode-languageserver-protocol@3.16.0, vscode-languageserver-protocol@^3.16.0: 3002 | version "3.16.0" 3003 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" 3004 | integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== 3005 | dependencies: 3006 | vscode-jsonrpc "6.0.0" 3007 | vscode-languageserver-types "3.16.0" 3008 | 3009 | vscode-languageserver-textdocument@^1.0.1: 3010 | version "1.0.1" 3011 | resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" 3012 | integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== 3013 | 3014 | vscode-languageserver-types@3.16.0: 3015 | version "3.16.0" 3016 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" 3017 | integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== 3018 | 3019 | vscode-languageserver@^7.0.0: 3020 | version "7.0.0" 3021 | resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" 3022 | integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== 3023 | dependencies: 3024 | vscode-languageserver-protocol "3.16.0" 3025 | 3026 | vscode-uri@^1.0.5: 3027 | version "1.0.8" 3028 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.8.tgz#9769aaececae4026fb6e22359cb38946580ded59" 3029 | integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== 3030 | 3031 | watchpack@2.1.1: 3032 | version "2.1.1" 3033 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" 3034 | integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== 3035 | dependencies: 3036 | glob-to-regexp "^0.4.1" 3037 | graceful-fs "^4.1.2" 3038 | 3039 | webidl-conversions@^4.0.2: 3040 | version "4.0.2" 3041 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 3042 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 3043 | 3044 | whatwg-url@^7.0.0: 3045 | version "7.1.0" 3046 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" 3047 | integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== 3048 | dependencies: 3049 | lodash.sortby "^4.7.0" 3050 | tr46 "^1.0.1" 3051 | webidl-conversions "^4.0.2" 3052 | 3053 | which-boxed-primitive@^1.0.2: 3054 | version "1.0.2" 3055 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 3056 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 3057 | dependencies: 3058 | is-bigint "^1.0.1" 3059 | is-boolean-object "^1.1.0" 3060 | is-number-object "^1.0.4" 3061 | is-string "^1.0.5" 3062 | is-symbol "^1.0.3" 3063 | 3064 | which-typed-array@^1.1.2: 3065 | version "1.1.6" 3066 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.6.tgz#f3713d801da0720a7f26f50c596980a9f5c8b383" 3067 | integrity sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q== 3068 | dependencies: 3069 | available-typed-arrays "^1.0.4" 3070 | call-bind "^1.0.2" 3071 | es-abstract "^1.18.5" 3072 | foreach "^2.0.5" 3073 | has-tostringtag "^1.0.0" 3074 | is-typed-array "^1.1.6" 3075 | 3076 | wide-align@^1.1.0: 3077 | version "1.1.3" 3078 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3079 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 3080 | dependencies: 3081 | string-width "^1.0.2 || 2" 3082 | 3083 | wrappy@1: 3084 | version "1.0.2" 3085 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3086 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 3087 | 3088 | xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2: 3089 | version "4.0.2" 3090 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 3091 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 3092 | 3093 | yallist@^4.0.0: 3094 | version "4.0.0" 3095 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 3096 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 3097 | 3098 | yocto-queue@^0.1.0: 3099 | version "0.1.0" 3100 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 3101 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 3102 | -------------------------------------------------------------------------------- /screenshots/clip-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hubro/clipface/920d2be93a902caa1d1fb72adc4c867983cbf7a0/screenshots/clip-list.png -------------------------------------------------------------------------------- /screenshots/watch-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hubro/clipface/920d2be93a902caa1d1fb72adc4c867983cbf7a0/screenshots/watch-page.png --------------------------------------------------------------------------------