From 7d5d7d3c55df04bf8c2121daea47288956683d62 Mon Sep 17 00:00:00 2001 From: zeppi Date: Fri, 22 Oct 2021 10:46:59 -0400 Subject: [PATCH] remove web and embed --- ui/component/fileRender/view.jsx | 9 +- ui/component/router/view.jsx | 4 - ui/component/viewers/videoViewer/index.js | 5 +- .../viewers/videoViewer/internal/videojs.jsx | 16 +- ui/component/viewers/videoViewer/view.jsx | 187 +- ui/page/embedWrapper/index.js | 33 - ui/page/embedWrapper/view.jsx | 126 - ui/scss/all.scss | 1 - ui/scss/component/_embed-player.scss | 67 - web/.env.ody | 92 - web/bundle-id.js | 8 - .../fileViewerEmbeddedEnded/index.js | 10 - .../fileViewerEmbeddedEnded/view.jsx | 82 - web/effects/use-degraded-performance.js | 45 - web/index.js | 39 - web/lbry.js | 247 - web/middleware/cache-control.js | 38 - web/middleware/iframe-destroyer.js | 16 - web/middleware/redirect.js | 67 - web/package.json | 59 - web/page/code2257/index.js | 2 - web/page/code2257/view.jsx | 47 - web/scss/lbrytv.scss | 71 - web/scss/odysee.scss | 71 - web/scss/themes/lbrytv/dark.scss | 160 - web/scss/themes/lbrytv/light.scss | 2 - .../themes/odysee/component/_file-render.scss | 757 --- .../themes/odysee/component/_form-field.scss | 713 --- web/scss/themes/odysee/dark.scss | 137 - web/scss/themes/odysee/init/_base-theme.scss | 200 - web/scss/themes/odysee/init/_color.scss | 57 - web/scss/themes/odysee/init/_gui.scss | 521 -- web/scss/themes/odysee/init/_mixins.scss | 237 - web/scss/themes/odysee/init/_reset.scss | 245 - web/scss/themes/odysee/init/_vars.scss | 108 - web/scss/themes/odysee/light.scss | 155 - web/setup/publish.js | 104 - web/src/category-metadata.js | 71 - web/src/chainquery.js | 60 - web/src/getHomepageJSON.js | 13 - web/src/html.js | 370 -- web/src/lbryURI.js | 343 - web/src/robots.js | 12 - web/src/routes.js | 76 - web/src/rss.js | 298 - web/src/xml.js | 18 - web/static/pwa/icon-180.png | Bin 12574 -> 0 bytes web/static/pwa/icon-192.png | Bin 17186 -> 0 bytes web/static/pwa/icon-512.png | Bin 61476 -> 0 bytes web/static/pwa/icon.png | Bin 24241 -> 0 bytes web/static/pwa/manifest.json | 28 - web/static/pwa/serviceWorker.js | 14 - web/stubs/electron.js | 43 - web/stubs/fs.js | 17 - web/theme.js | 6 - web/webpack.config.js | 181 - web/yarn.lock | 5692 ----------------- 57 files changed, 65 insertions(+), 11915 deletions(-) delete mode 100644 ui/page/embedWrapper/index.js delete mode 100644 ui/page/embedWrapper/view.jsx delete mode 100644 ui/scss/component/_embed-player.scss delete mode 100644 web/.env.ody delete mode 100644 web/bundle-id.js delete mode 100644 web/component/fileViewerEmbeddedEnded/index.js delete mode 100644 web/component/fileViewerEmbeddedEnded/view.jsx delete mode 100644 web/effects/use-degraded-performance.js delete mode 100644 web/index.js delete mode 100644 web/lbry.js delete mode 100644 web/middleware/cache-control.js delete mode 100644 web/middleware/iframe-destroyer.js delete mode 100644 web/middleware/redirect.js delete mode 100644 web/package.json delete mode 100644 web/page/code2257/index.js delete mode 100644 web/page/code2257/view.jsx delete mode 100644 web/scss/lbrytv.scss delete mode 100644 web/scss/odysee.scss delete mode 100644 web/scss/themes/lbrytv/dark.scss delete mode 100644 web/scss/themes/lbrytv/light.scss delete mode 100644 web/scss/themes/odysee/component/_file-render.scss delete mode 100644 web/scss/themes/odysee/component/_form-field.scss delete mode 100644 web/scss/themes/odysee/dark.scss delete mode 100644 web/scss/themes/odysee/init/_base-theme.scss delete mode 100644 web/scss/themes/odysee/init/_color.scss delete mode 100644 web/scss/themes/odysee/init/_gui.scss delete mode 100644 web/scss/themes/odysee/init/_mixins.scss delete mode 100644 web/scss/themes/odysee/init/_reset.scss delete mode 100644 web/scss/themes/odysee/init/_vars.scss delete mode 100644 web/scss/themes/odysee/light.scss delete mode 100644 web/setup/publish.js delete mode 100644 web/src/category-metadata.js delete mode 100644 web/src/chainquery.js delete mode 100644 web/src/getHomepageJSON.js delete mode 100644 web/src/html.js delete mode 100644 web/src/lbryURI.js delete mode 100644 web/src/robots.js delete mode 100644 web/src/routes.js delete mode 100644 web/src/rss.js delete mode 100644 web/src/xml.js delete mode 100644 web/static/pwa/icon-180.png delete mode 100644 web/static/pwa/icon-192.png delete mode 100644 web/static/pwa/icon-512.png delete mode 100644 web/static/pwa/icon.png delete mode 100644 web/static/pwa/manifest.json delete mode 100644 web/static/pwa/serviceWorker.js delete mode 100644 web/stubs/electron.js delete mode 100644 web/stubs/fs.js delete mode 100644 web/theme.js delete mode 100644 web/webpack.config.js delete mode 100644 web/yarn.lock diff --git a/ui/component/fileRender/view.jsx b/ui/component/fileRender/view.jsx index 19fa61983..b99529fb3 100644 --- a/ui/component/fileRender/view.jsx +++ b/ui/component/fileRender/view.jsx @@ -24,7 +24,6 @@ import PdfViewer from 'component/viewers/pdfViewer'; type Props = { uri: string, streamingUrl: string, - embedded?: boolean, contentType: string, claim: StreamClaim, currentTheme: string, @@ -45,9 +44,8 @@ class FileRender extends React.PureComponent { } componentDidMount() { - const { embedded } = this.props; window.addEventListener('keydown', this.escapeListener, true); - analytics.playerLoadedEvent(embedded); + analytics.playerLoadedEvent(); } componentWillUnmount() { @@ -146,13 +144,12 @@ class FileRender extends React.PureComponent { } render() { - const { embedded, renderMode, className } = this.props; + const { renderMode, className } = this.props; return (
diff --git a/ui/component/router/view.jsx b/ui/component/router/view.jsx index 27e6fc0ed..8a5e3b80d 100644 --- a/ui/component/router/view.jsx +++ b/ui/component/router/view.jsx @@ -37,7 +37,6 @@ import ChannelsPage from 'page/channels'; import CheckoutPage from 'page/checkoutPage'; import CreatorDashboard from 'page/creatorDashboard'; import DiscoverPage from 'page/discover'; -import EmbedWrapperPage from 'page/embedWrapper'; import FileListPublished from 'page/fileListPublished'; import FourOhFourPage from 'page/fourOhFour'; import HelpPage from 'page/help'; @@ -308,9 +307,6 @@ function AppRouter(props: Props) { - - - {/* Below need to go at the end to make sure we don't match any of our pages first */} diff --git a/ui/component/viewers/videoViewer/index.js b/ui/component/viewers/videoViewer/index.js index 5cccfc102..7e6a0a774 100644 --- a/ui/component/viewers/videoViewer/index.js +++ b/ui/component/viewers/videoViewer/index.js @@ -22,12 +22,11 @@ import { withRouter } from 'react-router'; import { doClaimEligiblePurchaseRewards } from 'redux/actions/rewards'; import { selectDaemonSettings, makeSelectClientSetting, selectHomepageData } from 'redux/selectors/settings'; import { toggleVideoTheaterMode, toggleAutoplayNext, doSetClientSetting } from 'redux/actions/settings'; -import { selectUserVerifiedEmail, selectUser } from 'redux/selectors/user'; +import { selectUser } from 'redux/selectors/user'; const select = (state, props) => { const { search } = props.location; const urlParams = new URLSearchParams(search); - const autoplay = urlParams.get('autoplay'); const uri = props.uri; // TODO: eventually this should be received from DB and not local state (https://github.com/lbryio/lbry-desktop/issues/6796) const position = urlParams.get('t') !== null ? urlParams.get('t') : makeSelectContentPositionForUri(uri)(state); @@ -53,7 +52,6 @@ const select = (state, props) => { nextRecommendedUri, previousListUri, isMarkdownOrComment, - autoplayIfEmbedded: Boolean(autoplay), autoplayNext: makeSelectClientSetting(SETTINGS.AUTOPLAY_NEXT)(state), volume: selectVolume(state), muted: selectMute(state), @@ -61,7 +59,6 @@ const select = (state, props) => { thumbnail: makeSelectThumbnailForUri(uri)(state), claim: makeSelectClaimForUri(uri)(state), homepageData: selectHomepageData(state), - authenticated: selectUserVerifiedEmail(state), shareTelemetry: IS_WEB || selectDaemonSettings(state).share_usage_data, isFloating: makeSelectIsPlayerFloating(props.location)(state), videoTheaterMode: makeSelectClientSetting(SETTINGS.VIDEO_THEATER_MODE)(state), diff --git a/ui/component/viewers/videoViewer/internal/videojs.jsx b/ui/component/viewers/videoViewer/internal/videojs.jsx index 8b68a776e..7fb0cde92 100644 --- a/ui/component/viewers/videoViewer/internal/videojs.jsx +++ b/ui/component/viewers/videoViewer/internal/videojs.jsx @@ -48,12 +48,9 @@ type Props = { poster: ?string, onPlayerReady: (Player, any) => void, isAudio: boolean, - startMuted: boolean, autoplay: boolean, autoplaySetting: boolean, - embedded: boolean, toggleVideoTheaterMode: () => void, - adUrl: ?string, claimId: ?string, userId: ?number, // allowPreRoll: ?boolean, @@ -163,18 +160,14 @@ export default React.memo(function VideoJs(props: Props) { const { autoplay, autoplaySetting, - embedded, - startMuted, source, sourceType, poster, isAudio, onPlayerReady, toggleVideoTheaterMode, - adUrl, claimId, userId, - // allowPreRoll, shareTelemetry, replay, videoTheaterMode, @@ -188,7 +181,6 @@ export default React.memo(function VideoJs(props: Props) { const videoJsOptions = { ...VIDEO_JS_OPTIONS, autoplay: autoplay, - muted: startMuted, sources: [ { src: source, @@ -361,10 +353,9 @@ export default React.memo(function VideoJs(props: Props) { } const onEnded = React.useCallback(() => { - if (!adUrl) { - showTapButton(TAP.NONE); - } - }, [adUrl]); + // not sure if this is necessary - used to be dependent on !adUrl + showTapButton(TAP.NONE); + }, []); function handleKeyDown(e: KeyboardEvent) { const player = playerRef.current; @@ -565,7 +556,6 @@ export default React.memo(function VideoJs(props: Props) { player.recsys({ videoId: claimId, userId: userId, - embedded: embedded, }); } diff --git a/ui/component/viewers/videoViewer/view.jsx b/ui/component/viewers/videoViewer/view.jsx index 5619065f9..50f229231 100644 --- a/ui/component/viewers/videoViewer/view.jsx +++ b/ui/component/viewers/videoViewer/view.jsx @@ -1,29 +1,19 @@ // @flow -import { ENABLE_PREROLL_ADS } from 'config'; -import * as PAGES from 'constants/pages'; -import * as ICONS from 'constants/icons'; -import React, { useEffect, useState, useContext, useCallback } from 'react'; +import React, { useEffect, useState, useCallback } from 'react'; import { stopContextMenu } from 'util/context-menu'; import type { Player } from './internal/videojs'; import VideoJs from './internal/videojs'; import analytics from 'analytics'; -import { EmbedContext } from 'page/embedWrapper/view'; import classnames from 'classnames'; import { FORCE_CONTENT_TYPE_PLAYER } from 'constants/claim'; import AutoplayCountdown from 'component/autoplayCountdown'; import usePrevious from 'effects/use-previous'; -import FileViewerEmbeddedEnded from 'web/component/fileViewerEmbeddedEnded'; -import FileViewerEmbeddedTitle from 'component/fileViewerEmbeddedTitle'; import LoadingScreen from 'component/common/loading-screen'; import { addTheaterModeButton } from './internal/theater-mode'; import { addAutoplayNextButton } from './internal/autoplay-next'; import { addPlayNextButton } from './internal/play-next'; import { addPlayPreviousButton } from './internal/play-previous'; -import { useGetAds } from 'effects/use-get-ads'; -import Button from 'component/button'; -import I18nMessage from 'component/i18nMessage'; import { useHistory } from 'react-router'; -import { getAllIds } from 'util/buildHomepage'; import type { HomepageCat } from 'util/buildHomepage'; import { formatLbryUrlForWeb, generateListSearchUrlParams } from 'util/url'; @@ -43,7 +33,6 @@ type Props = { volume: number, uri: string, autoplayNext: boolean, - autoplayIfEmbedded: boolean, desktopPlayStartTime?: number, doAnalyticsView: (string, number) => Promise, doAnalyticsBuffer: (string, any) => void, @@ -85,7 +74,6 @@ function VideoViewer(props: Props) { muted, volume, autoplayNext, - autoplayIfEmbedded, doAnalyticsView, doAnalyticsBuffer, claimRewards, @@ -95,8 +83,6 @@ function VideoViewer(props: Props) { toggleVideoTheaterMode, toggleAutoplayNext, setVideoPlaybackRate, - homepageData, - authenticated, userId, shareTelemetry, isFloating, @@ -108,27 +94,17 @@ function VideoViewer(props: Props) { isMarkdownOrComment, } = props; const permanentUrl = claim && claim.permanent_url; - const adApprovedChannelIds = homepageData ? getAllIds(homepageData) : []; const claimId = claim && claim.claim_id; - const channelClaimId = claim && claim.signing_channel && claim.signing_channel.claim_id; const isAudio = contentType.includes('audio'); const forcePlayer = FORCE_CONTENT_TYPE_PLAYER.includes(contentType); - const { - push, - location: { pathname }, - } = useHistory(); + const { push } = useHistory(); const [doNavigate, setDoNavigate] = useState(false); const [playNextUrl, setPlayNextUrl] = useState(true); const [isPlaying, setIsPlaying] = useState(false); const [ended, setEnded] = useState(false); const [showAutoplayCountdown, setShowAutoplayCountdown] = useState(false); - const [isEndedEmbed, setIsEndedEmbed] = useState(false); const vjsCallbackDataRef: any = React.useRef(); const previousUri = usePrevious(uri); - const embedded = useContext(EmbedContext); - const approvedVideo = Boolean(channelClaimId) && adApprovedChannelIds.includes(channelClaimId); - const adsEnabled = ENABLE_PREROLL_ADS && !authenticated && !embedded && approvedVideo; - const [adUrl, setAdUrl, isFetchingAd] = useGetAds(approvedVideo, adsEnabled); /* isLoading was designed to show loading screen on first play press, rather than completely black screen, but breaks because some browsers (e.g. Firefox) block autoplay but leave the player.play Promise pending */ const [isLoading, setIsLoading] = useState(false); @@ -139,7 +115,6 @@ function VideoViewer(props: Props) { useEffect(() => { if (uri && previousUri && uri !== previousUri) { setShowAutoplayCountdown(false); - setIsEndedEmbed(false); setIsLoading(false); } }, [uri, previousUri]); @@ -147,10 +122,9 @@ function VideoViewer(props: Props) { // Update vjsCallbackDataRef (ensures videojs callbacks are not using stale values): useEffect(() => { vjsCallbackDataRef.current = { - embedded: embedded, videoPlaybackRate: videoPlaybackRate, }; - }, [embedded, videoPlaybackRate]); + }, [videoPlaybackRate]); function doTrackingBuffered(e: Event, data: any) { fetch(source, { method: 'HEAD', cache: 'no-store' }).then((response) => { @@ -166,7 +140,7 @@ function VideoViewer(props: Props) { const differenceToAdd = Date.now() - desktopPlayStartTime; timeToStart += differenceToAdd; } - analytics.playerStartedEvent(embedded); + analytics.playerStartedEvent(); // convert bytes to bits, and then divide by seconds const contentInBits = Number(claim.value.source.size) * 8; @@ -178,7 +152,15 @@ function VideoViewer(props: Props) { fetch(source, { method: 'HEAD', cache: 'no-store' }).then((response) => { let playerPoweredBy = response.headers.get('x-powered-by') || ''; - analytics.videoStartEvent(claimId, timeToStart, playerPoweredBy, userId, claim.canonical_url, this, bitrateAsBitsPerSecond); + analytics.videoStartEvent( + claimId, + timeToStart, + playerPoweredBy, + userId, + claim.canonical_url, + this, + bitrateAsBitsPerSecond + ); }); doAnalyticsView(uri, timeToStart).then(() => { @@ -248,28 +230,20 @@ function VideoViewer(props: Props) { analytics.videoIsPlaying(false); - if (adUrl) { - setAdUrl(null); - return; - } - - if (embedded) { - setIsEndedEmbed(true); - } else if (!collectionId && autoplayNext) { + if (!collectionId && autoplayNext) { setShowAutoplayCountdown(true); } else if (collectionId) { setDoNavigate(true); } clearPosition(uri); - }, [adUrl, autoplayNext, clearPosition, collectionId, embedded, ended, setAdUrl, uri]); + }, [autoplayNext, clearPosition, collectionId, ended, uri]); function onPlay(player) { setEnded(false); setIsLoading(false); setIsPlaying(true); setShowAutoplayCountdown(false); - setIsEndedEmbed(false); setReplay(false); setDoNavigate(false); analytics.videoIsPlaying(true, player); @@ -296,7 +270,7 @@ function VideoViewer(props: Props) { } } - const playerReadyDependencyList = [uri, adUrl, embedded, autoplayIfEmbedded]; + const playerReadyDependencyList = [uri]; if (!IS_WEB) { playerReadyDependencyList.push(desktopPlayStartTime); } @@ -312,43 +286,38 @@ function VideoViewer(props: Props) { }; const onPlayerReady = useCallback((player: Player, videoNode: any) => { - if (!embedded) { - setVideoNode(videoNode); - player.muted(muted); - player.volume(volume); - player.playbackRate(videoPlaybackRate); - if (!isMarkdownOrComment) { - addTheaterModeButton(player, toggleVideoTheaterMode); - if (collectionId) { - addPlayNextButton(player, doPlayNext); - addPlayPreviousButton(player, doPlayPrevious); - } else { - addAutoplayNextButton(player, toggleAutoplayNext, autoplayNext); - } + setVideoNode(videoNode); + player.muted(muted); + player.volume(volume); + player.playbackRate(videoPlaybackRate); + if (!isMarkdownOrComment) { + addTheaterModeButton(player, toggleVideoTheaterMode); + if (collectionId) { + addPlayNextButton(player, doPlayNext); + addPlayPreviousButton(player, doPlayPrevious); + } else { + addAutoplayNextButton(player, toggleAutoplayNext, autoplayNext); } } - const shouldPlay = !embedded || autoplayIfEmbedded; // https://blog.videojs.com/autoplay-best-practices-with-video-js/#Programmatic-Autoplay-and-Success-Failure-Detection - if (shouldPlay) { - const playPromise = player.play(); - const timeoutPromise = new Promise((resolve, reject) => - setTimeout(() => reject(PLAY_TIMEOUT_ERROR), PLAY_TIMEOUT_LIMIT) - ); + const playPromise = player.play(); + const timeoutPromise = new Promise((resolve, reject) => + setTimeout(() => reject(PLAY_TIMEOUT_ERROR), PLAY_TIMEOUT_LIMIT) + ); - Promise.race([playPromise, timeoutPromise]).catch((error) => { - if (typeof error === 'object' && error.name && error.name === 'NotAllowedError') { - if (player.autoplay() && !player.muted()) { - // player.muted(true); - // another version had player.play() - } + Promise.race([playPromise, timeoutPromise]).catch((error) => { + if (typeof error === 'object' && error.name && error.name === 'NotAllowedError') { + if (player.autoplay() && !player.muted()) { + // player.muted(true); + // another version had player.play() } - setIsLoading(false); - setIsPlaying(false); - }); - } + } + setIsLoading(false); + setIsPlaying(false); + }); - setIsLoading(shouldPlay); // if we are here outside of an embed, we're playing + setIsLoading(true); // if we are here outside of an embed, we're playing // PR: #5535 // Move the restoration to a later `loadedmetadata` phase to counter the @@ -398,7 +367,6 @@ function VideoViewer(props: Props) {
@@ -409,64 +377,25 @@ function VideoViewer(props: Props) { doReplay={() => setReplay(true)} /> )} - {isEndedEmbed && } - {embedded && !isEndedEmbed && } {/* disable this loading behavior because it breaks when player.play() promise hangs */} {isLoading && } - - {!isFetchingAd && adUrl && ( - <> - - {__('Advertisement')}{' '} -
); } diff --git a/ui/page/embedWrapper/index.js b/ui/page/embedWrapper/index.js deleted file mode 100644 index cb25a0658..000000000 --- a/ui/page/embedWrapper/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import { connect } from 'react-redux'; -import EmbedWrapperPage from './view'; -import { makeSelectClaimForUri, makeSelectIsUriResolving } from 'redux/selectors/claims'; -import { makeSelectStreamingUrlForUri } from 'redux/selectors/file_info'; -import { doResolveUri } from 'redux/actions/claims'; -import { buildURI } from 'util/lbryURI'; -import { doPlayUri } from 'redux/actions/content'; -import { makeSelectCostInfoForUri, doFetchCostInfoForUri, selectBlackListedOutpoints } from 'lbryinc'; - -const select = (state, props) => { - const { match } = props; - const { params } = match; - const { claimName, claimId } = params; - const uri = claimName ? buildURI({ claimName, claimId }) : ''; - return { - uri, - claim: makeSelectClaimForUri(uri)(state), - costInfo: makeSelectCostInfoForUri(uri)(state), - streamingUrl: makeSelectStreamingUrlForUri(uri)(state), - isResolvingUri: makeSelectIsUriResolving(uri)(state), - blackListedOutpoints: selectBlackListedOutpoints(state), - }; -}; - -const perform = (dispatch) => { - return { - resolveUri: (uri) => dispatch(doResolveUri(uri)), - doPlayUri: (uri) => dispatch(doPlayUri(uri)), - doFetchCostInfoForUri: (uri) => dispatch(doFetchCostInfoForUri(uri)), - }; -}; - -export default connect(select, perform)(EmbedWrapperPage); diff --git a/ui/page/embedWrapper/view.jsx b/ui/page/embedWrapper/view.jsx deleted file mode 100644 index 78a5ce8fe..000000000 --- a/ui/page/embedWrapper/view.jsx +++ /dev/null @@ -1,126 +0,0 @@ -// @flow -import { SITE_NAME } from 'config'; -import React, { useEffect } from 'react'; -import classnames from 'classnames'; -import FileRender from 'component/fileRender'; -import FileViewerEmbeddedTitle from 'component/fileViewerEmbeddedTitle'; -import Spinner from 'component/spinner'; -import Button from 'component/button'; -import Card from 'component/common/card'; -import { formatLbryUrlForWeb } from 'util/url'; -import { useHistory } from 'react-router'; - -type Props = { - uri: string, - resolveUri: (string) => void, - claim: Claim, - doPlayUri: (string) => void, - costInfo: any, - streamingUrl: string, - doFetchCostInfoForUri: (string) => void, - isResolvingUri: boolean, - blackListedOutpoints: Array<{ - txid: string, - nout: number, - }>, -}; - -export const EmbedContext = React.createContext(); -const EmbedWrapperPage = (props: Props) => { - const { - resolveUri, - claim, - uri, - doPlayUri, - costInfo, - streamingUrl, - doFetchCostInfoForUri, - isResolvingUri, - blackListedOutpoints, - } = props; - - const { - location: { search }, - } = useHistory(); - const urlParams = new URLSearchParams(search); - const embedLightBackground = urlParams.get('embedBackgroundLight'); - const haveClaim = Boolean(claim); - const readyToDisplay = claim && streamingUrl; - const loading = !claim && isResolvingUri; - const noContentFound = !claim && !isResolvingUri; - const isPaidContent = costInfo && costInfo.cost > 0; - const contentLink = formatLbryUrlForWeb(uri); - const signingChannel = claim && claim.signing_channel; - const isClaimBlackListed = - claim && - blackListedOutpoints && - blackListedOutpoints.some( - (outpoint) => - (signingChannel && outpoint.txid === signingChannel.txid && outpoint.nout === signingChannel.nout) || - (outpoint.txid === claim.txid && outpoint.nout === claim.nout) - ); - - useEffect(() => { - if (resolveUri && uri && !haveClaim) { - resolveUri(uri); - } - if (uri && haveClaim && costInfo && costInfo.cost === 0) { - doPlayUri(uri); - } - }, [resolveUri, uri, doPlayUri, haveClaim, costInfo]); - - useEffect(() => { - if (haveClaim && uri && doFetchCostInfoForUri) { - doFetchCostInfoForUri(uri); - } - }, [uri, haveClaim, doFetchCostInfoForUri]); - - if (isClaimBlackListed) { - return ( - -
- } - /> - ); - } - - return ( -
- - {readyToDisplay ? ( - - ) : ( -
- - -
- {loading && } - {noContentFound &&

{__('No content found.')}

} - {isPaidContent && ( -
-

{__('Paid content cannot be embedded.')}

-
-
-
- )} -
-
- )} -
-
- ); -}; - -export default EmbedWrapperPage; diff --git a/ui/scss/all.scss b/ui/scss/all.scss index c654e7b0d..77ca90423 100644 --- a/ui/scss/all.scss +++ b/ui/scss/all.scss @@ -20,7 +20,6 @@ @import 'component/comments'; @import 'component/content'; @import 'component/dat-gui'; -@import 'component/embed-player'; @import 'component/expandable'; @import 'component/expanding-details'; @import 'component/file-drop'; diff --git a/ui/scss/component/_embed-player.scss b/ui/scss/component/_embed-player.scss deleted file mode 100644 index 59ee8119f..000000000 --- a/ui/scss/component/_embed-player.scss +++ /dev/null @@ -1,67 +0,0 @@ -.embed__wrapper { - height: 100vh; - width: 100vw; - position: relative; - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - background-color: var(--color-black); -} - -.embed__wrapper--light-background { - @extend .embed__wrapper; - - .vjs-poster, - video { - background-color: var(--color-white); - } -} - -.embed__inline-button { - @include thumbnail; - position: relative; - background-position: 50% 50%; - background-repeat: no-repeat; - background-size: 100%; - width: 100%; - height: auto; - display: flex; - justify-content: center; - align-items: center; - border-top-left-radius: var(--border-radius); - border-top-right-radius: var(--border-radius); - background-color: var(--color-black); - - @media (max-width: $breakpoint-small) { - height: 200px; - } -} - -.embed__inline-button-preview { - @extend .embed__inline-button; - background-color: var(--color-editor-inline-code-bg); - width: 50%; -} - -.embed__loading { - width: 100%; - height: 100%; -} - -.embed__loading-text { - height: 100%; - display: flex; - align-items: center; - justify-content: center; - color: var(--color-white); - - h1 { - font-size: var(--font-large); - } -} - -.embed__overlay-logo { - max-height: 2rem; - max-width: 7rem; -} diff --git a/web/.env.ody b/web/.env.ody deleted file mode 100644 index 2d9e1313e..000000000 --- a/web/.env.ody +++ /dev/null @@ -1,92 +0,0 @@ -# Copy this file to .env to make modifications - -# Base config - -WEBPACK_WEB_PORT=9090 -WEBPACK_ELECTRON_PORT=9091 -WEB_SERVER_PORT=1337 - -WELCOME_VERSION=1.0 - -# Custom Site info -DOMAIN=lbry.tv -URL=https://lbry.tv - -# UI -SITE_TITLE=lbry.tv -SITE_NAME=local.lbry.tv -SITE_DESCRIPTION=Meet LBRY, an open, free, and community-controlled content wonderland. -LOGO_TITLE=local.lbry.tv - -##### ODYSEE SETTINGS ####### - -MATOMO_URL=https://analytics.lbry.com/ -MATOMO_ID=4 - -# Base config -WEBPACK_WEB_PORT=9090 -WEBPACK_ELECTRON_PORT=9091 -WEB_SERVER_PORT=1337 - -## APIS -LBRY_API_URL=https://api.odysee.com -#LBRY_WEB_API=https://api.na-backend.odysee.com -#LBRY_WEB_STREAMING_API=https://cdn.lbryplayer.xyz -# deprecated: -#LBRY_WEB_BUFFER_API=https://collector-service.api.lbry.tv/api/v1/events/video -#COMMENT_SERVER_API=https://comments.lbry.com/api/v2 -WELCOME_VERSION=1.0 - -# STRIPE -STRIPE_PUBLIC_KEY='pk_live_e8M4dRNnCCbmpZzduEUZBgJO' - -## UI - -LOADING_BAR_COLOR=#e50054 - -# IMAGE ASSETS -YRBL_HAPPY_IMG_URL=https://spee.ch/spaceman-happy:a.png -YRBL_SAD_IMG_URL=https://spee.ch/spaceman-sad:d.png -LOGIN_IMG_URL=https://spee.ch/login:b.png -LOGO=https://spee.ch/odysee-logo-png:3.png -LOGO_TEXT_LIGHT=https://spee.ch/odysee-white-png:f.png -LOGO_TEXT_DARK=https://spee.ch/odysee-png:2.png -AVATAR_DEFAULT=https://spee.ch/spaceman-png:2.png -FAVICON=https://spee.ch/favicon-png:c.png - -# LOCALE -DEFAULT_LANGUAGE=en - -## LINKED CONTENT WHITELIST -KNOWN_APP_DOMAINS=open.lbry.com,lbry.tv,lbry.lat,odysee.com - -## CUSTOM CONTENT -# If the following is true, copy custom/homepage.example.js to custom/homepage.js and modify -CUSTOM_HOMEPAGE=true - -# Add channels to auto-follow on firstrun (space delimited) -AUTO_FOLLOW_CHANNELS=lbry://@Odysee#80d2590ad04e36fb1d077a9b9e3a8bba76defdf8 lbry://@OdyseeHelp#b58dfaeab6c70754d792cdd9b56ff59b90aea334 - -## FEATURES AND LIMITS -SIMPLE_SITE=true -BRANDED_SITE=odysee -# SIMPLE_SITE REPLACEMENTS -ENABLE_MATURE=false -ENABLE_UI_NOTIFICATIONS=true -ENABLE_WILD_WEST=true -SHOW_TAGS_INTRO=false - -# CENTRALIZED FEATURES -ENABLE_COMMENT_REACTIONS=true -ENABLE_FILE_REACTIONS=true -ENABLE_CREATOR_REACTIONS=true -ENABLE_NO_SOURCE_CLAIMS=true -ENABLE_PREROLL_ADS=false -SHOW_ADS=true - -CHANNEL_STAKED_LEVEL_VIDEO_COMMENTS=4 -CHANNEL_STAKED_LEVEL_LIVESTREAM=3 -WEB_PUBLISH_SIZE_LIMIT_GB=4 - -#SEARCH TYPES - comma-delimited -LIGHTHOUSE_DEFAULT_TYPES=audio,video diff --git a/web/bundle-id.js b/web/bundle-id.js deleted file mode 100644 index ac768afaf..000000000 --- a/web/bundle-id.js +++ /dev/null @@ -1,8 +0,0 @@ -const { v4: uuid } = require('uuid'); -const jsBundleId = uuid(); - -function getJsBundleId() { - return jsBundleId; -} - -module.exports = { getJsBundleId }; diff --git a/web/component/fileViewerEmbeddedEnded/index.js b/web/component/fileViewerEmbeddedEnded/index.js deleted file mode 100644 index 4a53330ea..000000000 --- a/web/component/fileViewerEmbeddedEnded/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import { connect } from 'react-redux'; -import fileViewerEmbeddedEnded from './view'; -import { selectUserVerifiedEmail } from 'redux/selectors/user'; -import { makeSelectTagInClaimOrChannelForUri } from 'redux/selectors/claims'; -import { PREFERENCE_EMBED } from 'constants/tags'; - -export default connect((state, props) => ({ - isAuthenticated: selectUserVerifiedEmail(state), - preferEmbed: makeSelectTagInClaimOrChannelForUri(props.uri, PREFERENCE_EMBED)(state), -}))(fileViewerEmbeddedEnded); diff --git a/web/component/fileViewerEmbeddedEnded/view.jsx b/web/component/fileViewerEmbeddedEnded/view.jsx deleted file mode 100644 index 69aac3e9f..000000000 --- a/web/component/fileViewerEmbeddedEnded/view.jsx +++ /dev/null @@ -1,82 +0,0 @@ -// @flow -import React from 'react'; -import Button from 'component/button'; -import * as ICONS from 'constants/icons'; -import { formatLbryUrlForWeb } from 'util/url'; -import { withRouter } from 'react-router'; -import { URL, SITE_NAME } from 'config'; -import Logo from 'component/logo'; - -type Props = { - uri: string, - isAuthenticated: boolean, - preferEmbed: boolean, -}; - -function FileViewerEmbeddedEnded(props: Props) { - const { uri, isAuthenticated, preferEmbed } = props; - - const prompts = isAuthenticated - ? { - discuss_auth: `Continue the discussion on ${SITE_NAME}`, - tip_auth: 'Always tip your creators', - } - : { - bigtech_unauth: 'Together, we can take back control from big tech', - discuss_unauth: `Continue the discussion on ${SITE_NAME}`, - find_unauth: `Find more great content on ${SITE_NAME}`, - a_b_unauth: "We test a lot of messages here. Wouldn't it be funny if the one telling you that did the best?", - earn_unauth: `Join ${SITE_NAME} and earn to watch.`, - blockchain_unauth: "Now if anyone asks, you can say you've used a blockchain.", - }; - - const promptKeys = Object.keys(prompts); - const promptKey = promptKeys[Math.floor(Math.random() * promptKeys.length)]; - // $FlowFixMe - const prompt = prompts[promptKey]; - const lbrytvLink = `${URL}${formatLbryUrlForWeb(uri)}?src=${promptKey}`; - const showReplay = Boolean(window.player); - - return ( -
-
- -
- -
-

{prompt}

-
-
- <> - {showReplay && ( -
-
- ); -} - -export default withRouter(FileViewerEmbeddedEnded); diff --git a/web/effects/use-degraded-performance.js b/web/effects/use-degraded-performance.js deleted file mode 100644 index 5c1e26c36..000000000 --- a/web/effects/use-degraded-performance.js +++ /dev/null @@ -1,45 +0,0 @@ -import { SDK_API_PATH } from 'ui'; -import { useEffect } from 'react'; -import { getAuthToken } from 'util/saved-passwords'; -import { X_LBRY_AUTH_TOKEN } from 'constants/token'; - -import fetchWithTimeout from 'util/fetch'; - -const STATUS_TIMEOUT_LIMIT = 10000; -export const STATUS_OK = 'ok'; -export const STATUS_DEGRADED = 'degraded'; -export const STATUS_FAILING = 'failing'; -export const STATUS_DOWN = 'down'; - -const getParams = (user) => { - const headers = {}; - const token = getAuthToken(); - if (token && user && user.has_verified_email) { - headers[X_LBRY_AUTH_TOKEN] = token; - } - const params = { headers }; - return params; -}; - -export function useDegradedPerformance(onDegradedPerformanceCallback, user) { - const hasUser = user !== undefined && user !== null; - - useEffect(() => { - if (hasUser) { - // The status endpoint is the only endpoint at "v2" currently - // This should be moved into the config once more endpoints are using it - const STATUS_ENDPOINT = `${SDK_API_PATH}/status`.replace('v1', 'v2'); - - fetchWithTimeout(STATUS_TIMEOUT_LIMIT, fetch(STATUS_ENDPOINT, getParams(user))) - .then((response) => response.json()) - .then((status) => { - if (status.general_state !== STATUS_OK) { - onDegradedPerformanceCallback(STATUS_FAILING); - } - }) - .catch(() => { - onDegradedPerformanceCallback(STATUS_FAILING); - }); - } - }, [hasUser]); -} diff --git a/web/index.js b/web/index.js deleted file mode 100644 index b7ee5d01e..000000000 --- a/web/index.js +++ /dev/null @@ -1,39 +0,0 @@ -const config = require('../config'); -const path = require('path'); -const Koa = require('koa'); -const serve = require('koa-static'); -const logger = require('koa-logger'); -const router = require('./src/routes'); -const redirectMiddleware = require('./middleware/redirect'); -const cacheControlMiddleware = require('./middleware/cache-control'); -const iframeDestroyerMiddleware = require('./middleware/iframe-destroyer'); - -const app = new Koa(); -const DIST_ROOT = path.resolve(__dirname, 'dist'); - -app.proxy = true; - -app.use(async (ctx, next) => { - try { - await next(); - } catch (err) { - console.log('error: ', err); - ctx.status = err.status || 500; - ctx.body = err.message; - } -}); - -app.use(logger()); -app.use(cacheControlMiddleware); -app.use(redirectMiddleware); -app.use(iframeDestroyerMiddleware); - -// Check if the request url matches any assets inside of /dist -app.use(serve(DIST_ROOT, { - maxage: 3600000, // set a cache time of one hour, helpful for mobile dev -})); - -app.use(serve(DIST_ROOT)); // Check if the request url matches any assets inside of /dist - -app.use(router.routes()); -app.listen(config.WEB_SERVER_PORT, () => `Server up at localhost:${config.WEB_SERVER_PORT}`); diff --git a/web/lbry.js b/web/lbry.js deleted file mode 100644 index 16059abf4..000000000 --- a/web/lbry.js +++ /dev/null @@ -1,247 +0,0 @@ -// Disabled flow in this copy. This copy is for uncompiled web server ES5 require()s. -require('proxy-polyfill'); - -const CHECK_DAEMON_STARTED_TRY_NUMBER = 200; -// -// Basic LBRY sdk connection config -// Offers a proxy to call LBRY sdk methods - -// -const Lbry = { - isConnected: false, - connectPromise: null, - daemonConnectionString: 'http://localhost:5279', - alternateConnectionString: '', - methodsUsingAlternateConnectionString: [], - apiRequestHeaders: { 'Content-Type': 'application/json-rpc' }, - - // Allow overriding daemon connection string (e.g. to `/api/proxy` for lbryweb) - setDaemonConnectionString: (value) => { - Lbry.daemonConnectionString = value; - }, - - setApiHeader: (key, value) => { - Lbry.apiRequestHeaders = Object.assign(Lbry.apiRequestHeaders, { [key]: value }); - }, - - unsetApiHeader: (key) => { - Object.keys(Lbry.apiRequestHeaders).includes(key) && delete Lbry.apiRequestHeaders['key']; - }, - // Allow overriding Lbry methods - overrides: {}, - setOverride: (methodName, newMethod) => { - Lbry.overrides[methodName] = newMethod; - }, - getApiRequestHeaders: () => Lbry.apiRequestHeaders, - - // Returns a human readable media type based on the content type or extension of a file that is returned by the sdk - getMediaType: (contentType, fileName) => { - if (fileName) { - const formats = [ - [/\.(mp4|m4v|webm|flv|f4v|ogv)$/i, 'video'], - [/\.(mp3|m4a|aac|wav|flac|ogg|opus)$/i, 'audio'], - [/\.(jpeg|jpg|png|gif|svg|webp)$/i, 'image'], - [/\.(h|go|ja|java|js|jsx|c|cpp|cs|css|rb|scss|sh|php|py)$/i, 'script'], - [/\.(html|json|csv|txt|log|md|markdown|docx|pdf|xml|yml|yaml)$/i, 'document'], - [/\.(pdf|odf|doc|docx|epub|org|rtf)$/i, 'e-book'], - [/\.(stl|obj|fbx|gcode)$/i, '3D-file'], - [/\.(cbr|cbt|cbz)$/i, 'comic-book'], - [/\.(lbry)$/i, 'application'], - ]; - - const res = formats.reduce((ret, testpair) => { - switch (testpair[0].test(ret)) { - case true: - return testpair[1]; - default: - return ret; - } - }, fileName); - return res === fileName ? 'unknown' : res; - } else if (contentType) { - // $FlowFixMe - return /^[^/]+/.exec(contentType)[0]; - } - - return 'unknown'; - }, - - // - // Lbry SDK Methods - // https://lbry.tech/api/sdk - // - status: (params = {}) => daemonCallWithResult('status', params), - stop: () => daemonCallWithResult('stop', {}), - version: () => daemonCallWithResult('version', {}), - - // Claim fetching and manipulation - resolve: (params) => daemonCallWithResult('resolve', params), - get: (params) => daemonCallWithResult('get', params), - claim_search: (params) => daemonCallWithResult('claim_search', params), - claim_list: (params) => daemonCallWithResult('claim_list', params), - channel_create: (params) => daemonCallWithResult('channel_create', params), - channel_update: (params) => daemonCallWithResult('channel_update', params), - channel_import: (params) => daemonCallWithResult('channel_import', params), - channel_list: (params) => daemonCallWithResult('channel_list', params), - stream_abandon: (params) => daemonCallWithResult('stream_abandon', params), - stream_list: (params) => daemonCallWithResult('stream_list', params), - channel_abandon: (params) => daemonCallWithResult('channel_abandon', params), - channel_sign: (params) => daemonCallWithResult('channel_sign', params), - support_create: (params) => daemonCallWithResult('support_create', params), - support_list: (params) => daemonCallWithResult('support_list', params), - stream_repost: (params) => daemonCallWithResult('stream_repost', params), - collection_resolve: (params) => daemonCallWithResult('collection_resolve', params), - collection_list: (params) => daemonCallWithResult('collection_list', params), - collection_create: (params) => daemonCallWithResult('collection_create', params), - collection_update: (params) => daemonCallWithResult('collection_update', params), - - // File fetching and manipulation - file_list: (params = {}) => daemonCallWithResult('file_list', params), - file_delete: (params = {}) => daemonCallWithResult('file_delete', params), - file_set_status: (params = {}) => daemonCallWithResult('file_set_status', params), - blob_delete: (params = {}) => daemonCallWithResult('blob_delete', params), - blob_list: (params = {}) => daemonCallWithResult('blob_list', params), - - // Wallet utilities - wallet_balance: (params = {}) => daemonCallWithResult('wallet_balance', params), - wallet_decrypt: () => daemonCallWithResult('wallet_decrypt', {}), - wallet_encrypt: (params = {}) => daemonCallWithResult('wallet_encrypt', params), - wallet_unlock: (params = {}) => daemonCallWithResult('wallet_unlock', params), - wallet_list: (params = {}) => daemonCallWithResult('wallet_list', params), - wallet_send: (params = {}) => daemonCallWithResult('wallet_send', params), - wallet_status: (params = {}) => daemonCallWithResult('wallet_status', params), - address_is_mine: (params = {}) => daemonCallWithResult('address_is_mine', params), - address_unused: (params = {}) => daemonCallWithResult('address_unused', params), - address_list: (params = {}) => daemonCallWithResult('address_list', params), - transaction_list: (params = {}) => daemonCallWithResult('transaction_list', params), - utxo_release: (params = {}) => daemonCallWithResult('utxo_release', params), - support_abandon: (params = {}) => daemonCallWithResult('support_abandon', params), - purchase_list: (params = {}) => daemonCallWithResult('purchase_list', params), - txo_list: (params = {}) => daemonCallWithResult('txo_list', params), - - sync_hash: (params = {}) => daemonCallWithResult('sync_hash', params), - sync_apply: (params = {}) => daemonCallWithResult('sync_apply', params), - - // Preferences - preference_get: (params = {}) => daemonCallWithResult('preference_get', params), - preference_set: (params = {}) => daemonCallWithResult('preference_set', params), - - // Comments - comment_list: (params = {}) => daemonCallWithResult('comment_list', params), - comment_create: (params = {}) => daemonCallWithResult('comment_create', params), - comment_hide: (params = {}) => daemonCallWithResult('comment_hide', params), - comment_abandon: (params = {}) => daemonCallWithResult('comment_abandon', params), - comment_update: (params = {}) => daemonCallWithResult('comment_update', params), - - // Connect to the sdk - connect: () => { - if (Lbry.connectPromise === null) { - Lbry.connectPromise = new Promise((resolve, reject) => { - let tryNum = 0; - // Check every half second to see if the daemon is accepting connections - function checkDaemonStarted() { - tryNum += 1; - Lbry.status() - .then(resolve) - .catch(() => { - if (tryNum <= CHECK_DAEMON_STARTED_TRY_NUMBER) { - setTimeout(checkDaemonStarted, tryNum < 50 ? 400 : 1000); - } else { - reject(new Error('Unable to connect to LBRY')); - } - }); - } - - checkDaemonStarted(); - }); - } - - // Flow thinks this could be empty, but it will always reuturn a promise - // $FlowFixMe - return Lbry.connectPromise; - }, - - publish: (params = {}) => - new Promise((resolve, reject) => { - if (Lbry.overrides.publish) { - Lbry.overrides.publish(params).then(resolve, reject); - } else { - apiCall('publish', params, resolve, reject); - } - }), -}; - -function checkAndParse(response) { - if (response.status >= 200 && response.status < 300) { - return response.json(); - } - return response.json().then((json) => { - let error; - if (json.error) { - const errorMessage = typeof json.error === 'object' ? json.error.message : json.error; - error = new Error(errorMessage); - } else { - error = new Error('Protocol error with unknown response signature'); - } - return Promise.reject(error); - }); -} - -function apiCall(method, params, resolve, reject) { - const counter = new Date().getTime(); - const options = { - method: 'POST', - headers: Lbry.apiRequestHeaders, - body: JSON.stringify({ - jsonrpc: '2.0', - method, - params, - id: counter, - }), - }; - - const connectionString = Lbry.methodsUsingAlternateConnectionString.includes(method) - ? Lbry.alternateConnectionString - : Lbry.daemonConnectionString; - return fetch(connectionString + '?m=' + method, options) - .then(checkAndParse) - .then((response) => { - const error = response.error || (response.result && response.result.error); - - if (error) { - return reject(error); - } - return resolve(response.result); - }) - .catch(reject); -} - -function daemonCallWithResult(name, params = {}) { - return new Promise((resolve, reject) => { - apiCall( - name, - params, - (result) => { - resolve(result); - }, - reject - ); - }); -} - -// This is only for a fallback -// If there is a Lbry method that is being called by an app, it should be added to /flow-typed/Lbry.js -const lbryProxy = new Proxy(Lbry, { - get(target, name) { - if (name in target) { - return target[name]; - } - - return (params = {}) => - new Promise((resolve, reject) => { - apiCall(name, params, resolve, reject); - }); - }, -}); - -module.exports = { lbryProxy, apiCall }; diff --git a/web/middleware/cache-control.js b/web/middleware/cache-control.js deleted file mode 100644 index 800b2b815..000000000 --- a/web/middleware/cache-control.js +++ /dev/null @@ -1,38 +0,0 @@ -const SIX_MONTHS_IN_SECONDS = 15552000; - -const STATIC_ASSET_PATHS = [ - '/public/font/font-v1.css', - '/public/font/v1/300.woff', - '/public/font/v1/300i.woff', - '/public/font/v1/400.woff', - '/public/font/v1/400i.woff', - '/public/font/v1/700.woff', - '/public/font/v1/700i.woff', - '/public/favicon.png', // LBRY icon - '/public/favicon-spaceman.png', - '/public/img/busy.gif', - '/public/img/fileRenderPlaceholder.png', - '/public/img/gerbil-happy.png', - '/public/img/gerbil-sad.png', - '/public/img/placeholder.png', - '/public/img/placeholderTx.gif', - '/public/img/thumbnail-broken.png', - '/public/img/thumbnail-missing.png', - '/public/img/total-background.png', -]; - -async function redirectMiddleware(ctx, next) { - const { - request: { url }, - } = ctx; - - const HASHED_JS_REGEX = /^\/public\/.*[a-fA-F0-9]{12}\.js$/i; - - if (STATIC_ASSET_PATHS.includes(url) || HASHED_JS_REGEX.test(url)) { - ctx.set('Cache-Control', `public, max-age=${SIX_MONTHS_IN_SECONDS}`); - } - - return next(); -} - -module.exports = redirectMiddleware; diff --git a/web/middleware/iframe-destroyer.js b/web/middleware/iframe-destroyer.js deleted file mode 100644 index 13d6a7b2c..000000000 --- a/web/middleware/iframe-destroyer.js +++ /dev/null @@ -1,16 +0,0 @@ -const PAGES = require('../../ui/constants/pages'); - -async function iframeDestroyerMiddleware(ctx, next) { - const { - request: { path }, - } = ctx; - const decodedPath = decodeURIComponent(path); - - if (!decodedPath.startsWith(`/$/${PAGES.EMBED}`)) { - ctx.set('X-Frame-Options', 'DENY'); - } - - return next(); -} - -module.exports = iframeDestroyerMiddleware; diff --git a/web/middleware/redirect.js b/web/middleware/redirect.js deleted file mode 100644 index 11a13596c..000000000 --- a/web/middleware/redirect.js +++ /dev/null @@ -1,67 +0,0 @@ -const PAGES = require('../../ui/constants/pages'); -// const config = require('../../config'); - -function formatInAppUrl(path) { - // Determine if we need to add a leading "/$/" for app pages - const APP_PAGE_REGEX = /(\?)([a-z]*)(.*)/; - const appPageMatches = APP_PAGE_REGEX.exec(path); - - if (appPageMatches && appPageMatches.length) { - // Definitely an app page (or it's formatted like one) - const [, , page, queryString] = appPageMatches; - - if (Object.values(PAGES).includes(page)) { - let actualUrl = '/$/' + page; - - if (queryString) { - actualUrl += `?${queryString.slice(1)}`; - } - - return actualUrl; - } - } - - // Regular claim url - return path; -} - -async function redirectMiddleware(ctx, next) { - const requestHost = ctx.host; - const path = ctx.path; - const url = ctx.url; - - // Getting err: too many redirects on some urls because of this - // Need a better solution - // const decodedUrl = decodeURIComponent(url); - - // if (decodedUrl !== url) { - // ctx.redirect(decodedUrl); - // return; - // } - - if (!path.startsWith('/$/') && path.match(/^([^@/:]+)\/([^:/]+)$/)) { - ctx.redirect(url.replace(/^([^@/:]+)\/([^:/]+)(:(\/.*))/, '$1:$2')); // test against path, but use ctx.url to retain parameters - return; - } - - if (requestHost === 'open.lbry.com' || requestHost === 'open.lbry.io') { - const openQuery = '?src=open'; - // let redirectUrl = config.URL + formatInAppUrl(url); - // Blame tom for this, not me - let redirectUrl = 'https://odysee.com' + formatInAppUrl(url); - - if (redirectUrl.includes('?')) { - redirectUrl = redirectUrl.replace('?', `${openQuery}&`); - } else { - redirectUrl += openQuery; - } - ctx.status = 301; - ctx.redirect(redirectUrl); - return; - } - - // No redirects needed - await next(); -} - -module.exports = redirectMiddleware; diff --git a/web/package.json b/web/package.json deleted file mode 100644 index a74fb14e0..000000000 --- a/web/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "lbry.tv", - "version": "0.0.0", - "description": "A web based browser for the LBRY network, a digital marketplace controlled by its users.", - "keywords": [ - "lbry" - ], - "license": "MIT", - "homepage": "https://lbry.com/", - "bugs": { - "url": "https://github.com/lbryio/lbry-desktop/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/lbryio/lbry-desktop" - }, - "author": { - "name": "LBRY Inc.", - "email": "hello@lbry.com" - }, - "main": "./index.js", - "scripts": { - "build": "cross-env NODE_ENV=production webpack --progess --config webpack.config.js", - "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot --progress --config webpack.config.js", - "dev:server": "nodemon index.js" - }, - "dependencies": { - "@koa/router": "^8.0.2", - "cross-env": "^6.0.3", - "koa": "^2.11.0", - "koa-logger": "^3.2.1", - "koa-send": "^5.0.0", - "koa-static": "^5.0.0", - "mysql": "^2.17.1", - "node-fetch": "^2.6.1", - "uuid": "^8.3.0" - }, - "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-decorators": "^7.3.0", - "@babel/plugin-proposal-object-rest-spread": "^7.6.2", - "@babel/plugin-transform-flow-strip-types": "^7.2.3", - "@babel/plugin-transform-runtime": "^7.4.3", - "@babel/polyfill": "^7.2.5", - "@babel/preset-env": "^7.7.1", - "@babel/preset-flow": "^7.0.0", - "@babel/preset-react": "^7.0.0", - "@babel/register": "^7.0.0", - "cache-loader": "^4.1.0", - "nodemon": "^1.19.4", - "speed-measure-webpack-plugin": "^1.3.1", - "webpack": "^4.41.2", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-dev-server": "^3.9.0", - "webpack-merge": "^4.2.2", - "write-file-webpack-plugin": "^4.5.1" - } -} diff --git a/web/page/code2257/index.js b/web/page/code2257/index.js deleted file mode 100644 index bf0d2b095..000000000 --- a/web/page/code2257/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import PageCode2257 from './view'; -export default PageCode2257; diff --git a/web/page/code2257/view.jsx b/web/page/code2257/view.jsx deleted file mode 100644 index 3ee535f25..000000000 --- a/web/page/code2257/view.jsx +++ /dev/null @@ -1,47 +0,0 @@ -// @flow -import React from 'react'; -import Page from 'component/page'; -import Card from 'component/common/card'; - -const Code2257Page = () => { - return ( - - -

- lbry.tv is not a producer (primary or secondary) of any and all of the content found on the website - (lbry.tv). With respect to the records as per 18 USC 2257 for any and all content found on this site, - please kindly direct your request to the site for which the content was produced. -

-

- lbry.tv is a video sharing site in which allows for the uploading, sharing and general viewing of various - types of adult content and while lbry.tv does the best it can with verifying compliance, it may not be - 100% accurate. -

-

- lbry.tv abides by the following procedures to ensure compliance: -

    -
  • Requiring all users to be 18 years of age to upload videos.
  • -
  • - When uploading, user must verify the content; assure he/she is 18 years of age; certify that he/she - keeps records of the models in the content and that they are over 18 years of age. -
  • -
-

-

- For further assistance and/or information in finding the content's originating site, please contact - lbry.tv compliance at copyright@lbry.com -

-

- Users of lbry.tv who come across such content are urged to flag it as inappropriate by clicking 'Report - this video' link found below each video. -

- - } - /> -
- ); -}; -export default Code2257Page; diff --git a/web/scss/lbrytv.scss b/web/scss/lbrytv.scss deleted file mode 100644 index 91b6201e5..000000000 --- a/web/scss/lbrytv.scss +++ /dev/null @@ -1,71 +0,0 @@ -@charset "utf-8"; - -@import '../../ui/scss/init/reset'; -@import '../../ui/scss/init/vars'; -@import '../../ui/scss/init/mixins'; -@import '../../ui/scss/init/gui'; -@import '../../ui/scss/init/base-theme'; - -@import 'themes/lbrytv/light.scss'; -@import 'themes/lbrytv/dark.scss'; -@import '../../ui/scss/component/ads'; -@import '../../ui/scss/component/animation'; -@import '../../ui/scss/component/badge'; -@import '../../ui/scss/component/block-list'; -@import '../../ui/scss/component/button'; -@import '../../ui/scss/component/card'; -@import '../../ui/scss/component/channel'; -@import '../../ui/scss/component/channel-mention'; -@import '../../ui/scss/component/claim-list'; -@import '../../ui/scss/component/collection'; -@import '../../ui/scss/component/comments'; -@import '../../ui/scss/component/content'; -@import '../../ui/scss/component/dat-gui'; -@import '../../ui/scss/component/embed-player'; -@import '../../ui/scss/component/expandable'; -@import '../../ui/scss/component/expanding-details'; -@import '../../ui/scss/component/file-drop'; -@import '../../ui/scss/component/file-list'; -@import '../../ui/scss/component/file-properties'; -@import '../../ui/scss/component/file-render'; -@import '../../ui/scss/component/footer'; -@import '../../ui/scss/component/form-field'; -@import '../../ui/scss/component/header'; -@import '../../ui/scss/component/icon'; -@import '../../ui/scss/component/main'; -@import '../../ui/scss/component/markdown-editor'; -@import '../../ui/scss/component/markdown-preview'; -@import '../../ui/scss/component/media'; -@import '../../ui/scss/component/menu-button'; -@import '../../ui/scss/component/modal'; -@import '../../ui/scss/component/nag'; -@import '../../ui/scss/component/navigation'; -@import '../../ui/scss/component/notification'; -@import '../../ui/scss/component/nudge'; -@import '../../ui/scss/component/pagination'; -@import '../../ui/scss/component/post'; -@import '../../ui/scss/component/purchase'; -@import '../../ui/scss/component/placeholder'; -@import '../../ui/scss/component/progress'; -@import '../../ui/scss/component/search'; -@import '../../ui/scss/component/claim-search'; -@import '../../ui/scss/component/section'; -@import '../../ui/scss/component/share'; -@import '../../ui/scss/component/snack-bar'; -@import '../../ui/scss/component/spinner'; -@import '../../ui/scss/component/splash'; -@import '../../ui/scss/component/status-bar'; -@import '../../ui/scss/component/superchat'; -@import '../../ui/scss/component/syntax-highlighter'; -@import '../../ui/scss/component/table'; -@import '../../ui/scss/component/livestream'; -@import '../../ui/scss/component/tabs'; -@import '../../ui/scss/component/tooltip'; -@import '../../ui/scss/component/txo-list'; -@import '../../ui/scss/component/videojs'; -@import '../../ui/scss/component/tags'; -@import '../../ui/scss/component/wunderbar'; -@import '../../ui/scss/component/yrbl'; -@import '../../ui/scss/component/empty'; -@import '../../ui/scss/component/stripe-card'; -@import '../../ui/scss/component/wallet-tip-send'; diff --git a/web/scss/odysee.scss b/web/scss/odysee.scss deleted file mode 100644 index 1e2cf5ede..000000000 --- a/web/scss/odysee.scss +++ /dev/null @@ -1,71 +0,0 @@ -@charset "utf-8"; - -@import 'themes/odysee/init/reset'; -@import 'themes/odysee/init/vars'; -@import 'themes/odysee/init/mixins'; -@import 'themes/odysee/init/gui'; -@import 'themes/odysee/init/base-theme'; - -@import 'themes/odysee/light.scss'; -@import 'themes/odysee/dark.scss'; -@import '../../ui/scss/component/ads'; -@import '../../ui/scss/component/animation'; -@import '../../ui/scss/component/badge'; -@import '../../ui/scss/component/block-list'; -@import '../../ui/scss/component/button'; -@import '../../ui/scss/component/card'; -@import '../../ui/scss/component/channel'; -@import '../../ui/scss/component/channel-mention'; -@import '../../ui/scss/component/claim-list'; -@import '../../ui/scss/component/collection'; -@import '../../ui/scss/component/comments'; -@import '../../ui/scss/component/content'; -@import '../../ui/scss/component/dat-gui'; -@import '../../ui/scss/component/embed-player'; -@import '../../ui/scss/component/expandable'; -@import '../../ui/scss/component/expanding-details'; -@import '../../ui/scss/component/file-drop'; -@import '../../ui/scss/component/file-list'; -@import '../../ui/scss/component/file-properties'; -@import '../../ui/scss/component/file-render'; -@import '../../ui/scss/component/footer'; -@import '../../ui/scss/component/form-field'; -@import '../../ui/scss/component/header'; -@import '../../ui/scss/component/icon'; -@import '../../ui/scss/component/main'; -@import '../../ui/scss/component/markdown-editor'; -@import '../../ui/scss/component/markdown-preview'; -@import '../../ui/scss/component/media'; -@import '../../ui/scss/component/menu-button'; -@import '../../ui/scss/component/modal'; -@import '../../ui/scss/component/nag'; -@import '../../ui/scss/component/navigation'; -@import '../../ui/scss/component/notification'; -@import '../../ui/scss/component/nudge'; -@import '../../ui/scss/component/pagination'; -@import '../../ui/scss/component/post'; -@import '../../ui/scss/component/purchase'; -@import '../../ui/scss/component/placeholder'; -@import '../../ui/scss/component/progress'; -@import '../../ui/scss/component/search'; -@import '../../ui/scss/component/claim-search'; -@import '../../ui/scss/component/section'; -@import '../../ui/scss/component/share'; -@import '../../ui/scss/component/snack-bar'; -@import '../../ui/scss/component/spinner'; -@import '../../ui/scss/component/splash'; -@import '../../ui/scss/component/status-bar'; -@import '../../ui/scss/component/superchat'; -@import '../../ui/scss/component/syntax-highlighter'; -@import '../../ui/scss/component/table'; -@import '../../ui/scss/component/livestream'; -@import '../../ui/scss/component/tabs'; -@import '../../ui/scss/component/tooltip'; -@import '../../ui/scss/component/txo-list'; -@import '../../ui/scss/component/videojs'; -@import '../../ui/scss/component/tags'; -@import '../../ui/scss/component/wunderbar'; -@import '../../ui/scss/component/yrbl'; -@import '../../ui/scss/component/empty'; -@import '../../ui/scss/component/stripe-card'; -@import '../../ui/scss/component/wallet-tip-send'; diff --git a/web/scss/themes/lbrytv/dark.scss b/web/scss/themes/lbrytv/dark.scss deleted file mode 100644 index ab79d895f..000000000 --- a/web/scss/themes/lbrytv/dark.scss +++ /dev/null @@ -1,160 +0,0 @@ -[theme='dark'] { - // Color overrides - --color-primary: #2bbb90; - --color-primary-alt: #3e675d; - --color-primary-alt-2: #065f46; - --color-primary-alt-3: #34e5b0; - --color-secondary: #204166; - --color-secondary-alt: #dbeafe; - --color-secondary-alt-2: #bfdbfe; - --color-secondary-alt-3: #2c5c8c; - - // Structure - --color-background: var(--color-gray-9); - --color-background-overlay: #21252999; - --color-border: #333338; - --color-card-background: var(--color-gray-8); - --color-card-background-highlighted: var(--color-gray-7); - - // Text - --color-text: var(--color-white); - --color-text-subtitle: var(--color-gray-4); - --color-text-empty: var(--color-text-subtitle); - --color-text-help: #bbbbbb; - --color-text-warning: #212529; - --color-text-warning--background: var(--lbry-yellow-1); - --color-text-error: #f87171; - --color-error: #61373f; - - // Tags (words) - --color-tag-words: var(--color-text); - --color-tag-words-bg: var(--color-gray-5); - --color-tag-words-hover: var(--color-white); - --color-tag-words-bg-hover: var(--color-gray-4); - - // Header - --color-header-background: var(--color-gray-8); - --color-header-button: var(--color-gray-6); - --color-header-button-hover: var(--color-gray-6); - --color-header-button-active: var(--color-gray-6); - - // Button - --color-button-primary-bg: var(--color-primary-alt); - --color-button-primary-bg-hover: var(--color-primary-alt-2); - --color-button-primary-text: var(--color-gray-2); - --color-button-primary-hover-text: var(--color-primary-alt); - --color-button-secondary-bg: var(--color-secondary); - --color-button-secondary-border: var(--color-secondary); - --color-button-secondary-bg-hover: var(--color-secondary-alt-3); - --color-button-secondary-text: var(--color-gray-2); - --color-button-alt-bg: var(--color-gray-7); - --color-button-alt-bg-hover: var(--color-gray-6); - --color-button-alt-text: var(--color-gray-1); - --color-button-border: var(--color-gray-5); - --color-button-toggle-text: var(--color-gray-1); - --color-link: var(--color-primary-alt-3); - --color-link-hover: var(--color-text); - --color-link-focus-bg: var(--color-gray-7); - - // Input - --color-input: var(--color-white); - --color-input-label: var(--color-gray-3); - --color-input-placeholder: var(--color-gray-1); - --color-input-bg: var(--color-header-button); - --color-input-bg-copyable: var(--color-gray-6); - --color-input-border: var(--color-border); - --color-input-border-active: var(--color-secondary); - --color-input-toggle: var(--color-primary-alt-3); - --color-input-toggle-bg: var(--color-input-bg); - --color-input-toggle-bg-hover: var(--color-secondary); - --color-input-bg-selected: var(--color-primary-alt); - --color-input-prefix-bg: var(--color-gray-5); - --color-input-prefix-border: var(--color-gray-4); - --select-toggle-background: url("data:image/svg+xml,%3Csvg viewBox='0 0 96 96' xmlns='http://www.w3.org/2000/svg' fill='%23ffffff'%3E%3Cpath d='M17.172, 31.172c1.562, -1.562 4.095, -1.562 5.656, 0l25.172, 25.171l25.172, -25.171c1.562, -1.562 4.095, -1.562 5.656, 0c1.562, 1.562 1.562, 4.095 0, 5.656l-28, 28c-1.562, 1.562 -4.095, 1.562 -5.656, 0l-28, -28c-0.781, -0.781 -1.172, -1.805 -1.172, -2.828c0, -1.023 0.391, -2.047 1.172, -2.828Z'/%3E%3C/svg%3E%0A"); - - // Navigation - --color-navigation-icon: var(--color-gray-4); - --color-navigation-link: var(--color-gray-4); - --color-navigation-active: var(--color-gray-7); - --color-navigation-active-text: var(--color-gray-3); - --color-navigation-hover: var(--color-gray-6); - --color-navigation-hover-text: var(--color-gray-3); - - // Tags - --color-tag: var(--color-primary-alt-3); - --color-tag-bg: var(--color-gray-7); - --color-tag-hover: var(--color-white); - --color-tag-bg-hover: var(--color-primary-alt); - - // Menu - --color-menu-background: var(--color-header-background); - --color-menu-background--active: var(--color-gray-7); - --color-menu-icon: var(--color-gray-4); - --color-menu-icon-active: var(--color-gray-2); - - // Comments - --color-comment-menu: var(--color-gray-5); - --color-comment-menu-hovering: var(--color-gray-2); - --color-comment-threadline: #434b54; - --color-comment-threadline-hover: var(--color-gray-4); - --color-comment-highlighted: #484734; - - // Snack - --color-snack-bg: var(--color-secondary); - - // Superchat - --color-superchat-text: var(--color-black); - --color-superchat-text__light: var(--color-text); - --color-superchat: #fcd34d; - --color-superchat__light: #ef4e1647; - --color-superchat-2: #fde68a; - --color-superchat-3: #fef3c7; - --color-superchat-3__light: #58066087; - --color-superchat-4: #fffbeb; - - // Other - --color-focus: #93c5fd50; - --color-nag: var(--color-orange); - --color-tab-text: var(--color-white); - --color-tabs-background: var(--color-card-background); - --color-tab-divider: var(--color-white); - --color-modal-background: var(--color-card-background); - --color-notice: #58563b; - --color-purchased: #ffd580; - --color-purchased-alt: var(--color-purchased); - --color-purchased-text: var(--color-gray-5); - --color-thumbnail-background: var(--color-gray-5); - --color-tooltip-bg: #2f3337; - --color-help-warning-bg: #d97706; - --color-help-warning-text: white; - --color-blockquote: var(--color-gray-5); - --color-placeholder-background: #4e5862; - --color-spinner-light: #5a6570; - --color-spinner-dark: #212529; - --color-login-graphic-background: var(--color-background); - - // Editor - --color-editor-cursor: var(--color-text); - --color-editor-quote: #d3d3d3; - --color-editor-tag: #efbe5d; - --color-editor-attr: #68ccf9; - --color-editor-string: #ff8b6b; - --color-editor-inline-code-fg: #ce9178; - --color-editor-inline-code-fg-preview: #e8b692; - --color-editor-inline-code-bg: rgba(20, 68, 102, 0.3); - --color-editor-inline-code-bg-preview: #464b50; - --color-editor-selected: #264f78; - --color-editor-link: var(--color-link); - --color-editor-url: var(--color-editor-string); - --color-editor-hr: var(--color-editor-tag); - --color-editor-hr-preview: #a0a0a0; - - // Ads - --color-ads-background: #475057; - --color-ads-text: #111; - --color-ads-link: var(--color-primary-alt); - - // Scrollbar - --color-scrollbar-thumb-bg: rgba(255, 255, 255, 0.2); - --color-scrollbar-track-bg: transparent; -} diff --git a/web/scss/themes/lbrytv/light.scss b/web/scss/themes/lbrytv/light.scss deleted file mode 100644 index 5a4260fca..000000000 --- a/web/scss/themes/lbrytv/light.scss +++ /dev/null @@ -1,2 +0,0 @@ -:root { -} diff --git a/web/scss/themes/odysee/component/_file-render.scss b/web/scss/themes/odysee/component/_file-render.scss deleted file mode 100644 index 20560bad1..000000000 --- a/web/scss/themes/odysee/component/_file-render.scss +++ /dev/null @@ -1,757 +0,0 @@ -.file-page { - .file-page__video-container + .card, - .file-render + .card, - .content__cover + .card, - .card + .file-render, - .card + .file-page__video-container, - .card + .content__cover { - margin-top: var(--spacing-m); - } - - .card + .file-render { - margin-top: var(--spacing-m); - } - - .file-page__md { - .file-viewer--document { - margin-top: var(--spacing-l); - - @media (min-width: $breakpoint-small) { - margin-top: var(--spacing-xl); - } - - .button { - display: inline; - - .button__content { - display: inline; - } - } - - .claim-link { - .button { - display: block; - - .button__content { - display: block; - } - } - } - } - - .media__actions { - justify-content: center; - } - - .file-page__secondary-content { - display: flex; - flex-direction: column; - padding: 0 var(--spacing-m); - } - } - - > * { - width: 100%; - } - - @media (max-width: $breakpoint-medium) { - flex-direction: column; - } -} - -.file-render { - width: 100%; - height: 100%; - z-index: 1; - overflow: hidden; - max-height: var(--inline-player-max-height); -} - -.file-render--video { - background-color: black; - - &:after { - content: ''; - position: absolute; - background-color: black; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 2; - animation: fadeInFromBlack 2s ease; - opacity: 0; - pointer-events: none; - } -} - -@keyframes fadeInFromBlack { - 0% { - opacity: 1; - } - 100% { - opacity: 0; - } -} - -.file-render--embed { - border-radius: 0; - position: fixed; - max-height: none; -} - -.file-render--img-container { - width: 100%; - aspect-ratio: 16 / 9; -} - -.file-render--post-container { - min-height: 30vh; -} - -.file-render__header { - display: flex; - justify-content: space-between; - flex-wrap: wrap; -} - -.file-viewer { - width: 100%; - height: 100%; - - iframe, - webview, - img { - width: 100%; - height: 100%; - object-fit: contain; - max-height: var(--inline-player-max-height); - } - video { - cursor: pointer; - } - .video-js.vjs-user-inactive.vjs-playing { - video { - cursor: none; - } - } -} - -.file-render__viewer--comic { - position: relative; - overflow: hidden; - .comic-viewer { - width: 100%; - height: calc(100vh - var(--header-height) - var(--spacing-m) * 2); - max-height: var(--inline-player-max-height); - } -} - -.file-viewer--iframe { - display: flex; /*this eliminates extra height from whitespace, if someone edits this with a better technique, tell Jeremy*/ - /* - ideally iframes would dynamiclly grow, see for a start at this - for now, since we don't know size, let's make as large as we can without being larger than available area - */ - iframe { - height: calc(100vh - var(--header-height) - var(--spacing-m) * 2); - } -} - -.file-render__viewer--three { - position: relative; - overflow: hidden; - - .three-viewer { - height: calc(100vh - var(--header-height) - var(--spacing-m) * 2); - max-height: var(--inline-player-max-height); - } -} - -.file-viewer__overlay { - position: absolute; - left: auto; - right: auto; - height: 100%; - width: 100%; - z-index: 2; - color: var(--color-white); - font-size: var(--font-body); /* put back font size from videojs change*/ - - background-color: rgba(0, 0, 0, 0.9); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: var(--spacing-l); - - @media (max-width: $breakpoint-small) { - font-size: var(--font-small); - } - - .button--uri-indicator, - .button--link { - color: var(--color-white); - } -} - -.content__viewer--floating { - .file-viewer__overlay-title, - .file-viewer__overlay-secondary { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - max-width: 100%; - } -} -@media (max-width: $breakpoint-small) { - .file-viewer__overlay-title, - .file-viewer__overlay-secondary { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - max-width: 100%; - } -} - -.file-viewer__overlay-title { - text-align: center; - font-size: var(--font-large); - margin-bottom: var(--spacing-m); -} -.file-viewer__overlay-secondary { - color: var(--color-text-subtitle); - margin-bottom: var(--spacing-m); -} -.file-viewer__overlay-actions { - .button + .button { - margin-left: var(--spacing-m); - } -} - -.file-viewer__overlay-logo { - height: 2rem; - max-height: 2rem; //embed logo height? - width: 12rem; - display: flex; - align-items: center; - - &:hover { - filter: drop-shadow(1px 2px 10px var(--color-gray-3)); - } - - @media (max-width: $breakpoint-small) { - margin-right: var(--spacing-m); - width: 2.5rem; - - .button__label { - display: none; - } - } -} - -.file-viewer__overlay-logo--videoend { - height: 3.5rem; - width: 12rem; -} - -.file-viewer--is-playing:not(:hover) .file-viewer__embedded-header { - display: none; -} - -.file-viewer__embedded-header { - position: absolute; - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - top: 0; - opacity: 1; - z-index: 2; - height: 4rem; - padding-left: var(--spacing-m); - padding-right: var(--spacing-s); - font-size: var(--font-large); - overflow-x: hidden; - overflow-y: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-top-left-radius: var(--border-radius); - border-top-right-radius: var(--border-radius); - - .button { - color: var(--color-white); - z-index: 2; - - .button__label { - white-space: nowrap; - } - - &:hover { - color: var(--color-white); - } - } - - .credit-amount, - .icon--Key { - margin-right: var(--spacing-m); - } - - @media (min-width: $breakpoint-small) { - padding: 0 var(--spacing-l); - } -} - -.file-viewer__embedded-gradient { - position: absolute; - top: 0; - left: 0; - right: 0; - z-index: 2; - background: linear-gradient(#000000, #00000000 70%); - height: 75px; - z-index: 1; -} - -.file-viewer__embedded-title { - color: white; - max-width: 75%; - z-index: 2; -} - -.file-viewer__embedded-info { - display: flex; - align-items: center; - font-size: var(--font-small); - margin-left: var(--spacing-m); - white-space: nowrap; - position: relative; - overflow: hidden; - - & > *:not(:last-child) { - margin-right: var(--spacing-s); - } -} - -.file-render__content { - width: 100%; - height: 100%; - overflow: auto; - max-width: 100vw; -} - -// -// Custom viewers live below here -// These either have custom class names that can't be changed or have styles that need to be overridden -// - -// Code-viewer -.CodeMirror { - @extend .file-render__content; - - .cm-invalidchar { - display: none; - } - - .CodeMirror .CodeMirror-lines { - // is there really a .CodeMirror inside a .CodeMirror? - padding: var(--spacing-s) 0; - } - - .CodeMirror-code { - @include font-sans; - letter-spacing: 0.1rem; - } - - .CodeMirror-gutters { - background-color: var(--color-gray-1); - border-right: 1px solid var(--color-gray-4); - padding-right: var(--spacing-m); - } - - .CodeMirror-line { - padding-left: var(--spacing-m); - } - - .CodeMirror-linenumber { - color: var(--color-gray-5); - } -} - -// **************************************************************************** -// Video -// **************************************************************************** - -.video-js-parent { - height: 100%; - width: 100%; -} - -// By default no video js play button -.vjs-big-play-button { - display: none; -} - -.video-js { - height: 100%; - width: 100%; - - .vjs-modal-dialog .vjs-modal-dialog-content { - position: relative; - padding-top: 5rem; - // Make sure no videojs message interferes with overlaying buttons - pointer-events: none; - } - - .vjs-control-bar { - // background-color: rgba(0, 0, 0, 0.8); - - .vjs-remaining-time { - display: none; - } - - .vjs-current-time, - .vjs-time-divider, - .vjs-duration { - display: flex; - } - } - - .vjs-picture-in-picture-control { - display: none; - } -} - -// **************************************************************************** -// Video::Overlays -// **************************************************************************** - -.video-js { - .vjs-overlay-playrate, - .vjs-overlay-seeked { - background-color: rgba(0, 0, 0, 0.5); - font-size: var(--font-large); - width: auto; - padding: 10px 30px; - margin: 0; - position: absolute; - top: 50%; - left: 50%; - -ms-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - - animation: fadeOutAnimation ease-in 0.6s; - animation-iteration-count: 1; - animation-fill-mode: forwards; - } - - @keyframes fadeOutAnimation { - 0% { - opacity: 1; - visibility: visible; - } - 100% { - opacity: 0; - visibility: hidden; - } - } -} - -// **************************************************************************** -// Video - Mobile UI -// **************************************************************************** - -.video-js.vjs-mobile-ui { - .vjs-control-bar { - background-color: transparent; - } - - .vjs-touch-overlay:not(.show-play-toggle) { - .vjs-control-bar { - // Sync the controlBar's visibility with the overlay's - display: none; - } - } - - .vjs-touch-overlay { - &.show-play-toggle, - &.skip { - background-color: rgba(0, 0, 0, 0.5); - } - - // Override the original's 'display: block' to avoid the big play button - // from being squished to the side: - position: absolute; - } -} - -video::-internal-media-controls-overlay-cast-button { - // Push the cast button above vjs-touch-overlay: - z-index: 3; - - // Move it to the upper-right since it will clash with "tap to unmute": - left: unset; - right: 8px; -} - -.video-js.video-js.vjs-user-inactive { - video::-internal-media-controls-overlay-cast-button { - // (1) Android-Chrome's original Cast button behavior: - // - If video is playing, fade out the button. - // - If video is paused and video is tapped, display the button and stay on. - // (2) We then injected another behavior: - // - Display the button when '.vjs-touch-overlay' is displayed. However, - // the 'controlslist' attribute hack that was used to do this results in the - // button staying displayed without a fade-out timer. - // (3) Ideally, we should sync the '.vjs-touch-overlay' visibility with the - // cast button, similar to how to controlBar's visibility is synced above. - // But I have no idea how to grab the sibling '.show-play-toggle' into the - // css logic. - // (4) So, this is the best that I can come up with: Whenever user is idle, - // the button goes away. The only downside I know is the scenario of - // "overlay is up and video is paused, but button goes away due to idle". - // The user just needs to re-tap any empty space on the overlay to get the - // Cast button again. - opacity: 0; - transition: opacity 1s ease; - } -} - -// **************************************************************************** -// Layout and control visibility -// **************************************************************************** - -.video-js.vjs-fullscreen, -.video-js:not(.vjs-fullscreen) { - // --- Unhide desired components per layout --- - &.vjs-layout-x-small { - .vjs-playback-rate { - display: flex !important; - } - } - - &.vjs-layout-small { - .vjs-current-time, - .vjs-time-divider, - .vjs-duration, - .vjs-playback-rate { - display: flex !important; - } - } - - // --- Adjust spacing --- - .vjs-current-time { - padding-right: 0; - } - - .vjs-duration { - padding-left: 0; - } - - .vjs-playback-rate .vjs-playback-rate-value { - // Reduce the gigantic font a bit. Default was 1.5em. - font-size: 1.25em; - line-height: 2.5; - } - - .vjs-playback-rate .vjs-menu { - // Extend the width to prevent a potential scrollbar from blocking the text. - width: 8em; - left: -2em; - } -} - -.video-js.vjs-fullscreen { - .vjs-button--theater-mode { - display: none; - } -} - -// **************************************************************************** -// Tap-to-unmute -// **************************************************************************** - -.video-js--tap-to-unmute { - visibility: hidden; // Start off as hidden. - z-index: 2; - position: absolute; - top: var(--spacing-xs); - left: var(--spacing-xs); - padding: var(--spacing-xs) var(--spacing-m); // Make it comfy for touch. - color: var(--color-gray-1); - background: black; - border: 1px solid var(--color-gray-4); - opacity: 0.9; - - &:hover { - opacity: 1; - color: var(--color-white); - } -} - -// **************************************************************************** -// **************************************************************************** - -.video-js:hover { - .vjs-big-play-button { - background-color: var(--color-primary); - } -} - -.file-render { - .video-js { - /*display: flex;*/ - /*align-items: center;*/ - /*justify-content: center;*/ - } - - .vjs-big-play-button { - @extend .button--icon; - @extend .button--play; - border: none; - /*position: static;*/ - z-index: 2; - - .vjs-icon-placeholder { - display: none; - } - } - - .vjs-menu-item-text, - .vjs-icon-placeholder { - text-transform: capitalize; - } -} - -// **************************************************************************** -// **************************************************************************** - -.file-render--embed { - // on embeds, do not inject our colors until interaction - .video-js:hover { - .vjs-big-play-button { - background-color: var(--color-primary); - } - } - - .vjs-paused { - .vjs-big-play-button { - display: block; - background-color: rgba(0, 0, 0, 0.6); - } - } - - .vjs-ended { - .vjs-big-play-button { - display: none; - } - } - - .video-js--tap-to-unmute { - margin-top: var(--spacing-xl); - margin-left: var(--spacing-s); - - @media (min-width: $breakpoint-small) { - margin-left: calc(var(--spacing-m) + var(--spacing-s)); - } - } - - .file-viewer { - iframe, - webview, - img { - max-height: none; - } - } -} - -.file-viewer--ended-embed .vjs-big-play-button { - display: none !important; // yes this is dumb, but this was broken and the above CSS was overriding -} - -// **************************************************************************** -// Autoplay Countdown -// **************************************************************************** - -.autoplay-countdown { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} - -.autoplay-countdown__timer { - width: 100%; - text-align: center; - font-size: var(--font-small); -} -.autoplay-countdown__counter { - margin-top: var(--spacing-m); -} - -.autoplay-countdown__button { - /* Border size and color */ - border: 3px solid transparent; - /* Creates a circle */ - border-radius: 50%; - /* Circle size */ - display: inline-block; - height: 86px; - width: 86px; - /* Use transform to rotate to adjust where opening appears */ - transition: border 1s; - transform: rotate(45deg); - .button { - background-color: transparent; - transform: rotate(-45deg); - &:hover { - background-color: var(--color-primary); - } - } -} -.autoplay-countdown__button--4 { - border-top-color: #fff; -} -.autoplay-countdown__button--3 { - border-top-color: #fff; - border-right-color: #fff; -} -.autoplay-countdown__button--2 { - border-top-color: #fff; - border-right-color: #fff; - border-bottom-color: #fff; -} -.autoplay-countdown__button--1 { - border-color: #fff; -} - -// **************************************************************************** -// **************************************************************************** - -.file__viewdate { - display: flex; - justify-content: space-between; - flex-direction: column; - margin-bottom: var(--spacing-s); - - > :first-child { - margin-bottom: var(--spacing-s); - } - - @media (max-width: $breakpoint-medium) { - flex-direction: row; - justify-content: start; - - > :first-child { - margin-bottom: 0; - margin-right: 1rem; - } - } -} - -.file-page__image { - img { - cursor: pointer; - } -} diff --git a/web/scss/themes/odysee/component/_form-field.scss b/web/scss/themes/odysee/component/_form-field.scss deleted file mode 100644 index 5c4a3a2c8..000000000 --- a/web/scss/themes/odysee/component/_form-field.scss +++ /dev/null @@ -1,713 +0,0 @@ -@import '../init/mixins'; - -input, -textarea, -select, -.date-picker-input { - height: var(--height-input); - border-radius: var(--border-radius); - border: 1px solid; - color: var(--color-input); - border-color: var(--color-input-border); - background-color: var(--color-input-bg); - padding-right: var(--spacing-s); - padding-left: var(--spacing-s); - - &:focus { - @include focus; - } - - &::placeholder { - color: var(--color-input-placeholder); - opacity: 0.4; - } - - &:disabled { - opacity: 0.4; - - & + label { - opacity: 0.4; - } - } - - &[type='range'] { - height: auto; - height: 0.5rem; - background-color: var(--color-secondary); - } -} - -checkbox-element, -radio-element, -select { - cursor: pointer; -} - -select { - background-image: var(--select-toggle-background); - background-position: 99% center; - background-repeat: no-repeat; - background-size: 1rem; - padding-right: var(--spacing-l); - padding-left: var(--spacing-s); - font-weight: bold; -} - -fieldset-group { - display: flex; - flex-direction: row; - justify-content: space-between; - - &.fieldset-group--smushed { - fieldset-section + fieldset-section { - margin-top: 0; - } - } -} - -fieldset-section, -fieldset-group, -form, -.checkbox, -.radio, -.form-field--SimpleMDE, -.form-field__help { - + fieldset-section, - + fieldset-group, - + form, - + .checkbox, - + .radio, - + .form-field--SimpleMDE { - margin-top: var(--spacing-l); - } - - + .form-field__help { - margin-top: var(--spacing-s); - } - - &:last-child { - margin-bottom: 0; - } - - input, - select { - width: 100%; - } -} - -fieldset-section, -.checkbox, -.radio { - display: flex; - flex-direction: column; -} - -label { - font-size: var(--font-small); - color: var(--color-input-label); - display: inline-block; - margin-bottom: 0.1rem; - - .icon__lbc { - margin-bottom: 4px; - } -} - -input-submit { - display: flex; - - & > *:first-child, - & > *:nth-child(2) { - margin: 0; - } - - & > *:first-child { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - border-right: none; - } - - & > *:nth-child(2) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border: 1px solid var(--color-border); - } -} - -.checkbox, -.radio { - position: relative; - - input[type='checkbox'], - input[type='radio'] { - height: var(--height-checkbox); - width: var(--height-checkbox); - position: absolute; - border: none; - left: 0; - padding: 0; - background-color: transparent; - - &:disabled + label { - cursor: default; - pointer-events: none; - } - } - - label { - position: relative; - display: inline-block; - margin: 0; - font-size: var(--font-base); - padding-left: calc(var(--height-checkbox) + var(--spacing-s)); - min-height: var(--height-checkbox); - - &::before { - background-color: var(--color-input-toggle-bg); - } - - &:hover { - &::before { - background-color: var(--color-input-toggle-bg-hover); - } - } - } - - label::before, - label::after { - position: absolute; - content: ''; - } - - // Hide the checkmark by default - input[type='checkbox'] + label::after, - input[type='radio'] + label::after { - content: none; - } - - // Unhide on the checked state - input[type='checkbox']:checked + label::after, - input[type='radio']:checked + label::after { - content: ''; - } - - input[type='checkbox']:focus + label::before, - input[type='radio']:focus + label::before { - @include focus; - } -} - -.checkbox { - // Outer box of the fake checkbox - label::before { - height: var(--height-checkbox); - width: var(--height-checkbox); - border: 1px solid var(--color-input-border); - border-radius: var(--border-radius); - left: 0px; - top: -1px; - } - - // Checkmark of the fake checkbox - label::after { - height: 6px; - width: 12px; - border-left: 2px solid; - border-bottom: 2px solid; - border-color: var(--color-input-toggle); - border-left-color: var(--color-input-toggle); - transform: rotate(-45deg); - left: 6px; - top: 6px; - } -} - -.radio { - input[type='radio'] { - border-radius: 50%; - } - - // Outer box of the fake radio - label::before { - height: var(--height-radio); - width: var(--height-radio); - border: 1px solid var(--color-input-border); - border-radius: calc(var(--height-radio) * 0.5); - left: 0px; - top: -1px; - } - - // Checkmark of the fake radio - label::after { - height: 12px; - width: 12px; - border-radius: 50%; - background-color: var(--color-primary); - left: 6px; - top: 5px; - } -} - -.range__label { - display: flex; - justify-content: space-between; - width: 100%; - margin-bottom: var(--spacing-m); - - > * { - width: 33%; - text-align: center; - - &:first-of-type { - text-align: left; - } - &:last-of-type { - text-align: right; - } - } -} - -.fieldset-group { - @extend fieldset-group; -} - -.fieldset-section { - @extend fieldset-section; -} - -.input-submit { - @extend input-submit; -} - -input-submit { - align-items: center; - - input { - z-index: 2; - } -} - -input[type='number'] { - width: 8rem; -} - -fieldset-group { - + fieldset-group { - margin-top: var(--spacing-s); - } - - &.fieldset-group--smushed { - justify-content: flex-start; - - fieldset-section { - width: auto; - margin: 0; - - &:first-child { - input, - select { - border-right: none; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - } - - &:nth-of-type(2) { - input, - select { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - label { - margin-left: var(--spacing-s); - } - } - } - - &.fieldgroup--paginate { - padding-bottom: var(--spacing-l); - margin-top: var(--spacing-l); - align-items: flex-end; - justify-content: center; - } - } - - // This is a special case where the prefix appears "inside" the input - // It would be way simpler to just use position: absolute and give it a width - // but the width can change when we use it for the name prefix - // lbry:// {input}, lbry://@short {input}, @lbry://longername {input} - // The spacing/alignment isn't very robust and will probably need to be changed - // if we use this in more places - &.fieldset-group--disabled-prefix { - align-items: flex-end; - - label { - min-height: 18px; - white-space: nowrap; - // Set width 0 and overflow visible so the label can act as if it's the input label and not a random text node in a side by side div - overflow: visible; - width: 0; - } - - fieldset-section:first-child { - max-width: 40%; - - .form-field__prefix { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - padding: 0.5rem; - height: var(--height-input); - border: 1px solid; - border-top-left-radius: var(--border-radius); - border-bottom-left-radius: var(--border-radius); - border-color: var(--color-input-border); - border-right-color: var(--color-input-prefix-border); - color: var(--color-text); - background-color: var(--color-input-prefix-bg); - } - } - - fieldset-section:last-child { - width: 100%; - - label { - // Overwrite the input's label to wrap instead. This is usually - // an error message, which could be long in other languages. - width: 100%; - white-space: normal; - } - - input { - border-left: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-color: var(--color-input-border); - padding-left: var(--spacing-xs); - } - } - } -} - -.form-field--copyable { - padding: 0.2rem 0.75rem; - text-overflow: ellipsis; - user-select: text; - cursor: default; -} - -.form-field--short { - width: 100%; - @media (min-width: $breakpoint-small) { - width: 25em; - } -} - -.form-field--price-amount { - max-width: 6em; -} - -.form-field--price-amount--auto { - width: auto; - min-width: 100%; -} - -.form-field--address { - min-width: 18em; - @media (max-width: $breakpoint-xxsmall) { - min-width: 10em; - } -} - -.form-field__help { - @extend .help; -} - -.form-field__help + .checkbox, -.form-field__help + .radio { - margin-top: var(--spacing-l); -} - -.form-field__conjuction { - padding-top: 1rem; -} - -.form-field__two-column { - @media (min-width: $breakpoint-small) { - column-count: 2; - } -} - -.form-field__quick-action { - float: right; - font-size: var(--font-xsmall); - margin-top: 2.5%; -} - -.form-field__textarea-info { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - margin-top: var(--spacing-xxs); - margin-bottom: var(--spacing-s); -} - -.form-field__quick-emojis { - > *:not(:last-child) { - margin-right: var(--spacing-s); - } -} - -fieldset-section { - .form-field__internal-option { - margin-top: var(--spacing-s); - margin-left: 2.2rem; - - &:first-of-type { - margin-top: var(--spacing-s); // Extra specificity needed here since _section.scss is applied after this file - } - } - - .select--slim { - margin-bottom: var(--spacing-xxs); - - @media (min-width: $breakpoint-small) { - max-width: none; - } - - select { - max-height: 1.5rem !important; - padding: 0 var(--spacing-xs); - padding-right: var(--spacing-l); - } - } -} - -#automatic_dark_mode_range_start, -#automatic_dark_mode_range_end { - min-width: 6em; -} - -.date-picker-input { - font-weight: bold; - - .react-datetime-picker__wrapper { - border: 0; - } -} - -.form-field-date-picker { - margin-bottom: var(--spacing-l); - - label { - display: block; - } - - .controls { - display: flex; - - .date-picker-input, - .button--link { - margin-right: var(--spacing-m); - } - } - - .react-datetime-picker__button { - svg { - stroke: var(--color-text); - } - } - - .react-datetime-picker__button:enabled:hover .react-datetime-picker__button__icon, - .react-datetime-picker__button:enabled:focus .react-datetime-picker__button__icon { - stroke: var(--color-primary); - } - - .react-date-picker__calendar { - z-index: 1000; - } - - .react-calendar { - width: 350px; - max-width: 100%; - background: var(--color-card-background); - border: 1px solid #a0a096; - font-family: inherit; - line-height: 1; - } - - .react-calendar--doubleView { - width: 700px; - } - - .react-calendar--doubleView .react-calendar__viewContainer { - display: flex; - margin: -0.5em; - } - - .react-calendar--doubleView .react-calendar__viewContainer > * { - width: 50%; - margin: 0.5em; - } - - .react-calendar, - .react-calendar *, - .react-calendar *:before, - .react-calendar *:after { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 2px 1px; - } - - .react-calendar button { - margin: 0; - border: 0; - outline: none; - } - - .react-calendar button:enabled:hover { - cursor: pointer; - } - - .react-calendar__navigation { - height: 44px; - margin-bottom: 1em; - color: var(--color-text); - } - - .react-calendar__navigation__label { - color: var(--color-text); - } - - .react-calendar__navigation button { - min-width: 44px; - background: none; - color: var(--color-text); - } - - .react-calendar__navigation button:enabled:hover, - .react-calendar__navigation button:enabled:focus { - background: var(--color-button-alt-bg-hover); - } - - .react-calendar__navigation button[disabled] { - color: var(--color-text); - } - - .react-calendar__month-view__weekdays { - text-align: center; - text-transform: uppercase; - font-weight: bold; - font-size: 0.75em; - color: var(--color-text-alt); - } - - .react-calendar__month-view__weekdays__weekday { - padding: 0.5em; - } - - .react-calendar__month-view__weekNumbers { - font-weight: bold; - } - - .react-calendar__month-view__weekNumbers .react-calendar__tile { - display: flex; - align-items: center; - justify-content: center; - font-size: 0.75em; - padding: calc(0.75em / 0.75) calc(0.5em / 0.75); - } - - .react-calendar__month-view__days__day, - .react-calendar__month-view__days__day--weekend { - color: var(--color-text); - font-weight: normal; - } - - .react-calendar__month-view__days__day--neighboringMonth { - color: var(--color-gray-5); - } - - .react-calendar__year-view .react-calendar__tile, - .react-calendar__decade-view .react-calendar__tile, - .react-calendar__century-view .react-calendar__tile { - padding: 2em 0.5em; - } - - .react-calendar__tile { - max-width: 100%; - text-align: center; - padding: 0.75em 0.5em; - background: none; - border-radius: var(--border-radius); - color: var(--color-text); - } - - .react-calendar__tile:enabled:hover, - .react-calendar__tile:enabled:focus { - background: var(--color-button-alt-bg-hover); - } - - .react-calendar__tile--now { - background: var(--color-button-secondary-bg); - } - - .react-calendar__tile--now:enabled:hover, - .react-calendar__tile--now:enabled:focus { - background: var(--color-button-secondary-bg-hover); - } - - .react-calendar__tile--hasActive { - color: var(--color-button-primary-text); - background: var(--color-button-primary-bg); - } - - .react-calendar__tile--hasActive:enabled:hover, - .react-calendar__tile--hasActive:enabled:focus { - background: var(--color-button-primary-bg-hover); - } - - .react-calendar__tile--active { - color: var(--color-button-primary-text); - background: var(--color-button-primary-bg); - } - - .react-calendar__tile--active:enabled:hover, - .react-calendar__tile--active:enabled:focus { - background: var(--color-button-primary-bg-hover); - } - - .react-calendar--selectRange .react-calendar__tile--hover { - background-color: #e6e6e6; - } - - .react-datetime-picker__inputGroup__amPm { - background: var(--color-input-bg); - } - - .react-datetime-picker__inputGroup__leadingZero { - // Not perfect, but good enough for our standard zoom levels. - margin-bottom: 1px; - } - - .react-datetime-picker__inputGroup__input--hasLeadingZero { - margin-left: -0.54em; - padding-left: calc(1px + 0.54em); - } - - .react-calendar__month-view__days__day--neighboringMonth { - color: var(--color-gray-5); - } -} - -.form-field-calendar { - border-radius: var(--border-radius); - border: 1px solid var(--color-border); - margin-left: calc(var(--spacing-xs) * -1); - margin-bottom: var(--spacing-xs); - animation: menu-animate-in var(--animation-duration) var(--animation-style); - box-shadow: 3px 3px rgba(0, 0, 0, 0.1); -} diff --git a/web/scss/themes/odysee/dark.scss b/web/scss/themes/odysee/dark.scss deleted file mode 100644 index ae5d31e53..000000000 --- a/web/scss/themes/odysee/dark.scss +++ /dev/null @@ -1,137 +0,0 @@ -[theme='dark'] { - // Color overrides - --color-primary: #e50054; - --color-primary-alt: #66001880; - --color-fire: #ff6635; - --color-fire-outside: #ff9b20; - - // Structure - --color-background: #140e1b; - --color-background-overlay: #0c0d0e95; - --color-border: #30243d; - --color-card-background: #181021; - --color-card-background-highlighted: #241c30; - - // Text - --color-text: var(--color-gray-1); - --color-text-subtitle: var(--color-gray-4); - --color-text-empty: var(--color-text-subtitle); - --color-text-help: #bbbbbb; - --color-text-warning: #212529; - --color-text-warning--background: var(--lbry-yellow-1); - --color-text-error: var(--color-danger); - --color-error: var(--color-danger-alt); - --color-blockquote: var(--color-gray-5); - --color-blockquote-bg: var(--color-card-background-highlighted); - --color-help-warning-text: var(--color-white-alt); - --color-help-warning-bg: #fbbf2450; - - // Header - --color-header-button: #38274c; - --color-header-background: #231830; - - // Button - --color-button-primary-text: white; - --color-button-primary-hover-text: var(--color-primary-alt); - --color-button-secondary-bg: #2c1543; - --color-button-secondary-border: #4f1c82; - --color-button-secondary-bg-hover: #3b1c5b; - --color-button-secondary-text: #efefef; - --color-button-alt-bg: var(--color-header-button); - --color-button-alt-bg-hover: #2b2037; - --color-button-toggle-text: var(--color-text); - --color-button-toggle-bg: var(--color-primary-alt); - --color-button-toggle-bg-hover: var(--color-primary-alt); - --color-button-alt-text: #e2e9f0; - --color-button-border: #5b4475; - --color-link: var(--color-primary); - --color-link-hover: #d75673; - --color-link-active: #ec1d4c; - --color-link-focus-bg: #3d2d4e; - - // Input - --color-input: #f4f4f5; - --color-input-label: #a7a7a7; - --color-input-placeholder: #f4f4f5; - --color-input-bg: var(--color-header-button); - --color-input-bg-copyable: #4c3861; - --color-input-border: var(--color-border); - --color-input-border-active: var(--color-secondary); - --color-input-toggle: var(--color-primary-alt-3); - --color-input-toggle-bg: var(--color-input-bg); - --color-input-toggle-bg-hover: var(--color-secondary); - --color-input-bg-selected: var(--color-primary-alt); - --color-input-prefix-bg: var(--color-input-bg-copyable); - --color-input-prefix-border: var(--color-gray-4); - --select-toggle-background: url("data:image/svg+xml,%3Csvg viewBox='0 0 96 96' xmlns='http://www.w3.org/2000/svg' fill='%23ffffff'%3E%3Cpath d='M17.172, 31.172c1.562, -1.562 4.095, -1.562 5.656, 0l25.172, 25.171l25.172, -25.171c1.562, -1.562 4.095, -1.562 5.656, 0c1.562, 1.562 1.562, 4.095 0, 5.656l-28, 28c-1.562, 1.562 -4.095, 1.562 -5.656, 0l-28, -28c-0.781, -0.781 -1.172, -1.805 -1.172, -2.828c0, -1.023 0.391, -2.047 1.172, -2.828Z'/%3E%3C/svg%3E%0A"); - - // Navigation - --color-navigation-icon: #76808a; - --color-navigation-link: #b9c3ce; - --color-navigation-active: #2b2037; - --color-navigation-active-text: #c6bcd2; - --color-navigation-hover: #21182a; - --color-navigation-hover-text: #c6bcd2; - - // Tags - --color-tag: #ff85b1; - --color-tag-bg: var(--color-navigation-hover); - --color-tag-hover: var(--color-white); - --color-tag-bg-hover: var(--color-primary-alt-2); - --color-tag-mature-bg: var(--color-primary-alt-2); - - // Menu - --color-menu-background: var(--color-header-background); - --color-menu-background--active: var(--color-primary-alt); - --color-menu-icon: #928b9b; - --color-menu-icon-active: #d6d6d6; - - // Comments - --color-comment-menu: #6a6a6a; - --color-comment-menu-hovering: #e0e0e0; - --color-comment-highlighted: #484734; - --color-comment-threadline: #24192f; - --color-comment-threadline-hover: var(--color-gray-4); - - // Other - --color-tab-text: var(--color-white); - --color-tabs-background: var(--color-card-background); - --color-tab-divider: var(--color-white); - --color-modal-background: var(--color-card-background); - --color-notice: #58563b; - --color-purchased: #ffd580; - --color-purchased-alt: var(--color-purchased); - --color-purchased-text: black; - --color-thumbnail-background: var(--color-gray-5); - --color-tooltip-bg: #2f3337; - --color-focus: #e91e6329; - --color-placeholder-background: #261a35; - --color-spinner-light: white; - --color-spinner-dark: #212529; - --color-login-graphic-background: var(--color-background); - - // Editor - --color-editor-cursor: var(--color-text); - --color-editor-quote: #d3d3d3; - --color-editor-tag: #efbe5d; - --color-editor-attr: #68ccf9; - --color-editor-string: #ff8b6b; - --color-editor-inline-code-fg: #ce9178; - --color-editor-inline-code-fg-preview: #e8b692; - --color-editor-inline-code-bg: rgba(20, 68, 102, 0.3); - --color-editor-inline-code-bg-preview: #464b50; - --color-editor-selected: #264f78; - --color-editor-link: var(--color-link); - --color-editor-url: var(--color-editor-string); - --color-editor-hr: var(--color-editor-tag); - --color-editor-hr-preview: #a0a0a0; - - // Ads - --color-ads-background: #475057; - --color-ads-text: #111; - --color-ads-link: var(--color-primary-alt); - - // Scrollbar - --color-scrollbar-thumb-bg: rgba(255, 255, 255, 0.2); - --color-scrollbar-track-bg: transparent; -} diff --git a/web/scss/themes/odysee/init/_base-theme.scss b/web/scss/themes/odysee/init/_base-theme.scss deleted file mode 100644 index f03b4a055..000000000 --- a/web/scss/themes/odysee/init/_base-theme.scss +++ /dev/null @@ -1,200 +0,0 @@ -// -// Colors are taken from this color palette -// https://tailwindcss.com/docs/customizing-colors -// New colors should be also taken from the same color palette (if possible) -// -:root { - // Generic colors - --color-primary: #047857; - --color-primary-alt: #e4f4ef; - --color-primary-alt-2: #065f46; - --color-primary-alt-3: #10b981; - --color-secondary: #1e3a8a; - --color-secondary-alt: #dbeafe; - --color-secondary-alt-2: #bfdbfe; - --color-secondary-alt-3: #1e40af; - --color-tertiary: #5b21b6; - --color-tertiary-alt: #f5f3ff; - --color-danger: #991b1b; - --color-danger-alt: #fecaca; - --color-warning: #fff58c; - --color-black: #111; - --color-white: #fdfdfd; - --color-white-alt: #fafafa; - --color-gray-1: #f3f4f6; - --color-gray-2: #e5e7eb; - --color-gray-3: #d1d5db; - --color-gray-4: #9ca3af; - --color-gray-5: #71717a; - --color-gray-6: #52525b; - --color-gray-7: #3f3f46; - --color-gray-8: #27272a; - --color-gray-9: #1f1f22; - --color-gray-10: #18181b; - --color-amber: #f26522; - --color-orange: #fb923c; - - // Structure - --color-text: var(--color-black); - --color-text-inverse: #fdfdfd; - --color-background: #fafafa; - --color-background--splash: #212529; - --color-border: #ededed; - --color-background-overlay: #21252980; - --color-card-background: #ffffff; - --color-card-background-highlighted: #f1f7fe; - - // Text - --color-text-selection-bg: var(--color-secondary-alt); - --color-text-selection: var(--color-secondary); - --color-text-empty: #999999; - --color-text-help: #999999; - --color-text-subtitle: #767676; - --color-text-warning: #212529; - --color-help-warning-bg: #fef3c7; - --color-help-warning-text: #555555; - --color-text-warning--background: var(--lbry-yellow-1); - --color-blockquote: var(--color-gray-3); - --color-text-error: var(--color-danger); - --color-error: var(--color-danger-alt); - --color-tooltip-bg: #222; - --color-tooltip-text: #fafafa; - - // Header - --color-header-background: #ffffff; - --color-header-button: var(--color-button-alt-bg); - --color-header-button-active: var(--color-primary-alt); - --color-header-button-hover: var(--color-primary-alt); - - // Button - --color-button-primary-bg: var(--color-primary); - --color-button-primary-text: var(--color-primary-alt); - --color-button-primary-bg-hover: var(--color-primary-alt-2); - --color-button-primary-hover-text: var(--color-primary-alt); - --color-button-secondary-bg: var(--color-secondary-alt); - --color-button-secondary-border: var(--color-secondary-alt); - --color-button-secondary-text: var(--color-secondary); - --color-button-secondary-bg-hover: var(--color-secondary-alt-2); - --color-button-alt-bg: var(--color-gray-1); - --color-button-alt-text: var(--color-text); - --color-button-alt-bg-hover: var(--color-gray-2); - --color-button-toggle-text: var(--color-primary); - --color-button-toggle-bg: var(--color-primary-alt); - --color-button-border: var(--color-gray-3); - --color-link: var(--color-primary); - --color-link-hover: var(--color-black); - --color-link-focus-bg: var(--color-gray-1); - - // Input - --color-input-color: var(--color-black); - --color-input-label: var(--color-gray-5); - --color-input-placeholder: var(--color-gray-8); - --color-input-bg: var(--color-gray-1); - --color-input-border: var(--color-border); - --color-input-border-active: var(--color-secondary); - --color-input-toggle: var(--color-secondary); - --color-input-toggle-bg: var(--color-gray-1); - --color-input-toggle-bg-hover: var(--color-secondary-alt); - --color-input-prefix-bg: var(--color-gray-2); - --color-input-prefix-border: var(--color-gray-5); - --color-input-bg-selected: var(--color-primary-alt); - --select-toggle-background: url("data:image/svg+xml,%3Csvg viewBox='0 0 96 96' xmlns='http://www.w3.org/2000/svg' fill='%23212529'%3E%3Cpath d='M17.172, 31.172c1.562, -1.562 4.095, -1.562 5.656, 0l25.172, 25.171l25.172, -25.171c1.562, -1.562 4.095, -1.562 5.656, 0c1.562, 1.562 1.562, 4.095 0, 5.656l-28, 28c-1.562, 1.562 -4.095, 1.562 -5.656, 0l-28, -28c-0.781, -0.781 -1.172, -1.805 -1.172, -2.828c0, -1.023 0.391, -2.047 1.172, -2.828Z'/%3E%3C/svg%3E%0A"); - - // Navigation - --color-navigation-icon: var(--color-gray-5); - --color-navigation-link: var(--color-gray-5); - --color-navigation-active: var(--color-primary-alt); - --color-navigation-active-text: var(--color-primary); - --color-navigation-hover: var(--color-gray-1); - --color-navigation-hover-text: var(--color-primary); - - // Tags - --color-tag: var(--color-gray-5); - --color-tag-bg: var(--color-button-alt-bg); - --color-tag-hover: var(--color-primary-alt); - --color-tag-bg-hover: var(--color-button-primary-bg); - - // Tags (words) - --color-tag-words: var(--color-primary); - --color-tag-words-bg: var(--color-primary-alt); - --color-tag-words-hover: var(--color-primary); - --color-tag-words-bg-hover: var(--color-primary-alt-3); - - // Menu - --color-menu-background: var(--color-header-background); - --color-menu-background--active: var(--color-card-background-highlighted); - --color-menu-icon: var(--color-navigation-link); - --color-menu-icon-active: var(--color-navigation-link); - - // Comments - --color-comment-menu: var(--color-gray-3); - --color-comment-menu-hovering: var(--color-gray-6); - --color-comment-highlighted: #fff2d9; - --color-comment-threadline: var(--color-gray-1); - --color-comment-threadline-hover: var(--color-gray-4); - - // Icons - --color-follow-bg: #ffd4da; - --color-follow-icon: #e2495e; - --color-view-bg: var(--color-secondary-alt); - --color-view-icon: var(--color-secondary); - - // Snack - --color-snack-bg: var(--color-primary); - --color-snack: var(--color-white); - --color-snack-bg-error: var(--color-danger); - --color-snack-upgrade: var(--color-tertiary); - - // Superchat - --color-superchat-text: var(--color-black); - --color-superchat: var(--color-cost); - --color-superchat__light: #fcd34d50; - --color-superchat-2: #fde68a; - --color-superchat-3: #fef3c7; - --color-superchat-3__light: #fef3c750; - --color-superchat-4: #fffbeb; - - // Editor - --color-editor-cursor: var(--color-text); - --color-editor-quote: #707070; - --color-editor-tag: #ea9400; - --color-editor-attr: #04b0f4; - --color-editor-string: #ff7451; - --color-editor-inline-code-fg: var(--color-text); - --color-editor-inline-code-fg-preview: #2e3439; - --color-editor-inline-code-bg: rgba(157, 161, 165, 0.3); - --color-editor-inline-code-bg-preview: #d0e8ff; - --color-editor-selected: #add6ff; - --color-editor-link: var(--color-link); - --color-editor-url: var(--color-editor-string); - --color-editor-hr: var(--color-editor-tag); - --color-editor-hr-preview: #cccccc; - - // Other - --color-focus: #bfdbfe; - --color-notification: #cc190f; - --color-live: #cc190f; - --color-nag: var(--color-orange); - --color-cost: #fcd34d; - --color-notice: #fef3ca; - --color-purchased: var(--color-cost); - --color-purchased-alt: #ffebc2; - --color-purchased-text: var(--color-gray-5); - --color-thumbnail-background: var(--color-gray-1); - --color-spinner-light: var(--color-white); - --color-spinner-dark: var(--color-black); - --color-placeholder-background: var(--color-gray-1); - --color-file-viewer-background: var(--color-card-background); - --color-tabs-background: var(--color-card-background); - --color-tab-divider: var(--color-primary); - --color-modal-background: var(--color-card-background); - --color-login-graphic-background: var(--color-primary-alt); - - // Ads - --color-ads-background: #fae5ff; - --color-ads-link: var(--color-link); - - // Scrollbar - --color-scrollbar-thumb-bg: rgba(0, 0, 0, 0.2); - --color-scrollbar-track-bg: transparent; -} diff --git a/web/scss/themes/odysee/init/_color.scss b/web/scss/themes/odysee/init/_color.scss deleted file mode 100644 index 70573ea47..000000000 --- a/web/scss/themes/odysee/init/_color.scss +++ /dev/null @@ -1,57 +0,0 @@ -:root { - // Generic colors - --color-primary: #257761; - --color-primary-alt: #e4f4ef; - --color-primary-alt-2: #4b8576; - --color-secondary: #295284; - --color-secondary-alt: #d9eaff; - --color-tertiary: #552470; - --color-tertiary-alt: #f7e8ff; - --color-danger: #9b2023; - --color-danger-alt: #fccdce; - --color-warning: #fff58c; - --color-cost: #ffd580; - --color-focus: #93cff2; - --color-notification: #f02849; - --color-live: #cc190f; - - --color-black: #111; - --color-white: #fdfdfd; - --color-white-alt: #fafafa; - --color-gray-1: #eff1f4; - --color-gray-2: #d8dde1; - --color-gray-3: #ced4da; - --color-gray-4: #abb1b7; - --color-gray-5: #666a6d; - - // Text - --color-text: var(--color-black); - --color-text-subtitle: var(--color-gray-5); - --color-text-inverse: #fdfdfd; - - // Components - - // Button - --color-button-primary-bg: var(--color-primary); - --color-button-primary-text: var(--color-primary-alt); - --color-button-primary-bg-hover: var(--color-primary-alt-2); - --color-button-primary-hover-text: var(--color-primary-alt); - --color-button-secondary-bg: var(--color-secondary-alt); - --color-button-secondary-border: var(--color-secondary-alt); - --color-button-secondary-text: var(--color-secondary); - --color-button-secondary-bg-hover: #b9d0e9; - --color-button-alt-bg: var(--color-gray-1); - --color-button-alt-text: var(--color-text); - --color-button-alt-bg-hover: var(--color-gray-2); - --color-link: var(--color-primary); - --color-link-hover: var(--color-black); - - // Table - --color-table-highlight: var(--color-white-alt); - - // Tag - --color-tag: var(--color-gray-5); - --color-tag-bg: var(--color-button-alt-bg); - --color-tag-hover: var(--color-button-alt-text); - --color-tag-bg-hover: var(--color-button-alt-bg-hover); -} diff --git a/web/scss/themes/odysee/init/_gui.scss b/web/scss/themes/odysee/init/_gui.scss deleted file mode 100644 index 3b55c9ee0..000000000 --- a/web/scss/themes/odysee/init/_gui.scss +++ /dev/null @@ -1,521 +0,0 @@ -// Generic html styles used across the App -// component specific styling should go in the component scss file - -*::selection { - background-color: var(--color-text-selection-bg); - color: var(--color-text-selection); -} - -*:focus { - outline: none; -} - -html { - @include font-sans; - height: 100%; - min-height: 100%; - overflow-x: hidden; - - color: var(--color-text); - background-color: var(--color-background); - font-size: 16px; -} - -body { - font-size: 1em; - cursor: default; - line-height: 1.5; - font-weight: 400; - font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, - 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; -} - -hr { - height: 1px; - background-color: var(--color-gray-2); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: 1rem; -} - -p, -ol, -ul { - & + p, - & + ul, - & + ol { - margin-top: var(--spacing-s); - } -} - -ul, -ol { - li { - position: relative; - list-style-position: outside; - margin: var(--spacing-xs) 0; - margin-left: var(--spacing-s); - margin-bottom: 0; - - @media (min-width: $breakpoint-small) { - margin-left: var(--spacing-xl); - } - } -} - -.ul--no-style { - list-style: none; - margin-bottom: 0; - - li { - margin: 0; - } -} - -dl { - display: flex; - flex-direction: row; - flex-wrap: wrap; - overflow-x: visible; - margin-top: var(--spacing-m); -} - -dt { - flex-basis: 50%; - text-align: left; - font-weight: bold; -} - -.dt__text { - margin-right: var(--spacing-s); -} - -dd { - display: flex; - align-items: center; - justify-content: flex-end; - flex-basis: 45%; - flex-grow: 1; - margin: 0; - text-align: right; - - .help--warning { - margin-bottom: 0; - margin-top: var(--spacing-s); - text-align: left; - } -} - -.dd__text { - display: flex; - justify-content: flex-end; -} - -.dd__button { - margin-right: var(--spacing-s); -} - -dt, -dd { - padding: var(--spacing-m) var(--spacing-s); - border-top: 1px solid var(--color-border); - - &:last-of-type { - border-bottom: 1px solid var(--color-border); - } -} - -blockquote { - padding: 0 0.8rem; - margin-top: var(--spacing-xxs); - margin-bottom: var(--spacing-xxs); - opacity: 0.9; - border-left: 0.2rem solid var(--color-blockquote); - color: var(--color-text-subtitle); -} - -code { - @include font-mono; - font-size: 1.5rem; -} - -hr { - width: 100%; - height: 1px; - background-color: var(--color-border); -} - -img, -a { - -webkit-user-drag: none; -} - -img { - // Hide alt text when an image fails to load - text-indent: -9999px; -} - -textarea { - min-height: calc(var(--height-input) * 2); -} - -.columns { - display: flex; - justify-content: space-between; - align-items: flex-start; - - > * { - flex-grow: 1; - flex-basis: 0; - min-width: 15rem; - margin-bottom: var(--spacing-l); - - &:first-child { - flex-basis: 1px; - margin-right: 1.5rem; - } - } - - @media (max-width: $breakpoint-small) { - flex-direction: column; - - & > * { - margin: 0; - margin-bottom: var(--spacing-m); - width: 100%; - flex-basis: auto; - - &:first-child { - margin-right: 0; - } - } - } -} - -.hidden { - display: none; -} - -.disabled { - opacity: 0.3; - pointer-events: none; -} - -.column { - display: flex; - - .column__item:not(:first-child) { - padding-left: $spacing-width * 2/3; - flex: 1; - } - - .column__item--between { - justify-content: space-between; - } - - @media (max-width: $breakpoint-small) { - flex-direction: column; - .column__item:not(:first-child) { - padding-left: 0; - flex: 1; - } - & > * { - margin: 0; - margin-bottom: var(--spacing-m); - width: 100%; - flex-basis: auto; - - &:first-child { - margin-right: 0; - } - } - } -} - -.truncated-text { - display: -webkit-box; - overflow: hidden; - -webkit-box-orient: vertical; - word-break: break-word; -} - -.busy-indicator__loader { - min-width: 16px; - min-height: 8px; - margin: -1rem 0; - padding: 0 30px; - - background: url('../../static/img/busy.gif') no-repeat center center; - display: inline-block; - vertical-align: middle; - - &:first-child { - padding-left: 2px; - } - - &:last-child { - padding-right: 2px; - } -} - -.help { - display: block; - font-size: var(--font-xsmall); - color: var(--color-text-help); - margin-top: var(--spacing-s); - - &:not(:last-child) { - margin-bottom: var(--spacing-m); - } - - .button--link + .button--link { - margin-left: var(--spacing-s); - } - - @media (min-width: $breakpoint-small) { - font-size: var(--font-small); - } -} - -.help--warning { - @extend .help; - padding: var(--spacing-s); - border-radius: var(--border-radius); - background-color: var(--color-help-warning-bg); - color: var(--color-help-warning-text); - margin-bottom: var(--spacing-s); - border: 1px solid var(--color-border); -} - -.help--notice { - @extend .help--warning; - background-color: var(--color-card-background-highlighted); -} - -.help--inline { - @extend .help; - margin-top: 0; - margin-bottom: 0; - - &:not(:last-child) { - margin-bottom: 0; - } - - .icon--help { - top: 3px; - margin-left: 2px; - } -} - -.help--card-actions { - @extend .help; - margin-top: var(--spacing-m); -} - -.help--dt { - @extend .help; - display: inline-block; - margin-top: 0; -} - -.help--spendable { - margin-left: var(--spacing-xxs); -} - -.empty { - color: var(--color-text-empty); - font-style: italic; -} - -.empty--centered { - text-align: center; - padding: calc(var(--spacing-l) * 3) 0; -} - -.qr-code { - width: 134px; - height: 134px; - border: 3px solid white; - - &.qr-code--right-padding { - margin-right: $spacing-vertical * 2/3; - } - - &.qr-code--top-padding { - margin-top: $spacing-vertical * 2/3; - } -} - -.error__wrapper { - background-color: var(--color-error); - padding: var(--spacing-s); - border-radius: var(--border-radius); -} - -.error__wrapper--no-overflow { - @extend .error__wrapper; - max-height: 10rem; - overflow: hidden; -} - -.error__text { - color: var(--color-text-error); -} - -.help--error { - @extend .help; - color: var(--color-text-error); -} - -.thumbnail-preview { - width: var(--thumbnail-preview-width); - height: var(--thumbnail-preview-height); - background-color: var(--color-thumbnail-background); - padding: var(--spacing-s); - font-size: var(--font-small); - border-radius: var(--border-radius); - background-position: 50% 50%; - background-repeat: no-repeat; - background-size: cover; -} - -.thumbnail-picker__preview { - width: calc(var(--thumbnail-preview-width) * 1.5); - height: calc(var(--thumbnail-preview-height) * 1.5); - background-color: var(--color-thumbnail-background); - padding: var(--spacing-s); - font-size: var(--font-small); - border-radius: var(--border-radius); - background-position: 50% 50%; - background-repeat: no-repeat; - background-size: cover; -} - -.emoji { - font-size: 1.3em; -} - -.download-text { - font-size: var(--font-xsmall); -} - -.notice-message { - position: relative; - border-radius: var(--border-radius); - padding: var(--spacing-l); - background-color: var(--color-primary-alt); - - ~ .card { - margin-top: var(--spacing-m); - } -} - -.notice-message--loud { - @extend .notice-message; - background-color: #fef1f6; - color: var(--color-black); - font-weight: bold; - - .button { - color: #fa6165; - } -} - -.privacy-img { - height: 10rem; -} - -.confirm__label { - @extend label; -} - -.confirm__value { - display: flex; - align-items: center; - margin-bottom: var(--spacing-m); - font-size: var(--font-large); - - &:last-child { - margin-bottom: 0; - } -} - -.confirm__value--no-gap { - margin-bottom: 0; -} - -.confirm__value--subitem { - font-size: var(--font-xsmall); -} - -.mobile-only { - display: none; - - @media (max-width: $breakpoint-small) { - display: block; - } -} - -.mobile-hidden { - @media (max-width: $breakpoint-small) { - display: none !important; - } -} - -.ads-test { - height: 50vh; - position: relative; - - .video-js { - height: 50vh; - } - - .video-js .vjs-tech { - height: 50vh; - } -} - -.adspruce-bannerspot { - height: 5rem; - width: 100%; -} - -.release__notes { - max-height: 50vh; - overflow: auto; -} - -.signup__odysee-logo { - display: flex; - width: 100%; - align-items: center; - justify-content: center; - - img { - margin-top: var(--spacing-xl); - height: 4rem; - } -} - -.home__meme { - text-align: center; - font-weight: bold; - line-height: 1; - font-size: 1rem; - margin-bottom: var(--spacing-m); - - @media (min-width: $breakpoint-small) { - font-size: 1.2rem; - margin-bottom: var(--spacing-l); - } - - > .button { - white-space: initial; - } -} diff --git a/web/scss/themes/odysee/init/_mixins.scss b/web/scss/themes/odysee/init/_mixins.scss deleted file mode 100644 index 3d626e238..000000000 --- a/web/scss/themes/odysee/init/_mixins.scss +++ /dev/null @@ -1,237 +0,0 @@ -@mixin between { - display: flex; - justify-content: space-between; -} - -@mixin breakpoint-max($breakpoint) { - @media (max-width: #{$breakpoint}px) { - @content; - } -} - -@mixin breakpoint-min($breakpoint) { - @media (min-width: #{$breakpoint}px) { - @content; - } -} - -@mixin center { - align-items: center; - display: inline-flex; - justify-content: center; -} - -@mixin clearfix { - clear: both; - content: ''; - display: block; -} - -// (Smart) text truncation -// Pass in a width to customize how much text is allowed -// Omit value for basic text truncation -@mixin constrict($value: null) { - @if ($value) { - max-width: $value; - } - - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -@mixin create-grid($items-per-row: 4) { - grid-template: repeat(1, 1fr) / repeat($items-per-row, 1fr); -} - -// Smart font include -// Simply pass in the font-weight you want to use and the normal/italicized versions will be added -// No more weighing down the front-end with references to unused weights -@mixin font-face($font-weight, $relative-font-path, $font-name) { - @font-face { - font-family: $font-name; - font-style: normal; - font-weight: $font-weight; - // sass-lint:disable indentation - src: url('#{$relative-font-path}/#{$font-weight}.woff2') format('woff2'), - url('#{$relative-font-path}/#{$font-weight}.woff') format('woff'); - // sass-lint:enable indentation - } - - @font-face { - font-family: $font-name; - font-style: italic; - font-weight: $font-weight; - // sass-lint:disable indentation - src: url('#{$relative-font-path}/#{$font-weight}i.woff2') format('woff2'), - url('#{$relative-font-path}/#{$font-weight}i.woff') format('woff'); - // sass-lint:enable indentation - } -} - -@mixin font-mono { - font-family: 'Fira Code', 'Courier New', monospace; -} - -@mixin font-sans { - font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, - 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; -} - -@mixin font-serif { - font-family: Georgia, serif; -} - -@mixin hide-text { - border: none; - color: transparent; - font: 0 / 0 a; - text-shadow: none; -} - -// Cross-browser line-clamp support -@mixin line-clamp($element-height: 2rem, $row-count: 2, $fade-color: var(--lbry-white), $computed-position: relative) { - height: $element-height; - overflow: hidden; - position: $computed-position; - - &::after { - width: 50%; - height: calc(#{$element-height} / #{$row-count}); - right: 0; - bottom: 0; - - background-image: linear-gradient(to right, rgba($lbry-white, 0), #{$fade-color} 80%); - content: ''; - position: absolute; - } -} - -@mixin no-user-select { - user-select: none; - - -ms-user-select: none; - -moz-user-select: none; - -webkit-user-select: none; -} - -// Use CSS variables without upsetting Sass-Lint -// https://github.com/sasstools/sass-lint/issues/1161#issuecomment-390537190 -@mixin root-prop($prop: null, $value: null) { - @if ($prop and $value) { - #{$prop}: $value; - } -} - -@mixin selection($background-color: var(--lbry-white), $text-color: var(--lbry-black)) { - &::selection { - background-color: $background-color; - color: $text-color; - text-shadow: none; - } - - &::-moz-selection { - background-color: $background-color; - color: $text-color; - text-shadow: none; - } -} - -@mixin thumbnail { - &::before, - &::after { - content: ''; - } - - &::before { - float: left; - padding-top: var(--aspect-ratio-standard); - } - - &::after { - clear: both; - display: block; - } -} - -@mixin focus { - box-shadow: 0 0 0 3px var(--color-focus); -} - -@mixin linkFocus { - background-color: var(--color-link-focus-bg); - box-shadow: 0 0 0 5px var(--color-link-focus-bg); -} - -@mixin underline($text-color: var(--lbry-black), $whitespace-color: var(--lbry-white)) { - @include selection($text-color, $whitespace-color); - - background-image: linear-gradient($whitespace-color, $whitespace-color), - linear-gradient($whitespace-color, $whitespace-color), linear-gradient($text-color, $text-color); - background-position: 0 88%, 100% 88%, 0 88%; - background-repeat: no-repeat, no-repeat, repeat-x; - background-size: 0.05rem 1px, 0.05rem 1px, 1px 1px; - box-decoration-break: clone; - display: inline; - text-decoration: none; - text-shadow: 0.03rem 0 $whitespace-color, -0.03rem 0 $whitespace-color, 0 0.03rem $whitespace-color, - 0 -0.03rem $whitespace-color, 0.06rem 0 $whitespace-color, -0.06rem 0 $whitespace-color, 0.09rem 0 $whitespace-color, - -0.09rem 0 $whitespace-color, 0.12rem 0 $whitespace-color, -0.12rem 0 $whitespace-color, 0.15rem 0 $whitespace-color, - -0.15rem 0 $whitespace-color; - - @-moz-document url-prefix() { - // sass-lint:disable-line empty-args - background-position: 0 90%, 100% 90%, 0 90%; - } -} - -@mixin placeholder { - animation: pulse 2s infinite ease-in-out; - background-color: var(--color-placeholder-background); - border-radius: var(--card-radius); - border-width: 0; -} - -@mixin mediaThumbHoverZoom { - .media__thumb, - img { - transition: all 0.2s ease; - } - - &:hover { - .media__thumb, - img { - transform: scale(1.05); - } - } -} - -@mixin handleClaimTileGifThumbnail($width) { - .ff-canvas, - .freezeframe-img { - height: calc(#{$width} * (9 / 16)) !important; - width: $width; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } -} - -@mixin handleClaimListGifThumbnail($width) { - .ff-canvas, - .freezeframe-img { - height: calc(#{$width} * (9 / 16)) !important; - width: $width; - } -} - -@mixin handleChannelGif($size) { - height: $size; - width: $size; - - .ff-canvas, - .freezeframe-img { - border-radius: var(--border-radius); - height: $size !important; - width: $size !important; - } -} diff --git a/web/scss/themes/odysee/init/_reset.scss b/web/scss/themes/odysee/init/_reset.scss deleted file mode 100644 index aff7dd756..000000000 --- a/web/scss/themes/odysee/init/_reset.scss +++ /dev/null @@ -1,245 +0,0 @@ -html { - box-sizing: border-box; - text-rendering: optimizeLegibility; - - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; -} - -*, -*::before, -*::after { - margin: 0; - padding: 0; - - border: none; - box-sizing: inherit; - outline: 0; -} - -[disabled] { - pointer-events: none; - resize: none; -} - -[readonly] { - cursor: not-allowed; -} - -[for], -[role='button'], -[type='button'], -[type='checkbox'], -[type='file'], -[type='radio'], -[type='select'], -[type='submit'] { - cursor: pointer; -} - -a, -area, -button, -[role='button'], -input, -label, -select, -summary, -textarea { - // Remove touch delay on supported devices - touch-action: manipulation; -} - -button, -input, -select, -textarea { - background-color: transparent; - border-radius: 0; - font-family: inherit; - font-size: inherit; - font-weight: inherit; - - -moz-appearance: none; - -webkit-appearance: none; - - &:disabled { - cursor: default; - } -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: normal; - font-size: 1em; -} - -ol, -ul { - list-style-position: inside; - - > li { - list-style-position: inside; - } -} - -table { - border-spacing: 0; -} - -dd { - width: 80%; - float: left; -} - -dl { - width: 100%; - overflow-x: scroll; - overflow-y: hidden; -} - -dt { - width: 20%; - float: left; -} - -img { - width: auto; - max-width: 100%; - height: auto; - max-height: 100%; - vertical-align: middle; -} - -a { - text-decoration: none; -} - -button { - background-color: transparent; - line-height: inherit; - - &:not(:disabled) { - cursor: pointer; - } - - &:disabled { - opacity: 0.3; - } -} - -hr { - width: 100%; - height: 1px; - background-color: var(--color-gray-1); -} - -input { - background-color: transparent; - color: inherit; - - &::placeholder { - color: inherit; - opacity: 0.2; - } - - &::-webkit-search-cancel-button { - -webkit-appearance: none; - } -} - -select { - outline: none; -} - -textarea { - width: 100%; - min-height: var(--spacing-xxl); - padding: var(--spacing-s); - // border-color should be added in apps for blur/focus - border: 1px solid; - - &:not([disabled]) { - resize: vertical; - } -} - -@media print { - // sass-lint:disable-block no-important - // Intelligent print styles - pre, - blockquote { - border: 1px solid var(--color-gray-5) !important; - page-break-inside: avoid !important; - } - - tr, - img { - page-break-inside: avoid !important; - } - - img { - max-width: 100% !important; - } - - @page { - margin: 0.5cm !important; - } - - p, - h2, - h3 { - orphans: 3 !important; - widows: 3 !important; - } - - h2, - h3 { - page-break-after: avoid !important; - } - - thead { - display: table-header-group !important; - } - - // Faster, more stable printing - * { - background-color: transparent !important; - background-image: none !important; - color: var(--lbry-black) !important; - filter: none !important; - text-shadow: none !important; - } - - p { - a { - &[href]::after { - // Show hypertext data for links and abbreviations - content: ' (' attr(href) ')' !important; - } - - &[href^='javascript:'], - &[href^='#'] { - &::after { - content: '' !important; - } - } - } - - abbr { - &[title]::after { - content: ' (' attr(title) ')' !important; - } - } - - a, - abbr { - text-decoration: underline !important; - word-wrap: break-word !important; - } - } -} diff --git a/web/scss/themes/odysee/init/_vars.scss b/web/scss/themes/odysee/init/_vars.scss deleted file mode 100644 index 381da76f0..000000000 --- a/web/scss/themes/odysee/init/_vars.scss +++ /dev/null @@ -1,108 +0,0 @@ -// Both of these should probably die and become variables as well -$spacing-vertical: 2rem; -$spacing-width: 36px; - -$breakpoint-xxsmall: 450px; -$breakpoint-xsmall: 600px; -$breakpoint-small: 900px; -$breakpoint-medium: 1150px; -$breakpoint-large: 1600px; - -:root { - --border-radius: 10px; - --height-input: 2.5rem; - --height-button: 2.5rem; - --height-checkbox: 24px; - --height-radio: 24px; - --height-badge: 24px; - - // Spacing - --spacing-xxs: calc(2rem / 5); - --spacing-xs: calc(2rem / 4); - --spacing-s: calc(2rem / 3); - --spacing-m: calc(2rem / 2); - --spacing-l: 2rem; - --spacing-xl: 3rem; - - // Aspect ratio - --aspect-ratio-bluray: 41.6666666667%; // 12:5 - --aspect-ratio-panavision: 36.3636363636%; // 11:4 - --aspect-ratio-sd: 75%; // 4:3 - --aspect-ratio-standard: 56.25%; // 16:9 - - // Type - --font-mono: 'Fira Code'; - --font-sans: Inter; - --font-serif: Georgia; - --font-weight-base: 400; - --font-weight-light: 300; - --font-weight-bold: 700; - --font-base: 14px; - --font-body: 1rem; - --font-xxsmall: 0.65rem; - --font-xsmall: 0.7344rem; - --font-small: 0.8571rem; - --font-large: 1.3rem; - --font-title: 1.71rem; - --font-heading: 2.94rem; - - // Width & spacing - --page-max-width: 1280px; - --page-max-width--filepage: 1700px; - --mac-titlebar-height: 24px; - --mobile: 600px; - --side-nav-width: 230px; - --side-nav-width--micro: 125px; - - --spacing-main-padding: var(--spacing-xl); - --floating-viewer-width: 32rem; - --floating-viewer-height: 18rem; // 32 * 9/16 - --floating-viewer-info-height: 5rem; - --floating-viewer-container-height: calc(var(--floating-viewer-height) + var(--floating-viewer-info-height)); - --option-select-width: 8rem; - - // Text - --text-max-width: 660px; - --text-link-padding: 4px; - - // Tabs - --tab-indicator-size: 0.5rem; - - // Header - // This is tied to the floating player so it knows where to attach to - // ui/component/fileRenderFloating/view.jsx - --header-height: 80px; - - // Inline Player - --inline-player-max-height: calc(100vh - var(--header-height) - var(--spacing-l) * 2); - - // Card - --card-radius: var(--border-radius); - --card-max-width: 1000px; - --card-box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); - - // Modal - --modal-width: 550px; - - // Animation :) - --animation-duration: 0.2s; - --animation-style: ease-in-out; - - // Image - --thumbnail-preview-height: 100px; - --thumbnail-preview-width: 177px; - --cover-photo-height: 210px; - --channel-thumbnail-width: 10rem; - --channel-thumbnail-width--small: 4rem; - --file-list-thumbnail-width: 10rem; - - --tag-height: 1.5rem; - - --livestream-comments-width: 30rem; -} - -@media (max-width: $breakpoint-small) { - :root { - --font-body: 0.8rem; - } -} diff --git a/web/scss/themes/odysee/light.scss b/web/scss/themes/odysee/light.scss deleted file mode 100644 index fe75e4586..000000000 --- a/web/scss/themes/odysee/light.scss +++ /dev/null @@ -1,155 +0,0 @@ -:root { - // Color overrides - --color-primary: #fa6165; - --color-primary-alt: #fef1f6; - --color-primary-alt-2: #fb7e82; - --color-primary-alt-3: #fbcbdd; - --color-secondary: #f9902a; - --color-secondary-alt: #fee8d2; - --color-secondary-alt-2: #fefcf6; - - // Structure - --color-border: #ededed; - --color-background: #fafafa; - --color-background-overlay: #21252980; - --color-card-background: #ffffff; - --color-card-background-highlighted: #fff5f5; - - // Text - --color-text-selection-bg: var(--color-primary-alt); - --color-text-selection: var(--color-primary); - --color-text-error: var(--color-danger); - --color-text-empty: #999999; - --color-text-help: #999999; - --color-text-subtitle: #767676; - --color-text-warning: #212529; - --color-help-warning-bg: #fef3c7; - --color-text-warning--background: var(--lbry-yellow-1); - --color-blockquote: var(--color-gray-3); - --color-blockquote-bg: var(--color-gray-1); - --color-tooltip-bg: #222; - --color-tooltip-text: #fafafa; - - // Header - --color-header-button: var(--color-button-alt-bg); - --color-header-background: #ffffff; - - // Button - --color-button-alt-bg: var(--color-gray-1); - --color-button-alt-bg-hover: var(--color-gray-2); - --color-button-alt-text: black; - --color-button-primary-bg: var(--color-primary); - --color-button-primary-bg-hover: var(--color-primary-alt-2); - --color-button-primary-text: var(--color-primary-alt); - --color-button-primary-hover-text: var(--color-white); - --color-button-secondary-bg: var(--color-primary-alt); - --color-button-secondary-border: var(--color-primary-alt-3); - --color-button-secondary-text: var(--color-primary); - --color-button-secondary-bg-hover: var(--color-primary-alt-3); - --color-button-toggle-text: var(--color-primary); - --color-button-toggle-bg: var(--color-primary-alt); - --color-button-toggle-bg-hover: var(--color-primary-alt); - --color-button-border: var(--color-gray-3); - --color-link-active: var(--color-primary); - --color-link-focus-bg: #f1f1f1; - --color-link: var(--color-primary); - - // Input - --color-input-bg-selected: var(--color-primary-alt); - --color-input-color: #111111; - --color-input-label: var(--color-gray-5); - --color-input-placeholder: #212529; - --color-input-bg: var(--color-gray-1); - --color-input-border: var(--color-border); - --color-input-border-active: var(--color-secondary); - --color-input-toggle: var(--color-secondary); - --color-input-toggle-bg: var(--color-gray-1); - --color-input-toggle-bg-hover: var(--color-secondary-alt); - --color-input-prefix-bg: var(--color-gray-2); - --color-input-prefix-border: var(--color-gray-5); - --select-toggle-background: url("data:image/svg+xml,%3Csvg viewBox='0 0 96 96' xmlns='http://www.w3.org/2000/svg' fill='%23212529'%3E%3Cpath d='M17.172, 31.172c1.562, -1.562 4.095, -1.562 5.656, 0l25.172, 25.171l25.172, -25.171c1.562, -1.562 4.095, -1.562 5.656, 0c1.562, 1.562 1.562, 4.095 0, 5.656l-28, 28c-1.562, 1.562 -4.095, 1.562 -5.656, 0l-28, -28c-0.781, -0.781 -1.172, -1.805 -1.172, -2.828c0, -1.023 0.391, -2.047 1.172, -2.828Z'/%3E%3C/svg%3E%0A"); - - // Navigation - --color-navigation-icon: var(--color-gray-5); - --color-navigation-link: var(--color-gray-5); - --color-navigation-active: var(--color-primary-alt); - --color-navigation-active-text: var(--color-primary); - --color-navigation-hover: var(--color-gray-1); - --color-navigation-hover-text: #3f3f3f; - - // Tags - --color-tag: var(--color-primary-alt-2); - --color-tag-bg: #f9f6f7; - --color-tag-hover: var(--color-button-alt-text); - --color-tag-bg-hover: var(--color-button-alt-bg-hover); - - // Menu - --color-menu-background: var(--color-header-background); - --color-menu-icon: var(--color-navigation-link); - --color-menu-icon-active: var(--color-navigation-link); - --color-menu-background--selected: var(--color-secondary-alt); - --color-menu-background--active: var(--color-primary-alt); - - // Comments - --color-comment-menu: #e0e0e0; - --color-comment-menu-hovering: #6a6a6a; - --color-comment-highlighted: #fff2d9; - --color-comment-threadline: var(--color-gray-1); - --color-comment-threadline-hover: var(--color-gray-4); - - // Superchat - --color-superchat-text: var(--color-black); - --color-superchat: #fcd34d; - --color-superchat__light: #fcd34d50; - --color-superchat-2: #fde68a; - --color-superchat-3: #fef3c7; - --color-superchat-3__light: #fef3c750; - --color-superchat-4: #fffbeb; - - // Color - --color-focus: #8dbff0; - --color-nag: #fa8700; - --color-error: #fcafca; - --color-notice: #fef3ca; - --color-purchased: var(--color-cost); - --color-purchased-alt: #ffebc2; - --color-purchased-text: black; - --color-thumbnail-background: var(--color-gray-1); - --color-spinner-light: #ffffff; - --color-spinner-dark: #212529; - --color-placeholder-background: #f0f0f0; - --color-file-viewer-background: var(--color-card-background); - --color-tabs-background: var(--color-card-background); - --color-tab-divider: var(--color-primary); - --color-modal-background: var(--color-card-background); - - // Icons - --color-follow-bg: #ffd4da; - --color-follow-icon: #e2495e; - --color-view-bg: var(--color-secondary-alt); - --color-view-icon: var(--color-secondary); - - // Editor - --color-editor-cursor: var(--color-text); - --color-editor-quote: #707070; - --color-editor-tag: #ea9400; - --color-editor-attr: #04b0f4; - --color-editor-string: #ff7451; - --color-editor-inline-code-fg: var(--color-text); - --color-editor-inline-code-fg-preview: #2e3439; - --color-editor-inline-code-bg: rgba(157, 161, 165, 0.3); - --color-editor-inline-code-bg-preview: #d0e8ff; - --color-editor-selected: #add6ff; - --color-editor-link: var(--color-link); - --color-editor-url: var(--color-editor-string); - --color-editor-hr: var(--color-editor-tag); - --color-editor-hr-preview: #cccccc; - - // Ads - --color-ads-background: #fae5ff; - --color-ads-link: var(--color-link); - - // Scrollbar - --color-scrollbar-thumb-bg: rgba(0, 0, 0, 0.2); - --color-scrollbar-track-bg: transparent; -} diff --git a/web/setup/publish.js b/web/setup/publish.js deleted file mode 100644 index e5f880836..000000000 --- a/web/setup/publish.js +++ /dev/null @@ -1,104 +0,0 @@ -// @flow -/* - https://api.na-backend.odysee.com/api/v1/proxy currently expects publish to consist - of a multipart/form-data POST request with: - - 'file' binary - - 'json_payload' collection of publish params to be passed to the server's sdk. - */ -import { X_LBRY_AUTH_TOKEN } from '../../ui/constants/token'; -import { doUpdateUploadProgress } from 'lbryinc'; - -// A modified version of Lbry.apiCall that allows -// to perform calling methods at arbitrary urls -// and pass form file fields -export default function apiPublishCallViaWeb( - apiCall: (any, any, any, any) => any, - connectionString: string, - token: string, - method: string, - params: { file_path: string, preview: boolean, remote_url?: string }, // new param for remoteUrl - resolve: Function, - reject: Function -) { - const { file_path: filePath, preview, remote_url: remoteUrl } = params; - - if (!filePath && !remoteUrl) { - return apiCall(method, params, resolve, reject); - } - - const counter = new Date().getTime(); - let fileField = filePath; - - if (preview) { - // Send dummy file for the preview. The tx-fee calculation does not depend on it. - const dummyContent = 'x'; - fileField = new File([dummyContent], 'dummy.md', { type: 'text/markdown' }); - } - - // Putting a dummy value here, the server is going to process the POSTed file - // and set the file_path itself - - const body = new FormData(); - if (fileField) { - body.append('file', fileField); - params.file_path = '__POST_FILE__'; - delete params['remote_url']; - } else if (remoteUrl) { - body.append('remote_url', remoteUrl); - delete params['remote_url']; - } - - const jsonPayload = JSON.stringify({ - jsonrpc: '2.0', - method, - params, - id: counter, - }); - // no fileData? do the livestream remote publish - body.append('json_payload', jsonPayload); - - function makeRequest(connectionString, method, token, body, params) { - return new Promise((resolve, reject) => { - let xhr = new XMLHttpRequest(); - xhr.open(method, connectionString); - xhr.setRequestHeader(X_LBRY_AUTH_TOKEN, token); - xhr.responseType = 'json'; - xhr.upload.onprogress = (e) => { - let percentComplete = Math.ceil((e.loaded / e.total) * 100); - window.store.dispatch(doUpdateUploadProgress(percentComplete, params, xhr)); - }; - xhr.onload = () => { - window.store.dispatch(doUpdateUploadProgress(undefined, params)); - resolve(xhr); - }; - xhr.onerror = () => { - window.store.dispatch(doUpdateUploadProgress(undefined, params)); - reject(new Error(__('There was a problem with your upload. Please try again.'))); - }; - - xhr.onabort = () => { - window.store.dispatch(doUpdateUploadProgress(undefined, params)); - }; - xhr.send(body); - }); - } - - return makeRequest(connectionString, 'POST', token, body, params) - .then((xhr) => { - let error; - if (xhr && xhr.response) { - if (xhr.status >= 200 && xhr.status < 300 && !xhr.response.error) { - return resolve(xhr.response.result); - } else if (xhr.response.error) { - error = new Error(xhr.response.error.message); - } else { - error = new Error(__('Upload likely timed out. Try a smaller file while we work on this.')); - } - } - - if (error) { - return Promise.reject(error); - } - }) - .catch(reject); -} diff --git a/web/src/category-metadata.js b/web/src/category-metadata.js deleted file mode 100644 index f71e5c796..000000000 --- a/web/src/category-metadata.js +++ /dev/null @@ -1,71 +0,0 @@ -const PAGES = require('../../ui/constants/pages'); - -// Uncomment as you add metadata - -module.exports.CATEGORY_METADATA = { - [PAGES.BIG_HITS]: { - title: 'Big Hits', - description: 'Animation, pop culture, comedy, and all the other weird on Odysee', - image: '', - }, - [PAGES.COMMUNITY]: { - title: 'The Universe', - description: 'Podcasts, life, learning, and everything else on Odysee', - image: '', - }, - // [PAGES.ENLIGHTENMENT]: { - // title: '', - // description: '', - // image: '', - // }, - [PAGES.FINANCE]: { - title: 'Finance 2.0', - description: 'Crypto, Money, Economics, Markets on Odysee ', - image: 'https://spee.ch/category-finance:c.jpg?quality=80&height=1200&width=630', - }, - [PAGES.GAMING]: { - title: 'Gaming', - description: 'Pew pew bzzz gaming on Odysee', - image: 'https://spee.ch/category-gaming:5.jpg?quality=80&height=1200&width=630', - }, - [PAGES.GENERAL]: { - title: 'Cheese', - description: 'Cheese is the answer to life, the universe, and everything. We have primo cheese on Odysee', - image: 'https://spee.ch/category-primary1:5.jpg?quality=80&height=1200&width=630', - }, - [PAGES.LAB]: { - title: 'Lab', - description: 'Science - the real kind, on Odysee', - image: '', - }, - [PAGES.NEWS]: { - title: 'News & Politics', - description: `Stay up to date with all that's happening around the world on Odysee`, - image: '', - }, - [PAGES.MOVIES]: { - title: 'Movies', - description: `Do you love B rated movies? We've got you covered on Odysee`, - image: 'https://spee.ch/category-movies:2.jpg?quality=80&height=1200&width=630', - }, - [PAGES.MUSIC]: { - title: 'Music', - description: 'All the songs, reviews, covers, and how-tos you love on Odysee', - image: 'https://spee.ch/category-music:8.jpg?quality=80&height=1200&width=630', - }, - [PAGES.TECH]: { - title: 'Tech', - description: 'Hardware, software, startups, photography on Odysee', - image: '', - }, - [PAGES.TECHNOLOGY]: { - title: 'Tech', - description: 'Hardware, software, startups, photography on Odysee', - image: '', - }, - [PAGES.WILD_WEST]: { - title: 'Wild West', - description: 'Boosted by user credits, this is what the community promotes on Odysee', - image: 'https://spee.ch/category-wildwest:1.jpg?quality=80&height=1200&width=630', - }, -}; diff --git a/web/src/chainquery.js b/web/src/chainquery.js deleted file mode 100644 index bc2fd4a87..000000000 --- a/web/src/chainquery.js +++ /dev/null @@ -1,60 +0,0 @@ -const mysql = require('mysql'); - -const pool = mysql.createPool({ - connectionLimit: 100, - host: 'chainquery.lbry.com', - user: 'lbrytv', - password: process.env.CHAINQUERY_MYSQL_PASSWORD, - database: 'chainquery', -}); - -function queryPool(sql, params) { - return new Promise((resolve) => { - pool.query(sql, params, (error, rows) => { - if (error) { - console.log('error', error); // eslint-disable-line - resolve(); - return; - } - - resolve(rows); - }); - }); -} - -module.exports.getClaim = async function getClaim(claimName, claimId, channelName, channelClaimId) { - let params = [claimName]; - - let sql = - 'SELECT channel_claim.name as channel, claim.claim_id, claim.name, claim.description, claim.language, claim.thumbnail_url, claim.title, claim.source_media_type, claim.frame_width, claim.frame_height, claim.fee, claim.release_time, claim.duration, claim.audio_duration, ' + - 'repost_channel.name as repost_channel, reposted_claim.claim_id as reposted_claim_id, reposted_claim.name as reposted_name, reposted_claim.description as reposted_description, reposted_claim.language as reposted_language, reposted_claim.thumbnail_url as reposted_thumbnail_url, reposted_claim.title as reposted_title, reposted_claim.source_media_type as reposted_source_media_type, reposted_claim.frame_width as reposted_frame_width, reposted_claim.frame_height as reposted_frame_height, reposted_claim.fee as reposted_fee ' + - 'FROM claim ' + - 'LEFT JOIN claim channel_claim on claim.publisher_id = channel_claim.claim_id ' + - 'LEFT JOIN claim as reposted_claim on reposted_claim.claim_id = claim.claim_reference ' + - 'AND (reposted_claim.bid_state in ("controlling", "active", "accepted", "spent")) ' + - 'LEFT JOIN claim as repost_channel on repost_channel.claim_id = reposted_claim.publisher_id ' + - 'WHERE claim.name = ?'; - - if (claimId) { - sql += ' AND claim.claim_id LIKE ?'; - params.push(claimId + '%'); - sql += ' AND claim.bid_state in ("controlling", "active", "accepted", "spent")'; - } else { - sql += ' AND claim.bid_state in ("controlling", "active", "accepted")'; - } - - if (claimName[0] !== '@' && channelName) { - sql += ' AND channel_claim.name = ?'; - params.push('@' + channelName); - if (channelClaimId) { - sql += ' AND channel_claim.claim_id LIKE ?'; - params.push(channelClaimId + '%'); - } else { - sql += ' AND channel_claim.bid_state in ("controlling", "active", "accepted", "spent")'; - } - } - - sql += ' ORDER BY claim.bid_state DESC LIMIT 1'; - - return queryPool(sql, params); -}; diff --git a/web/src/getHomepageJSON.js b/web/src/getHomepageJSON.js deleted file mode 100644 index 345d39711..000000000 --- a/web/src/getHomepageJSON.js +++ /dev/null @@ -1,13 +0,0 @@ -const memo = {}; -// this didn't seem to help. -if (!memo.homepageData) { - try { - memo.homepageData = require('../../custom/homepages/v2'); - } catch (err) { - console.log('homepage data failed'); - } -} -const getHomepageJSON = () => { - return memo.homepageData || {}; -}; -module.exports = { getHomepageJSON }; diff --git a/web/src/html.js b/web/src/html.js deleted file mode 100644 index 3ff8c6cd8..000000000 --- a/web/src/html.js +++ /dev/null @@ -1,370 +0,0 @@ -const { - URL, - DOMAIN, - SITE_TITLE, - SITE_CANONICAL_URL, - OG_HOMEPAGE_TITLE, - OG_TITLE_SUFFIX, - OG_IMAGE_URL, - SITE_DESCRIPTION, - SITE_NAME, - FAVICON, - LBRY_WEB_API, -} = require('../../config.js'); - -const { lbryProxy: Lbry } = require('../lbry'); -const { generateEmbedUrl, generateStreamUrl, generateDirectUrl } = require('../../ui/util/web'); -const PAGES = require('../../ui/constants/pages'); -const { CATEGORY_METADATA } = require('./category-metadata'); -const { parseURI, normalizeURI } = require('./lbryURI'); -const fs = require('fs'); -const path = require('path'); -const moment = require('moment'); -const removeMd = require('remove-markdown'); -const { getJsBundleId } = require('../bundle-id.js'); -const jsBundleId = getJsBundleId(); -const SDK_API_PATH = `${LBRY_WEB_API}/api/v1`; -const PROXY_URL = `${SDK_API_PATH}/proxy`; -Lbry.setDaemonConnectionString(PROXY_URL); - -function insertToHead(fullHtml, htmlToInsert) { - const beginStr = ''; - const finalStr = ''; - - const beginIndex = fullHtml.indexOf(beginStr); - const finalIndex = fullHtml.indexOf(finalStr); - - if (beginIndex > -1 && finalIndex > -1 && finalIndex > beginIndex) { - return `${fullHtml.slice(0, beginIndex)}${ - htmlToInsert || buildOgMetadata() - }${fullHtml.slice(finalIndex + finalStr.length)}`; - } -} - -function truncateDescription(description, maxChars = 200) { - // Get list of single-codepoint strings - const chars = [...description]; - // Use slice array instead of substring to prevent breaking emojis - let truncated = chars.slice(0, maxChars).join(''); - // Format truncated string - return chars.length > maxChars ? truncated + '...' : truncated; -} - -function normalizeClaimUrl(url) { - return normalizeURI(url.replace(/:/g, '#')); -} - -function escapeHtmlProperty(property) { - return property - ? String(property) - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, ''') - : ''; -} - -function getCategoryMeta(path) { - const page = Object.keys(CATEGORY_METADATA).find((x) => path === `/$/${x}` || path === `/$/${x}/`); - return CATEGORY_METADATA[page]; -} - -// -// Normal metadata with option to override certain values -// -function buildOgMetadata(overrideOptions = {}) { - const { title, description, image, path } = overrideOptions; - const cleanDescription = removeMd(description || SITE_DESCRIPTION); - const head = - `${SITE_TITLE}\n` + - `\n` + - `\n` + - `\n` + - `\n` + - `\n` + - `\n` + - `\n` + - '\n' + - `\n` + - `\n` + - `\n` + - '\n' + - `` + - ``; - return head; -} - -function conditionallyAddPWA() { - let head = ''; - if (DOMAIN === 'odysee.com') { - head += ''; - head += ''; - head += ''; - } - return head; -} - -function addFavicon() { - let head = ''; - head += ``; - return head; -} - -function buildHead() { - const head = - '' + - addFavicon() + - conditionallyAddPWA() + - buildOgMetadata() + - ''; - return head; -} - -function buildBasicOgMetadata() { - const head = '' + addFavicon() + buildOgMetadata() + ''; - return head; -} - -// -// Metadata used for urls that need claim information -// Also has option to override defaults -// -function buildClaimOgMetadata(uri, claim, overrideOptions = {}) { - // Initial setup for claim based og metadata - const { claimName } = parseURI(uri); - const { meta, value, signing_channel } = claim; - const fee = value && value.fee && (Number(value.fee.amount) || 0); - const tags = value && value.tags; - const media = value && (value.video || value.audio || value.image); - const source = value && value.source; - const channel = signing_channel && signing_channel.name; - const thumbnail = value && value.thumbnail && value.thumbnail.url; - const mediaType = source && source.media_type; - const mediaDuration = media && media.duration; - const claimTitle = escapeHtmlProperty((value && value.title) || claimName); - const releaseTime = (value && value.release_time) || (meta && meta.creation_timestamp) || 0; - - const claimDescription = - value && value.description && value.description.length > 0 - ? escapeHtmlProperty(truncateDescription(value.description)) - : `View ${claimTitle} on ${SITE_NAME}`; - - const claimLanguage = - value && value.languages && value.languages.length > 0 ? escapeHtmlProperty(value.languages[0]) : 'en_US'; - - let imageThumbnail; - - if (fee <= 0 && mediaType && mediaType.startsWith('image/')) { - imageThumbnail = generateStreamUrl(claim.name, claim.claim_id); - } - - const claimThumbnail = escapeHtmlProperty(thumbnail) || imageThumbnail || OG_IMAGE_URL || `${URL}/public/v2-og.png`; - - // Allow for ovverriding default claim based og metadata - const title = overrideOptions.title || claimTitle; - const description = overrideOptions.description || claimDescription; - const cleanDescription = removeMd(description); - - let head = ''; - - head += `${addFavicon()}`; - head += ''; - head += `${title}`; - head += ``; - - if (tags && tags.length > 0) { - head += ``; - } - - head += ``; - head += ``; - head += ``; - head += ``; - head += ``; - head += ``; - head += ``; - head += ``; - // below should be canonical_url, but not provided by chainquery yet - head += ``; - head += ``; - head += ``; - head += ``; - - if (mediaType && (mediaType.startsWith('video/') || mediaType.startsWith('audio/'))) { - const videoUrl = generateEmbedUrl(claim.name, claim.claim_id); - head += ``; - head += ``; - head += ``; - if (channel) { - head += ``; - } - head += ``; - head += ``; - if (releaseTime) { - var release = new Date(releaseTime * 1000).toISOString(); - head += ``; - } - if (mediaDuration) { - head += ``; - } - if (media && media.width && media.height) { - head += ``; - head += ``; - head += ``; - head += ``; - } - } else { - head += ``; - } - - return head; -} - -function buildGoogleVideoMetadata(uri, claim) { - const { claimName } = parseURI(uri); - const { meta, value } = claim; - const media = value && value.video; - const source = value && value.source; - const thumbnail = value && value.thumbnail && value.thumbnail.url; - const mediaType = source && source.media_type; - const mediaDuration = media && media.duration; - const claimTitle = escapeHtmlProperty((value && value.title) || claimName); - const releaseTime = (value && value.release_time) || (meta && meta.creation_timestamp) || 0; - - const claimDescription = - value && value.description && value.description.length > 0 - ? escapeHtmlProperty(truncateDescription(value.description)) - : `View ${claimTitle} on ${SITE_NAME}`; - - if (!mediaType || !mediaType.startsWith('video/')) { - return ''; - } - - const claimThumbnail = escapeHtmlProperty(thumbnail) || OG_IMAGE_URL || `${URL}/public/v2-og.png`; - - // https://developers.google.com/search/docs/data-types/video - const googleVideoMetadata = { - // --- Must --- - '@context': 'https://schema.org', - '@type': 'VideoObject', - name: `${claimTitle}`, - description: `${removeMd(claimDescription)}`, - thumbnailUrl: `${claimThumbnail}`, - uploadDate: `${new Date(releaseTime * 1000).toISOString()}`, - // --- Recommended --- - duration: mediaDuration ? moment.duration(mediaDuration * 1000).toISOString() : undefined, - contentUrl: generateDirectUrl(claim.name, claim.claim_id), - embedUrl: generateEmbedUrl(claim.name, claim.claim_id), - }; - - if ( - !googleVideoMetadata.description.replace(/\s/g, '').length || - googleVideoMetadata.thumbnailUrl.startsWith('data:image') || - !googleVideoMetadata.thumbnailUrl.startsWith('http') - ) { - return ''; - } - - return ( - '\n' - ); -} - -async function resolveClaimOrRedirect(ctx, url, ignoreRedirect = false) { - let claim; - try { - const response = await Lbry.resolve({ urls: [url] }); - if (response && response[url] && !response[url].error) { - claim = response && response[url]; - const isRepost = claim.reposted_claim && claim.reposted_claim.name && claim.reposted_claim.claim_id; - if (isRepost && !ignoreRedirect) { - ctx.redirect(`/${claim.reposted_claim.name}:${claim.reposted_claim.claim_id}`); - return; - } - } - } catch {} - return claim; -} - -let html; -async function getHtml(ctx) { - if (!html) { - html = fs.readFileSync(path.join(__dirname, '/../dist/index.html'), 'utf8'); - } - - const requestPath = decodeURIComponent(ctx.path); - if (requestPath.length === 0) { - const ogMetadata = buildBasicOgMetadata(); - return insertToHead(html, ogMetadata); - } - - const invitePath = `/$/${PAGES.INVITE}/`; - const embedPath = `/$/${PAGES.EMBED}/`; - - if (requestPath.includes(invitePath)) { - try { - const inviteChannel = requestPath.slice(invitePath.length); - const inviteChannelUrl = normalizeClaimUrl(inviteChannel); - const claim = await resolveClaimOrRedirect(ctx, inviteChannelUrl); - const invitePageMetadata = buildClaimOgMetadata(inviteChannelUrl, claim, { - title: `Join ${claim.name} on ${SITE_NAME}`, - description: `Join ${claim.name} on ${SITE_NAME}, a content wonderland owned by everyone (and no one).`, - }); - - return insertToHead(html, invitePageMetadata); - } catch (e) { - // Something about the invite channel is messed up - // Enter generic invite metadata - const invitePageMetadata = buildOgMetadata({ - title: `Join a friend on ${SITE_NAME}`, - description: `Join a friend on ${SITE_NAME}, a content wonderland owned by everyone (and no one).`, - }); - return insertToHead(html, invitePageMetadata); - } - } - - if (requestPath.includes(embedPath)) { - const claimUri = normalizeClaimUrl(requestPath.replace(embedPath, '').replace('/', '#')); - const claim = await resolveClaimOrRedirect(ctx, claimUri, true); - - if (claim) { - const ogMetadata = buildClaimOgMetadata(claimUri, claim); - const googleVideoMetadata = buildGoogleVideoMetadata(claimUri, claim); - return insertToHead(html, ogMetadata.concat('\n', googleVideoMetadata)); - } - - return insertToHead(html); - } - - const categoryMeta = getCategoryMeta(requestPath); - if (categoryMeta) { - const categoryPageMetadata = buildOgMetadata({ - title: categoryMeta.title, - description: categoryMeta.description, - image: categoryMeta.image, - path: requestPath, - }); - return insertToHead(html, categoryPageMetadata); - } - - if (!requestPath.includes('$')) { - const claimUri = normalizeClaimUrl(requestPath.slice(1)); - const claim = await resolveClaimOrRedirect(ctx, claimUri); - - if (claim) { - const ogMetadata = buildClaimOgMetadata(claimUri, claim); - const googleVideoMetadata = buildGoogleVideoMetadata(claimUri, claim); - return insertToHead(html, ogMetadata.concat('\n', googleVideoMetadata)); - } - } - - const ogMetadataAndPWA = buildHead(); - return insertToHead(html, ogMetadataAndPWA); -} - -module.exports = { insertToHead, buildHead, getHtml }; diff --git a/web/src/lbryURI.js b/web/src/lbryURI.js deleted file mode 100644 index 80b26f2ce..000000000 --- a/web/src/lbryURI.js +++ /dev/null @@ -1,343 +0,0 @@ -// Disabled flow in this copy. This copy is for uncompiled web server ES5 require()s. - -const isProduction = process.env.NODE_ENV === 'production'; -const channelNameMinLength = 1; -const claimIdMaxLength = 40; - -// see https://spec.lbry.com/#urls -const regexInvalidURI = /[ =&#:$@%?;/\\"<>%{}|^~[\]`\u{0000}-\u{0008}\u{000b}-\u{000c}\u{000e}-\u{001F}\u{D800}-\u{DFFF}\u{FFFE}-\u{FFFF}]/u; -// const regexAddress = /^(b|r)(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/; -const regexPartProtocol = '^((?:lbry://)?)'; -const regexPartStreamOrChannelName = '([^:$#/]*)'; -const regexPartModifierSeparator = '([:$#]?)([^/]*)'; -const queryStringBreaker = '^([\\S]+)([?][\\S]*)'; -const separateQuerystring = new RegExp(queryStringBreaker); - -const MOD_SEQUENCE_SEPARATOR = '*'; -const MOD_CLAIM_ID_SEPARATOR_OLD = '#'; -const MOD_CLAIM_ID_SEPARATOR = ':'; -const MOD_BID_POSITION_SEPARATOR = '$'; - -/** - * Parses a LBRY name into its component parts. Throws errors with user-friendly - * messages for invalid names. - * - * Returns a dictionary with keys: - * - path (string) - * - isChannel (boolean) - * - streamName (string, if present) - * - streamClaimId (string, if present) - * - channelName (string, if present) - * - channelClaimId (string, if present) - * - primaryClaimSequence (int, if present) - * - secondaryClaimSequence (int, if present) - * - primaryBidPosition (int, if present) - * - secondaryBidPosition (int, if present) - */ - -function parseURI(url, requireProto = false) { - // Break into components. Empty sub-matches are converted to null - - const componentsRegex = new RegExp( - regexPartProtocol + // protocol - regexPartStreamOrChannelName + // stream or channel name (stops at the first separator or end) - regexPartModifierSeparator + // modifier separator, modifier (stops at the first path separator or end) - '(/?)' + // path separator, there should only be one (optional) slash to separate the stream and channel parts - regexPartStreamOrChannelName + - regexPartModifierSeparator - ); - // chop off the querystring first - let QSStrippedURL, qs; - const qsRegexResult = separateQuerystring.exec(url); - if (qsRegexResult) { - [QSStrippedURL, qs] = qsRegexResult.slice(1).map((match) => match || null); - } - - const cleanURL = QSStrippedURL || url; - const regexMatch = componentsRegex.exec(cleanURL) || []; - const [proto, ...rest] = regexMatch.slice(1).map((match) => match || null); - const path = rest.join(''); - const [ - streamNameOrChannelName, - primaryModSeparator, - primaryModValue, - pathSep, // eslint-disable-line no-unused-vars - possibleStreamName, - secondaryModSeparator, - secondaryModValue, - ] = rest; - const searchParams = new URLSearchParams(qs || ''); - const startTime = searchParams.get('t'); - - // Validate protocol - if (requireProto && !proto) { - throw new Error(__('LBRY URLs must include a protocol prefix (lbry://).')); - } - - // Validate and process name - if (!streamNameOrChannelName) { - throw new Error(__('URL does not include name.')); - } - - rest.forEach((urlPiece) => { - if (urlPiece && urlPiece.includes(' ')) { - throw new Error(__('URL can not include a space')); - } - }); - - const includesChannel = streamNameOrChannelName.startsWith('@'); - const isChannel = streamNameOrChannelName.startsWith('@') && !possibleStreamName; - const channelName = includesChannel && streamNameOrChannelName.slice(1); - - if (includesChannel) { - if (!channelName) { - throw new Error(__('No channel name after @.')); - } - - if (channelName.length < channelNameMinLength) { - throw new Error( - __(`Channel names must be at least %channelNameMinLength% characters.`, { - channelNameMinLength, - }) - ); - } - } - - // Validate and process modifier - const [primaryClaimId, primaryClaimSequence, primaryBidPosition] = parseURIModifier( - primaryModSeparator, - primaryModValue - ); - const [secondaryClaimId, secondaryClaimSequence, secondaryBidPosition] = parseURIModifier( - secondaryModSeparator, - secondaryModValue - ); - const streamName = includesChannel ? possibleStreamName : streamNameOrChannelName; - const streamClaimId = includesChannel ? secondaryClaimId : primaryClaimId; - const channelClaimId = includesChannel && primaryClaimId; - - return { - isChannel, - path, - ...(streamName ? { streamName } : {}), - ...(streamClaimId ? { streamClaimId } : {}), - ...(channelName ? { channelName } : {}), - ...(channelClaimId ? { channelClaimId } : {}), - ...(primaryClaimSequence ? { primaryClaimSequence: parseInt(primaryClaimSequence, 10) } : {}), - ...(secondaryClaimSequence ? { secondaryClaimSequence: parseInt(secondaryClaimSequence, 10) } : {}), - ...(primaryBidPosition ? { primaryBidPosition: parseInt(primaryBidPosition, 10) } : {}), - ...(secondaryBidPosition ? { secondaryBidPosition: parseInt(secondaryBidPosition, 10) } : {}), - ...(startTime ? { startTime: parseInt(startTime, 10) } : {}), - - // The values below should not be used for new uses of parseURI - // They will not work properly with canonical_urls - claimName: streamNameOrChannelName, - claimId: primaryClaimId, - ...(streamName ? { contentName: streamName } : {}), - ...(qs ? { queryString: qs } : {}), - }; -} - -function parseURIModifier(modSeperator, modValue) { - let claimId; - let claimSequence; - let bidPosition; - - if (modSeperator) { - if (!modValue) { - throw new Error(__(`No modifier provided after separator %modSeperator%.`, { modSeperator })); - } - - if (modSeperator === MOD_CLAIM_ID_SEPARATOR || MOD_CLAIM_ID_SEPARATOR_OLD) { - claimId = modValue; - } else if (modSeperator === MOD_SEQUENCE_SEPARATOR) { - claimSequence = modValue; - } else if (modSeperator === MOD_BID_POSITION_SEPARATOR) { - bidPosition = modValue; - } - } - - if (claimId && (claimId.length > claimIdMaxLength || !claimId.match(/^[0-9a-f]+$/))) { - throw new Error(__(`Invalid claim ID %claimId%.`, { claimId })); - } - - if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) { - throw new Error(__('Claim sequence must be a number.')); - } - - if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) { - throw new Error(__('Bid position must be a number.')); - } - - return [claimId, claimSequence, bidPosition]; -} - -/** - * Takes an object in the same format returned by parse() and builds a URI. - * - * The channelName key will accept names with or without the @ prefix. - */ -function buildURI(UrlObj, includeProto = true, protoDefault = 'lbry://') { - const { - streamName, - streamClaimId, - channelName, - channelClaimId, - primaryClaimSequence, - primaryBidPosition, - secondaryClaimSequence, - secondaryBidPosition, - startTime, - ...deprecatedParts - } = UrlObj; - const { claimId, claimName, contentName } = deprecatedParts; - - if (!isProduction) { - if (claimId) { - console.error(__("'claimId' should no longer be used. Use 'streamClaimId' or 'channelClaimId' instead")); - } - if (claimName) { - console.error(__("'claimName' should no longer be used. Use 'streamClaimName' or 'channelClaimName' instead")); - } - if (contentName) { - console.error(__("'contentName' should no longer be used. Use 'streamName' instead")); - } - } - - if (!claimName && !channelName && !streamName) { - console.error( - __("'claimName', 'channelName', and 'streamName' are all empty. One must be present to build a url.") - ); - } - - const formattedChannelName = channelName && (channelName.startsWith('@') ? channelName : `@${channelName}`); - const primaryClaimName = claimName || contentName || formattedChannelName || streamName; - const primaryClaimId = claimId || (formattedChannelName ? channelClaimId : streamClaimId); - const secondaryClaimName = (!claimName && contentName) || (formattedChannelName ? streamName : null); - const secondaryClaimId = secondaryClaimName && streamClaimId; - - return ( - (includeProto ? protoDefault : '') + - // primaryClaimName will always exist here because we throw above if there is no "name" value passed in - // $FlowFixMe - primaryClaimName + - (primaryClaimId ? `#${primaryClaimId}` : '') + - (primaryClaimSequence ? `:${primaryClaimSequence}` : '') + - (primaryBidPosition ? `${primaryBidPosition}` : '') + - (secondaryClaimName ? `/${secondaryClaimName}` : '') + - (secondaryClaimId ? `#${secondaryClaimId}` : '') + - (secondaryClaimSequence ? `:${secondaryClaimSequence}` : '') + - (secondaryBidPosition ? `${secondaryBidPosition}` : '') + - (startTime ? `?t=${startTime}` : '') - ); -} - -/* Takes a parseable LBRY URL and converts it to standard, canonical format */ -function normalizeURI(URL) { - const { - streamName, - streamClaimId, - channelName, - channelClaimId, - primaryClaimSequence, - primaryBidPosition, - secondaryClaimSequence, - secondaryBidPosition, - startTime, - } = parseURI(URL); - - return buildURI({ - streamName, - streamClaimId, - channelName, - channelClaimId, - primaryClaimSequence, - primaryBidPosition, - secondaryClaimSequence, - secondaryBidPosition, - startTime, - }); -} - -function isURIValid(URL) { - try { - parseURI(normalizeURI(URL)); - } catch (error) { - return false; - } - - return true; -} - -function isNameValid(claimName) { - return !regexInvalidURI.test(claimName); -} - -function isURIClaimable(URL) { - let parts; - try { - parts = parseURI(normalizeURI(URL)); - } catch (error) { - return false; - } - - return parts && parts.streamName && !parts.streamClaimId && !parts.isChannel; -} - -function convertToShareLink(URL) { - const { - streamName, - streamClaimId, - channelName, - channelClaimId, - primaryBidPosition, - primaryClaimSequence, - secondaryBidPosition, - secondaryClaimSequence, - } = parseURI(URL); - return buildURI( - { - streamName, - streamClaimId, - channelName, - channelClaimId, - primaryBidPosition, - primaryClaimSequence, - secondaryBidPosition, - secondaryClaimSequence, - }, - true, - 'https://open.lbry.com/' - ); -} - -function splitBySeparator(uri) { - const protocolLength = 7; - return uri.startsWith('lbry://') ? uri.slice(protocolLength).split(/[#:*]/) : uri.split(/#:\*\$/); -} - -function isURIEqual(uriA, uriB) { - const parseA = parseURI(normalizeURI(uriA)); - const parseB = parseURI(normalizeURI(uriB)); - if (parseA.isChannel) { - if (parseB.isChannel && parseA.channelClaimId === parseB.channelClaimId) { - return true; - } - } else if (parseA.streamClaimId === parseB.streamClaimId) { - return true; - } else { - return false; - } -} - -module.exports = { - parseURI, - buildURI, - normalizeURI, - isURIValid, - isURIEqual, - isNameValid, - isURIClaimable, - splitBySeparator, - convertToShareLink, -}; diff --git a/web/src/robots.js b/web/src/robots.js deleted file mode 100644 index c76140386..000000000 --- a/web/src/robots.js +++ /dev/null @@ -1,12 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -let robots; -async function getRobots(ctx) { - if (!robots) { - robots = fs.readFileSync(path.join(__dirname, '/../dist/public/robots.txt'), 'utf8'); - } - return robots; -} - -module.exports = { getRobots }; diff --git a/web/src/routes.js b/web/src/routes.js deleted file mode 100644 index 38f1ceb38..000000000 --- a/web/src/routes.js +++ /dev/null @@ -1,76 +0,0 @@ -const { getHtml } = require('./html'); -const { getRss } = require('./rss'); -const { getHomepageJSON } = require('./getHomepageJSON'); -const { generateStreamUrl } = require('../../ui/util/web'); -const fetch = require('node-fetch'); -const Router = require('@koa/router'); -const { CUSTOM_HOMEPAGE } = require('../../config.js'); - -// So any code from 'lbry-redux'/'lbryinc' that uses `fetch` can be run on the server -global.fetch = fetch; - -const router = new Router(); - -function getStreamUrl(ctx) { - const { claimName, claimId } = ctx.params; - - const streamUrl = generateStreamUrl(claimName, claimId); - return streamUrl; -} - -const rssMiddleware = async (ctx) => { - const rss = await getRss(ctx); - if (rss.startsWith(' { - if (!CUSTOM_HOMEPAGE) { - ctx.status = 404; - ctx.body = { - message: 'Not Found', - }; - } else { - let content; - try { - content = getHomepageJSON(); - ctx.set('Content-Type', 'application/json'); - ctx.body = { - status: 'success', - data: content, - }; - } catch (err) { - ctx.status = err.statusCode || err.status || 500; - ctx.body = { - message: err.message, - }; - } - } -}); - -router.get(`/$/download/:claimName/:claimId`, async (ctx) => { - const streamUrl = getStreamUrl(ctx); - const downloadUrl = `${streamUrl}?download=1`; - ctx.redirect(downloadUrl); -}); - -router.get(`/$/stream/:claimName/:claimId`, async (ctx) => { - const streamUrl = getStreamUrl(ctx); - ctx.redirect(streamUrl); -}); - -router.get(`/$/activate`, async (ctx) => { - ctx.redirect(`https://sso.odysee.com/auth/realms/Users/device`); -}); - -router.get(`/$/rss/:claimName/:claimId`, rssMiddleware); -router.get(`/$/rss/:claimName::claimId`, rssMiddleware); - -router.get('*', async (ctx) => { - const html = await getHtml(ctx); - ctx.body = html; -}); - -module.exports = router; diff --git a/web/src/rss.js b/web/src/rss.js deleted file mode 100644 index 0974000e3..000000000 --- a/web/src/rss.js +++ /dev/null @@ -1,298 +0,0 @@ -const { generateStreamUrl } = require('../../ui/util/web'); -const { URL, SITE_NAME, LBRY_WEB_API } = require('../../config.js'); -const { lbryProxy: Lbry } = require('../lbry'); -const Rss = require('rss'); -const Mime = require('mime-types'); - -const SDK_API_PATH = `${LBRY_WEB_API}/api/v1`; -const proxyURL = `${SDK_API_PATH}/proxy`; -Lbry.setDaemonConnectionString(proxyURL); - -const NUM_ENTRIES = 500; - -// **************************************************************************** -// Fetch claim info -// **************************************************************************** - -async function doClaimSearch(options) { - let results; - try { - results = await Lbry.claim_search(options); - } catch {} - return results ? results.items : undefined; -} - -async function getChannelClaim(name, claimId) { - let claim; - let error; - - try { - const url = `lbry://${name}#${claimId}`; - const response = await Lbry.resolve({ urls: [url] }); - if (response && response[url] && !response[url].error) { - claim = response && response[url]; - } - } catch {} - - if (!claim) { - error = 'The RSS URL is invalid or is not associated with any channel.'; - } - - return { claim, error }; -} - -async function getClaimsFromChannel(claimId, count) { - const options = { - channel_ids: [claimId], - page_size: count, - has_source: true, - claim_type: 'stream', - order_by: ['release_time'], - no_totals: true, - }; - - return await doClaimSearch(options); -} - -// **************************************************************************** -// Helpers -// **************************************************************************** - -function encodeWithSpecialCharEncode(string) { - // encodeURIComponent doesn't encode `'` and others - // which other services may not like - return encodeURIComponent(string).replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29'); -} - -const generateEnclosureForClaimContent = (claim) => { - const value = claim.value; - if (!value || !value.stream_type) { - return undefined; - } - const fileExt = value.source && value.source.media_type && '.' + Mime.extension(value.source.media_type); - - switch (value.stream_type) { - case 'video': - return { - url: generateStreamUrl(claim.name, claim.claim_id) + (fileExt || '.mp4'), - type: (value.source && value.source.media_type) || 'video/mp4', - size: (value.source && value.source.size) || 0, // Per spec, 0 is a valid fallback. - }; - - case 'audio': - return { - url: generateStreamUrl(claim.name, claim.claim_id) + ((fileExt === '.mpga' ? '.mp3' : fileExt) || '.mp3'), - type: (value.source && value.source.media_type) || 'audio/mpeg', - size: (value.source && value.source.size) || 0, // Per spec, 0 is a valid fallback. - }; - case 'image': - return { - url: generateStreamUrl(claim.name, claim.claim_id) + (fileExt || '.jpeg'), - type: (value.source && value.source.media_type) || 'image/jpeg', - size: (value.source && value.source.size) || 0, // Per spec, 0 is a valid fallback. - }; - case 'document': - case 'software': - return { - url: generateStreamUrl(claim.name, claim.claim_id), - type: (value.source && value.source.media_type) || undefined, - size: (value.source && value.source.size) || 0, // Per spec, 0 is a valid fallback. - }; - - default: - return undefined; - } -}; - -const getLanguageValue = (claim) => { - if (claim && claim.value && claim.value.languages && claim.value.languages.length > 0) { - return claim.value.languages[0]; - } - return 'en'; -}; - -const replaceLineFeeds = (str) => str.replace(/(?:\r\n|\r|\n)/g, '
'); - -const isEmailRoughlyValid = (email) => /^\S+@\S+$/.test(email); - -/** - * 'itunes:owner' is required by castfeedvalidator (w3c allows omission), and - * both name and email must be defined. The email must also be a "valid" one. - * - * Use a fallback email when the creator did not specify one. The email will not - * be shown to the user; it is just used for administrative purposes. - * - * @param claim - * @returns any - */ -const generateItunesOwnerElement = (claim) => { - let email = 'no-reply@odysee.com'; - let name = claim && (claim.value && claim.value.title ? claim.value.title : claim.name); - - if (claim && claim.value) { - if (isEmailRoughlyValid(claim.value.email)) { - email = claim.value.email; - } - } - - return { - 'itunes:owner': [{ 'itunes:name': name }, { 'itunes:email': email }], - }; -}; - -const generateItunesExplicitElement = (claim) => { - const tags = (claim && claim.value && claim.value.tags) || []; - return { 'itunes:explicit': tags.includes('mature') ? 'yes' : 'no' }; -}; - -const getItunesCategory = (claim) => { - const itunesCategories = [ - 'Arts', - 'Business', - 'Comedy', - 'Education', - 'Fiction', - 'Government', - 'History', - 'Health & Fitness', - 'Kids & Family', - 'Leisure', - 'Music', - 'News', - 'Religion & Spirituality', - 'Science', - 'Society & Culture', - 'Sports', - 'Technology', - 'True Crime', - 'TV & Film', - ]; - - const tags = (claim && claim.value && claim.value.tags) || []; - - for (let i = 0; i < itunesCategories.length; ++i) { - const itunesCategory = itunesCategories[i]; - if (tags.includes(itunesCategory.toLowerCase())) { - // "Note: Although you can specify more than one category and subcategory - // in your RSS feed, Apple Podcasts only recognizes the first category and - // subcategory." - // --> The only parse the first found tag. - return itunesCategory.replace('&', '&'); - } - } - - // itunes will not accept any other categories, and the element is required - // to pass castfeedvalidator. So, fallback to 'Leisure' (closes to "General") - // if the creator did not specify a tag. - return 'Leisure'; -}; - -const generateItunesDurationElement = (claim) => { - let duration; - if (claim && claim.value) { - if (claim.value.video) { - duration = claim.value.video.duration; - } else if (claim.value.audio) { - duration = claim.value.audio.duration; - } - } - - if (duration) { - return { 'itunes:duration': `${duration}` }; - } -}; - -const generateItunesImageElement = (claim) => { - const thumbnailUrl = (claim && claim.value && claim.value.thumbnail && claim.value.thumbnail.url) || ''; - if (thumbnailUrl) { - return { - 'itunes:image': { _attr: { href: thumbnailUrl } }, - }; - } -}; - -const getFormattedDescription = (claim) => { - return replaceLineFeeds((claim && claim.value && claim.value.description) || ''); -}; - -// **************************************************************************** -// Generate -// **************************************************************************** - -function generateFeed(feedLink, channelClaim, claimsInChannel) { - // --- Channel --- - let channelTitle = (channelClaim.value && channelClaim.value.title) || channelClaim.name; - const feed = new Rss({ - title: channelTitle + ' on ' + SITE_NAME, - description: getFormattedDescription(channelClaim), - feed_url: feedLink, - site_url: (channelClaim.value && channelClaim.value.website_url) || URL, - image_url: (channelClaim.value && channelClaim.value.thumbnail && channelClaim.value.thumbnail.url) || undefined, - language: getLanguageValue(channelClaim), - custom_namespaces: { itunes: 'http://www.itunes.com/dtds/podcast-1.0.dtd' }, - custom_elements: [ - { 'itunes:author': channelTitle }, - { - 'itunes:category': [ - { - _attr: { - text: getItunesCategory(channelClaim), - }, - }, - ], - }, - generateItunesImageElement(channelClaim), - generateItunesOwnerElement(channelClaim), - generateItunesExplicitElement(channelClaim), - ], - }); - - // --- Content --- - claimsInChannel.forEach((c) => { - const title = (c.value && c.value.title) || c.name; - const thumbnailUrl = (c.value && c.value.thumbnail && c.value.thumbnail.url) || ''; - const thumbnailHtml = thumbnailUrl - ? `

thumbnail

` - : ''; - const description = thumbnailHtml + getFormattedDescription(c); - - const url = `${URL}/${encodeWithSpecialCharEncode(c.name)}:${c.claim_id}`; - const date = c.release_time ? c.release_time * 1000 : c.meta && c.meta.creation_timestamp * 1000; - - feed.item({ - title: title, - description: description, - url: url, - guid: undefined, // defaults to 'url' - author: undefined, // defaults feed author property - date: new Date(date), - enclosure: generateEnclosureForClaimContent(c), - custom_elements: [ - { 'itunes:title': title }, - { 'itunes:author': channelTitle }, - generateItunesImageElement(c), - generateItunesDurationElement(c), - generateItunesExplicitElement(c), - ], - }); - }); - - return feed; -} - -async function getRss(ctx) { - if (!ctx.params.claimName || !ctx.params.claimId) { - return 'Invalid URL'; - } - - const { claim: channelClaim, error } = await getChannelClaim(ctx.params.claimName, ctx.params.claimId); - if (error) { - return error; - } - - const latestClaimsInChannel = await getClaimsFromChannel(channelClaim.claim_id, NUM_ENTRIES); - const feed = generateFeed(`${URL}${ctx.request.url}`, channelClaim, latestClaimsInChannel); - return feed.xml(); -} - -module.exports = { getRss }; diff --git a/web/src/xml.js b/web/src/xml.js deleted file mode 100644 index 9cd48fe44..000000000 --- a/web/src/xml.js +++ /dev/null @@ -1,18 +0,0 @@ -const { URL, SITE_TITLE, FAVICON } = require('../../config.js'); -const favicon = FAVICON || `${URL}/public/favicon.png`; -function getOpenSearchXml() { - return ( - `${SITE_TITLE}` + - `Search ${SITE_TITLE}` + - 'UTF-8' + - `${favicon}` + - `` + - `${URL}` - ); -} - -function insertVariableXml(fullXml, xmlToInsert) { - return fullXml.replace(/.*/s, xmlToInsert); -} - -module.exports = { getOpenSearchXml, insertVariableXml }; diff --git a/web/static/pwa/icon-180.png b/web/static/pwa/icon-180.png deleted file mode 100644 index ea2380843a712979efc88f5ca9f12a3de254c1ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12574 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 F{|A82Rfzxq diff --git a/web/static/pwa/icon-512.png b/web/static/pwa/icon-512.png deleted file mode 100644 index fde3b3d72b9c043c3e73c5839df1022fb5222d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61476 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≫kB-Z2DDv=Wz!06V!??hi~^e64Bdt` zto$UT)6eFVAmTUA>9j0Gf$Y<3lzD5!cwZJM{xo21%K8weBilCoSLP|`4qlqa{0G7Zg`FCA=)|mX z>$wL}!-ctAYOGG_wY&f?cQGFnZ+URj;b?-qNLk#QEad{y;|y{$ZJ9CZDmr)Cy~ck! zEmyK8ds4~L3i+r%+a~EEQNi-OoBMZHkF38l`OX`}y&Z5Av$9U$d@p?(X_CZyllj`w zuSvbG*?2?Vp;5NpT-a*m!tuA%wmnR_|GUl*;d(8CMBfx@F68E%JysJM4wIM+$*84; z6Xmu84-jMgI)5#JCf}c`L8+r>a5C4u9+I+zT#p@GkT)oCoj|gBrmn1L+sfsdbPwl= z*76%-J%h){TK8q6LlB#GkQ|8ET~vV@ukF2$<2!?b>8F0{-k*BYKSq8z@87C%99chS zs>|dqc_u$At;R(cB#ALSzG&42*$K@5%Su-R#~vgn*u^cfAKd?1o#n`QoYg3E<@1hn zdC97w-SIE-2@VP1yP-Pzv=~7G2(1tpy%c+$Q@1lq;6jci9EfF}UtC4Po5r^)Q&h`# z!s}f7;tvgnu-+v0x~?Xr0|gU5&6*_NT-t&zrenCSqt#_6_eubwc3oK*VFDpS(PrvT zs0tBLG<;$9v2_}UN0Vxvy{3nyn^kIW`0{Eu5*`D|FG#r1|8{gr4Kz$GN<3+zG-(5) zP8@`llF=s)_N+pD;q$c&P*Gkb)DKM_jr z*|%u={j;eYF`}5p&n6MjL!Z7r@6+hIxQb))w%rO49}vdYdD61!AzRsoH$`|+C$zf6 z1SS^H6eCX0U@LJ-O68*GDz>Nj>M7sO1L2mfoA*Q|R$sdX@ra+QP-(<4h##U3)Ge)EJeMg zX@Bqe8bhe}xh7biHezA@?-I|V`XvQ&-Fp{*N5y8#^RDG`l?Vz%Q;B6_`$_SiGkRTr z>9meMxFH3vAef*~xD?r0uB!g_-Z^d3hds#A4J4a+-M6#I0l7nrZ=P8PQla;t@Sl3s zRkjB5XalHD^HGX|@vAJ)jgTw=%frrHRq8^$oKzpFf|!f~l)9Q;s`m0z@>(<&oPUk6 zxO#|zu+x6>c7EUT%Nc5uD^=pm{95fw{+UjmYVnnsjpteazv8Ixa$5mdI1o9S(8VE6 zFXcP20(NN1rMva)hop?sp|m(G1ggY%o5bp!Vs z)X6MAehJ0}i0NCdh)mYYnE%gCrYPP0<=Gu)3Lnsj54TR1#Tt~(-3lWus4#e{dKd15 z%tPgZoRPNQe}uax5&=i_Z!PdkegL*1{^6tv!Qq}=$T#>RS1c*&mLpCZ;u=$uHo-1+ zfKXIF-}aq&Z-_C#Dw$c?4YEWygd!1Uij8*Ehvxt;HVfZ|G$*5)pmzK!{T2D#&f@H? zd!F6v(2l!%ZP96_{6_ZGJvUev638-ufBXt&dA>(#e*La)Qvt-ftmlja+W~U)lY}co zShK$H$7!XSsZ&f_u9LJVMz1*73UHE%@hg8&!}Opvc)`; z;$|=ori&eP4JhnyJjNDa<6O#%cYXJWf!+iv_~(E>SRUP?Dyn{A_qgML>h`U77j(&0 znQ^a(=rc`*(Z!^#0`0ng#DJfq9pzm{>SsjA`ls0P&0~$JzYoQgkw3&eBY(om=6&vt zn3(#qY@>WkdwS@G9>=Pd3ho=%o8Y-W$@y3$5!Gla)klOVAG$2bkSdu+is-%hAchJ@ z#9x`g-)EK}ZwXjWbN-#L$H{tU_7&>B4x^SQL$p$G5Vur7`x!n}DJXHG?oFV%8#uf^ zsgEYmH~uK&U#nWMl=7iyqg${dW)dGTlbZQA(!khd?32I04tq+bHl1>9Eo^nrN`gsz zAFnx9zI|sQbvmPR8@-sdr>H2g+-z>0;8q&sQ{}wHmrQDxX;h`I)&<|<)ZOuSdpbDh zFjYe$bx*f!B?BdI1|kt(Mj&qU10Y`v(b%9kV<4`0}oLpSR1~%(lyjF0mIH2LOpY! z1L2d1BS%=HFV-s|`3pH%NT%;Ytj|_mNBFwM-m+~}#pHP;;=nYOv|z-ubc-Ws=G}vz zd#o0BR6oU+_~#+0Vclo&<->=dKZs&{CG-Mu4HA4mofPRH;sf;u|8eoWo z@gU&;FD$6?eUi0|6?Z*%p>%kvDUmpRGvKTls=NP3_>a?*o}n8x5^vSxdplA|Jk2u( z2O!bCe63Eav(TIa#v1_U)Pa{x$Tu;K%cZ=4o{0X;J~YFa zgkmpPCtFA!23t|e-N-;SVSnu?WwePzEfrkJ3lvyr}}ZM#km1;O+fgvxFH-}J(k1Co2*T!;28TKq2(wk9s=z|gIoqQ{<5cRfJ=7Gy_3p=~5 z0L9iuy}1H}`V(*I@w?4=I|xu~({R=6 zIbU=iLm)IrbVTzkz_;UNDjjL=K)>H$ggJ9dv}OZ8>}p1_`u<0y^=a-Uox{h{t#rIIvp+bouwl;ZmwwDI^5t$XmB803H)X| zk-YbzqDwOF$Nj?&oqYR23| z)HV{n`NplINt2`Dn5yxMmp0vg@W9XiN~3rT)=QV;tT7%7+oIlfpN?%fZee}vvHhqE zU;pjGj%MG4z@-gRUcrE5R%(OJVS|t3+1nU2p+~xV`VcrVM|&=^T&1isQ9h=cb6%j% zYJ?p#69M^eEPEcC26CnZ>riPz9Gab%5w zQ=Fm@WjZrDQ>euL@SeAWC2nuzgZU>-bmhKboRVLjeCvq#^2Z3i?Wd6iNbw+5!b{&W z@?xi1Ch^lq4esGtnfT6u;tRK)h-Yu;loEdJPt#a-hFh%Pat`yAP%@T=}DcQ{dcEP>s0n zm3bLQw@Ck)Bimn=r(QgE-HFnzNGs*eE)R%CJ2B;$rr_?ff*C1@qb`w?E#9#|fz|!! z5Pzf)?RL&Z;ac~cY*^nkz2-=SpKaZn12{yDBKsyMBWxD*5~U8X1FbjlK|wIm{(M@o3xz00jmgdaEE92hd+xh_(mx$Gw!s1Fklyf zQn3cNg$MP@5UCqRC0vU}hyv)r*QIM1LeJ%Lh57fZ zAUU)tQ}hb?dsC#C+hjF1TbrMF{4%8OKr0AsnK<)&P?bf7-fM0A?)H1&1OcIKD{gK*x2auDOriBx%^dlX7acK zHWVG@-)|}V^!|fgFB__gVofXxhO=Jq8GqrGB$=j*m#aqtM}DS-O#vhesDpUl>VDHd z2~L#DN;E~aXhVwKnJJcB%M8r4 zv#=$bRjYc|v{qqkIkxQV6i(<{Srou(A&_RpDl*8Mz7WmOCv13@S)Dm^3go#H5B6Bf zzWSW=FEZoBflE!`2WdxCv`8UAo;zS_0DDL)29kgUPaH_z1Ner5{^qmznr*%JL>KJo9YDPqjm6};dKpwX-g zNPBlOV2D}WHy0#IY3_W$lqf6yEO*endDL*ZgtgD4^KAI0D-{LCOY65@Fi@mr9pJSO z5JqN%?r3xs5N@yw;RNvJM~40b7%J{QEavZv$9L) zlc`RS4pHPDL&%X{d>x*&ohCQR7>TyKAw`$xyMreM8Khy%8x1hDKP@J(3Yb<{>NxP5 z3hB|%jtkS%$_@*gYOF)UW%!!V5{Fwky8u`OQpLWn)y$v)@O2?ln~c_icDq=e$jv$e z3jU}Vk5PefVAvGry>vcMbX9$UW72AAA~y4F@`aTIfD87FdO&hnTNgWy>2(zv8&aJ6 zokPa!KnT?5eiwJ(oYAw3TX$^(d&T8}-8GpWreYs$eZLNEzPt53L_s4U#xF2N{y*}# zgg^wc05d~mK>QnVfjhCAx>cQ-7;L|(P;BMLhy&;8(#fzX7(!CIe1}StU3~9*iT~pp zXF~$DmO@3ui?CgVbEFi=h;>Lbq9P3@X(0mPTxkJ_ASAM9?D3gl?p~Wqb1rYE^DLjf zZ_CA7cDLWkTlConA`D+d@ku7pK22lwkAfhZc2maiu%Rds1<;^Hf@FwW+`!wg z$lXcPlpVyscB9FNy5SZ3-FzemS$da(VK7C9Pb&Eek9t^-_F1v!^1wg1OF-oy|NB+y zo2=XnT6|UMHme_Sm>A?t!xxg{1qF)IK9*+qgcfIic1Awm#x--KqQLZ<`bT`8FjuaH z+WG5l_^>d8tmL76^Ct_Io4>(W4g3K9wYoxTwmw`6b6UOQlgz_L@WE{pDI7zP=?;6T zv4=cZ|MQ3xy3#Drwqm^IJ6w(E&~Pk!bi;m3+9O}<&X<3mWWM~Aw3`_QF+_!L`U{}g z7h!w>15_+_u6KU(E-K6hs+xm10KSoi>Fh3BKn8CZFK=pz;!nD(q;Kz4$L$ARn&8d|l-fyQTDe;=jcSSwlA5AQ!l4;Ioj9 ztwn-T0P&vbH8@6#`pUFzQMnv91D9%hD7`I>T{u}?@SvmrZsqc_=f-L`JLxHBl9do! z5;6nuztLoC2-%Ey`kzH7nm3!QBLrAeYp9u+92-^s=mtyahR-iFqdc8#X7MQVCL-sN z22c#bC7%@L-1BAf-B~J>+Dj9W!Be5$QXcgip(2ou$5UkGes~7MsDjX*JC#hyTo*w+ zMP4*VmCsueJ~;@Rpfae-X%c-?TK6Bxm$~rY&^Bve#st~CD~&Mvx+*w^mUh6Tvds-e zd|+DH`|tCuFvltEv5*}qKx*d~!2|xc%XSx#q{$HJ><*5kV14uoQFfQzH0cQM3jq|e-5$2=H`BU!IWwlse1){pK$jY@`Oa#viv;1dq z`6DD`d4KA}1_5`N zoU%GK_;Ll4^T>C{97e z7XNNj@gx5q@Zog<72hZZ1GuoI;I5|sJ~JGh1731mzhoF=v)NndP~5;agnd)7GkK#^);PbmeqB!v0d1C44s*Cks~Sm0iI8j<2-QEK|~ zon&zw`LGdh<6+2N{ojKLtHpnV-Sd$kvXbqKiw)}*wp2qVXM9yqO_s-l_6Ij|R%cac z{Vs&aVOkAK8E}Ykx38=YstJj`9Mc{m2 zIms7A{U>Nh6MU!ZIHv$=<>oFtU`Q6-(~70g*4|-8nO)oqXTj@F`o%U^yG(ZS4X0a! zg*q!FQ6~Han(K9q%7tPXlHM=}5z^b)Wl^fa8^X9d^bLn%2!lNJeA5-nSm?@U_HSIa zBnbZQjmc^v!i7Dh`a+|6&CVPzvvjg(QtUZUYockwQ;7|1rWmPe}O$hSCy7^ZQ^DnXC5GI{H( z{YzNk6Eik05wstYpMexV{P1Av&T_IBM&Bnk_ zYg+LKIyTH(oc2P6R|5Dq3-|=B1f3}tb!7V^9JK-;iC=Yvz7n>B19fjawnJK3H%T2u zJ23b*5vLLP^2CAW2~tVswe@UeQxww12v47a6nH_g7bRE1xr6!~AWIp7c18?DUnF}f zB5TTKa0#@CGz{rWhIzEk)GL7MM^yOU3wt6Tx`epV<>>C5x@1U8FZHGS*}hzhG|+9B)Jrs3E@$(fuaM_>$u~HPenYq!E)splUyPPv z7^M(q1%~xS(N>v#x`9KXpg;G#R0wT-$67yL6bnl*;hp1fnP02jaEw&Fx^WcED_UDD zaDdpl?V5@5lSg0I-k}?jMXC|o1){fzutE~Nuf^%$mbv$%7GG!R@;?NiZa*u3kIW@7 zP1WvEq|M4^!I=QJ9ir_BHkIXetO6Vap}-^I5=4TUk;@nC{P183wZ&8ov%po$+qFdv z(>ymFcP+7=|7hU9YR+zk3mDGOJE#^~#06GU#XsiNOya7)P*8)7I`sz<0EP|odybO_g^9d7!I+gLENpczA`3ZG`o@9NR#?9UeSmtgRj^k4KUo^92QJLlO|Iu3S;cGSgDh&nW%axvvWLU{Rk6FO4d0*w zq5TgWk-_FJ`a>`YH=N}eDGE-NJw3*7sm;ba(U;{&2L`lJ3Z#Jlr&>XNzh9S#RX9xL z8WD;m-BKW&Oo~nk<~xtyyQCu8oNPcLx6 zXh0Oz_DYOaoxAB2$M^dhrJuX&Ud1^4{)0MxhagE(2s16vZXH?A)0*&d2gaI?(s0Jo z)+39L@nm3LI_vF&dzY}nC1YL4I|!O8aEpLd&kt-swI`*#F3Imw)K<|s3MkPzXTNdF8ZgZ}jO97=8jfJ8&i@>Z;U_Mbc*4idU5yU#^pZ*xNp zL1=>8&JZSfstr_45BvyiZ}5(sTSfVudN#93FxVSJ51L{$ttg+Be-ch;+3EW1z&Zvy zvR=D#ItLNkz6De+yvyIj>8f)oH1Ds`li&B?YrS0>?4Cb=&dqRMLeA7gbyR=P1Yjt^ z00wgn$R)#ZuR^TQlNCC}|AtQ8Mn3rFSGi(Y2SuO6KSttcGWO?oJ~6k4@hyG_lE%A@ zFyYwQlD}3<(!^I@IY8Xynnb&y&m*${3>$NUZ03UAPo=+Q28lci-~Wg3h^R=t3!4ZA zrK^)=aD46wY!OYm){K6~jtNWo=92!ONmT+BUYV)*8-+{BQBih@c255yqt&0J4-j%t zG5b1E#J@?3e;-6S%==uUY@;azOohIa_$5vd2922lIF$6-5%MHlk_)Id+w|e5t^7wF zb(vKb2cGmXaaL9difhh@VV5ye(lvlwvG7-0UOa`4uw~Cmsn!d*x&(mH-bjdCyoIV6 zeYG=WG7}}T7JugVIfIynejPn-^$n@*f^G|`3lBIYU7l~T8Nvi&SkFP@#DTKN?y}lq zQ&iBu{w;R`BaoXElF0Y-{aeI~h?;1^Yj@k{>4+|%xw<`^)3R@{tJvZAe%|;11kznK z6W8z zCb#GjPUQ5KDwNdekO63hxAx-?qVs-~*cU#IC$Sd@h&*GQ^l!3VaMvUxu`+u0kRlG>6@#4LwS77u}Wl4pDcVQtO>DKtHvU<{l;PO|$)* znL=L0bN`<8DVOUGd_j*D=x!$WKer729=v4333AEfo~m!PT(fR#tzt>lO!6AXOaqT70m?c{`$%>Aw`Vd5vsfeFSm@7@IwXa7%XaoLq(StNU!V;wY4 z`@1oKr*mlNS=sRCv-FZY zo;!Pp2=X9E5kUHX84%c%q?{{?G-ekK(>r4dN6cUI) zxyI59_w@K8X=E;S$4|1b&QnwA-QQaF8pUe0%&yeEyf}|1TWRl76z`*UCAb6!AU z1H*T%W@257Qn~;U|`hD7O@%V5JuIor#-|u^MsRoPxAX7ad0&1*i3iKX} ze~=%G!$d5^=WhT#O6;(Bb;qI1Uzb0nO*2G!$6jDm^I`ja+dg7%c11PzhJh+W_6ex5b z4d;=b1u~HD96*yk$VNMypVMmHdlNEN62Elv=AS7oUQh3fX%#CQkn~uGF0Pc)WvQ<~ z9^{hAbbl%fTLQtNSH8VPq6Vah8`#;UBi_qMR!6xvw^=KWZZYRoGtN6Trhnq|YGIo! zo4QeYp+g--95Aa!3uwMzR{Lo*)emMc|MG0T>A6D8>v=y8HFyWk64~o zvbAOp>9Xf~Bd;@<5-Z`Gb`t7RQ3_Ed|4+Idyu{L8@8zVh7suK6HNJn9iZU)=OHmX& zB&>aN7+I>&@>r5ZqFa@D|N5C+SqXx{4=;Jo4vw~@lBcBOC+Mo8);I~gx6+x^4Y7nD zDx9K!rD-p|PVFriyt-drLlS1++<(wv3ufMRQaN}vx?wcnh6v#Jypk8rD*8&^iT4-B zpJ1p$#j#n2()-X|xPF^AX}PdRiJx%M)H{p?Gn1HBWn7Y?Wa-5Ay9=A+sZnyGnK{=i zgH(whs1n^LZN|;0WHd~`*z)ZBYV^hOBYbJ-Zo}Fp?GmaJZm{k~ik_@46Z_9)el3p+ z6Pgh#KsW#+h=wuAZa0LDj^C~B+7|H)so=Oysn_O=jgxpove8yEm{^#@!@tCrN=i`_ zFTGfD5TmbCC0`R@R=4JF56)2&bP;h?-rNsUa?@G-)0|rg>XPl%Zf;W7E%7Rp{97LL z-rPi74dsw3`@lMmzUEZ3O4J9qmhSW^8IpwoYtnj1>ZdX9h}QB=jG*;eTRvfp=BF^Z z6*J*azYh?SSI<}{sv|@;6YTO(sc?0R{S=|}o+aw}Yw?vpwkjhq-xlNJDn} zOeoY`0^VS{^=?5W@+NF%_N_FRJ!6%e=+|$RQCbm~J&BbdR5<1GE8ojCuUY94*jo0> zyBXy5{V*k=sjc|rzkn)(_|Bp_CS700VV?QKROL%V-5u=MmFk2cqS9u$OV0mTahj2) zbgHXq3chC82Da-pWE5ytTwZDd_1slj=^x;HQ9d>Dj-rYH11jn(yEpwt-0~8xE*TjP z7po}R=_8AgOQBDn^A3IPJWUtqqc7*m(>^RbXN)i198AW}Mcbis#1L6ssm%GWDy^1J zqThisE%Wh%jyLMd!;Ty(U5jfGqNID9DT+-XA{b1Xv(M9U?f1Z^y@w!>IuS;FEKYBt zLj(Adf^-Sy+#xe9yYMaoQg8Yj`|tybp0V>bgP|x-ToBx1zrAOm_%+~SV;2P@+Hutj z1r0bJw<5{`+Y5w(EWOkK2vAip@L5c)e)uSK(uq!1xsNczKQglz55dQ*rD z4TeGynd8(8@rQvMXdl~m_bn`6*+N$nz6#al!)6=HZEV661ow9+rRgXp(Fe|XUuc`8 z#kRhoNUUhCQCj*6!`nUSB%EnR2Kn)a2XVzgYLG|4kk9W3R$Csk;85LBi?5X+J4?38 zLYr9e%KFE;y!QivnS+5NCt>>Ul-x7IkC#LdxfU(?#koV7eMdt+n?W0w_0in-!=r}B zFkpszn^#!WaRYQzvNhj|C70uW@-jJD&}hNg0!rmF8T@Wvn+spp^LG}D4UQ}ilpb~+ z6{J?p8$0|i$({Y=1QEdh#M@-v>CHfqC)j{g;8{U+$~DAH?NbqU2ri;j4r+9 zT!LM_qgm%!97IXLU{#gcTq6W|c4n3Npfvp3M=kf;%AR;7OJ5j14XHN#3&%#Eq)sd- z;JPeh`kwtRFd*Gu*ait!t}tWA(4P8IlW4yc=I9bcIHLol$6QB6-ljrY5;E86w^p1+ zh7$ihXb>k`6p&nkGi6|Fyxl&v9M%1YNk{{y4Iu*5U#|$BU+=B_;*H7;fmxe7*)`TX z@${|a?t%jLf!QQ75bj8d%xiC6q4AADr#)Zf;AD>`j(_C&Fqw^}y_}PWy6oeI!^&w4Fb0l?0n*^&1L;u!HBwuMA zobQ)BwC)UdVcEAGL#)ekqz0kMX;1^mQ1*qGRiAFfJ&k6^*bbN+avjw)SD1*Ye!92S za=)>Z zqC2;#teVn6YPG!jGX0G=cN_>LHR1*UGu0wwp1*1U1V{{6S_PVXK{{`SF_ONdgS_7P zg*NBqjr_Jmw^Ta)+}iSY1v)!fpUig_t1)w&1zMCQBk&j_h_d{O7reVlj;Cj`x{183 z?sUt(0TZZ}tWv8MeiOBp<{Rnti%GB=#OAVRjHBJ-O;qvg!=d|X#{|D;Sj zwR{cp;A{n|G|%E~Fb3v^qgJleu$XBFeMRX=tk2>xVUqa&HV7m&ydQ|hsny~VTB<2_ zr%utW5|7GGr$|o0q@r98XkpUA@0fU84x|0h5#Q@iDXMG)j>aFDtRYwr#->l z|6fGKhmU4+67X~#du>HQ#+4bC>o4~g9Aoj7CjI^~xa(-T=2%_k|3}q(Mm4oXUBjXG zCL$muV1cVhztSOq0%9R5B1#uTkRsBNlF*BQsHmuv02TzKiHJxE9g(hdg@hu6ngD@> zkn-(tpZ9y-cZ~bP;TYGmbI#stuQk`4a|Ke8Z9%d~6ajtq`ZFAwNU7cB9`r+WwU@8j z(SxxBOkTUti_`hauMWU=f7hjA(h@*d71;UoOziVB0IA<*ia@t%vsA-9lK&d(`Z2ApU+l&eBG9c*aZ`V##4+3(vcBPluu2dUkH#aCTRgMU8?te z$4Z``9AIN~D6-&;He|t3)zuV42*vQF&XHJk0Nwg4u)<*S?(cgDGy&JgQ-{b0)xRsQ z@dI1?`}~d&2L*2Hp5P|~MiVOZrV`znXhE=xIHRI&QnR-QtI4`7NUP9||8f8Tq2DI= zdA+~2D~zCvY&-(bx(QCneQ8prh`wZ`Ca4jC*lFJf#543HS@Mr{0>Qea+T3(L=ZdgS z)Ho-gxRmqJ{tlg9j$qaKm-5~aisqx|W{Yg=ZVYU9S zu|c*q6OjiE0*NlnXK#&^lLv5cSmP;rd5L=!ZV?6Mfn?4(kJjeo^>VQ+Fv(b=t(fdz z%oHEg89+i*7L7SP#aHPsauyZ=Z|GwFWE@Xy-Yy#%F5TN2jG1ee{BYRP&ns=2dPcZq6a({r21&G3+AiJA%^D8J*{m2Z~b z=Y&xk!65{*lO<{Kxb7GQV{FOVvOQ<%_V*z+*0`+a$I#r^eU*st+Qt0>+!G8yHL{c@ zfE-L)YWgbnBG^X|=Pu18%qb>SaYoy@{=kvt-Dtpzc2Q;b`+D$JcDf>?80eMu#ic|2 z2buHCfS5s=PzFF`JNM$ls*ewQn2?_rwMSgOROX>fZ7th?v-y~O*TDkr>b>JRiKCk5(C7kv!G=d^6@^l_f`=v;NRKdn(D389QsT)NY|A60Q-WSUad7-3=@h} z64w6xAF2(I6KgQS*MBhZ=7zSC6d#>$EY2Tiv5^OI5nW9K*crk%fR;-)$N6;v`oN!8 zKC8%&L=&L6y1aq6|~=8Ot$u1MgaT(*JBCSrJBB)9}`pe>gcc~~IzL%af z66!Z6zIOnfU7ifQLPUUGu+6y#a4uRwQ~G9G#(l+9aASeCpc&?3EXMAy4)@P24)Zs& zh9BR9+%`N?oD4VPF207V1*{VA8+EXmpyRL5>_NzCsXe6UtrI^WDI$=gyL!Im`RiYN zM&XQvD^o@Hp1hOfLdG}$^_VS2YB)jU(!dhAYcmO;$)p=H3nCnd0E83mhLV&~FU7bf zgwfe1vT;Ke$dvliqEIH-*aukHgJff-+%d1T47+%r*&vY2K}YWWznz*-ft)Wni{)`6KJBJc|h!2Erf$?F15|j20$f; zh=H*TZpxj4>Le2hKJZQTTAtb2D^qc7ixN-HWgw)DiPb`cxBwgKymKP%HQ{#)U~huy zy#U6}iG}@AT)QjAY};4ACD_{~;N2R8xeXuGhXK;;_G8H_+*8#8RC|#hzT5#G@qoYp zrUT{U*{OG)1QG`Hy*+ipcCaV+9~XqlJ^IGTIU}lk6z2hrMe@yJHg%C{ae1YNGagTX z0&ZU{g#S3>(X8!Vc}-K$@8$Jae{95tvk8brr#45~{He9_AIb*tM+g_l0Ee&UL7p<$ zwHWAtkydX_V_%(l#MEbu{DEVr6;D({@#08W#BgCf4?~ae+$sgL#_U`l+_zH;{RBe2 z=~t#EY#**Ci(2hHi+1YgMc*`Z@)@}lKR9JOTYN4`vIJyGL5#&@O(%%onfXa}1ba5~ zSdvEx+aM?BW3rm!8c%=gaR#$eVgeJJZmsGpAbH;pPkQaaZ){+WRG`W6ELw8%C z>HtHojziS9WiUr>0zpG)L~F*FvPy?QH^bn0`I0!H1#00dX zSw$9r1Kvy#f#fa#u>Dj2p*X;+ZlnJ&VxNHLz(>6{chE-zH}Xb4sAm^a5KUHn^M15X zd{8cI>`nt&ChhytFVg>4fJh`Lw4f5E?N}+#AbA%|F?P6|8J9srh{vOUlKI|^F7P#x zXE&a(MYPRUc-A`2)5c6-#RiX%$6bB+BB{Z;G5ccMbqDEnAhtbNI8}hn#$70T4WXw8 z%54sL&!Qi_w$pY##y_K|a-ji&y$l!QiU4R^U)ZXq1(QG$XJ~s{k)|_mLF&H}#ZN0b8P38jh?jJy^U>Qh6zu5oCAog-H3%?Nf?m@Q5&BULJG?sp-U`ut< zv{05H(BWs=*$ZuM(p4xsD;}w6)KtLCA|n=i$}6fCIO~AI;lHvb<-fvV-(GaEj-42A z7rqy8sW8!!%uqZt@4G#3>}BZoWFQZirpN36gZw|%`+;~s62UtJ^ydb)(ukAi#3ACd zsHpzO0>-H9>)vQdXrm!t&?TzanmJ#R95t(61UO>bs~^_{9GB$byc-p9$xJ9?YY?&hWw4I-W8H_6j}x@3+1Fre-yGS34=ysPwThTK5goRKDn5L zuxJJ?RuCBFr`Ncd0tGIt-|NV?i5p>VS2+i%nPk-u08sV#x?@5R`isTreHFmgMq^%K zJ({!PE^N^5_YZE(l)pio08bh)Gm0!a%<9OnWO?I^V5J9Yrwoveeg<||u|N@W2Lz1$ zaT`oqzW?RW1W1BGg8(Cmp&tfix^dfCZdmvma>f2b$qvE|bL<3^UNn~xGYA_{WVm2L zhPGsfRq8DSE$7zp*rPQ&c?_Yfi|Gi`cE&9JZkEG*4LX+5{v4~+7dM`@`ULSRU3tmDZ#(2%|NwAAiiFro?g4klsru#MRD7F zgn3vu3!vzN%n(e|`wwwtV()}~%IH3E_s~8sA8?1*r&OrJb{|vLIbK2v>QzJ-HY3B| z7F#Q(1u5OMPti<>Qklx+9IXO)q59_K+Dr~QnE!XdBDyIM7rZ>d0R6C9=P6zjG}(Ld z^r5LeWl&_r0A5_^-}x_bsDwP=zxW7r4Znh}p*s9Uw3CVmLTZ0z(fknrNw;D?BKXO* zs(=B4N@jcm*sb3c%GG9>r%z13HfZ3M5Gc@BX}0f{r8$<2eA_78GXn4oE5T3dSTy_v1Qo-Km&}bGzQm%%N-sP5My z34?BnF^B+YgK{7@;)g$Aw1PN;%a&AePa9xm)EQEchQgSTHB!C)24>4|M{n6><0awCoD%*&*7C}2uvgsEGvT*&n^*4Ik6$!4Jp0oFx0C*v+#H9N|* z(z=6nAi*W@LlJNw9}OdvCG<=2&hQb&^0em_m=-TLv2=T@G_SmTa{Z)@R=c833* z!AlBJI=g{T)MkTZqC7X#5lAE;l4Z%fg|JB0p$be4E);4SG*CnibY>&}A>X=_?EG;w zPg4*dgB5VcV#0m6Kv~iH-`)}4`4?bAv!M*{m_V*Wydi*RpC8nY<|zNOdz|_iP7U_$ zN{9^$rn0b?8^{!#geZqBTi|pEeUp3bejR9kEu6VHH1Ug8d{W+;I13JR?B&>@jiKLbo5ybw4QJk<8iiU` zLXMR1wb+^u%w-%0w*UFSTH6xP7^DFifCpxiit{}cPf&tKixAk@*?`jckg9`KM^>u1 zGB9TX-(;Wh`=83kD8bJH1k-##um(9@M~mN=d#pIAO*u*n->hGX-Q-L$EUfP&!B2vn ze(6jzvb8cyQ823z)h0C~x-sU{$v`JGQCtnkaMVL_Au(aZrdKjz&j{fldk9$xN;UN6 zqRwW~(TA1*_TCS=%rjrioY5BC&x$x1G%d^x#Af(@sel5kd0F)(XCt?UFFp@ty&Qm- zzh7%+i|oeO=!7I}J>4+DkMPqsf2^O=nS<3L_z<}a2hcOyM@fTjwGV4&zXNi$ApO@# zLU67N8!}SA?i7$fn}Fdoifc3A;s*}iK&WPdnM_O}2XtZ0M(iMHctg_2RTb%YY?*yC z^5;1MD(wSGW9OXx#~HMyzWcvgyhuZOUf)qdS6GbioLm^qE4jfRCc%XkS2gY{HbXz) zW6c6e&jiP9hA#-Z(%>kHF5#0V{mT;MAR zh!2^#Z6Gt;C7UKbm9;0p5>?yuy}rU2x4zPXc027E^s`8HrSz=Buht9(fEfTf06G(N ziCntW9n&CE#H{kCQwI{8gNx#>Yv}=#ZapJ?98~ActErFJM@z~t48G%iV+_yz3wIg@)G@8}q!U@K!>oh{O&>6x&JwdhI zJU&Rpv!`^0QD_Oj0y<)polu~p{VB}!c=r4Se7lOXSs#@Lj=oDLD+O_hI7JwQ7r4u zwVOkJVsyzniUOQbTQ1yA);v#YWz!sSC4ZX++ltP(a80pAe-FUgyFIB*L?$xJ^wns; z&Y8SZEKN1o-8dE%S>C3t#E-1P;~#?iAN*L@8B_9D=dfQk9>z`57g7DmTMIuXYmjBS0wu ze3O~6e_uN@0SG1u1iyo2GHjF-YcL*eZnp8`3$K|)x&*AzTJnwR2Ocg$Q16u#8s~-{|3SpesCW|H!rbiwgXywUkjLO5D8Qe_Jk8XmMEoglU2+bPmbp7 zjg~Y!51D6+v^UpJZynB8Z3B)#FNAT=xo0*lxhY|U=Ptx&4GSbp(c<4Czusye1E*8i z6R4*63@b{II4sG?eX$*oF70QdnO2a5U^s9OFXdia0+vEPpgpN~7QK7W6#hq$^1_`Q zj{Tj@Lbn*K<@wK4cVDUld?dm2^exH~@O2|+pH7c%wpno%`f}|;BcUhsOA`bO=v&yV z-x~bXY_6FOnrm{y)`zfSuZiA4K@-A{1Yw=EucrtWl>mEVYPbG6fXU&Qv@TTag``-- zI#y|BeHJO)`yqJYu8roM6`N|)n39_oDiBx9J=>B48)e4EO2QVDCv@~$#qT08@i-O0 zy-ZXKb!1rCA7}rjo@6^?)_3x3=r7Yj_(@i0(MH(=bfD(bFxp_MmZq)RK#4H&0<_u9 z!mM8LJPAdKYUg@&A9}EIE7Eyrk53hhB(ryKF|_%8%C`e1rOHb6umVP{W3x6E=Nf`Q zcd!Y`$KHQdZoo7R5X)vNW}^3pPQ|WqQ_HHd_?(krPHH;yXcxk%mQ*_rOomt{!?E<` z#=+q}-*m(U?ypme^V)&@2&N+ZRE_5Q8}x$B)K*@)v9vPWVzX@x{O55D=oSlSK<7Bona}k~{@m{Vasi zMepx-s^Dy^(qd?C7cf@@ym5f(!R5!-I2gMYv5sV|9BmvAJ|Pa6wx`$UTLcoBq2Ra1g#n--FUw&?J^T!N27R45vP8~DtTjw9h5dP}J$=)yV9l*U`_aj*g z(0vsTa>U68EDfH+wYGTg`*pS~KVbX(P!e@GIPg;(Fa-q0YyVxW;-EIse}$Eu3N@WOo>mko5eFxW#RlQ)S_( z4JXr&p!Bu>iI1-Z^ngK-4AakC=MUJ*067QV7lhk9f9f<^^8g-x=5sYCbZ7yv0|GbS z4$P=1xMD60gWdd{lvsaHt&!Pv0;>?9#?TlR?C++2>BaVR?csY_P<;%ecc4J)6TX) zeF78hjrwT!3-my=53OU z%~fV5nLvvvf!pPb@duHFTjJ{&k{*2`RlpLPT?Qx`b55heS$fNvm1aG0#{Y4f)n~|Mw=fxoa&|pyk zLF@<-?0cES*&Zm@lUnG3iYIoHW~RajS4DO!e8%9>=DOwq7Szf8qR$~rKCnfO+ewGp zMcfHs=s4N0A>$Z6tKo064K~#;mQHK_nVGzK0B~zRfgrFyT?`a^++j>*nC`x1%Kz4T zU?!yeG{_4A9{m{sc4_;73QmwpP^EpbCfNVh z5M~wci^Gwi$z$i0rwW}LxMQl{!PzRY*)tX1Lgbs+OtB3IYV5)R%|MC2+9^7XT)dU}**!Jm{vt-^HSjM^4yt8WTG0)Ec-tyx+g@ zO5B66Gd>?+^^jJKUNo%?i~)yGlU>i|)TToU=zF{aS!hdh78d@1@sGrnl^k%AJ1$_ED-~ zAv~af)WeApo0HL^%wOh*i9hH+I~4lY6h9`wXchhDpeD&!+i*dXo=yhvI^}@55+8KM z#34b(d8(A|PP7Ht5{}co5Lw0eP|Pd|$XMtu1Y zZ;Ypm%b!mWC}xNa8u>IeLUp&9%Py14+}G$v4SAQ+pnFoPb;fjFNRgI5motHvL~`GN z+<)@lOUS)Q?ncC;J%~cVV&YM;(eCNpSq0O$;YG+Pt%Q3 zHmnqwpUQPm*9NDX`Fh7vi(D>2sGPxzM2#&qf{&$rk!Y#4wm(z%f z_V4gBvCr)6nqG;HhaS!A9j++Em(0xzrIVw)HnU0`xRa#z5Xh^C%^5N)NUMdT1KsAR z_Ant=a>PaIG4b#UpH)ZoKS?Kf)k=~?bW2FIhU**Jq?-4Dj`Wv^84iv}AUUw!t7RU>w zy#}K{f^WLnsKmEDp)K|~Ej!%TIQwx zKb1n;WVEQa3vo#TNR$Es?WoEkL2_28e}BUp`%j{rB%2tDHx{kNEpvKap}I z-AE|SmD6_YL|wYWJT39nj-^<5|KP7CC8;P|F{0W|vXO3X7GERg+3Ipv7|DCKD-8OH zkSW11>zZ3@<7hq_a7FG>c_<5Y9?L5CijaBymirOt*bypyHy`trolmid=TQb*XL_Kq zQV|ElJp7+{6c61b(2cbdW|zBn{l_t2d4)G(97j4qJ=U4?OEkQ~ zP!Yi&dSqg}-nAj~6`4z)>a*JD+8|^`?mj!?aRx8mh8_o}JFqKmw^o0+^D5zhJ>(ig zLL74N&*K?YOH-|Ne}_5$V3xCERxEoobg{h>`>jTQRnMAC*N%A{nN)B`JiFvU=A z0-NbL6k6jo^xmN7L*LD}n{v|YXBiPYpqbYn&ZA;*6I{1O;-USB_PmRFx^--DBk9$J&s%VfZHDfW3o$bV`I3-%l86v8hutPmV8JVL|A{{VHt~rRqi%K# zzSUBqasmrFER)xGom`7powT!^AMt3IDuJTf48XBK=Nu{W|us8<4b^w8YI7lHmir;4>QW5pL&WQ3JbKLc4V zKYiXmedR|%V1&3ZaVBx0n3(N_&R?WI0 zTPyrgeEnLsMN7ukuDzp)P(1|83WaM?%JXo6Goi}L5Z_BIH{cHC%w<%sI1XxE(7kJP2iBek(ldPYR9@~zII!O^++igq8>Of(662@+mKDG`LKniV@XF%h z{nyr(!AE*kLdZP91A~U6Bgx%!@_I-ETrir$V==;O>mPD~H=(Q5%69HehDm_G(9`rr zTd_!IVnhOFWiv>PPV5@r#V6?8_@<|Rc@lCKwQ5hcXu3F)_3WSUmDSzcy(lTxR?4>-p|ign-j(#=rq(OsDWO-jtG z0K}Q&)Dzj{-NC(dDTMp{Q)xBERaN}aj5yjf<{K;eFxy2aEg*)uEF}aIEwK|1-q1U8 zFJv#bYeZQ*wh|U0Mij6%w$JL|GRpHIS~?RmxzSEpe4M0i}BUQeQ1*g;%+GkKeyrq(-aZI(-{ozYuz`#jfeKCNV~??Z^_$ZPi`9Vg!|#8$_U zdbp z*tTNKgL@K;FADVT^=zo?zsP7%k_!K{_zWWh!ib40LFhGGh}-HM{X3<1$!kkBEeK1w zf=SMSRg0;-79gwNBX;M_2#Fw>dwU&(^7p4G$2#?&_z=L2Rh&btYYr5geG5%BdIeH~ zOJEb>eQ_ zCETqMm#ZGw!21y$(<#!?0%Sw)K&|E7nb6|M6F}#D=IUVHOKxB1x)Y~Wp%GwDTk_Z2s!-<(Q>ro+ zjt1>I%Zn_`*&YK$L`&%QS&TS6enUtKF~%F@uJ@AE<1cfo5`&cfyilB9)3 z=$q+^6jb|%dWsu9)KcAwvFqaF$o@$7O16o-a2MxRlR~oNg9`Sz+(JTi73sAPvGIlL z4HZMSoTvcTqIey_m!T>wWdR=_8bBG$a~l65a&Wm?Hm-9O`k}8;j;IhoU#%`ny(6Qh zlJk6$`DA`k1c-T9x%hscsu*+6 zEzsJEZDz~5$gt|-(DX~FQ#5&&+Bg>0Li&*~?N^A+1Sv!SSkl8rXB8sCT5LZWs}R-I zaZXVMq~H2f2|p{4-(;N-ca`u$a_n#g(8z-?^>AaV&1CTp`AKO;DJF0gssvt*5{Ivi zH1K@)%EfS0MU^eSoxE~&u%t8Q`lT_O<}gJm`s0?2n;7@iX7me#f2FM1J^~4aUC&Y3BM5mk@<3S3KS3v26pU`cYMCTF44lrK7Pq2-v41x zCFicBcpnkux|{|}CooE#^#e0q_Z67|mOtzzne-5>cmJ=tGWnu})K_^FXoD3inGQHz z+KjUv&m1b_S0B7(l3qFaho@lZXnqa7vl>ER$A}}eh)xk_QSB}uiW(F>Y#Iv)7uaLJ z-$c1QB_b~}+E{8*A)E9IsRfPF08=@9^_J1{U1_84WmmF;O}M)rJ?O9qq55}<-tRt@ z%xT8B91qe`B={#mX6!nvXsy1MG~NhL%p=!*52UogRbC};46rrso~pz|nD{Qlza12e zzRo!60GY2E!rN2TCz&a5cRZ$sRXj?J!^ID6&s;>mxLE18{3luFPjBuAf#7A+frA&E$dU-WUpXkHbIQFgiE`|J#lS zxB2-t5I28{A_A_+(?9a$I~#Fn``}A2y(^0)|KrH^xqG zHaFC3>{xNivwz_jJ+oq5ah|J@(=8W-DQ8?Y;I2V;#^*TX{ap%6?-_uyS z3zE!wcI;A&rzHYfh=17fNKriOx&kp~mNj2GE^uP0>en>y%>AZFKH`hJUm@SyKNM+E z!=tn$1STL-8+)T3BeMz)!W66d*t-_NbpJ`E{y(oGR~rRG$P?oc9brNvglbR*cTMA) zFH)O8ZFd-IjR_LG@muy<_P+(NmleP$;e2H8h5AFx_?dK;JXG^z(}%w==zi0SIf$v7 zq>JG+P~f=jf+{3N=l}!eLbiN}{A{%M_nhy}6)#N{?kEd%7zKGa&?*ggaJxV@5+u5} zT;TyRB>nF#8SyEG-5k??4VLKNmSh^PhVC#}f?!=>%Wj#Vy_$T@L+gm72JkPP9UOJJ zyeAr|wQ5rGIB7(n2@^og{gB5#x>G;gDAJ0J+*Xmu%44Nas-n{9E!c>f?0{y^ACEk@ z=Me9-FtLNMoK*PkLJVJ#U(D|EyJ$6LfYm(+lJ3o%6BCVajVB(fGEuf^wMw9ZjUQ6X zXv3$>6cwX`6eMcLqPI3eYIsDiCOjC^OEWZ|sE2TadPZwA&Ed~nw;4>K@vmrEZ)()P z&<|Hg=G+Nxaoc~~ze3KjHEN~uL_P)y(RexIQWYEH%lCJPgl7TR*y0D1Ig%AaM_fGP zp>0#l2p>(-1!aow^EuG9Ae@eXo{@m>KQhn(YHu zQ~cMC=RbEjcUR=`MRHv;S9b?U6NrvBRL33-6ZC>ZuwQ(o&K`_wYm&hhK2miN*XW9! zi^quB1^8129@td$^x0(lnw*o_qwCPn>eE-e*He@&0)R2+eCF)<#d?fP@PeB|4B_ z4F;NO(rKNm=RV*1gCAb76TZqPbNO(cXLzcn5SzNi8VmNw|JMC&A-1qY!}eil=&W;m zjB|8VUPe_ODkH<}UN4T7s@Z{*r00tLlKU2}U>>P;c8n@q__ruuk@R`>?YIgJw=5~_ zn1Dp~T^ua2;_#irHAB1F1p5M8R_u0ru!|v*>xSx-z-XyZ^fu*7ODG*Qj-XB&{>=BPc2&evY0!rxx>U_n&&{~r}RIY1)vHqahaf) z-UL7BC^c1`!l!_B%S@WRjSfHLDc})}=wMa5*Vawl@NS;m;nsmRjs_oWYEXc!R@F|W z@_oCT|9oNRDD@w45~!T(T?gCFV!V$}?*u<^F&fTafByK?f@7+2#ice5<2(4lKv%Nm zcyek*=f|m`_ZM|%GStG(s=WTvnxoG~ym03O&aDzG4dmH-m)TLPq-XHW7}9U=pGCM| z<+QrpFna~;v27`}awU$fA=n&|E}?@$gAe_o58xNKjJ|NNJz`)0X#4Hr_)Ya;hw(Xp zy|qUJ0Br2!U%iGk_q#5Cnr=)f$=}RT#XuUP?8c7B$?YJ@1SYWm{`yVVur2QUB*!n< zZ`MU~Tg+Js)!Fhee#X~iyI(vclWs!wK z$c?{@>V(1cPhaE`PkyZnYN-t2v8wQ?h&&o)butMwf&fuJ@5wUl{1 zY=e}9so_@~Q)2MtJgOMZ6@A*FOW=?|>Is1Je?w!aYdn-snY@_TE2QtG*;U$CCC6_h z6Zk&2%u%CHZLu_qWt@56{6Cqs4|!4CG^itJP&J!xXC)&}R5w45(t56aV(SEM4bABr ztRNcoEH%P_xiLQPflFE(F}4{rSWA^&b;N&&P$Y8f^`TwI)i(uR`H(G(UWG6`mNs9& zW**P=DjOXM=qBEYm`Ta+Ycn%$z!hmw9p-hdH8$La_w+V?tRcMbgreO` zit5##R$-!8wTX%`*I#S?+Xhzv$Ha^imkscqO!1LMQA+$5Xm9;OoKw`r3PR=rrvv2k zLiF^r3GPy$|DWXNYb`kX2}^#Xzi1UDd0UexvKZS8kNjvJNM=U8I(;Jb$iJrG-jP zeQm*9#lx+M)co2@oQ)y9Eo5!?;Kp@~dBvW`bZx!Y=Z3#<3B92HS9Ze>x`#RXe{{fK=_l!dT@xb|VaU=W%^16b@@g>i-MHzj(RuFGkUsIrmty?2v;cv}bGxUCP5 zeC1Y4v&wh>1iT+B%cdiR3D%^LP zsnu6~6_DO|U(fR(xl(k$M_>(;0ze0j26EUbrL`fm(0}McjwiS%JpNT*rc#D-xb1Xh zj>cXQ5<~KboCo0&)c$69Vt&Ze-;B7BRth)ZzSl{YajHB0W6cfAx1-;y=byggv^b2w zbJx5Qi!bQOyKqNZ^p*bKn>P$(=JH|*MLxCwTB!h$qdOk;Hg)6F3C^v&>yZnS%O_58 z8;rgw6LwshpfL-`xT!Hh=B+pIPfr%F&4fClQb|VzK6Yt+i1>#nzS!0UDQ`6?Ss!1_ z5qQv5(pM_SA9Z9)5&oz*d-KGpJoQL`$)m2dEVjabz6%pS6zlKEqm!6}ay}RR1)7#E z9{ok{5{J>bv=HPhG-TF;4fdDT-5>QJ%%cF^yOBaht~%HoqrWOkueX{=gg za&K<<`q+p}FCgoy3<=kFQMe>G3oQJr1s{ zdEMRdK=U3Xq;pDXxbYw*u4aql0(zn7otoD$rns+Ijvtm|mdPk^o96L7qykAZYcewi zyE`*-p0-(~cw+uMNYZ+q@olzzEjAUTh_=R{6&K>R^UGv^>r)(t<1XI$p*Zn1aMNGt zbEn&`y33y`Vf@=)!OjUruCqrr5~WBE8p|M3p5$)JYTSC5(QekPTzUJjC!fE_;}T0$ zN&^OgpC+v&q8v0tKA)~`p57?g{~b9|`X=aE{=pxgIE|=2SY4am%pm|iJalXMy6t+O zzwWg=vJxG+c49GQ0co2JH<6&9T{uWHwhwA`s|1K1s~XniQx!Ae_r?*DQqbCzo`*tu zs$9LlN9Q!JzembT?^p~J6Wr85R;epDqqq@rAKULppm#)}c4faeCk_p!)F9 zfos_pOmwKpDlawI;uz|uY*Hbh=>t$bnL$Syot(K9XpCMxa(@SZ74B@3oFO{JN3rpk zd7IPMHC@Amm_rOEz6ZKi)-`u!rW-Bsz)CV#I-~u!{hD_vQNbArl{#ET7{A7#2}v)_ z6WmFvTni|Ilv_7XeXhH80RR|(g1X>YBJ2vWK9~Io2S`oiJix@!xkw7Hc`&Qh4~a`E z|Ffmoz;z9v*0-vZ8riXTG5)*omWevYDK~lk{uovM#lNKsrG0PYq^BK_lOO!B!2Lm- zMI?2Hy*)O=M5rzsbx|VHR)v`3gNstJRXGvsIpI@TYxp*=HTJQ@%1mcDxuQd^dZw!) z=?Pz?kos`<`hub;JH|VMP=Ebh+>kj}$Bz-!Gon)*JEdb~NzNIRh?)lnsuZzo>n{!||L>^1kn6<^wlWPVH<=@JAL8?a z5#K0Irzqqo*HjjYCcuAGr6K{)T|YOFVD$ZPq|@+1bmN*X&)cEvRd|zOPr;^={KnCCQx_LNttrrW_6NJednATJ->bSP<*>Yt@83i zh91ANcw~hGvC);9u4KivQuDicVq0q*Y9O%SoE3XrUzQP-V+N4|sYaA7IN!nLy7?7` zhd+vcDTz=fjJrf_4hs+nPzJ0<5xIykHPxtK{(E`lB{isTJN}F+Pkuow zoYFeLVf1|+plQfYn|q+T&cF9;P>L&O!1>$A1mz9#S~ko?IDdZF&-;R+-niye36 zkdP?-nVIuaA}08z$k_|;V|RP|mU)!9H`JjY*?g59RiS5oXW>Fi%j?iItL@x~*;R%# zu@n)P8ei27r-Hg*DZR;dlI=bz0CK^)_B>&BHS(`YSlBeIv@cJNTjjC_O+PnP(Jw*F z+PLT?IMLoeTJfn(WA73``-NxpLTG8xXF2w{RSZw(Uy!v4nAZ(#ba`42s?#Z*qAhfy z`}S0X+aEoy&zo;-aI_sw>YsLet=GRVwR8FI8<(dobJJCJyjKQ z*7w=j>|0_gtS>ID%RCr+W<|M()3q(^xzBQ0SL)-~x-Hz>gu63xr=)!Rmn=kUJ#Bi5 z&ZEWQP|~ezmp@^M)n^S31h;@&LK;_A8%LE&e>Hzy_Q0-&TTJ~EQyFT+ zcpNzJ@XhcYE8%!Ky+c;iG2Bl}?baWn&DcXMNk^#V7nXSMDaO&hInZsBGpg~x4J0r9 z7em5`Xh`fZ`u^izHR$hX%%AJ9zj8ZC@VL={BPs_q!p|a&6{2jlspU1V^8Nm4HT!`X zE<2D@;T+*Yiu-F(+LtZIof7@dx=G5>F7jRDEPLgPQZwU{)&aA;Us7~gzG&zyEB4AZ z@esT0R)Y6NXu@<}lKh=F0HnxR45uQ}Gn>QdUSQsINyJx)eC)CsKtZebob6Cm^oR5j@h9 zJUcE{IyKrFc5oDES1mE%I<%~!-B>&bGX_&*o242ir6@?}C??i_F+lB}9`tj%^+v=j zfc9AyW@QIJcdQP(SEhI9W6~Jwjc?)qnjaAy*LQBLo?FnIKaDiODKYb?8utz<;@^(< zjZa_E>p&uK1fRw1(O`lf$e-U(3)^dxLBZ}$4 zje~aI9zLVYdL&MFqrUuV`9HC^Wmh#6IWzndpD8@20tRWM4VQBmm$W$t5^AE-V?q9! zSFKMuMz22$GN^Wf_CG6~F+%~;I?heyvQM7G$7~=M%)j2+ffe^<$#K&-u0yxW`rSL8 zcRqCOyLnpj2-s<^UqK7XJq{jTh!;Qt$kBAw9kSJQXggkM$cd-YFLmCz?GnKb); zjxOBgjNV(1s-${D*QaM4Udu1;h{wmUo_|k+<@PA_jo2Q-#~g5Azh6N50siHe5$>h~ z-wr!IYsnU zpalBY;lm2X!jO-OcHa~j2&czIaKD+O)`z2xgI=xHNvZo!96*Sv_FW#*HK-C={p06b ze=8+$#|w*QfF8sCHMwNHN8_K`Tf zj4ZzN6g(oO>FYn*-y(muedboXK6k`L4%A1VgbR<0wuH}IuQ?%X{_maCHI|b zB$Z2@dJL2Y6271j7ci9ZYQ#N?6L(1$RGII>^97+fhR_C<-xaURw9drJNuNA&;UPlU z@k(Tz%~k%}Z!4HhXHes2Jn2|+ng0Dji>o!+3=i3Q)Zw^MRJwg!gx-W-P*fjJ0g!mg z&;qlmOMUwg?Y-vdAf3xQSY>VK(gxj29m^YXo^;69f`KP^5 z;1Yf>TX*Z+yiz5mZtvf9pKdG7$VgNNlS#!!k+3j@{*R+&n83$DaJ6P-)8;6Z9=d$c6nDItqsKRjk^8 zeyOK`GbXVP26M#OIzaw)$NEYMEEw{!=rvu=zzKJ#H}9_273GK@-WpywD;z(=DI*@8 z8vX9hQhP;#>jCUyln^*z-j?!+48UL8dN%3BouvGTV^m2ycG`gBbMQe10yJgr5}z{> zY=8*56dj{VM4>M&k*m9+A9U?vS06YVem%oy@w;LIY7qV|aBqoW?`saeM89XL0{!Pd zxnu=p*0i5<;a!G#bV8^-`;eHfqbl3@`^iY|B$;ro8}OQ#QMCdKYEox8f`8}oC908jA$dk=HKRYW4Nr;e<%JHu$FkQfdp}i7^}4lQbSA zsU5D-LYiFF6Z9La0$53VhmCUX4GY8BB*BOQDOGP(Us~0q19$BGuOc_qXa4aWiNDhr zRLJu;(|ASDNR)K8ydcBuEBAM}u*sQ|hjJvLvraX7+%tOsu za`N{dJRVE$x*F#OFR*%>TJ0S(!>Fo20E{;%_(A!hT8_V7NX+gz8JrY=f>UBjS|EXd zZL)cSx#gG)3V;nQfbDbpWE(!1O-7m=MKzE~^M(UdQ{%o7!VBwsJvEYdCxV1cg(ATMQl*5UOBX^7A@$vH=3JcfCmcT9kPDt?@2tJn z`mOa{8xJYV@4Z7vYw12^iuo*#{d`f6%U0K;omYKhITXu@)*1#EyRov3(BgZk#Ph=R z)PiR2nkRdc<3YZAYFIZ|Y&p@Yd^KBmP6jDHpLAKkDODV8KR0ACv*XxWX32R%l?Lzn zN6YWTH|aKagifRi7YHc|0>IB<%k^{5FI0$~$Q&AV{g-=Fv0;;t@*J`hp8ljxgX@pK zuKnN{#AHMnyO-y7gs(tJ{ALaR$b|vuL2Zx)v20ZC3SMyCySG;(maKZcfmWI^`*Qo+m?z-Eu>Z3Ju`NL1|LECe$ zYVt+?@e#DuV7`Lkh!&7b%Hesop#_&rPi~ypf`bdLQT>8CF!9?_76nayE)Y^0H!czk z`l&HuujL(ieaR;vK%+ryIZZh4{6&WA(7x#-YU21&M^G)PQx+AA$mZQ! z1go@=W1&rVlut^Ndl8iZ(*+4^p|-RZo1*~!{ioiL*kW^;u^w>>AGpBr`qf?@_mz8>(YN9&!(cb$9OA~$$!z)KWt6`;CBRn# zfScIDt^0%kFD3J@m-=RUKSmAQfEOqC%l(PJU&(F+^;UC4+$Ge z0-#fg1hir@YMSQ!AUXD}kRGjAxQAZsB6%D=;o|`=+3iH>w#qBs zTA3?&!jNuv<$#2up^=kla@GzMgc)}pq?mjJR&C4ZLg0D(XMCAM+ZlL5UKiS@u;4ZD zyOWcrl{sBM-<^6+r?!gc7D?p#U+88;=n8F^YITWj>K3<*@a~^@3d-KP6C%qa+8%CE z8os9&%U*}k(N|gei}i0GN3_#c(jn20JoA7?G5Hw?ApU1JShGUiBU(&O48*+#8eLZY zI$)`WdMalC)!+Sqe&Or~TlstD9YeDUseOa{zMMKiAsq%yh#(17{(wC?-HKO-1N!I`PhYyg0&Saj_bL@z)W-U_=NykKN*&oEQ z$Au39Dk=JrIire$1ML(^8)ptH|wipTl;K<(&OAe5?AKqc`+p3lAywKJ0NdaFqCxiymBan()GPF7L# zZXhgnrtnCrz%izKlPDb)5f{!=(nApc-X1hgGQn=Cb`d+@cZ=riPcZ(bfoq`s&>3m7 zrZ)T%(Lr#LlJW>GFqN|_TJjURqM-y>S6jSr`dJPtYl-m>8VfvpImwJEprd={5 zZs`JERY%AR5*PS;MyhDZ?n969Do_rg3HsC$FZB#G@3IZb-QIzUoK{OMmkgKcU+1cf zhMTEm(jR_ZybB-TBpRQ!Yngwk(rqpuJv1D(i^eRrtzm3p+I?+Nd&l&>-$Z6g07cdG zUF&mK&xy@>G`q&U>rQ!bN5VT?^pIEXdC1G3(5A%%Y3ATW+_s(iu&S~6mk>jnSetg% z$Y;YTcUZkZ+FcG$bf!-g9St!pGpt(`-KKl#T%s* zg_bu$;Ciy8x2M_X#YuHu(#=7aXITYx#NJO z{BMsZhXpeB7#YfKr4H|eo+GDfBfi_Zi?O<*S|aIEF8BV74_%>|VUVIT`Z6TSjA?Pp zXswR2CL6v~h?P!{8ETrCLac|yrOlgK|1fBNK)mxsz8`mzeR`#TbQj@skyO3qR6-}c zdz=Bc?4>oRNyJZjVlEFpCdu~{ZK$3ZoToi_ur3f@D}RG1$1uPL>i7m!)*lc_f6g#) zk-t83 znStRpOHmjeY9_CsDEjpnR{9UFk&kuxIX>a!*#@SDeg?4zpdvsXf9KvKO2e@HIu!o) z+bPYq2Yj`E`1bbbKCTv={nV#NGTP1H%xeQb?M0*`xe0iU3o(l~o<5nlnH~ez5eZH! z?e6zWi@gsKY&?g|ceJjbH@B+axXC)mULAe{UAp)-bSL?R%8CEU6alz)INr9N;YTeH zX8KZx*1HGi@GKHA7iK;wdVBc<*wt5=oODs1m*Xt)jnga!?>LJU+urpUnoV#Z$cbIb zf;0t`P1fh108l6>G0HvSvkm-}{CQ6`LD_;IZgN1l87W(Ma<~=L!ICc_=?D|{^PolI zGeSS&*$NsraMzDQE_SyylNa&K9l3^ze$S=;9m-@jgproA9_D?0x2F;z=W8}O8J`;k z@6n>W+3&~gO;EPgS$hK>bCnGZwBeUeqp4uFO!zGSIQV3(b&S{8_NHb3rK?=PA=xx) zuUyMBo)Ief$=Lo&zb??pzsD7|#w1-&A>yx2Dy4q|{<4YnY*;FrycMDi+ojlcgXR7oM0O1|>BRkBwioruEvGZMll;vu)~=xao{a zub~Os(bB4vu_PjIXk7cIWs$ose`gFQug~JhmFITkEUdpcRwCx_O2_PT_Ju!^JD?*r z%%9l+S{k$h&ufYqJ!e#c@u}heo6miSUF*;xgZXWqe?udoFQ{0XV-RFdG3c${+RU9n7lT2%E4< zjT#{|PfbVqWzW?P>2GmkkHo#PI#4iX=EN^U1n7JRJzdQoG3+3MeiZg&)P;UW_Tt*} z;r`KWFH2hgDmDo>G)g~NX|Qsz-neAY-x}$vLs190!-YiGhq)R7nb!!$y3S9-U=$9d z0IsMg^v+cEG6Z?%_}mL{%2iTfZ;d7^zb;O`JJ2MGy<_UCW~ng3(6<@7K@6Z}Rq(d~`1U>Wxh8o$wj(fjOGX znuY~mEs#_cVa%I>`t6QdJ=ibO|MDe|;^hb(;nq7#VB$9av^mClSc$BZnd6>SuVeg!tzue+|7;rZ zw`E}(!*9vDgmy+OWbR#xDFEI~Z7Vwny01~^j1%UAkyG*K;7h9TrAoJs_7)w58JVD3 zs2a-G)=ai%NKBjk@hTh82mhv)eQ=Hnj{r7Q#B(w<^EZmG%uQs+rDm(V!^={|@MWD6ljZ+7@9Q}tP~Gz~ zc04pTxKl8|T$X}WYfWpBRp-~FSIwl!E32Q#SKGNuC$l!zZZ#x$$!21>u_w0t@na9c&+^NZ0HKGe7Z!FQ`WSr-^;Z7D(b3HUE>NYt@Wnq zn0}PLi3O1o6QRx>6Du)5CywXbt?SK!hte`=9~1BJ?PkjI`}cb(H~pZz|D0g9y7EBjwf_hS(7fNOmnyPU>C8R~Jw1N7Ha$ z9*%20FtXW_Da)xPlo(ebQiNgQcDWz=OQZg9E7Lqqe>&YA@NuCB)i=?aCg-Pp5Y;uf z6>d1@URagS=^K6)m)5m#I`Yjx8;}?v>(q4j{ClLE2ZBCDn+GV>@Q=^h_j`cH*+~wyz1`Qb5LQ>e<@agmOg@1^+0tE~ zfk7FTy|A_Al+zzkgud>i;H$`X-z$V~q*p$D*nC#0iWvAF%;a6XXcr2#O}rvl6+99d z!6AC02gw#nmORt4?vn#bZ*i|Mo#*TWzGN!+b-I;cpiXJ_%>9fiLY2(S>QH8f@%^UX zTVf!JVn%D5V~lNM>I3{3m4cTInlT(rF~X{_oKJCU=J3Xh-C!5B@69}V#-RS{B{t0# zL{0!EVknEMF_hZKAoQF+8x!_s5Pzy_5RU9ab)*)ITGTua)*ACJphsEuVC^C-`LFx` g{THfck;3E&K33c_uVgEX763n&FWFoyz2Fi5U!|li^Z)<= diff --git a/web/static/pwa/icon.png b/web/static/pwa/icon.png deleted file mode 100644 index af25548c0d657c0e98f49228909b7e3b8ea328ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24241 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 diff --git a/web/static/pwa/manifest.json b/web/static/pwa/manifest.json deleted file mode 100644 index 93824198c..000000000 --- a/web/static/pwa/manifest.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "Odysee", - "short_name": "Odysee", - "theme_color": "#fa6164", - "background_color": "#FAFAFA", - "display": "standalone", - "description": "Launch your own channel | Watch and share videos", - "scope": "/", - "start_url": "/", - "icons": [ - { - "src": "/public/pwa/icon-192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "/public/pwa/icon-512.png", - "type": "image/png", - "sizes": "512x512" - }, - { - "src": "/public/pwa/icon-180.png", - "type": "image/png", - "sizes": "180x180" - } - ], - "prefer_related_applications": false -} diff --git a/web/static/pwa/serviceWorker.js b/web/static/pwa/serviceWorker.js deleted file mode 100644 index dbeb24eb1..000000000 --- a/web/static/pwa/serviceWorker.js +++ /dev/null @@ -1,14 +0,0 @@ -// register service worker -if ('serviceWorker' in navigator) { - navigator.serviceWorker - .register('./serviceWorker.js') - .then(function(reg) { - // reg.scope must be '/' to allow '/' as start url - }) - .catch(function(err) { - // console.warn('Error whilst registering service worker', err); - }); -} - -// used to fetch the manifest file -self.addEventListener('fetch', () => {}); diff --git a/web/stubs/electron.js b/web/stubs/electron.js deleted file mode 100644 index 48dfb8bf8..000000000 --- a/web/stubs/electron.js +++ /dev/null @@ -1,43 +0,0 @@ -const callable = () => { - throw new Error('Need to fix this stub'); -}; -const { DEFAULT_LANGUAGE } = require('../../config.js'); -export const remote = { - dialog: { - showOpenDialog: callable, - }, - getCurrentWindow: callable, - app: { - getAppPath: callable, - getLocale: () => { - return DEFAULT_LANGUAGE; - }, - }, - BrowserWindow: { - getFocusedWindow: callable, - }, - Menu: { - getApplicationMenu: callable, - buildFromTemplate: () => { - return { - popup: () => {}, - }; - }, - }, - require: callable, -}; - -export const clipboard = { - readText: () => '', - writeText: text => { - var dummy = document.createElement('textarea'); - document.body.appendChild(dummy); - dummy.value = text; - dummy.select(); - document.execCommand('copy'); - document.body.removeChild(dummy); - }, -}; -export const ipcRenderer = {}; - -export const isDev = false; diff --git a/web/stubs/fs.js b/web/stubs/fs.js deleted file mode 100644 index d218b3465..000000000 --- a/web/stubs/fs.js +++ /dev/null @@ -1,17 +0,0 @@ -function logWarning(method) { - if (process.env.NODE_ENV !== 'production') { - console.error(`Called fs.${method} on lbry.tv. This should be removed.`); - } -} - -export default { - readFileSync: () => { - logWarning('readFileSync'); - return undefined; - }, - accessFileSync: () => { - logWarning('accessFileSync'); - return undefined; - }, - constants: {}, -}; diff --git a/web/theme.js b/web/theme.js deleted file mode 100644 index afb73fe58..000000000 --- a/web/theme.js +++ /dev/null @@ -1,6 +0,0 @@ -// @if BRANDED_SITE='odysee' -import './scss/odysee.scss'; -// @endif -// @if BRANDED_SITE='lbrytv' -import './scss/lbrytv.scss'; -// @endif diff --git a/web/webpack.config.js b/web/webpack.config.js deleted file mode 100644 index 47288fa52..000000000 --- a/web/webpack.config.js +++ /dev/null @@ -1,181 +0,0 @@ -const { WEBPACK_WEB_PORT, LBRY_WEB_API, BRANDED_SITE } = require('../config.js'); -const path = require('path'); -const fs = require('fs'); -const merge = require('webpack-merge'); -const baseConfig = require('../webpack.base.config.js'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const WriteFilePlugin = require('write-file-webpack-plugin'); -const { DefinePlugin, ProvidePlugin } = require('webpack'); -const SentryWebpackPlugin = require('@sentry/webpack-plugin'); -const { getJsBundleId } = require('./bundle-id.js'); -const { insertToHead, buildHead } = require('./src/html'); -const { insertVariableXml, getOpenSearchXml } = require('./src/xml'); - -const CUSTOM_ROOT = path.resolve(__dirname, '../custom/'); -const STATIC_ROOT = path.resolve(__dirname, '../static/'); -const UI_ROOT = path.resolve(__dirname, '../ui/'); -const DIST_ROOT = path.resolve(__dirname, 'dist/'); -const WEB_STATIC_ROOT = path.resolve(__dirname, 'static/'); -const WEB_PLATFORM_ROOT = __dirname; -const isProduction = process.env.NODE_ENV === 'production'; -const hasSentryToken = process.env.SENTRY_AUTH_TOKEN !== undefined; -const jsBundleId = getJsBundleId(); - -// copy static files to dist folder -const copyWebpackCommands = [ - { - from: `${STATIC_ROOT}/index-web.html`, - to: `${DIST_ROOT}/index.html`, - // add javascript script to index.html, generate/insert metatags - transform(content, path) { - return insertToHead(content.toString(), buildHead()); - }, - force: true, - }, - { - from: `${STATIC_ROOT}/opensearch.xml`, - to: `${DIST_ROOT}/opensearch.xml`, - transform(content, path) { - return insertVariableXml(content.toString(), getOpenSearchXml()); - }, - force: true, - }, - { - from: `${STATIC_ROOT}/robots.txt`, - to: `${DIST_ROOT}/robots.txt`, - force: true, - }, - { - from: `${STATIC_ROOT}/img/favicon.png`, - to: `${DIST_ROOT}/public/favicon.png`, - force: true, - }, - { - from: `${STATIC_ROOT}/img/favicon-spaceman.png`, - to: `${DIST_ROOT}/public/favicon-spaceman.png`, - force: true, - }, - { - from: `${STATIC_ROOT}/img/v2-og.png`, - to: `${DIST_ROOT}/public/v2-og.png`, - }, - { - from: `${STATIC_ROOT}/font/`, - to: `${DIST_ROOT}/public/font/`, - }, - { - from: `${WEB_STATIC_ROOT}/pwa/`, - to: `${DIST_ROOT}/public/pwa/`, - }, - { - from: `${WEB_STATIC_ROOT}/pwa/serviceWorker.js`, - to: `${DIST_ROOT}/`, - }, -]; - -const CUSTOM_OG_PATH = `${CUSTOM_ROOT}/v2-og.png`; -if (fs.existsSync(CUSTOM_OG_PATH)) { - copyWebpackCommands.push({ - from: CUSTOM_OG_PATH, - to: `${DIST_ROOT}/public/v2-og.png`, - force: true, - }); -} - -// clear the dist folder of existing js files before compilation -let regex = /^.*\.(json|js|map)$/; -// only run on nonprod environments to avoid side effects on prod -if (!isProduction) { - const path = `${DIST_ROOT}/public/`; - if (fs.existsSync(path)) { - fs.readdirSync(path) - .filter((f) => regex.test(f)) - .map((f) => fs.unlinkSync(path + f)); - } -} - -const ROBOTS_TXT_PATH = `${CUSTOM_ROOT}/robots.txt`; -if (fs.existsSync(ROBOTS_TXT_PATH)) { - copyWebpackCommands.push({ - from: ROBOTS_TXT_PATH, - to: `${DIST_ROOT}/robots.txt`, - force: true, - }); -} - -let plugins = [ - new WriteFilePlugin(), - new CopyWebpackPlugin(copyWebpackCommands), - new DefinePlugin({ - IS_WEB: JSON.stringify(true), - 'process.env.SDK_API_URL': JSON.stringify(process.env.SDK_API_URL || LBRY_WEB_API), - }), - new ProvidePlugin({ - __: ['i18n.js', '__'], - }), -]; - -if (isProduction && hasSentryToken) { - plugins.push( - new SentryWebpackPlugin({ - include: './dist', - ignoreFile: '.sentrycliignore', - ignore: ['node_modules', 'webpack.config.js'], - configFile: 'sentry.properties', - }) - ); -} - -const webConfig = { - target: 'web', - entry: { - [`ui-${jsBundleId}`]: '../ui/index.jsx', - }, - output: { - filename: '[name].js', - path: path.join(__dirname, 'dist/public/'), - publicPath: '/public/', - chunkFilename: '[name]-[chunkhash].js', - }, - devServer: { - port: WEBPACK_WEB_PORT, - contentBase: path.join(__dirname, 'dist'), - disableHostCheck: true, // to allow debugging with ngrok - }, - module: { - rules: [ - { - loader: 'babel-loader', - test: /\.jsx?$/, - options: { - presets: ['@babel/env', '@babel/react', '@babel/flow'], - plugins: ['@babel/plugin-proposal-optional-chaining', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties'], - }, - }, - { - loader: 'preprocess-loader', - test: /\.jsx?$/, - exclude: /node_modules/, - options: { - TARGET: 'web', - BRANDED_SITE: BRANDED_SITE, - ppOptions: { - type: 'js', - }, - }, - }, - ], - }, - resolve: { - modules: [UI_ROOT, __dirname], - - alias: { - // lbryinc: '../extras/lbryinc', - electron: `${WEB_PLATFORM_ROOT}/stubs/electron.js`, - fs: `${WEB_PLATFORM_ROOT}/stubs/fs.js`, - }, - }, - plugins, -}; - -module.exports = merge(baseConfig, webConfig); diff --git a/web/yarn.lock b/web/yarn.lock deleted file mode 100644 index ba82cc85f..000000000 --- a/web/yarn.lock +++ /dev/null @@ -1,5692 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.0.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.0.tgz#461d2948b1a7113088baf999499bcbd39a7faa3b" - integrity sha512-Bb1NjZCaiwTQC/ARL+MwDpgocdnwWDCaugvkGt6cxfBzQa8Whv1JybBoUEiBDKl8Ni3H3c7Fykwk7QChUsHRlg== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.0" - "@babel/helpers" "^7.7.0" - "@babel/parser" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.0.tgz#c6d4d1f7a0d6e139cbd01aca73170b0bff5425b4" - integrity sha512-1wdJ6UxHyL1XoJQ119JmvuRX27LRih7iYStMPZOWAjQqeAabFg3dYXKMpgihma+to+0ADsTVVt6oRyUxWZw6Mw== - dependencies: - "@babel/types" "^7.7.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e" - integrity sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz#32dd9551d6ed3a5fc2edc50d6912852aa18274d9" - integrity sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-builder-react-jsx@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.0.tgz#c6b8254d305bacd62beb648e4dea7d3ed79f352d" - integrity sha512-LSln3cexwInTMYYoFeVLKnYPPMfWNJ8PubTBs3hkh7wCu9iBaqq1OOyW+xGmEdLxT1nhsl+9SJ+h2oUDYz0l2A== - dependencies: - "@babel/types" "^7.7.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.4.4": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz#df8942452c2c1a217335ca7e393b9afc67f668dc" - integrity sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw== - dependencies: - "@babel/helper-hoist-variables" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-create-class-features-plugin@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz#bcdc223abbfdd386f94196ae2544987f8df775e8" - integrity sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-member-expression-to-functions" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - -"@babel/helper-create-regexp-features-plugin@^7.7.0": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz#6f20443778c8fce2af2ff4206284afc0ced65db6" - integrity sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ== - dependencies: - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" - -"@babel/helper-define-map@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz#60b0e9fd60def9de5054c38afde8c8ee409c7529" - integrity sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/types" "^7.7.0" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz#db2a6705555ae1f9f33b4b8212a546bc7f9dc3ef" - integrity sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg== - dependencies: - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" - integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== - dependencies: - "@babel/helper-get-function-arity" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-get-function-arity@^7.0.0", "@babel/helper-get-function-arity@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" - integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-hoist-variables@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz#b4552e4cfe5577d7de7b183e193e84e4ec538c81" - integrity sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-member-expression-to-functions@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz#472b93003a57071f95a541ea6c2b098398bcad8a" - integrity sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz#99c095889466e5f7b6d66d98dffc58baaf42654d" - integrity sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz#154a69f0c5b8fd4d39e49750ff7ac4faa3f36786" - integrity sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ== - dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-simple-access" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz#4f66a216116a66164135dc618c5d8b7a959f9365" - integrity sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz#4d69ec653e8bff5bce62f5d33fc1508f223c75a7" - integrity sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.0" - "@babel/helper-wrap-function" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-replace-supers@^7.5.5", "@babel/helper-replace-supers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz#d5365c8667fe7cbd13b8ddddceb9bd7f2b387512" - integrity sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-simple-access@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz#97a8b6c52105d76031b86237dc1852b44837243d" - integrity sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g== - dependencies: - "@babel/template" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helper-split-export-declaration@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" - integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== - dependencies: - "@babel/types" "^7.7.0" - -"@babel/helper-wrap-function@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz#15af3d3e98f8417a60554acbb6c14e75e0b33b74" - integrity sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/helpers@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" - integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== - dependencies: - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.0.tgz#232618f6e8947bc54b407fa1f1c91a22758e7159" - integrity sha512-GqL+Z0d7B7ADlQBMXlJgvXEbtt5qlqd1YQ5fr12hTSfh7O/vgrEIvJxU2e7aSVrEUn75zTZ6Nd0s8tthrlZnrQ== - -"@babel/plugin-proposal-async-generator-functions@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz#83ef2d6044496b4c15d8b4904e2219e6dccc6971" - integrity sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.0.tgz#ac54e728ecf81d90e8f4d2a9c05a890457107917" - integrity sha512-tufDcFA1Vj+eWvwHN+jvMN6QsV5o+vUlytNKrbMiCeDL0F2j92RURzUsUMWE5EJkLyWxjdUslCsMQa9FWth16A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-proposal-decorators@^7.3.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.0.tgz#d386a45730a4eb8c03e23a80b6d3dbefd761c9c9" - integrity sha512-dMCDKmbYFQQTn1+VJjl5hbqlweuHl5oDeMU9B1Q7oAWi0mHxjQQDHdJIK6iW76NE1KJT3zA6dDU3weR1WT5D4A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.2.0" - -"@babel/plugin-proposal-dynamic-import@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz#dc02a8bad8d653fb59daf085516fa416edd2aa7f" - integrity sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - -"@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz#549fe1717a1bd0a2a7e63163841cb37e78179d5d" - integrity sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-decorators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7.2.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.0.tgz#5c9465bcd26354d5215294ea90ab1c706a571386" - integrity sha512-vQMV07p+L+jZeUnvX3pEJ9EiXGCjB5CTTvsirFD9rpEuATnoAvLBLoYbw1v5tyn3d2XxSuvEKi8cV3KqYUa0vQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-top-level-await@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz#f5699549f50bbe8d12b1843a4e82f0a37bb65f4d" - integrity sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz#e2b84f11952cf5913fe3438b7d2585042772f492" - integrity sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw== - dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.0" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz#b411ecc1b8822d24b81e5d184f24149136eddd4a" - integrity sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.0" - "@babel/helper-define-map" "^7.7.0" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-optimise-call-expression" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz#c5c9ecacab3a5e0c11db6981610f0c32fd698b3b" - integrity sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.2.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.6.3.tgz#8110f153e7360cfd5996eee68706cfad92d85256" - integrity sha512-l0ETkyEofkqFJ9LS6HChNIKtVJw2ylKbhYMlJ5C6df+ldxxaLIyXY4yOdDQQspfFpV8/vDiaWoJlvflstlYNxg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" - -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz#0fa786f1eef52e3b7d4fc02e54b2129de8a04c2a" - integrity sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA== - dependencies: - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== - dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-commonjs@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3" - integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg== - dependencies: - "@babel/helper-module-transforms" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.0" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-systemjs@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz#9baf471213af9761c1617bb12fd278e629041417" - integrity sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg== - dependencies: - "@babel/helper-hoist-variables" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-umd@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz#d62c7da16670908e1d8c68ca0b5d4c0097b69966" - integrity sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA== - dependencies: - "@babel/helper-module-transforms" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz#358e6fd869b9a4d8f5cbc79e4ed4fc340e60dcaf" - integrity sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== - dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" - integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-react-jsx@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.0.tgz#834b0723ba78cd4d24d7d629300c2270f516d0b7" - integrity sha512-mXhBtyVB1Ujfy+0L6934jeJcSXj/VCg6whZzEcgiiZHNS0PGC7vUCsZDQCxxztkpIdF+dY1fUMcjAgEOC3ZOMQ== - dependencies: - "@babel/helper-builder-react-jsx" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@babel/plugin-transform-regenerator@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz#f1b20b535e7716b622c99e989259d7dd942dd9cc" - integrity sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg== - dependencies: - regenerator-transform "^0.14.0" - -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-runtime@^7.4.3": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8" - integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-unicode-regex@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3" - integrity sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/polyfill@^7.2.5": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.7.0.tgz#e1066e251e17606ec7908b05617f9b7f8180d8f3" - integrity sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.2" - -"@babel/preset-env@^7.7.1": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb" - integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA== - dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.0" - "@babel/plugin-proposal-dynamic-import" "^7.7.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-syntax-top-level-await" "^7.7.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.7.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.7.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.7.0" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.7.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.7.0" - "@babel/plugin-transform-modules-systemjs" "^7.7.0" - "@babel/plugin-transform-modules-umd" "^7.7.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.7.0" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.7.0" - "@babel/types" "^7.7.1" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-flow@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" - integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - -"@babel/preset-react@^7.0.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.0.tgz#8ab0c4787d98cf1f5f22dabf115552bf9e4e406c" - integrity sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.7.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/register@^7.0.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.0.tgz#4e23ecf840296ef79c605baaa5c89e1a2426314b" - integrity sha512-HV3GJzTvSoyOMWGYn2TAh6uL6g+gqKTgEZ99Q3+X9UURT1VPT/WcU46R61XftIc5rXytcOHZ4Z0doDlsjPomIg== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/template@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" - integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/types" "^7.7.0" - -"@babel/traverse@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.0.tgz#9f5744346b8d10097fd2ec2eeffcaf19813cbfaf" - integrity sha512-ea/3wRZc//e/uwCpuBX2itrhI0U9l7+FsrKWyKGNyvWbuMcCG7ATKY2VI4wlg2b2TA39HHwIxnvmXvtiKsyn7w== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.0" - "@babel/helper-function-name" "^7.7.0" - "@babel/helper-split-export-declaration" "^7.7.0" - "@babel/parser" "^7.7.0" - "@babel/types" "^7.7.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.7.0": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.1.tgz#8b08ea368f2baff236613512cf67109e76285827" - integrity sha512-kN/XdANDab9x1z5gcjDc9ePpxexkt+1EQ2MQUiM4XnMvQfvp87/+6kY4Ko2maLXH+tei/DgJ/ybFITeqqRwDiA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.7.1": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" - integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@koa/router@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@koa/router/-/router-8.0.2.tgz#46a48d58cb0d76dc7a3735f14d1e66bbe2116575" - integrity sha512-7Wa8yXBmz9HjmZOr+xfMVuxFPNObdkiQFBiwF9SQ8zFqHykwBHcJA/mLqqxU2NKoeXRPBKUOPeOjwgR+gyadcA== - dependencies: - debug "^3.1.0" - http-errors "^1.3.1" - koa-compose "^3.0.0" - methods "^1.0.1" - path-to-regexp "^1.1.1" - urijs "^1.19.0" - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "12.12.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.6.tgz#a47240c10d86a9a57bb0c633f0b2e0aea9ce9253" - integrity sha512-FjsYUPzEJdGXjwKqSpE0/9QEh6kzhTAeObA54rn6j3rR4C/mzpI9L0KNfoeASSPMMdxIsoJuCLDWcM/rVjIsSA== - -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== - dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== - -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== - -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== - -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== - dependencies: - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== - -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== - dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== - -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== - -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-walk@^6.1.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^6.0.7, acorn@^6.2.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== - -ajv@^6.1.0, ajv@^6.10.2: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -any-promise@^1.0.0, any-promise@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -bignumber.js@7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bluebird@^3.5.5: - version "3.7.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" - integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.6.0, browserslist@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" - integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== - dependencies: - caniuse-lite "^1.0.30001004" - electron-to-chromium "^1.3.295" - node-releases "^1.1.38" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-json@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" - integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0, bytes@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -cache-loader@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" - integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== - dependencies: - buffer-json "^2.0.0" - find-cache-dir "^3.0.0" - loader-utils "^1.2.3" - mkdirp "^0.5.1" - neo-async "^2.6.1" - schema-utils "^2.0.0" - -camelcase@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001004: - version "1.0.30001008" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001008.tgz#b8841b1df78a9f5ed9702537ef592f1f8772c0d9" - integrity sha512-b8DJyb+VVXZGRgJUa30cbk8gKHZ3LOZTBLaUEEVr2P4xpmFigOCc62CO4uzquW641Ouq1Rm9N+rWLWdSYDaDIw== - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - -chokidar@^2.0.2, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.1.1, chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -commander@^2.18.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== - dependencies: - mime-db ">= 1.40.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3, content-disposition@~0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@^1.0.4, content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.1.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -cookies@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" - integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== - dependencies: - depd "~2.0.0" - keygrip "~1.1.0" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.0.tgz#2a47c51d3dc026d290018cacd987495f68a47c75" - integrity sha512-pgQUcgT2+v9/yxHgMynYjNj7nmxLRXv3UC39rjCjDwpe63ev2rioQTju1PKLYUBbPCQQvZNWvQC8tBJd65q11g== - dependencies: - browserslist "^4.7.2" - semver "^6.3.0" - -core-js@^2.6.5: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-env@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" - integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag== - dependencies: - cross-spawn "^7.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-equal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" - integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@^1.1.2, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@^1.0.4, destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -dot-prop@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== - dependencies: - is-obj "^1.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.6.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" - integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== - -electron-to-chromium@^1.3.295: - version "1.3.305" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.305.tgz#64f38c2986277b15c7b2c81954171ed22bee249b" - integrity sha512-jBEhRZ3eeJWf3eAnGYB1vDy09uBQpZWshC5fxiiIRofA9L3vkpa3SxsXleVS2MvuYir15oTVxzWPsOwj7KBzUw== - -elliptic@^6.0.0: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -encodeurl@^1.0.2, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-inject@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" - integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc= - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== - -eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.16.3, express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" - integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.0" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2, fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@^7.0.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3, glob@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -gzip-size@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handle-thing@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" - integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= - -http-assert@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" - integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw== - dependencies: - deep-equal "~1.0.1" - http-errors "~1.7.2" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@^1.3.1, http-errors@^1.6.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -humanize-number@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" - integrity sha1-EcCvakcWQ2M1iFiASPF5lUFInBg= - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4, ini@~1.3.0: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -invariant@^2.2.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-generator-function@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" - integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== - dependencies: - tsscmp "1.0.6" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -koa-compose@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" - integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= - dependencies: - any-promise "^1.1.0" - -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== - -koa-convert@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" - integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= - dependencies: - co "^4.6.0" - koa-compose "^3.0.0" - -koa-logger@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/koa-logger/-/koa-logger-3.2.1.tgz#ab9db879526db3837cc9ce4fd983c025b1689f22" - integrity sha512-MjlznhLLKy9+kG8nAXKJLM0/ClsQp/Or2vI3a5rbSQmgl8IJBQO0KI5FA70BvW+hqjtxjp49SpH2E7okS6NmHg== - dependencies: - bytes "^3.1.0" - chalk "^2.4.2" - humanize-number "0.0.2" - passthrough-counter "^1.0.0" - -koa-send@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.0.tgz#5e8441e07ef55737734d7ced25b842e50646e7eb" - integrity sha512-90ZotV7t0p3uN9sRwW2D484rAaKIsD8tAVtypw/aBU+ryfV+fR2xrcAwhI8Wl6WRkojLUs/cB9SBSCuIb+IanQ== - dependencies: - debug "^3.1.0" - http-errors "^1.6.3" - mz "^2.7.0" - resolve-path "^1.4.0" - -koa-static@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" - integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== - dependencies: - debug "^3.1.0" - koa-send "^5.0.0" - -koa@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.11.0.tgz#fe5a51c46f566d27632dd5dc8fd5d7dd44f935a4" - integrity sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "~3.1.0" - delegates "^1.0.0" - depd "^1.1.2" - destroy "^1.0.4" - encodeurl "^1.0.2" - error-inject "^1.0.0" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loglevel@^1.6.4: - version "1.6.6" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" - integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" - integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== - dependencies: - semver "^6.0.0" - -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -methods@^1.0.1, methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -"mime-db@>= 1.40.0 < 2": - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== - -mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -moment@^2.22.1: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mysql@^2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.17.1.tgz#62bba4a039a9b2f73638cd1652ce50fc6f682899" - integrity sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA== - dependencies: - bignumber.js "7.2.1" - readable-stream "2.3.6" - safe-buffer "5.1.2" - sqlstring "2.3.1" - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.38: - version "1.1.39" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d" - integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA== - dependencies: - semver "^6.3.0" - -nodemon@^1.19.4: - version "1.19.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" - integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== - dependencies: - chokidar "^2.1.8" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^2.5.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@^2.3.0, on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -only@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= - -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -passthrough-counter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passthrough-counter/-/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa" - integrity sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@1.0.1, path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" - integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^1.1.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= - dependencies: - isarray "0.0.1" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.1" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -pstree.remy@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" - integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -"readable-stream@1 || 2", readable-stream@2.3.6, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== - -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== - dependencies: - private "^0.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== - dependencies: - define-properties "^1.1.2" - -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-path@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" - integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= - dependencies: - http-errors "~1.6.2" - path-is-absolute "1.0.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.3.2, resolve@^1.8.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" - integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== - dependencies: - ajv "^6.10.2" - ajv-keywords "^3.4.1" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== - dependencies: - node-forge "0.9.0" - -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.16, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" - integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -speed-measure-webpack-plugin@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz#69840a5cdc08b4638697dac7db037f595d7f36a0" - integrity sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ== - dependencies: - chalk "^2.0.1" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sqlstring@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" - integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0, statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar@^4: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -terser-webpack-plugin@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^1.7.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.3.9" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" - integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.0" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" - integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= - dependencies: - any-promise "^1.0.0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -undefsafe@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" - integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= - dependencies: - debug "^2.2.0" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urijs@^1.19.0: - version "1.19.6" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.6.tgz#51f8cb17ca16faefb20b9a31ac60f84aa2b7c870" - integrity sha512-eSXsXZ2jLvGWeLYlQA3Gh36BcjF+0amo92+wHPyN1mdR8Nxf75fuEuYTd9c0a+m/vhCjRK0ESlE9YNLW+E1VEw== - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url-parse@^1.4.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" - integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.0.1, uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== - -uuid@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== - -vary@^1.1.2, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== - dependencies: - chokidar "^2.0.2" - graceful-fs "^4.1.2" - neo-async "^2.5.0" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -webpack-bundle-analyzer@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz#39b3a8f829ca044682bc6f9e011c95deb554aefd" - integrity sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g== - dependencies: - acorn "^6.0.7" - acorn-walk "^6.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.15" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" - -webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" - integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.2.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.4" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.25" - schema-utils "^1.0.0" - selfsigned "^1.10.7" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "0.3.19" - sockjs-client "1.4.0" - spdy "^4.0.1" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "12.0.5" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.41.2: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.1" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" - watchpack "^1.6.0" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== - dependencies: - http-parser-js ">=0.4.0 <0.4.11" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" - integrity sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-webpack-plugin@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.5.1.tgz#aeeb68889194da5ec8a864667d46da9e00ee92d5" - integrity sha512-AZ7qJUvhTCBiOtG21aFJUcNuLVo2FFM6JMGKvaUGAH+QDqQAp2iG0nq3GcuXmJOFQR2JjpjhyYkyPrbFKhdjNQ== - dependencies: - chalk "^2.4.0" - debug "^3.1.0" - filesize "^3.6.1" - lodash "^4.17.13" - mkdirp "^0.5.1" - moment "^2.22.1" - write-file-atomic "^2.3.0" - -ws@^6.0.0, ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -ylru@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" - integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==