on master help sign in
Merge branch 'master' into rune-reference-fixes
commit783d40c1c80893d9f80760d6f6b44965a85cd752 authortinnus-napbus <77721746+tinnus-napbus@users.noreply.github.com> dateTue 3 May 2022, 23:18 (4 years ago) parentae7d55c455b5b0
154 files changed+12965−3971
.nvmrc+1 .prettierrc+5 README.md+5−1 components/Contact.js+5−67 components/Container.js+1−1 components/ContentArea.js+1−1 components/CopyLink.js+63 components/EventPreview.js+1−1 components/Footer.js+4−4 components/GuideColumn.js+8 components/Markdown.js+2−2 components/Meta.js+4−2 components/Pagination.js+2−2 components/PostPreview.js+5−3 components/ResourceCard.js+13 components/Search.js+65−6 components/Sidebar.js+2−2 components/Sigil.js+36 components/TableOfContents.js+1−1 components/gateway/Description.js+21 components/gateway/Gateway404.js+27 components/gateway/GatewayHeader.js+29 components/gateway/Image.js+63 components/gateway/MetadataBlock.js+8 components/gateway/MetadataLink.js+14 content/applications/_index.md+3 content/applications/~dister-fabnev-hinmur/escape.md+10 content/applications/~dister-fabnev-hinmur/handshake.md+10 content/applications/~mister-dozzod-dalten/gora.md+9 content/applications/~paldev/face.md+9 content/applications/~paldev/fafa.md+9 content/applications/~paldev/pals.md+9 content/applications/~paldev/picture.md+9 content/applications/~paldev/rumors.md+9 content/applications/~paldev/verse.md+9 content/applications/~pocwet/docs.md+10 content/apprenticeships.md+2−2 content/blog/immunology-for-the-internet-age.md+521 content/coinmarketcap.md+8 content/docs/arvo/clay/clay.md+1−1 content/docs/arvo/clay/marks/_index.md+1−1 content/docs/arvo/clay/marks/marks.md+1−1 content/docs/azimuth/l2/_index.md+4 content/docs/azimuth/l2/layer2.md+3−2 content/docs/azimuth/l2/roller-tutorial.md+212 content/docs/glossary/rollups.md+4−1 content/docs/hoon/hoon-school/egg-timer.md+1−1 content/docs/hoon/hoon-school/list-of-numbers.md+7−1 content/docs/hoon/reference/cheat-sheet.md+1−1 content/docs/userspace/_index.md+4 content/docs/userspace/dist/dist.md+1−1 content/docs/userspace/full-stack/1-intro.md+89 content/docs/userspace/full-stack/10-final.md+118 content/docs/userspace/full-stack/2-types.md+215 content/docs/userspace/full-stack/3-agent.md+338 content/docs/userspace/full-stack/4-json.md+357 content/docs/userspace/full-stack/5-marks.md+97 content/docs/userspace/full-stack/6-eyre.md+79 content/docs/userspace/full-stack/7-react-setup.md+214 content/docs/userspace/full-stack/8-app-logic.md+406 content/docs/userspace/full-stack/9-desk.md+226 content/docs/userspace/full-stack/_index.md+52 content/docs/userspace/gall-guide/10-scry.md+5−4 content/docs/userspace/gall-guide/12-next-steps.md+11−3 content/docs/userspace/gall-guide/7-sur-and-marks.md+9−9 content/docs/userspace/http-api-guide.md+698 content/docs/userspace/threads/examples/child-thread.md+8−5 content/docs/userspace/threads/gall/poke-thread.md+1−1 content/docs/userspace/threads/gall/start-thread.md+2−2 content/docs/userspace/threads/gall/stop-thread.md+1−1 content/docs/userspace/threads/gall/take-facts.md+1−1 content/docs/userspace/threads/gall/take-result.md+1−1 content/events/2022-04-21-developer-call-uqbar-and-urbits-first-blockchain.md+24 content/events/2022-04-26-urbit-foundation-meetup-kingsnight-amsterdam.md+24 content/events/2022-05-06-urbit-weekend-kansas.md+20 content/getting-started/_index.md+1−1 content/grants/app-engram.md+117 content/grants/app-urvault.md+2−2 content/grants/apprenticeship-extending-bitcoin.md+2−2 content/grants/apprenticeship-studio-email.md+1−1 content/grants/books.md+1−1 content/grants/digital-editor-MROB.md+1−1 content/grants/dusko-valve.md+81 content/grants/eth-provider.md+3−3 content/grants/native-planet-2.md+89 content/grants/native-urbit.md+1−1 content/grants/port-maintenance.md+3−3 content/grants/slam.md+11−7 content/grants/value-articles.md+50 content/groups/_index.md+3 content/groups/~bitbet-bolbel/urbit-community.md+14 content/groups/~fabled-faster/new-york.md+10 content/groups/~fabled-faster/structure.md+10 content/groups/~fabled-faster/wind.md+10 content/groups/~hatryx-lastud/other-life.md+10 content/groups/~hiddev-dannut/new-hooniverse.md+11 content/groups/~ladtem-filmyr/urbit-ny-week.md+10 content/groups/~matwet/networked-subject.md+11 content/groups/~middev/the-forge.md+10 content/groups/~napmer-rilnut/wet-brain.md+10 content/groups/~natnex-ronret/door-link.md+10 content/groups/~sillus-mallus/toki-pona.md+11 content/groups/~widbep-faltev/asheville.md+9 content/groups/~winder-dapsym/urchan.md+9 content/guides/getting-an-urbit-id.md+46 content/guides/installing-applications.md+39 content/guides/joining-groups.md+53 content/ids/battus-datsun.md+10 content/ids/bitbet-bolbel.md+4 content/ids/fallyn-balfus.md+8 content/ids/haddef-sigwen.md+10 content/ids/lagrev-nocfep.md+6 content/ids/mallus-fabres.md+12 content/ids/poldec-tonteg.md+14 content/ids/rabsef-bicrym.md+14 content/ids/ravmel-ropdyl.md+8 content/ids/sitful-hatred.md+8 content/proposals.md+6−6 lib/cache.js+3−1 lib/hooks.js+12 lib/lib.js+4−2 next.config.js+9−3 package-lock.json+6577−3668 package.json+21−13 pages/_app.js+2−3 pages/api/search.js+5−3 pages/applications/[[...application]].js+167 pages/applications/submit.js+141 pages/blog.js+7−4 pages/blog/[slug].js+7−4 pages/coinmarketcap.js+21 pages/community/[[...slug]].js+1−1 pages/docs/[[...slug]].js+1−1 pages/events/[slug].js+1−1 pages/getting-started/[[...slug]].js+1−1 pages/grants.js+2−6 pages/grants/[slug].js+7−4 pages/groups/[[...group]].js+152 pages/groups/submit.js+150 pages/guides/[slug].js+75 pages/guides/installing-applications.js+106 pages/ids/[id].js+242 pages/ids/submit.js+168 pages/index.js+43−79 pages/media.js+3−2 pages/media/[slug].js+7−4 pages/understanding-urbit/[[...slug]].js+1−1 pages/updates.js+7−4 pages/updates/[slug].js+7−3 pages/using/[[...slug]].js+1−1 images/favicon.ico → public/images/favicon.ico styles/globals.css+7 tailwind.config.js+4−2 vercel.json+5
.nvmrcnew file+1
@@ -0,0 +1 @@
1+14
.prettierrcnew file+5
@@ -0,0 +1,5 @@
1+{
2+ "tabWidth": 2,
3+ "useTabs": false,
4+ "printWidth": 80
5+}
README.md+5−1
@@ -2,6 +2,10 @@ The website for Urbit.
22
33## Getting Started
44
5+Install Node 14. [nvm](https://github.com/nvm-sh/nvm) should handle this by running `nvm install 14`, then `nvm use` whenever in the repository (or automate it with a script - see [here](https://github.com/nvm-sh/nvm#deeper-shell-integration)).
6+
7+Install our dependencies:
8+
59```bash
610npm install
711```
@@ -29,7 +33,7 @@ To learn more about Tailwind CSS, take a look at the docs:
2933
3034## Deployment
3135
32−WIP
36+We deploy using Vercel. All pull requests will show a deployment preview via the same.
3337
3438## Upgrades
3539
components/Contact.js+5−67
@@ -1,62 +1,10 @@
11import NewsletterSignup from "./NewletterSignup";
22import { name, contact } from "../lib/constants";
3−import { useCopyToClipboard } from "../lib/hooks";
3+import Link from "next/link";
44
55export default function Contact({ emphasize }) {
6− const [copyStatus, copy] = useCopyToClipboard(contact.urbitCommunity);
7−
86 const linkText = emphasize ? "text-green-400" : "text-wall-600";
97 const border = emphasize ? "border-green-400" : "border-wall-600";
10− const washedBg = emphasize ? "bg-green-100" : "bg-wall-100";
11− const iconColor = emphasize ? "#00B171" : "#24221E";
12−
13− const buttonIcon =
14− copyStatus === "inactive" ? (
15− <svg
16− width="16"
17− height="16"
18− viewBox="0 0 16 16"
19− fill="none"
20− xmlns="http://www.w3.org/2000/svg"
21− >
22− <path
23− fillRule="evenodd"
24− clipRule="evenodd"
25− d="M3.2 1.6C3.2 0.716344 3.91634 0 4.8 0H11.3615L14.9333 2.38124V12.2667C14.9333 13.1503 14.217 13.8667 13.3333 13.8667H12.8V14.4C12.8 15.2837 12.0837 16 11.2 16H2.66667C1.78301 16 1.06667 15.2837 1.06667 14.4V3.73333C1.06667 2.84968 1.78301 2.13333 2.66667 2.13333H3.2V1.6ZM3.2 3.2H2.66667C2.37211 3.2 2.13333 3.43878 2.13333 3.73333V14.4C2.13333 14.6946 2.37211 14.9333 2.66667 14.9333H11.2C11.4946 14.9333 11.7333 14.6946 11.7333 14.4V13.8667H4.8C3.91634 13.8667 3.2 13.1503 3.2 12.2667V3.2Z"
26− fill={iconColor}
27− />
28− </svg>
29− ) : copyStatus === "copied" ? (
30− <svg
31− width="16"
32− height="16"
33− viewBox="0 0 16 16"
34− fill="none"
35− xmlns="http://www.w3.org/2000/svg"
36− >
37− <path
38− fillRule="evenodd"
39− clipRule="evenodd"
40− d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM7.54325 11.4247L12.1498 5.66647L11.3169 5.00013L7.39013 9.90859L4.60812 7.59025L3.92526 8.40969L7.54325 11.4247Z"
41− fill={iconColor}
42− />
43− </svg>
44− ) : (
45− <svg
46− width="16"
47− height="16"
48− viewBox="0 0 16 16"
49− fill="none"
50− xmlns="http://www.w3.org/2000/svg"
51− >
52− <path
53− fillRule="evenodd"
54− clipRule="evenodd"
55− d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM10.8229 11.5772L8.00004 8.75429L5.17716 11.5772L4.42292 10.8229L7.24579 8.00004L4.42292 5.17716L5.17716 4.42292L8.00004 7.24579L10.8229 4.42292L11.5772 5.17716L8.75429 8.00004L11.5772 10.8229L10.8229 11.5772Z"
56− fill={iconColor}
57− />
58− </svg>
59− );
608
619 return (
6210 <div>
@@ -79,21 +27,11 @@ export default function Contact({ emphasize }) {
7927 Github
8028 </a>
8129 </h4>
82− <h4 className="mt-4 text-wall-500 flex items-baseline flex-wrap">
30+ <h4 className="mt-6 text-wall-500 flex-wrap">
8331 Boot Urbit and join{" "}
84− <div className="md:ml-2 rounded-lg flex items-stretch">
85− <code
86− className={`rounded-l-lg px-2 md:px-4 py-2 ${washedBg} flex items-center h-full ${linkText}`}
87− >
88− {contact.urbitCommunity}
89− </code>
90− <button
91− className={`rounded-r-lg px-4 ml-0.5 flex-1 flex justify-center items-center ${washedBg}`}
92− onClick={() => copy()}
93− >
94− {buttonIcon}
95− </button>
96− </div>
32+ <Link href={`/groups/${contact.urbitCommunity}`}>
33+ <a className={linkText}>Urbit Community</a>
34+ </Link>
9735 </h4>
9836 </div>
9937 );
components/Container.js+1−1
@@ -1,7 +1,7 @@
11// Ensures the root container is always 100vw, min 100vh, and centers all children along the y-axis
22export default function Container({ children }) {
33 return (
4− <div className="flex flex-col min-h-screen w-screen items-center">
4+ <div className="flex flex-col min-h-screen w-screen max-w-full items-center">
55 {children}
66 </div>
77 );
components/ContentArea.js+1−1
@@ -46,7 +46,7 @@ export default function ContentArea(props) {
4646 ref={scrollBox}
4747 className="px-4 md:px-12 lg:px-24 pb-24 pt-8 md:pt-10 lg:pt-16 flex flex-col w-full max-w-screen-xl max-h-screen h-screen overflow-y-scroll"
4848 >
49− <div className="flex justify-between w-full items-center flex-shrink-0">
49+ <div className="flex justify-between w-full items-center shrink-0">
5050 <div className="type-ui text-wall-500">{props.breadcrumbs}</div>
5151 <div className="hidden md:block">
5252 <button
components/CopyLink.jsnew file+63
@@ -0,0 +1,63 @@
1+import { useCopyToClipboard } from "../lib/hooks";
2+
3+export default function CopyLink({ content, className }) {
4+ const [copyStatus, copy] = useCopyToClipboard(content);
5+
6+ const buttonIcon =
7+ copyStatus === "inactive" ? (
8+ <svg
9+ width="16"
10+ height="16"
11+ viewBox="0 0 16 16"
12+ fill="none"
13+ xmlns="http://www.w3.org/2000/svg"
14+ >
15+ <path
16+ fillRule="evenodd"
17+ clipRule="evenodd"
18+ d="M3.2 1.6C3.2 0.716344 3.91634 0 4.8 0H11.3615L14.9333 2.38124V12.2667C14.9333 13.1503 14.217 13.8667 13.3333 13.8667H12.8V14.4C12.8 15.2837 12.0837 16 11.2 16H2.66667C1.78301 16 1.06667 15.2837 1.06667 14.4V3.73333C1.06667 2.84968 1.78301 2.13333 2.66667 2.13333H3.2V1.6ZM3.2 3.2H2.66667C2.37211 3.2 2.13333 3.43878 2.13333 3.73333V14.4C2.13333 14.6946 2.37211 14.9333 2.66667 14.9333H11.2C11.4946 14.9333 11.7333 14.6946 11.7333 14.4V13.8667H4.8C3.91634 13.8667 3.2 13.1503 3.2 12.2667V3.2Z"
19+ fill="#ffffff"
20+ />
21+ </svg>
22+ ) : copyStatus === "copied" ? (
23+ <svg
24+ width="16"
25+ height="16"
26+ viewBox="0 0 16 16"
27+ fill="none"
28+ xmlns="http://www.w3.org/2000/svg"
29+ >
30+ <path
31+ fillRule="evenodd"
32+ clipRule="evenodd"
33+ d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM7.54325 11.4247L12.1498 5.66647L11.3169 5.00013L7.39013 9.90859L4.60812 7.59025L3.92526 8.40969L7.54325 11.4247Z"
34+ fill="#ffffff"
35+ />
36+ </svg>
37+ ) : (
38+ <svg
39+ width="16"
40+ height="16"
41+ viewBox="0 0 16 16"
42+ fill="none"
43+ xmlns="http://www.w3.org/2000/svg"
44+ >
45+ <path
46+ fillRule="evenodd"
47+ clipRule="evenodd"
48+ d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM10.8229 11.5772L8.00004 8.75429L5.17716 11.5772L4.42292 10.8229L7.24579 8.00004L4.42292 5.17716L5.17716 4.42292L8.00004 7.24579L10.8229 4.42292L11.5772 5.17716L8.75429 8.00004L11.5772 10.8229L10.8229 11.5772Z"
49+ fill="#ffffff"
50+ />
51+ </svg>
52+ );
53+
54+ return (
55+ <button
56+ className={`bg-wall-600 p-4 rounded-xl button-lg text-white flex items-center justify-center space-x-4 ${className}`}
57+ onClick={() => copy()}
58+ >
59+ <h4 className="">{copyStatus === "copied" ? "Copied" : "Copy Link"}</h4>
60+ {buttonIcon}
61+ </button>
62+ );
63+}
components/EventPreview.js+1−1
@@ -78,7 +78,7 @@ export default function EventPreview({ event, className, big }) {
7878 className={`flex flex-col p-6 justify-between items-between h-full relative`}
7979 >
8080 <div
81− className={`flex-grow-1 flex ${
81+ className={`grow-1 flex ${
8282 big ? "justify-center" : ""
8383 } flex-col h-full`}
8484 >
components/Footer.js+4−4
@@ -8,7 +8,7 @@ export default function Footer() {
88 <footer className="bg-wall-100 mt-20 w-full flex justify-center">
99 <SingleColumn>
1010 <Section short className="flex flex-row flex-wrap">
11− <div className="w-1/2 md:w-1/3 flex flex-col flex-shrink">
11+ <div className="w-1/2 md:w-1/3 flex flex-col shrink">
1212 <h4 className="mt-16 mb-8">Use Urbit</h4>
1313 <Link href="/getting-started">
1414 <div>
@@ -45,7 +45,7 @@ export default function Footer() {
4545 </div>
4646 </Link>
4747 </div>
48− <div className="w-1/2 md:w-1/3 flex flex-col flex-shrink">
48+ <div className="w-1/2 md:w-1/3 flex flex-col shrink">
4949 <h4 className="mt-16 mb-8">About</h4>
5050 <Link href="/understanding-urbit">
5151 <div>
@@ -72,13 +72,13 @@ export default function Footer() {
7272 <a className="mt-2 type-bold text-wall-500">FAQ</a>
7373 </div>
7474 </Link>
75− <Link href="//media.urbit.org/whitepaper.pdf">
75+ <Link href="https://media.urbit.org/whitepaper.pdf">
7676 <div>
7777 <a className="mt-2 type-bold text-wall-500">Whitepaper</a>
7878 </div>
7979 </Link>
8080 </div>
81− <div className="w-1/2 md:w-1/3 flex flex-col flex-shrink">
81+ <div className="w-1/2 md:w-1/3 flex flex-col shrink">
8282 <h4 className="mt-16 mb-8">News</h4>
8383 <Link href="/blog">
8484 <div>
components/GuideColumn.jsnew file+8
@@ -0,0 +1,8 @@
1+// Guide Column
2+export default function GuideColumn({ children }) {
3+ return (
4+ <div className="flex flex-col w-full items-center py-20 max-w-screen-2xl">
5+ {children}
6+ </div>
7+ );
8+}
components/Markdown.js+2−2
@@ -43,11 +43,11 @@ const options = {
4343};
4444
4545// Converts markdown strings into markdown HTML/React components
46−export default async function Markdown({ post }) {
46+export default async function Markdown({ post }, disablePlugins) {
4747 const result = await remark()
4848 .use(remarkParse, options)
4949 .use(remarkprism, {
50− plugins: ["show-invisibles"],
50+ plugins: !disablePlugins ? ["show-invisibles"] : [],
5151 })
5252 .use(gfm)
5353 .use(slug)
components/Meta.js+4−2
@@ -1,4 +1,4 @@
1−export default function Meta(post) {
1+export default function Meta(post, disableImage) {
22 const author = post?.extra?.author || "Urbit";
33 const title = post?.title ? `${post.title} - ` : "";
44 const description =
@@ -19,7 +19,9 @@ export default function Meta(post) {
1919 <meta name="og:description" content={description} key="description" />
2020 <meta name="description" content={description} />
2121 <meta name="author" content={author} key="author" />
22− <meta name="twitter:image" content={image} key="image" />
22+ {!disableImage && (
23+ <meta name="twitter:image" content={image} key="image" />
24+ )}
2325 <link
2426 rel="alternative"
2527 type="application/rss+xml"
components/Pagination.js+2−2
@@ -11,9 +11,9 @@ export default function Pagination(props) {
1111 className="bg-wall-100 cursor-pointer font-semibold p-2 px-4 rounded-xl flex"
1212 style={{ maxWidth: "45%" }}
1313 >
14− <p className="flex-shrink-0 pr-1">{props.previous ? "<- " : ""}</p>
14+ <p className="shrink-0 pr-1">{props.previous ? "<- " : ""}</p>
1515 <p className="text-wall-600 truncate">{props.post.title}</p>
16− <p className="flex-shrink-0 pl-1">{props.next ? " ->" : ""}</p>
16+ <p className="shrink-0 pl-1">{props.next ? " ->" : ""}</p>
1717 </div>
1818 </Link>
1919 );
components/PostPreview.js+5−3
@@ -28,9 +28,11 @@ export default function PostPreview(props) {
2828 </div>
2929 ) : null}
3030 {props.post.extra.ship ? (
31− <div className="type-sub-bold text-wall-500 font-mono">
32− {props.post.extra.ship}
33− </div>
31+ <Link href={`/ids/${props.post.extra.ship}`}>
32+ <a className="type-sub-bold text-wall-500 font-mono">
33+ {props.post.extra.ship}
34+ </a>
35+ </Link>
3436 ) : null}
3537 </div>
3638 <div className="text-wall-500 type-sub mt-1">{formatDate(date)}</div>
components/ResourceCard.jsnew file+13
@@ -0,0 +1,13 @@
1+import Link from "next/link";
2+import GatewayImage from "./gateway/Image";
3+
4+const ResourceCard = ({ type, shortcode, title, color, image }) => (
5+ <Link href={`/${type}s/${shortcode}`}>
6+ <div className="cursor-pointer rounded-xl bg-wall-100 p-4 flex items-center space-x-4 mr-2 my-1">
7+ <GatewayImage color={color} image={image || color} size={50} />
8+ <a className="font-semibold">{title}</a>
9+ </div>
10+ </Link>
11+);
12+
13+export default ResourceCard;
components/Search.js+65−6
@@ -1,7 +1,10 @@
11import { Component, createRef } from "react";
22import { glossary } from "../lib/glossary";
33import { withRouter } from "next/router";
4+import debounce from "lodash.debounce";
45import Downshift from "downshift";
6+import ob from "urbit-ob";
7+import Sigil from "../components/Sigil";
58
69class Search extends Component {
710 constructor(props) {
@@ -13,6 +16,7 @@ class Search extends Component {
1316 this.onInputValueChange = this.onInputValueChange.bind(this);
1417 this.onSelect = this.onSelect.bind(this);
1518 this.glossarySearch = this.glossarySearch.bind(this);
19+ this.patpSearch = this.patpSearch.bind(this);
1620 }
1721
1822 searchEndpoint(query) {
@@ -25,6 +29,14 @@ class Search extends Component {
2529 });
2630 }
2731
32+ patpSearch(query) {
33+ return (
34+ (ob.isValidPatp(`~${deSig(query.toLowerCase())}`) &&
35+ `~${deSig(query.toLowerCase())}`.length < 15) ||
36+ (!isNaN(query) && query <= 4294967295)
37+ );
38+ }
39+
2840 onSelect(item) {
2941 if (item.slug) {
3042 this.props.router.push(item.slug);
@@ -38,7 +50,7 @@ class Search extends Component {
3850 this.props.closeSearch();
3951 }
4052
41− onInputValueChange(query) {
53+ onInputValueChange = debounce((query) => {
4254 if (query.length) {
4355 fetch(this.searchEndpoint(query))
4456 .then((res) => res.json())
@@ -49,19 +61,37 @@ class Search extends Component {
4961 content: item,
5062 }));
5163
64+ const patp = this.patpSearch(query)
65+ ? !isNaN(query)
66+ ? ob.patp(query)
67+ : ob.patp(ob.patp2dec(`~${deSig(query)}`))
68+ : null;
69+
70+ const patpResult = this.patpSearch(query)
71+ ? [
72+ {
73+ type: "PATP",
74+ content: {
75+ patp: patp,
76+ slug: `/ids/${patp}`,
77+ },
78+ },
79+ ]
80+ : [];
81+
5282 const glossaryResults = this.glossarySearch(query).map((item) => ({
5383 type: "GLOSSARY_RESULT",
5484 content: item,
5585 }));
5686
57− const list = [...glossaryResults, ...results];
87+ const list = [...glossaryResults, ...patpResult, ...results];
5888
5989 this.setState({ results: list });
6090 });
6191 } else {
6292 this.setState({ results: [] });
6393 }
64− }
94+ }, 250);
6595
6696 render() {
6797 const { state, props } = this;
@@ -116,6 +146,30 @@ class Search extends Component {
116146 {isOpen
117147 ? state.results.map((item, index) => {
118148 const selected = highlightedIndex === index;
149+ if (item.type === "PATP") {
150+ return (
151+ <li
152+ className={`cursor-pointer p-2 flex space-x-2 items-center text-left w-full ${
153+ selected ? "bg-green-400" : ""
154+ }`}
155+ {...getItemProps({
156+ key: item.content.slug + "-" + index,
157+ index,
158+ item: item.content,
159+ selected: highlightedIndex === index,
160+ })}
161+ >
162+ <div className="rounded-md overflow-hidden">
163+ <Sigil
164+ patp={item.content.patp}
165+ size={25}
166+ icon
167+ />
168+ </div>
169+ <p className="font-mono">{item.content.patp}</p>
170+ </li>
171+ );
172+ }
119173 if (item.type === "GLOSSARY_RESULT") {
120174 return (
121175 <li
@@ -152,9 +206,10 @@ class Search extends Component {
152206 className={`font-normal text-base mt-1 ${
153207 selected ? "text-white" : "text-wall-600"
154208 }`}
155− >
156− {item.content.desc}
157− </p>
209+ dangerouslySetInnerHTML={{
210+ __html: item.content.desc,
211+ }}
212+ ></p>
158213 </div>
159214 </li>
160215 );
@@ -209,4 +264,8 @@ class Search extends Component {
209264 }
210265}
211266
267+function deSig(string) {
268+ return string.startsWith("~") ? string.substring(1) : string;
269+}
270+
212271export default withRouter(Search);
components/Sidebar.js+2−2
@@ -7,7 +7,7 @@ export default function Sidebar(props) {
77 return (
88 <>
99 <div className="hidden md:flex flex-col w-96 bg-wall-100 max-h-screen h-screen">
10− <header className="flex flex-shrink-0 justify-between items-center pl-6 pt-12 mt-5 pb-8">
10+ <header className="flex shrink-0 justify-between items-center pl-6 pt-12 mt-5 pb-8">
1111 <Link href="/">
1212 <a className="type-ui text-wall-500">Urbit</a>
1313 </Link>
@@ -19,7 +19,7 @@ export default function Sidebar(props) {
1919 </div>
2020
2121 <MenuTray isOpen={isOpen} setTray={setTray} search={props.search}>
22− <header className="flex flex-shrink-0 justify-between items-center pb-8">
22+ <header className="flex shrink-0 justify-between items-center pb-8">
2323 <Link href="/">
2424 <a className="type-ui text-wall-500">Urbit</a>
2525 </Link>
components/Sigil.jsnew file+36
@@ -0,0 +1,36 @@
1+import { sigil, reactRenderer } from "@tlon/sigil-js";
2+
3+export const foregroundFromBackground = (background) => {
4+ const rgb = {
5+ r: parseInt(background.slice(1, 3), 16),
6+ g: parseInt(background.slice(3, 5), 16),
7+ b: parseInt(background.slice(5, 7), 16),
8+ };
9+ const brightness = (299 * rgb.r + 587 * rgb.g + 114 * rgb.b) / 1000;
10+ const whiteBrightness = 255;
11+
12+ return whiteBrightness - brightness < 50 ? "black" : "white";
13+};
14+
15+export const Sigil = ({ patp, size, color = "#24201E", icon }) => {
16+ if (patp.length > 14) {
17+ return <div />;
18+ }
19+ const foreground = foregroundFromBackground(color);
20+ return (
21+ <div
22+ className={icon ? "p-1" : ""}
23+ style={{ backgroundColor: icon ? color || "black" : "transparent" }}
24+ >
25+ {sigil({
26+ patp: patp,
27+ renderer: reactRenderer,
28+ size: icon ? size / 2 : size,
29+ colors: [color, foreground],
30+ icon: icon || false,
31+ })}
32+ </div>
33+ );
34+};
35+
36+export default Sigil;
components/TableOfContents.js+1−1
@@ -8,7 +8,7 @@ export const TableOfContents = ({ staticPosition, noh3s }) => {
88 <nav
99 className={
1010 (staticPosition ? "static" : "sticky") +
11− " min-h-0 overflow-y-auto w-52 flex-shrink-0 pb-24 hidden lg:block pl-4"
11+ " min-h-0 overflow-y-auto w-52 shrink-0 pb-24 hidden lg:block pl-4"
1212 }
1313 style={{ top: "8rem", height: "calc(100vh - 16rem)" }}
1414 >
components/gateway/Description.jsnew file+21
@@ -0,0 +1,21 @@
1+import { decode } from "html-entities";
2+
3+const Description = ({ description, fallback, markdown }) => {
4+ return (
5+ (description !== fallback || markdown) && (
6+ <div className="flex flex-col space-y-4">
7+ <p className="font-bold text-wall-400">Description</p>
8+ {markdown ? (
9+ <div
10+ className="flex flex-col space-y-4"
11+ dangerouslySetInnerHTML={{ __html: decode(markdown) }}
12+ />
13+ ) : (
14+ <p>{description}</p>
15+ )}
16+ </div>
17+ )
18+ );
19+};
20+
21+export default Description;
components/gateway/Gateway404.jsnew file+27
@@ -0,0 +1,27 @@
1+import GatewayHeader from "./GatewayHeader";
2+import Container from "../Container";
3+import SingleColumn from "../SingleColumn";
4+import Section from "../Section";
5+import Link from "next/link";
6+
7+const Gateway404 = ({ type }) => {
8+ return (
9+ <Container>
10+ <SingleColumn>
11+ <Section narrow className="space-y-12">
12+ <GatewayHeader
13+ title="Error 404"
14+ error
15+ item={`No ${type} at this address`}
16+ />
17+ <hr className="text-wall-200" />
18+ <Link href="/">
19+ <a className="text-xl block font-semibold">Urbit.org</a>
20+ </Link>
21+ </Section>
22+ </SingleColumn>
23+ </Container>
24+ );
25+};
26+
27+export default Gateway404;
components/gateway/GatewayHeader.jsnew file+29
@@ -0,0 +1,29 @@
1+import GatewayImage from "./Image";
2+
3+const GatewayHeader = ({
4+ image,
5+ patp,
6+ color,
7+ subtitle,
8+ subtitleMono,
9+ error,
10+ title,
11+ item,
12+}) => {
13+ return (
14+ <div className="flex items-center space-x-4">
15+ <GatewayImage patp={patp} color={color} image={image} error={error} />
16+ <div className="flex flex-col">
17+ <h2>{title}</h2>
18+ {subtitle && (
19+ <p className={(subtitleMono ? "font-mono" : "font-sans") + " pb-1"}>
20+ {subtitle}
21+ </p>
22+ )}
23+ <p>{item}</p>
24+ </div>
25+ </div>
26+ );
27+};
28+
29+export default GatewayHeader;
components/gateway/Image.jsnew file+63
@@ -0,0 +1,63 @@
1+import Sigil from "../Sigil";
2+
3+const GatewayImage = ({
4+ error = false,
5+ patp = false,
6+ color = "transparent",
7+ image = "",
8+ size = 100,
9+}) => {
10+ if (error) {
11+ return (
12+ <div className="overflow-hidden rounded-xl">
13+ <svg
14+ width={size}
15+ height={size}
16+ viewBox="0 0 100 100"
17+ fill="none"
18+ xmlns="http://www.w3.org/2000/svg"
19+ >
20+ <rect width="100" height="100" rx="10" fill="#24201E" />
21+ <path
22+ d="M28.8906 27.9844C28.5019 28.0215 28.1699 28.2833 28.043 28.6524C27.914 29.0235 28.0137 29.4336 28.2969 29.7032L70.2969 71.7032C70.4844 71.8965 70.7402 72.0059 71.0098 72.0059C71.2773 72.0079 71.5352 71.9004 71.7246 71.709C71.9141 71.5176 72.0176 71.2598 72.0137 70.9903C72.0098 70.7227 71.8984 70.4668 71.7031 70.2813L66.2501 64.8283C69.8204 60.9181 72.0001 55.7073 72.0001 50.0003C72.0001 37.8618 62.1386 28.0003 50.0001 28.0003C44.2931 28.0003 39.0976 30.1956 35.1876 33.7658L29.7031 28.2813C29.4922 28.0645 29.1934 27.9551 28.8906 27.9844L28.8906 27.9844ZM50.0001 30C61.0566 30 70.0001 38.9435 70.0001 50C70.0001 55.17 68.0411 59.8575 64.8281 63.406L36.5936 35.1715C40.1405 31.9606 44.8336 29.9995 49.9996 29.9995L50.0001 30ZM32.1721 37.8125C31.842 37.8321 31.5452 38.0137 31.3752 38.2969C29.2424 41.6856 28.0002 45.7029 28.0002 49.9999C28.0002 62.1384 37.8617 71.9999 50.0002 71.9999C54.2951 71.9999 58.3147 70.7558 61.7032 68.6249C62.1739 68.3319 62.3165 67.7128 62.0235 67.2421C61.7305 66.7714 61.1114 66.6288 60.6407 66.9218C57.5587 68.8593 53.9122 69.9999 50.0002 69.9999C38.9437 69.9999 30.0002 61.0564 30.0002 49.9999C30.0002 46.0878 31.1233 42.4414 33.0627 39.3594C33.2697 39.043 33.2815 38.6387 33.092 38.3125C32.9045 37.9844 32.5491 37.7929 32.1721 37.8125L32.1721 37.8125Z"
23+ fill="white"
24+ />
25+ </svg>
26+ </div>
27+ );
28+ }
29+
30+ if (patp) {
31+ return (
32+ <div className="rounded-xl overflow-hidden">
33+ <Sigil patp={patp} size={size} color={color} />
34+ </div>
35+ );
36+ }
37+
38+ if (image?.startsWith("#")) {
39+ return (
40+ <div
41+ style={{ height: size, width: size, backgroundColor: image }}
42+ className="rounded-xl"
43+ />
44+ );
45+ }
46+
47+ return image ? (
48+ <div
49+ className="rounded-xl overflow-hidden"
50+ style={{ backgroundColor: color }}
51+ >
52+ <img src={image} style={{ height: size, width: size }} />
53+ </div>
54+ ) : (
55+ <img
56+ className="object-contain shadow-sm rounded-xl"
57+ style={{ height: size, width: size }}
58+ src="https://media.urbit.org/public-links/placeholder-image.png"
59+ />
60+ );
61+};
62+
63+export default GatewayImage;
components/gateway/MetadataBlock.jsnew file+8
@@ -0,0 +1,8 @@
1+const MetadataBlock = ({ title, content }) => (
2+ <div className="flex flex-col basis-1/2 mb-4 md:mb-0 flex-1">
3+ <p className="font-bold text-wall-400">{title}</p>
4+ <p className="font-mono">{content}</p>
5+ </div>
6+);
7+
8+export default MetadataBlock;
components/gateway/MetadataLink.jsnew file+14
@@ -0,0 +1,14 @@
1+import Link from "next/link";
2+
3+const MetadataLink = ({ title, href, content }) => (
4+ <div className="flex flex-col basis-1/2 min-w-0 flex-1">
5+ <p className="font-bold text-wall-400">{title}</p>
6+ <Link href={href}>
7+ <div className="flex truncate">
8+ <a className="type-ui truncate font-mono text-green-400">{content}</a>
9+ </div>
10+ </Link>
11+ </div>
12+);
13+
14+export default MetadataLink;
content/applications/_index.mdnew file+3
@@ -0,0 +1,3 @@
1++++
2+title = "Application Directory"
3++++
content/applications/~dister-fabnev-hinmur/escape.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "EScape"
3+developer = "dister-fabnev-hinmur"
4+shortcode = "~dister-fabnev-hinmur/escape"
5+description = "EScape from Eternal September. The UI from Uqbar."
6+license = "MIT"
7+website = "https://uqbar.network"
8+bgColor = "#f2f3ef"
9+image = "https://escape-app-dist.s3.us-east-2.amazonaws.com/uqbar-logo.png"
10++++
content/applications/~dister-fabnev-hinmur/handshake.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "Handshake"
3+developer = "~dister-fabnev-hinmur"
4+shortcode = "~dister-fabnev-hinmur/handshake"
5+description = "Confirm Urbit IDs via QR code."
6+license = "MIT"
7+website = "https://uqbar.network"
8+bgColor = "#df828b"
9+image = "https://static.thenounproject.com/png/2002633-200.png"
10++++
content/applications/~mister-dozzod-dalten/gora.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "Gora - ピタゴラ装置"
3+developer = "Dalten"
4+shortcode = "~mister-dozzod-dalten/gora"
5+description = "A Proof of Attendance Protocol for Urbit"
6+license = "MIT"
7+website = "https://dalten.org"
8+bgColor = "#FCD977"
9++++
content/applications/~paldev/face.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "face"
3+developer = "~paldev"
4+shortcode = "~paldev/face"
5+description = "see your friends"
6+license = "MIT"
7+website = "https://pal.dev/suite/face"
8+bgColor = "#3b5998"
9++++
content/applications/~paldev/fafa.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "fafa"
3+developer = "~paldev"
4+shortcode = "~paldev/fafa"
5+description = "2fa otp authenticator app"
6+license = "MIT"
7+website = "https://pal.dev/suite/fafa"
8+bgColor = "#1a1a2a"
9++++
content/applications/~paldev/pals.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "pals"
3+shortcode = "~paldev/pals"
4+developer = "~paldev"
5+description = "friendlist for peer discovery"
6+license = "MIT"
7+website = "https://pal.dev/suite/pals"
8+bgColor = "#99D3BD"
9++++
content/applications/~paldev/picture.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "picture"
3+developer = "~paldev"
4+shortcode = "~paldev/picture"
5+description = "a picture frame for the garden"
6+license = "MIT"
7+website = "https://pal.dev/suite/picture"
8+bgColor = "#DDDDDD"
9++++
content/applications/~paldev/rumors.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "rumors"
3+shortcode = "~paldev/rumors"
4+developer = "~paldev"
5+description = "anonymous gossip from friends of friends"
6+license = "MIT"
7+website = "https://pal.dev/suite/rumors"
8+bgColor = "#bb77dd"
9++++
content/applications/~paldev/verse.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "verse"
3+developer = "~paldev"
4+shortcode = "~paldev/verse"
5+description = "a random Bible verse, every day"
6+license = "MIT"
7+website = "https://pal.dev/suite/verse"
8+bgColor = "#EEEEDD"
9++++
content/applications/~pocwet/docs.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "Docs"
3+developer = "~pocwet"
4+shortcode = "~pocwet/docs"
5+description = "User and developer documentation for Urbit apps"
6+license = "MIT"
7+website = "https://github.com/tinnus-napbus/docs-app"
8+bgColor = "#FBCF44"
9+image = "https://m.tinnus-napbus.xyz/pub/books.svg"
10++++
content/apprenticeships.md+2−2
@@ -1,6 +1,6 @@
11+++
22title = "Become an Apprentice"
3−date = "2022-01-27"
3+date = "2022-03-27"
44weight = 1
55description = "Everything you need to know about applying for an apprenticeship"
66+++
@@ -36,4 +36,4 @@ When a mentor has signed off on the apprentice's work, the mentor will notify th
3636
3737## Funding
3838
39−Apprenticeships pay a flat $8,000 in WSTR to the apprentice, and $2,000 WSTR to the mentor.
39+Apprenticeships pay $4,000 in WSTR per month to the apprentice and $1,000 WSTR per month to the mentor, for a limit of up to three months.
content/blog/immunology-for-the-internet-age.mdnew file+521
@@ -0,0 +1,521 @@
1++++
2+title = "Immunology for the Internet Age"
3+date = "2022-04-07"
4+description = "A consideration of the history of the Internet motivates introspection on the nature and causes of social dysfunction in a globally shared space. Centralized solutions fail to yield satisfactory outcomes for human freedom and thriving. Decentralized autonomous organizations and their technological apparatus together represent the evolution of an immune system against a corporatized Internet."
5+[extra]
6+author = ""
7+ship = "~lagrev-nocfep"
8+image = "https://live.staticflickr.com/4322/35891780782_4179f476f9_k.jpg"
9++++
10+
11+_A version of the following was presented by ~lagrev-nocfep at the [MTAConf 2022
12+conference on “The Decentralization of Power”](https://www.mtaconf.org/)._
13+
14+**✿**
15+
16+IN THE BEGINNING, *God created the prokaryotes. And the
17+prokaryotes were without nucleus and organelle; and structural
18+simplicity was upon the face of the deep. And chemotaxis moved it upon
19+the face of the waters.*
20+
21+A single-celled organism possesses many advantages, notably simplicity
22+of form. Being largely indistinguishable, they have no differentiation
23+or specialization. Prokaryotes often form large colonies, such as the
24+cyanobacteria. Some prokaryotes discovered early on that it paid better
25+to consume resources that had already been processed into usable form by
26+another cell, rather than to process those resources oneself. Thus
27+predator and prey were born, and they have always exemplified divergent
28+competitive evolutionary strategies. The resulting arms race meant that
29+predators were continually adapting to better extract resources from
30+prey, while prey were evolving to evade, resist, fight, or poison
31+predators. Selection pressures applied at individual, species, and clade
32+levels, lead to speciation across deep time.
33+
34+More complex forms seemed better able to evade predators, and thus
35+simple symbiotic alliances between differentiated prokaryotes evolved
36+into the eukaryotes (yielding specialized features such as the nucleus
37+and mitochondria) and multicellular life forms. Simpler forms also
38+abounded, including the liminal virus. Viruses are forms of near-life so
39+simple that they simply exploit cells to reproduce. They are entirely
40+predatory or at best symbiotic with other life. Evasion of pathogenic
41+disease, or disequilibrated colonization by simpler forms of life, has
42+been a---if not the---primary driver towards increasing complexity in
43+multicellular life.[^1]
44+
45+**✿**
46+
47+The Internet began in the late 1960s, born of scientific alliance
48+between the Cold War Department of Defense and the academic research
49+community.[^2] This community had a signal advantage over many
50+subsequent communities: it was dominated by strong norms of discourse
51+which shaped the professionalism of the community. This is not to
52+discount the significance of courtly intrigue, of course, which deftly
53+exploited tensions between competing systems.[^3] [^4] [^5]
54+Throughout this era, though, the Internet generally functioned as a
55+real-name high-trust environment---if not exactly of peers, at least of
56+colleagues.
57+
58+The Internet evolved as a coordination mechanism---literally a nervous
59+system incarnate in copper and silicon---particularly through the Usenet
60+days of the 1980s. In our days of heightened online tension and mediated
61+preference cascades, it is rather quaint to go back and look at what
62+qualified as email flame wars at the time (e.g. Torvalds/Tanenbaum). One
63+hallmark of the Usenet era, however, is a gradually eroding social
64+trust: spam was invented[^6] and Internet-based scams started to spin
65+up. Pseudonymity gained in popularity as a countermeasure to both of
66+these as well as restrictions on discourse. The revelation that
67+persistent digital records could cost someone's job[^7] further fueled a
68+cyberpunk-like obsession with identity control and hacking.
69+
70+Computer viruses could propagate for the first time: it never made much
71+sense to build a computer virus until systems were connected. Although
72+John von Neumann and others early explored the possibility of
73+mathematical or code structures which could self-replicate, it was not
74+until the Creeper virus in the 1970s that self-replicating code was
75+observed in the wild. And like a bacillus in an immune system-free host,
76+code-based computer viruses began to spread from the 1980s onwards.
77+
78+The crisis arrived in the form of the World Wide Web. Founded initially
79+on a belief in the democratization of information, the Web rapidly
80+became dominated by a handful of large corporations (henceforth
81+"megacorps"). User experience became the predominant driver of adoption,
82+leading to rapid preference cascades as new platforms became available.
83+Any child of the 90s or earlier can recite the lived litany: Ebay,
84+MySpace, Friendster. Initially these served as proofs-of-concept, then
85+became the only significant player (until the next killer app came
86+along). Search engines drove discovery, then focused attention
87+asymmetrically. The "walled garden" approach of AOL, then Apple and
88+Facebook, led to concentrations of users which tipped the balance from
89+single webpage hosts presenting their own idiosyncratic views to
90+corporate-approved genericity and ultimately censorship.[^8]
91+
92+**✿**
93+
94+When was the first time you did something in the physical world because
95+of something you read or encountered online? For generations born after
96+the advent of the Web, they may not recall such a time when meatspace
97+existence wasn't driven by life online. As Internet data sources have
98+overwhelmed traditional media, publishing, and distribution services,
99+the resulting tsunami of information and informatization has swept into
100+every corner of lived human experience in technological societies. The
101+psychological (memetic) virus problem is much greater than actual code
102+viruses. The ongoing universal exposure to alien and internally
103+incoherent value systems has undergirded the well-documented crisis of
104+credibility (collapse of meaning) that all Western institutions are
105+experiencing today. The World Wide Web and its technological
106+predecessors acted as a cultural petri dish of clean agar, which grew
107+every spore and germ which fell upon it. We live in the midst of a
108+memetic epidemic because of the World Wide Web, and the dominant strain
109+is corporate, approved by a marketing department and run through a
110+search-engine optimization algorithm.
111+
112+The turn towards a low-trust then zero-trust environment was inevitable
113+if anything like an analogy with prokaryotic evolution holds true. The
114+megacorp platforms are in a way worse than a purely zero-trust
115+environment, because they don't advertise that the world is zero-trust.
116+Thereby they lure the unwary into transgressing arbitrary global norms
117+and courting the wrath of social media mobs and the concomitant loss of
118+access to their data held in "trust." To mix a metaphor, megacorps are
119+apex predators---at best, sheepdogs with a strong strain of wolfishness;
120+at worst, tar pits manned by various bad-faith actors. The pre-Web
121+cypherpunks were right: "Privacy is the power to selectively reveal
122+oneself to the world."[^9] If anything, they were too narrow; not only
123+their valued "open society" (polyvalent crypto-anarchy) but *any*
124+non-megacorp society at all requires true privacy.
125+
126+What cyberspace (and human culture writ broadly) needed was an immune
127+system---and in good Darwinian form, such an immune system has been
128+evolving before our eyes. An immune system formally consists of layers
129+with increasing specificity: first surface barriers, then the innate
130+immune system, and finally the adaptive immune system. The objective of
131+the immune system is to protect the organism: in this case, human
132+sociality and agency.
133+
134+First, what is human sociality? Human culture has been the means of
135+participating in the Great Discussion which ranges from the earliest
136+days of oral culture to the birth of literacy and libraries down to our
137+day. High culture and low culture have both articulated and preserved
138+valuable insights and forms of human flourishing. However, throughout
139+the 20^th^ century and particularly by the means of the consumer
140+revolution, our lives have been thoroughly colonized by capital and
141+commercial instruments. So-called "economies of scale" have disrupted
142+smallholders, artisans, and shopkeepers to the extent that these have
143+been virtually eradicated from the modern landscape in favor of the
144+plastic and polluting "dark Satanic mills." Although small-scale
145+"provident living" has supported gardening, canning, and home
146+production, none of this has survived across a large enough cultural
147+segment to matter macroscopically, and it has unfortunately been tarred
148+with the "prepper" brush that delegitimizes economic downsizing as
149+antisocial because anticapitalist. The siren call of cheap consumer
150+goods has ushered in a generational collapse in self-sufficiency and
151+resulted in the complete colonization of entertainment, food
152+consumption, and self-care by massive corporate brands. Not only have
153+physical goods entered a post-consumer phase, but only certain classes
154+of ideas, attitudes, political stances, regional accents, and
155+sensibilities enjoy the sanction of megacorp sociality. There is
156+essentially no native culture left, only that forged in the enterprise
157+brand management office.[^10]
158+
159+In an immune system, *surface barriers* are designed to make it hard for
160+exogenous agents to enter a cell or organism; in our analogy, the
161+primary surface barrier was the match of physical separation to
162+psychological separation. Surface barriers were rendered finally
163+obsolete by the launch of the World Wide Web and its subsequent
164+infiltration of every aspect of human culture. To the extent they exist
165+today, it is a matter of ignorance, self-discipline, or happy accident.
166+
167+The *innate immune system* responds non-specifically to pathogens. Any
168+immune system must have a way of deciding what is *me* and what is
169+*not-me*. Framed as an identity problem in a zero-trust environment,
170+users have evolved several ways to uniquely identify agents without
171+reference to legacy systems. Chief among these means is the blockchain,
172+introduced by Bitcoin for control and transaction of digital assets and
173+since much exploited beyond its design intent. Ethereum-based ERC tokens
174+represent tweaks of this identity concept, as do many other blockchain
175+platforms.
176+
177+Identity is still fluid and polysemous, but in certain key instances it
178+is indelibly demonstrable.[^11] The individual actor has the capability
179+to express itself with many public faces or none; one of these typically
180+enjoys government sanction and liability, but it is no more *real* than
181+the others, only more legible to regulation and taxation.[^12]
182+
183+Another aspect of the innate immune system is the public visibility of
184+code. Open source has developed an ethic of transparency on
185+epistemological grounds (i.e. you have a right to know what code you are
186+running) and practical grounds. (Linus's law: "given enough eyeballs,
187+all bugs are shallow."[^13])
188+
189+The *adaptive immune system* responds to specific pathogenic incursions.
190+Particular conditions arise, whether through social, regulatory,
191+military, or other requirements, which must be met with specialized
192+forms that are thereafter in evolutionary competition with the external
193+factor. For instance, one megacorp solution to what it perceives as a
194+threat, i.e. unsanctioned memes, is to attempt to mandate the ultimate
195+traceability of any image's provenance.[^14] The Internet immune system
196+thus evolves to further obfuscate legibility and enhance individual
197+control and self-determination by shifting to less-traceable
198+technologies such as the InterPlanetary File System (IPFS). The point is
199+not whether or not a salient technology such as deepfakes, 3D-printed
200+firearms, deviant scientific or political thought[^15], or even the
201+DRM-free sharing of copyrighted material can be contained[^16]; the
202+experience with export-grade cryptography[^17] has already shown that
203+regulatory attempts ultimately fail. The philosophical question is what
204+kind of world will evolve (a *fait accompli* driven by factors beyond
205+any individual or office) and the practical question is how any
206+particular group of actors can preserve their own agency, autonomy, and
207+ambit of action.
208+
209+The first decentralized autonomous organization, "The DAO" (Đ)
210+itself[^18], was created in 2016 as a way of distributing ownership and
211+stake in a joint venture capital fund. Đ was a new form of organization
212+in that it was essentially a mathematical entity, a set of smart
213+contracts on the blockchain to which anyone had access. Đ lived up at
214+least to "decentralized" and "autonomous." No money was held centrally,
215+with token-based authentication yielding the right to vote on projects.
216+Having set the criteria for membership and investment, Đ then operated
217+in truly democratic fashion until an exploit of imperfectly written
218+smart contract code led to theft, crisis, and the reorganization of the
219+Ethereum blockchain itself.
220+
221+While the heirs of Đ serve a role in the current Internet immune system,
222+the original was formed in response to exogenous regulatory concerns,
223+notably ongoing governmental insistence on restricting investment to the
224+already-wealthy. The U.S. Securities and Exchange Commission and other
225+agencies have in place arbitrary investor requirements which would make
226+little sense even if pegged to something like inflation or index rather
227+than the rapidly-devaluing petrodollar. Nominally put in place to
228+protect the naïve from getting scammed, these restrictions have had the
229+pernicious effect of pulling up the ladder behind the *actuel riche*.
230+
231+DAOs have rapidly evolved as a way of distributing ownership and stake
232+in a purely democratic way. (As an aside, the word "democracy" has been
233+much abused, but here I use it in a sense much like the Greek original:
234+the holders of an immutable and indelible token cast their secured votes
235+to govern their society.) DAOs represent a resurgence of the sovereign
236+city-state in new guise. Will this be enough to evade "imperial"
237+aggregates which dominate today's Web?
238+
239+Decentralized autonomous organizations, zero-knowledge cryptographic
240+proofs, cryptocurrencies, proof-of-identity systems, and their
241+as-yet-unborn kin represent the evolution of an immune system on top of
242+the Darwinian churn of the legacy Internet. The stakes are necessarily
243+high: possession is *de facto* ownership, the other end of the stick
244+from "not your keys, not your coins" (the old cryptocurrency chestnut).
245+The focus is currently on ownership of money, non-fungible tokens, and
246+similar assets, but broadly speaking such systems allow the
247+authenticated ownership of all data and assets one holds, from chat
248+messages to market shares to physical real estate. There may be good
249+reasons to retain the legacy system for some classes of physical or
250+legal artifacts, but at minimum these will be in competition with purely
251+autonomous constructs. (As an aside, I am of the philosophical opinion
252+that legal recognition should not be sought generally for new forms of
253+organization, as any legibility to legacy systems opens new attack
254+surfaces in an immunological sense.) "Code is law."[^19]
255+
256+A decentralized autonomous organization seems to be at least the first
257+two: having set the criteria for membership, the organization can act as
258+the (distributed[^20], possibly unknown in the zero-knowledge proof
259+sense) stakeholders direct. This form is still somewhat "yeasty" in that
260+like cyanobacteria it acts as an undifferentiated mass, and we should
261+expect further innovations in DAO-like entities.[^21] The most salient
262+epithet of a DAO is "decentralized"; one can imagine hierarchical,
263+concentric, or role-specialized DAOs as well as other taxonomically
264+related forms, just as one can imagine progressively less organized
265+instances in a chaos-happy Internet.
266+
267+Like the first mutant with a new gene, Đ itself failed. Many lessons can
268+be drawn from that failure, including the criticality of getting smart
269+contract code absolutely correct ("code is law"), and how to administer
270+a blockchain in the presence of massive fraud. And indeed, what has
271+happened to the blockchain world of decentralized finance? Millisecond
272+differentials in responsiveness lead to huge swings in profitability of
273+transactions. Frontrunner bots watch algorithmically for transactions
274+they can complete faster than the original source, thereby making money
275+on asymmetric knowledge.[^22] Zero-day exploits of code abound,
276+heralding a need for more thorough vetting and more expressive and
277+secure smart contract languages.
278+
279+Blockchains (and thus DAOs via Ethereum) operate as proof-of-work,
280+proof-of-stake, etc. This provides node operators with a way of
281+verifying consensus reality and thereby cementing a record of digital
282+transactions. Future innovations hold forth the possibility of secure
283+proof-of-identity blockchains (such as the Uqbar Layer 1 smart contract
284+blockchain on Urbit[^23]), wherein each node which can provide concrete
285+cryptographic evidence of its identity gets a vote on the consensus.
286+
287+We must consider modern systems to necessarily interact at the pinnacle
288+intensity of competence and competition: any differential advantage that
289+can be exploited to outcompete an adversary not only can be exploited
290+but *should* be. Illegibility, redundancy, and apposite complexity are
291+allies in the immune fight to maintain identity and ownership in the
292+modern Internet.[^24] Any system which does not have an operational
293+DAO-like layer is immuno­compromised. All tools for the individual and
294+collective need to be architected around a zero-trust adversarial world.
295+They also need to guard the embers of community and enable new growth.
296+
297+In a nutshell, the early Internet was a cocktail party. By the age of
298+Usenet and into the World Wide Web era, the Internet evolved into a
299+player-versus-player defect--defect equilibrium in which brigading,
300+spamming, and anonymity are rational adaptive behaviors. Indeed,
301+anonymity is barely a protection given the lengths to which governments
302+and megacorps go to prevent truly untraceable usage. This approach is
303+adaptive for agencies which have given up on any other model of reality,
304+fundamentally lacking a vision of humans as other than atomized
305+individual krill for the megacorp apex predators: consumers for the
306+consumers. The legacy megacorp Internet has become a crab bucket, always
307+drawing everything back into itself in a dysfunctional and frankly
308+satanic way.
309+
310+Communities built on decentralized Web3 platforms such as Mastodon,
311+Fediverse, and Urbit[^25] have stepped back from the purely PvP world of
312+the globally-namespaced social media Internet. These today have more of
313+a block party feel, wherein one can wander from house to house or room
314+to room and encounter some of the same faces in the same or new guise.
315+Conversations can drop and resume anew in very different locales with
316+largely the same composition. Marrying the underlying cryptographic
317+identity requirements of DAOs to communication tools and databases
318+yields a strong stable solution to the problem of retaining a foothold
319+of personal identity from which to coordinate one's multifaceted digital
320+life. IPFS, Sovrin Foundation, Tim Berners-Lee's Solid, and Urbit all
321+offer their take on this requirement. Even a Signal chat group running
322+its own server is a kind of token-free DAO.
323+
324+Since the Renaissance, essentially all theology has been humanist in
325+nature, concerning itself with how man should live to flourish in this
326+world and inherit in the next. Even secularized descendants enjoin an
327+ethos of ritual behaviors and practices. The social and cultural "stack"
328+(in software parlance) upon which we build provides for a variety, broad
329+or narrow, of human cultural forms. Lately, the variety of forms has
330+been diminishing both by cutting off older forms from the modern world
331+and by cultivating only certain state-legible apex predators[^26] and
332+their preferred ovine repast.
333+
334+Contra this monoculture, the *telos* of social computing is to recreate
335+the village green, not the penitentiary. Revisiting a thesis from above:
336+"All tools for the individual and collective need to be architected
337+around *using cryptographic proofs to create stable high-trust havens in
338+an otherwise* zero-trust adversarial world." The village is a stable,
339+long-term tribe well below Dunbar's limit which shares values and assets
340+in common, from which a member occasionally ventures out into the
341+broader social web but always has a home. Every village will grow its
342+own culture, perhaps even its own *cultus*, enabled by decentralized
343+technologies to protect their assets and precious peculiarities. The
344+World Wide Web has been an extinction-level event for many forms of
345+life, livelihood, and culture. For others, it has offered strange forms
346+of life support and even thriving. With a new immune system evolved and
347+now operational, human endeavor stands on the cusp of a Cambrian
348+explosion, unconstrainable by a rent-seeking boardroom-and-bureaucracy
349+world that never comprehended the light shining in its darkness.
350+
351+[^1]: Kaufman, Jim. (2010) ["Evolution and
352+ immunity"](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2913256/).
353+ *Immunology 130*, iss. 4, pp. 459--462.
354+
355+[^2]: President Eisenhower's original coinage was likely "the
356+ military-industrial-academic complex."
357+
358+[^3]: E.g., Richard Bellman of the RAND Corporation on the origin of
359+ "dynamic programming," a mathematical discipline: in dealing with a
360+ recalcitrant secretary of defense who hated the word "research,"
361+ Bellman instead chose the word "dynamic" arbitrarily because "it's
362+ impossible to use the word 'dynamic' in a pejorative sense. ...It
363+ was something not even a Congressman could object to. So I used it
364+ as an umbrella for my activities." (Bellman, Richard. (1984) [*Eye
365+ of the
366+ Hurricane*](https://books.google.ch/books?id=4FwGCwAAQBAJ&lpg=PA159&dq=#v=onepage&q=).)
367+
368+[^4]: The nuclear triad doctrine, joining the Air Force's Strategic Air
369+ Command bombers, the Navy's nuclear submarines, and the Army's ICBMs
370+ and other assorted nuclear warheads, was based less on strategic
371+ considerations than on appeasing constituent departments of the
372+ military. Strategists developed a formal justification decades later
373+ in a magnificent demonstration of motivated reasoning. (Woolf, Amy.
374+ (2016) "U.S. Strategic Nuclear Forces: Background, Developments, and
375+ Issues". [CRS
376+ 7-5700](https://digital.library.unt.edu/ark:/67531/metadc847627/m2/1/high_res_d/RL33640_2016Mar10.pdf).)
377+
378+[^5]: The Air Force early commissioned the RAND Corporation on contract
379+ with Douglas Aircraft Company as the first "think tank"; RAND soon
380+ upended the traditional role of passive reception of studies by
381+ making its own recommendations and showing their analytical chops.
382+ Other service branches followed suit, such as the U.S. Navy's Center
383+ for Naval Analyses and the Battelle Memorial Institute for various
384+ federal contracting agencies; compare also the role of the national
385+ laboratory system, e.g. Los Alamos, Sandia, Livermore, etc. for the
386+ Department of Energy and Department of Defense. (Rich, Michael.
387+ (2003) "RAND: How Think Tanks Interact with the Military".
388+ [RP-1050](https://www.rand.org/pubs/reprints/RP1050.html).)
389+
390+[^6]: "On January 18, 1994, the first large-scale deliberate USENET spam
391+ occurred. A message with the subject "Global Alert for All: Jesus is
392+ Coming Soon" was cross-posted to every available newsgroup."
393+ ([Wikipedia, "History of email
394+ spam"](https://en.wikipedia.org/wiki/History_of_email_spam))
395+
396+[^7]: The first instance which seems to have brough this to general
397+ public awareness was the submission of Judge Robert Bork's video
398+ rental history as evidence in his Supreme Court hearings before the
399+ U.S. Senate. The resulting Video Privacy Protection Act was
400+ delightfully naïve. Besides relying on "video rental" narrowly
401+ construed, users have effectively no leverage against
402+ unilaterally-imposed terms of service and end-user license
403+ agreements. (See, e.g., [Electronic Privacy Information Center,
404+ "Video Privacy Protection
405+ Act"](https://archive.epic.org/privacy/vppa/).)
406+
407+[^8]: E.g. Tumblr and OnlyFans and adult content; Twitter and right-wing
408+ content; Youtube and Facebook and unsanctioned medical content, etc.
409+ Note that this is regardless of the viability of a given view or the
410+ necessity of vigorous debate within a field, but focuses on the
411+ palatibility of politics to the megacorp entity providing the
412+ platform, even if the content drives platform usage.
413+
414+[^9]: Hughes, Eric. (1993) [*A Cypherpunk's
415+ Manifesto*](https://nakamotoinstitute.org/cypherpunk-manifesto/).
416+
417+[^10]: The mass shift to remote work from March 2020 onwards due to the
418+ COVID-19 pandemic has accelerated the trend of corporate
419+ colonization of private spaces. At first, this was occasionally
420+ humorous, as when a child ran into the background of a Zoom call, or
421+ underwear or private materials were inadvertently left in view of
422+ the remote audience. In the end, it demanded that individuals
423+ reconfigure their homes to accommodate mass corporate preferences,
424+ thus another invasion of private space by the megacorp panopticon.\
425+ I note as well an invasive doctrine demanding "truth in
426+ communication" under names like ["radical
427+ transparency"](https://www.bridgewater.com/principles-and-culture)
428+ and ["radical
429+ candor"](https://third-bit.com/2018/11/24/afraid-of-change/) put
430+ forward by partisans of power over against vulnerable employees,
431+ clients, and customers, who may be disproportionately affected by a
432+ megacorp demand for one-sided transparency.
433+
434+[^11]: Several have pointed to the failure of Craig S. Wright to
435+ demonstrate cryptographically that he is Satoshi Nakamoto, the
436+ pseudonymous inventor of Bitcoin. (C.f. Khaosan, Venzen. (2016)
437+ ["Craig Wright is Not Satoshi Nakamoto---The Technical
438+ Proof"](https://www.ccn.com/technical-proof-craig-wright-not-satoshi-nakamoto/).)
439+
440+[^12]: Davidson, Dale, and Rees-Mogg, William. (1999) *The Sovereign
441+ Individual: Mastering the Transition to the Information Age*.
442+
443+[^13]: Raymond, Eric. (1999) [*The Cathedral and the
444+ Bazaar*](http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html).
445+
446+[^14]: The [Coalition for Content Provenance and
447+ Authenticity](https://c2pa.org/) "addresses the prevalence of
448+ misleading information online through the development of technical
449+ standards for certifying the source and history (or provenance) of
450+ media content."
451+
452+[^15]: Cf. Walker, Shawn, et al. (2019) ["The disinformation landscape
453+ and the lockdown of social
454+ platforms."](https://www.tandfonline.com/doi/full/10.1080/1369118X.2019.1648536)
455+ *Information, Communication & Society 22*, pp. 1531--43. Walker et
456+ al. lament that "highly ephemeral mis/disinformation campaigns" are
457+ not susceptible of study due to closed platform APIs. "Social media
458+ platforms \[attempt\] to rekindle trust by appearing to reinforce
459+ individual privacy within a newly secured user community, a set of
460+ measures that also locked academic and non-profit researchers out
461+ from studying social platforms while preserving corporate and
462+ business access to social media users' data." They fail to address
463+ the tension between community self-determination and academic
464+ exploitation.
465+
466+[^16]: "If in fact you can't crack \[the encryption\] at all, government
467+ can't get in, then everybody is walking around with a Swiss bank
468+ account in their pocket -- right? So there has to be some concession
469+ to the need to be able to get into that information somehow."
470+ ([Barack Obama in March 2016 at
471+ SXSW](https://www.businessinsider.com/obama-comments-on-encryption-at-sxsw-2016-3))
472+
473+[^17]: Heninger, Nadia. (2016) ["The Legacy of Export-Grade Cryptography
474+ in the 21^st^
475+ Century"](https://publish.illinois.edu/science-of-security-lablet/files/2016/08/10062016-Heninger-Slides.pdf).
476+
477+[^18]: Chohan, Usman. (2017) ["The Decentralized Autonomous Organization
478+ and Governance
479+ Issues"](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3082055).
480+ Discussion Paper Series: *Notes on the 21^st^ Century*.
481+
482+[^19]: Lessig, Lawrence. (1999) *Code and Other Laws of Cyberspace*.
483+
484+[^20]: Hobart, Byrne \~lableg-tadrex. (Nov 17, 2021) ["The Promise and
485+ Paradox of
486+ Decentralization"](https://urbit.org/blog/2021-11-18-the-promise-and-paradox-of-decentralization).
487+ *The Diff*.
488+
489+[^21]: See, e.g., the Governor Alpha smart contract protocols. Solari,
490+ R. (2021) ["The case for Governor
491+ Alpha".](https://medium.com/tally-blog/the-case-for-governor-alpha-15c1362d49eb)
492+
493+[^22]: Robinson, D. (2020) ["Ethereum is a dark
494+ forest"](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest).
495+ Paradigm blog.
496+
497+[^23]: [Uqbar Network](https://uqbar.network/); ["Introducing Uqbar
498+ Network"](https://uqbarnetwork.substack.com/p/introducing-uqbar-network);
499+ \~hocwyn-tipwex/uqbar-event-horizon (Urbit group)
500+
501+[^24]: This is not to deny the benefits of system-legibility, in
502+ particular legal protections. As common law develops around DAOs, I
503+ hope for similar affordances where they must interact with the
504+ legacy legal system.
505+
506+[^25]: Originally this list included Discord, as there has been
507+ substantial growth in stable goal-oriented communities thereon.
508+ However, more recently the company [adopted a user
509+ policy](https://discord.com/blog/addressing-harmful-off-platform-behavior)
510+ which subjects use of their product to judgment calls about
511+ "off-platform behavior"---a clear violation of a cypherpunk ethos
512+ which Discord likely never espoused anyway.
513+
514+[^26]: E.g., Auerbach, David. (Mar 3, 2022) ["The metaverse will steal
515+ your
516+ identity"](https://unherd.com/2022/03/the-metaverse-will-steal-your-identity/).
517+ *UnHerd*. Auerbach correctly recognizes and decries the looming
518+ "monetisation of identity" which will allow any platform controller
519+ to incentivize prosocial or antisocial behaviors at will.
520+
521+_The header image is [Volvox sp. microscopic algae](https://www.flickr.com/photos/picksfromoutthere/35891780782/in/photolist-WFCKYA-XPdGLq-2k9Cew6-ViCgrB-23QUBQR-21rF362-CCSE2n-23AwZ7m-CbKedu-gznqa-2dHUv3k-EE8eoq-gznq9-i5zqqk-WYSwcf-XWVgQk-WabAAG-gLjRj-gDcLp-4VvECm-259cDCS-i5zqRk-25cV246-i5yNvM-gupiMJ-PXLbhr-LUACZ7-ihvxSH-ihvvVg-ihwjbF-ihvxDX-i5yQDd-ihzQwK-fWwpxb-rarKrm-8LWTQf-qVar5j-ihzAPA-JNrgyK-ihzBrC-ca6Ex9-2kCTSrj-ihz67k-qfJsYd-248ePDL-ihztbm-ihzuyS-LQYZQq-2kCTRxL-ihvWPA) by Picturepest on Flickr._
content/coinmarketcap.mdnew file+8
@@ -0,0 +1,8 @@
1++++
2+title = "CoinMarketCap"
3+template = "page_indiced.html"
4+[extra]
5+hidetitle = "true"
6++++
7+
8+The ticket number for CoinMarketCap verification is 429809.
content/docs/arvo/clay/clay.md+1−1
@@ -9,7 +9,7 @@ Our filesystem.
99
1010`%clay` is version-controlled, referentially-transparent, and global.
1111While this filesystem is stored in `%clay`, it is mirrored to Unix for
12−convenience. Unix tells `%clay`s whenever a file changes in the Unix
12+convenience. Unix tells `%clay` whenever a file changes in the Unix
1313copy of the filesystem so that the change may be applied. `%clay` tells
1414unix whenever an app or vane changes the filesystem so that the change
1515can be effected in Unix. Apps and vanes may use `%clay` to write to the
content/docs/arvo/clay/marks/_index.md+1−1
@@ -12,7 +12,7 @@ Overview of `mark`s.
1212
1313[Writing Marks](/docs/arvo/clay/marks/writing-marks)
1414
15−A practical walk-through of writing a `mark` file.
15+A practical walkthrough of writing a `mark` file.
1616
1717[Using Marks](/docs/arvo/clay/marks/using-marks)
1818
content/docs/arvo/clay/marks/marks.md+1−1
@@ -52,7 +52,7 @@ The second case of interest is the `+json` arm for converting to and from a `%js
5252
5353## Sections
5454
55−[Writing Marks](/docs/arvo/clay/marks/writing-marks) - A practical walk-through of writing a `mark` file.
55+[Writing Marks](/docs/arvo/clay/marks/writing-marks) - A practical walkthrough of writing a `mark` file.
5656
5757[Using Marks](/docs/arvo/clay/marks/using-marks) - Details of using `mark` conversion gates and `mark` cores in your own code.
5858
content/docs/azimuth/l2/_index.md+4
@@ -33,3 +33,7 @@ How rollers work.
3333Documentation on the HTTP RPC API used for Urbit to communicate with Bridge to
3434manage layer 2 transactions.
3535
36+### [Custom Roller Tutorial](/docs/azimuth/l2/roller-tutorial)
37+
38+How to set up your own roller.
39+
content/docs/azimuth/l2/layer2.md+3−2
@@ -21,8 +21,9 @@ rationale and functionality of layer 2, please see this [blog
2121post](/blog/rollups). For more information on how Azimuth works more generally,
2222including interactions with Bridge and Ethereum, see the page on [Azimuth data flow](/docs/azimuth/flow).
2323
24−This page is also not where to find instruction on how to run your own "aggregator"/"roller".
25−Documentation for this process is forthcoming. However, this page does contain
24+This page is also not where to find instruction on how to run your own
25+"aggregator"/"roller". Documentation for this process is found
26+[here](/docs/azimuth/l2/roller-tutorial). However, this page does contain
2627essential background information for anybody in this category.
2728
2829## Summary
content/docs/azimuth/l2/roller-tutorial.mdnew file+212
@@ -0,0 +1,212 @@
1++++
2+title = "Custom Roller Tutorial"
3+weight = 11
4+template = "doc.html"
5++++
6+
7+This tutorial is an outline for how to set up your own L2 roller for Urbit. Some
8+familiarity with how L2 works in general, as well as the role of the roller, is
9+expected. See [Layer 2 Overview](/docs/azimuth/l2/layer2) for a technical
10+overview of L2, [Azimuth Data Flow](/docs/azimuth/flow) to gain an understanding
11+of how Azimuth data handling and processing is done on Urbit, and
12+[Rollers](docs/azimuth/l2/roller) for a short summary of what the different Gall
13+agents involved for rollers are. This tutorial is focused on setting up a roller
14+to work on the main Ethereum network, but only minor changes are needed to
15+utilize the Ropsten Ethereum network. We also explain how to set up a front end
16+(Bridge) from which transactions to be batched by the roller are sent, but use
17+of a front end is not mandatory.
18+
19+Note that this process involves giving the private key of an Ethereum wallet to
20+the ship running the roller so that it may spend ETH to submit transactions. If you
21+do not fully understand what this entails, we recommend against running your own
22+roller on the Ethereum mainnet. See [below](#step2) for more information on
23+this.
24+
25+Henceforth, by "roller" we are referring to the ship used as the transaction
26+aggregator and batch submitter, `%roller` refers to the Gall agent running on
27+the roller that performs these actions, and "front-end" refers to the optional
28+web GUI most users will use to interact with your roller (probably Bridge).
29+
30+There are three main steps involved with setting up a roller:
31+ - ensuring that the data in `%azimuth` is up to date,
32+ - starting and configuring `%roller`,
33+ - aiming your front-end at the roller
34+
35+### 1. Make sure `%azimuth` state is up to date
36+If you are using an ordinary live ship on the network as the roller, you should
37+already have the latest `%azimuth` state and this step should not be necessary
38+and you may move to step 2.
39+
40+If your roller is a fakezod, you will need to configure `%azimuth` to pull the
41+latest [Azimuth](/docs/azimuth/azimuth-eth) data from Ethereum. The most common
42+way to do this is via an Infura node, but you could instead use e.g. your own
43+Ethereum node. A free tier Infura node ought to be sufficient for most people
44+and is easy to set up using their tutorials.
45+
46+To set up your fakezod to automatically receive Azimuth updates from the Infura
47+node, enter the following commands in dojo: `:azimuth %resub` followed by
48+`:azimuth|watch 'https://MAINNET_INFURA_URL' %default`. Here, the url can be
49+found under the Setting page for the node on infura.io listed under `ENDPOINTS`.
50+
51+If you do not perform this step, you'll later see an error "roller not ready"
52+when the first roller batch is about to be submitted.
53+
54+### 2. Starting and configuring `%roller` {#step2}
55+This step must be performed whether you're using a fakezod or a live ship.
56+
57+First we need to start `%roller` and `%roller-rpc` (the agent used to send
58+commands to `%roller` via HTTP). If you are not making use of a front-end, and
59+instead will be accepting transactions to batch entirely from within Urbit,
60+`%roller-rpc` is not necessary. We assume you will be using Bridge as a
61+front-end.
62+
63+To start the agents, enter the following command in dojo: `|rein %base [&
64+%roller] [& %roller-rpc]`. You should see the following response:
65+
66+```
67+gall: installing %roller-rpc
68+> 'init'
69+gall: installing %roller
70+> %received-azimuth-state
71+```
72+
73+Note that `%received-azimuth-state` only indicates that `%roller` successfully
74+subscribed to `%azimuth`; it does not indicate that you successfully completed
75+step 1.
76+
77+Next we need to configure `%roller`. `%roller` has several parameters that can
78+be tweaked, such as how many transactions it will accept from a given ship in a
79+given time period, how long the time period is, how much gas to use, exceptions
80+to these rules for particular ships, etc. We will cover these in a moment, but
81+first there are two mandatory settings that must be configured: the Ethereum
82+node to submit batches to, and the private key for the wallet that will submit
83+the transactions.
84+
85+First let's set the Ethereum node to which batches will be submitted, which we
86+will presume is an Infura node. This does not need to be the same node given in
87+step 1, but it is fine for them to be the same (assuming it is configured to
88+accept transactions - some Infura nodes are set up only to make blockchain data
89+available but do not participate in propagating transactions). Enter
90+`:roller|endpoint 'https://MAINNET_INFURA_URL' %mainnet` into dojo.
91+
92+Next we set the private key for the Ethereum wallet from which batches built by
93+`%roller` will be submitted. We *strongly emphasize* that this step has serious
94+security implications. *`%roller` will be able to spend ETH in this wallet.*
95+This is mandatory, of course, as the primary function of `%roller` is to submit
96+batches of transactions to Ethereum, which requires ETH. If you downloaded
97+`%roller` from someone other than Tlon and have not personally audited their
98+code, you are putting the assets in this wallet at risk. Also keep in mind that
99+while Urbit has undergone several security audits, some components such as the
100+runtime have never been audited by a third party. We maintain a list of these
101+audits [here](/audits), as well as an
102+[FAQ](https://urbit.org/faq#how-secure-is-urbit) on the state of security in
103+Urbit. Thus we recommend a fresh wallet generated specifically to be used by
104+`%roller` and to only put the amount of ETH in it that you expect to need in the
105+near future. We also recommend that you only use this address for sending L2
106+batches, since otherwise the nonce will get out of sync. `%roller` can detect
107+this and handle it, but it could cause a delay in batch submission.
108+
109+With that being said, the command to set the private key for the wallet to be
110+utilized by the roller is `:roller|setkey '0x1234567890abcdef'`, where `0x...`
111+is the private key.
112+
113+The `:roller|endpoint` and `:roller|setkey` commands are the only mandatory
114+commands to set up the roller. At this point, if your roller is live on the
115+network (as opposed to a fakezod) and everything has been performed correctly,
116+it would be possible for others to submit transactions to it manually. All other
117+settings are sensible defaults at time of writing. However, to utilize a
118+front-end, one more command is needed: `|cors-approve 'https://YOUR_FRONTEND'`,
119+where the url is the address of the front end you're using - probably a modified
120+Bridge that you're hosting somewhere which you'll set up in the next step.
121+fakezods can only accept transactions from other ships it can talk to, namely
122+other fake ships running on the same machine, so you will need to set it up to
123+work with a front-end if you want to use it on livenet.
124+
125+We cover the additional settings for `%roller` at the end.
126+
127+### 3. Aiming Bridge at the roller
128+
129+The last step is to set up the web interface by which users can submit
130+transactions to be batched by the roller, which we refer to as the front-end. We
131+presume here that you'll be using [Bridge](https://github.com/urbit/bridge), by
132+which we mean you'll be hosting a custom version of Bridge modified to use the
133+roller you set up above instead of Tlon's roller.
134+
135+First you'll need to make the urbit running `%roller` accessible to the web.
136+This is outside the scope of the tutorial, but we suggest using a tool like
137+`caddy` or `nginx`. You'll want to set up a URL such as
138+`https://myroller.sampel-pal.net` and use the port you'd ordinarily use to
139+access Landscape, probably `80` or `8080`. To be clear, this is the same process
140+you'd use if you set up a custom URL to access your urbit hosted in the cloud.
141+
142+To point Bridge at your roller we [launch
143+Bridge](https://github.com/urbit/bridge/blob/master/DEVELOPMENT.md) with a
144+custom command that modifies an environment variable called
145+`REACT_APP_ROLLER_HOST`:
146+
147+```
148+REACT_APP_ROLLER_HOST=https://myroller.sampel-pal.net npm run pilot-mainnet
149+```
150+
151+This will launch a server running Bridge that utilizes the mainnet roller you
152+set up at `https://myroller.sampel-pal.net`.
153+
154+### Additional `%roller` commmands
155+
156+`%roller` has a few other settings and commands for managing things like the
157+rate at which transactions are submitted and manually submitting batches. These
158+can be modified using the following generators:
159+
160+<table>
161+ <thead><tr><th>Dojo Command</th><th>Description</th><th>Argument</th></tr></thead>
162+<tbody>
163+ <tr>
164+ <td><code>:roller|commit</code></td>
165+ <td>Submits a new L2 batch with all pending transactions.</td>
166+ <td>None.</td>
167+ </tr>
168+ <tr>
169+ <td><code>:roller|config</code></td>
170+ <td>General configuration command.</td>
171+ <td><code>$config</code> (see <code>/sur/dice.hoon</code>)</td>
172+ </tr>
173+ <tr>
174+ <td><code>:roller|endpoint</code></td>
175+ <td>Set the Infura endpoint.</td>
176+ <td><code>[@t ?(%mainnet %ropsten %local)]</code></td>
177+ </tr>
178+ <tr>
179+ <td><code>:roller|frequency</code></td>
180+ <td>Sets the frequency at which batches are submitted.</td>
181+ <td><code>@dr</code></td>
182+ </tr>
183+ <tr>
184+ <td><code>:roller|local</code></td>
185+ <td>Configures <code>%roller</code> to listen to a local Ethereum node at port 8545.</td>
186+ <td>None.</td>
187+ </tr>
188+ <tr>
189+ <td><code>:roller|quota</code></td>
190+ <td>Modified the number of txs a ship is allowed to send per unit time.</td>
191+ <td><code>@ud</code></td>
192+ </tr>
193+ <tr>
194+ <td><code>:roller|ropsten</code></td>
195+ <td>Configure %roller to listen to a preset Ropsten Infura node.</td>
196+ <td>None.</td>
197+ </tr>
198+ <tr>
199+ <td><code>:roller|setkey</code></td>
200+ <td>Load a private key into the roller and retrieves its L1 nonce.</td>
201+ <td><code>@t</code></td>
202+ </tr>
203+ <tr>
204+ <td><code>:roller|slice</code></td>
205+ <td>Modified the unit of time for each ship's quota.</td>
206+ <td><code>@dr</code></td>
207+ </tr>
208+</tbody>
209+</table>
210+
211+
212+
content/docs/glossary/rollups.md+4−1
@@ -23,8 +23,11 @@ blockchains.
2323
2424### Further reading
2525
26+- [Layer 2 for planets](/getting-started/layer-2-for-planets): Essential
27+ information for planet owners on layer 2 or considering a move to layer 2
2628- [The Gang Solves the Gas Crisis](/blog/rollups): A casual overview of how
2729naive rollups works.
28−- Pilot's Guide to layer 2 : insert link
2930- [Layer 2 Overview](/docs/azimuth/l2/layer2): where developers should go to learn
3031about the technical details of naive rollups.
32+- [Custom Roller Tutorial](/docs/azimuth/l2/roller-tutorial): tutorial on how to
33+ set up your own L2 roller.
content/docs/hoon/hoon-school/egg-timer.md+1−1
@@ -161,4 +161,4 @@ In this case, we will not produce any card or change application state. Therefor
161161--
162162```
163163
164−Finally, we define the remaining 8 unused but required Gall Agent armsas instances of the default arms provided in `/lib/default-agent.hoon`.
164+Finally, we define the remaining 8 unused but required Gall Agent arms as instances of the default arms provided in `/lib/default-agent.hoon`.
content/docs/hoon/hoon-school/list-of-numbers.md+7−1
@@ -20,7 +20,13 @@ Below is a simple Hoon program that takes a single number `n` from the user as i
2020$(count (add 1 count)) :: 8
2121```
2222
23−As we mentioned in the previous lesson, the easiest way to use such a program is to run it as a _generator_. Mount your `%base` desk with `|mount %base` (if you didn't do it before), saving a file in the `base/gen` directory of your ship and commiting these changes `|commit %base` allows you to run it from your ship's Dojo (command line) as a generator. Save the above code there as `list.hoon`. Now you can run it in the Dojo with the command below (remember, without the `>`):
23+As we mentioned in the previous lesson, the easiest way to use such a program is to run it as a _generator_. Mount your `%base` desk with `|mount %base` (if you didn't do it before), saving a file in the `base/gen` directory of your ship and commiting these changes `|commit %base` allows you to run it from your ship's Dojo (command line) as a generator. Save the above code there as `list.hoon`.
24+
25+**Note**: If you're using VS Code on Windows, you might need to manually change
26+the line endings from CRLF to LF in the status bar at the bottom. Urbit requires
27+Unix-style line endings for Hoon files.
28+
29+Now you can run it in the Dojo with the command below (remember, without the `>`):
2430
2531`> +list 5`
2632
content/docs/hoon/reference/cheat-sheet.md+1−1
@@ -5,7 +5,7 @@ template = "doc.html"
55aliases = ["docs/reference/cheat-sheet/"]
66+++
77
8−Download the cheat sheet PDF [here](https://media.urbit.org/docs/hooncard-unbranded-2021-09-12.pdf)
8+Download the cheat sheet PDF [here](https://media.urbit.org/docs/hooncard-2022-04-03.pdf)
99
1010We've found it's useful to have a quick reference of Hoon's syntax always at
1111hand. So above is a download link to a Hoon cheatsheet PDF.
content/docs/userspace/_index.md+4
@@ -12,6 +12,10 @@ Urbit's userspace is managed by Arvo's Gall vane.
1212
1313An overview of userspace in Urbit.
1414
15+## [HTTP API Guide](/docs/userspace/http-api-guide)
16+
17+Learn how to interact with a ship from a web client using the `@urbit/http-api` Javascript library.
18+
1519## [Gall Guide](/docs/userspace/gall-guide/intro)
1620
1721Learn how to develop Gall agents.
content/docs/userspace/dist/dist.md+1−1
@@ -6,7 +6,7 @@ template = "doc.html"
66
77Urbit allows peer-to-peer distribution and installation of applications. A user can click on a link to an app hosted by another ship to install that app. The homescreen interface lets users manage their installed apps and launch their interfaces in new tabs.
88
9−This document describes the architecture of Urbit's app distribution system. For a walk-through of creating and distributing an app, see the [`Guide`](/docs/userspace/dist/guide) document.
9+This document describes the architecture of Urbit's app distribution system. For a walkthrough of creating and distributing an app, see the [`Guide`](/docs/userspace/dist/guide) document.
1010
1111## Architecture
1212
content/docs/userspace/full-stack/1-intro.mdnew file+89
@@ -0,0 +1,89 @@
1++++
2+title = "1. Introduction"
3+weight = 1
4+template = "doc.html"
5++++
6+
7+This series walks through the writing of a full Gall agent, and then the process
8+of integrating it with a React front-end. This series follows on from the
9+previous [Gall Guide](/docs/userspace/gall-guide/intro). If you haven't
10+completed that, or otherwise aren't familiar with the basics of writing Gall
11+agents, it's strongly recommended to work through that guide first.
12+
13+The app we'll be looking at is a simple journal with an agent called `%journal`.
14+In the browser, users will be able to add plain text journal entries organized
15+by date. Entries may be scrolled through in ascending date order, with more
16+entries loaded each time the bottom of the list is reached. Old entries will be
17+able to be edited and deleted, and users will be able to search through entries
18+by specifying a date range.
19+
20+The `Journal` app we'll be looking at can be installed on a live ship from
21+`~pocwet/journal`, and its source code is available [here](https://github.com/urbit/docs-examples/tree/main/journal-app).
22+
23+![journal ui screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/entries.png)
24+
25+This walkthrough does not contain exercises, nor does it completely cover every
26+aspect of building the app in full depth. Rather, its purpose is to demonstrate
27+the process of creating a full-stack Urbit app, showing how everything fits
28+together, and how concepts you've previously learned are applied in practice.
29+
30+The primary focus of the walkthrough is to show how a Javascript front-end is
31+integrated with a Gall agent and distributed as a complete app. Consequently,
32+the example app is fairly simple and runs on a local ship only, rather than one
33+with more complex inter-ship networking.
34+
35+Each section of this walkthrough will list additional resources and learning
36+material at the bottom of the page, which will cover the concepts discussed in a
37+more comprehensive manner.
38+
39+Here is the basic structure of the app we'll be building:
40+
41+![journal app
42+diagram](https://media.urbit.org/docs/userspace/full-stack-guide/journal-app-diagram.svg)
43+
44+## Sections
45+
46+#### [1. Introduction](/docs/userspace/full-stack/1-intro)
47+
48+An overview of the guide and table of contents.
49+
50+#### [2. Types](/docs/userspace/full-stack/2-types)
51+
52+Creating the `/sur` structure file for our `%journal` agent.
53+
54+#### [3. Agent](/docs/userspace/full-stack/3-agent)
55+
56+Creating the `%journal` agent itself.
57+
58+#### [4. JSON](/docs/userspace/full-stack/5-json)
59+
60+Writing a library to convert between our agent's marks and JSON. This lets our
61+React front-end poke our agent, and our agent send updates back to it.
62+
63+#### [5. Marks](/docs/userspace/full-stack/4-marks)
64+
65+Creating the mark files for the pokes our agent takes and updates it sends out.
66+
67+#### [6. Eyre](/docs/userspace/full-stack/6-eyre)
68+
69+A brief overview of how the webserver vane Eyre works.
70+
71+#### [7. React App Setup](/docs/userspace/full-stack/7-react-setup)
72+
73+Creating a new React app, installing the required packages, and setting up some
74+basic things for our front-end.
75+
76+#### [8. React App Logic](/docs/userspace/full-stack/8-http-api)
77+
78+Analyzing the core logic of our React app, with particular focus on using
79+methods of the `Urbit` class from `@urbit/http-api` to communicate with our
80+agent.
81+
82+#### [9. Desk and Glob](/docs/userspace/full-stack/9-web-scries)
83+
84+Building and "globbing" our front-end, and putting together a desk for
85+distribution.
86+
87+#### [10. Summary](/docs/userspace/full-stack/10-final)
88+
89+Some final comments and additional resources.
content/docs/userspace/full-stack/10-final.mdnew file+118
@@ -0,0 +1,118 @@
1++++
2+title = "10. Summary"
3+weight = 10
4+template = "doc.html"
5++++
6+
7+That's it! We've built our agent and React front-end, put together a desk and
8+published it. We hope this walkthrough has helped you see how all the pieces
9+for together for building and distributing an app in Urbit.
10+
11+The reference material for each section of this walkthrough is listed
12+[below](#reference-material), the source code for our app is available
13+[here](https://github.com/urbit/docs-examples/tree/main/journal-app), and it can
14+be installed from `~pocwet/journal`.
15+
16+In this guide we've built a separate React app for the front-end, but Hoon also
17+has a native domain-specific language for composing HTML structures called Sail.
18+Sail allows you to compose a front-end inside a Gall agent and serve it
19+directly. See the [Sail guide](/docs/hoon/guides/sail) for details.
20+
21+Along with `@urbit/http-api`, there's also the `@urbit/api` NPM package, which
22+contains a large number of helpful functions for dealing with Hoon data types
23+and interacting with a number of agents - particularly those used by the Groups
24+app. Its source code is [available
25+here](https://github.com/urbit/urbit/tree/master/pkg/npm/api).
26+
27+## Reference material
28+
29+Here is the reference material for each section of this walkthrough.
30+
31+#### Types
32+
33+- [Gall Guide /sur section](/docs/userspace/gall-guide/7-sur-and-marks#sur) -
34+ This section of the Gall Guide covers writing a `/sur` structure library for
35+ an agent.
36+
37+- [Ordered map functions in
38+ `zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L5284-L5688) -
39+ This section of `zuse.hoon` contains all the functions for working with
40+ `mop`s, and is well commented.
41+
42+#### Agent
43+
44+- [The Gall Guide](/docs/userspace/gall-guide/intro) - The Gall Guide covers all
45+ aspects of writing Gall agents in detail.
46+
47+- [Ordered map functions in
48+ `zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L5284-L5688) -
49+ This section of `zuse.hoon` contains all the functions for working with
50+ `mop`s, and is well commented.
51+
52+- [`/lib/agentio.hoon`](https://github.com/urbit/urbit/blob/master/pkg/base-dev/lib/agentio.hoon) -
53+ The `agentio` library in the `%base` desk contains a large number of useful
54+ functions which making writing Gall agents easier.
55+
56+#### JSON
57+
58+- [The JSON Guide](/docs/hoon/guides/json-guide) - The stand-alone JSON guide
59+ covers JSON encoding/decoding in great detail.
60+- [The Zuse Reference](/docs/hoon/reference/zuse/table-of-contents) - The
61+ `zuse.hoon` reference documents all JSON-related functions in detail.
62+
63+- [`++enjs:format` reference](/docs/hoon/reference/zuse/2d_1-5#enjsformat) -
64+ This section of the `zuse.hoon` documentation covers all JSON encoding
65+ functions.
66+
67+- [`++dejs:format` reference](/docs/hoon/reference/zuse/2d_6) - This section of
68+ the `zuse.hoon` documentation covers all JSON _decoding_ functions.
69+
70+- [Eyre Overview](/docs/arvo/eyre/eyre) - This section of the Eyre vane
71+ documentation goes over the basic features of the Eyre vane.
72+
73+#### Marks
74+
75+- [The Marks section of the Clay documentation](/docs/arvo/clay/marks/marks) -
76+ This section of the Clay vane documentation covers mark files comprehensively.
77+- [The mark file section of the Gall
78+ Guide](/docs/userspace/gall-guide/7-sur-and-marks#mark-files) - This part of
79+ the Gall Guide goes through the basics of mark files.
80+
81+- [The JSON Guide](/docs/hoon/guides/json-guide) - This also covers writing mark
82+ files to convert to/from JSON.
83+
84+#### Eyre
85+
86+- [The Eyre vane documentation](/docs/arvo/eyre/eyre) - This section of the vane
87+ docs covers all aspects of Eyre.
88+- [Eyre External API Reference](/docs/arvo/eyre/external-api-ref) - This section
89+ of the Eyre documentation contains reference material for Eyre's external API.
90+
91+- [The Eyre Guide](/docs/arvo/eyre/guide) - This section of the Eyre
92+ documentation walks through using Eyre's external API at a low level (using
93+ `curl`).
94+
95+#### React App Setup and Logic
96+
97+- [HTTP API Guide](/docs/userspace/http-api-guide) - Reference documentation for
98+ `@urbit/http-api`.
99+
100+- [React app source
101+ code](https://github.com/urbit/docs-examples/tree/main/journal-app/ui) - The
102+ source code for the Journal app UI.
103+
104+- [`@urbit/http-api` source
105+ code](https://github.com/urbit/urbit/tree/master/pkg/npm/http-api) - The
106+ source code for the `@urbit/http-api` NPM package.
107+
108+#### Desk and Glob
109+
110+- [App publishing/distribution docs](/docs/userspace/dist/dist) -
111+ Documentation covering third party desk composition, publishing and
112+ distribution.
113+
114+- [Glob documentation](/docs/userspace/dist/glob) - Comprehensive documentation
115+ of handling front-end files.
116+
117+- [Desk publishing guide](/docs/userspace/dist/guide) - A step-by-step guide to
118+ creating and publishing a desk.
content/docs/userspace/full-stack/2-types.mdnew file+215
@@ -0,0 +1,215 @@
1++++
2+title = "2. Types"
3+weight = 2
4+template = "doc.html"
5++++
6+
7+The best place to start when building a new agent is its type definitions in its
8+`/sur` structure file. The main things to think through are:
9+
10+1. What basic types of data does my agent deal with?
11+2. What actions/commands does my agent need to handle?
12+3. What updates/events will my agent need to send out to subscribers?
13+4. What does my agent need to store in its state?
14+
15+Let's look at each of these questions in turn, and put together our agent's
16+`/sur` file, which we'll call `/sur/journal.hoon`.
17+
18+### 1. Basic types
19+
20+Our journal entries will just be plain text, so a simple `@t` will work fine to
21+store their contents. Entries will be organized by date, so we'll also need to
22+decide a format for that.
23+
24+One option would be to use an `@da`, and then use the date functions included
25+in the `@urbit/api` NPM package on the front-end to convert them to ordinary
26+Javascript `Date` objects. In this case, to keep it simple, we'll just use the
27+number of milliseconds since the Unix Epoch as an `atom`, since it's natively
28+supported by the Javascript `Date` object.
29+
30+The structure for a journal entry can therefore be:
31+
32+```hoon
33++$ id @
34++$ txt @t
35++$ entry [=id =txt]
36+```
37+
38+### 2. Actions
39+
40+Now that we know what a journal entry looks like, we can think about what kind
41+of actions/commands our agent will handle in its `++on-poke` arm. For our
42+journal app, there are three basic things we might do:
43+
44+1. Add a new journal entry.
45+2. Edit an existing journal entry.
46+3. Delete an existing journal entry.
47+
48+We can create a tagged union structure for these actions, like so:
49+
50+```hoon
51++$ action
52+ $% [%add =id =txt]
53+ [%edit =id =txt]
54+ [%del =id]
55+ ==
56+```
57+
58+### 3. Updates
59+
60+Updates are a little more complicated than our actions. Firstly, our front-end
61+needs to be able to retrieve an initial list of journal entries to display. Once
62+it has that, it also needs to be notified of any changes. For example, if a new
63+entry is added, it needs to know so it can add it to the list it's displaying.
64+If an entry gets deleted, it needs to remove it from the list. Etc.
65+
66+The simplest approach to the initial entries is just a `(list entry)`. Then, for
67+the subsequent updates, we could send out the `$action`. Since an `$action` is a
68+tagged union, it's simpler to have all updates be a tagged union, so when we get
69+to doing mark conversions we can just switch on the head tag. Therefore, we can
70+define an `$update` structure like so:
71+
72+```hoon
73++$ update
74+ $% action
75+ [%jrnl list=(list entry)]
76+ ==
77+```
78+
79+There's one drawback to this structure. Suppose either an agent on a remote ship
80+or an instance of the front-end client is subscribed for updates, and the
81+network connection is disrupted. In the remote ship case, Gall will only allow
82+so many undelivered messages to accumulate in Ames before it automatically kicks
83+the unresponsive subscriber. In the front-end case, the subscription will also
84+be ended if enough unacknowledged messages accumulate, and additionally the
85+client may sometimes need to establish an entirely new connection with the ship,
86+discarding existing subscriptions. When this happens, the remote ship or web
87+client has no way to know how many (if any) updates they've missed.
88+
89+The only way to resynchronize their state with ours is to discard their existing
90+state, refetch the entire initial state once again, and then resubscribe for
91+updates. This might be fine if the state of our agent is small, but it becomes a
92+problem if it's very large. For example, if our agent holds tens of thousands of
93+chat messages, having to resend them all every time anyone has connectivity
94+issues is quite inefficient.
95+
96+One solution to this is to keep an _update log_. Each update can be tagged with
97+the time it occurred, and stored in our agent's state, separately to the
98+entries. If an agent or web client needs to resynchronize with our agent, it can
99+just request all updates since the last one it received. This approach is used
100+by the `%graph-store` agent, for example. Our agent is local-only and doesn't
101+have a huge state so it might not be strictly necessary, but we'll use it to
102+demonstrate the approach.
103+
104+We can define a logged update like so, where the `@` is the update timestamp in
105+milliseconds since the Unix Epoch:
106+
107+```hoon
108++$ logged (pair @ action)
109++$ update
110+ %+ pair @
111+ $% action
112+ [%jrnl list=(list entry)]
113+ [%logs list=(list logged)]
114+ ==
115+```
116+
117+### 4. State
118+
119+We need to store two things in our state: the journal entries and the update
120+log. We could just use a couple of `map`s like so:
121+
122+```hoon
123++$ journal (map id txt)
124++$ log (map @ action)
125+```
126+
127+Ordinary `map`s are fine if we just want to access one value at a time, but we
128+want to be able to:
129+
130+1. Retrieve only some of the journal entries at a time, so we can have "lazy
131+ loading" in the front-end, loading more entries each time the user scrolls to
132+ the bottom of the list.
133+2. Retrieve only logged updates newer than a certain time, in the case where the
134+ subscription is interrupted due to connectivity issues.
135+3. Retrieve journal entries between two dates.
136+
137+Maps are ordered by the hash of their key, so if we convert them to a list
138+they'll come out in seemingly random order. That means we'd have to convert the
139+map to a list, sort the list, and then iterate over it again to pull out the
140+items we want. We could alternatively store things in a list directly, but
141+retrieving or modifying arbitrary items would be less efficient.
142+
143+To solve this, rather than using a `map` or a `list`, we can use an _ordered
144+map_. The mold builder for an ordered map is a `mop`, and it's included in the
145+[`zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L5284)
146+utility library rather than the standard library.
147+
148+A `mop` is defined similarly to a `map`, but it takes an extra argument in the
149+following manner:
150+
151+```hoon
152+((mop key-mold val-mold) comparator-gate)
153+```
154+
155+The gate is a binary gate which takes two keys and produces a `?`. The
156+comparator is used to decide how to order the items in the mop. In our case,
157+we'll create a `$journal` and `$log` `mop` like so:
158+
159+```hoon
160++$ journal ((mop id txt) gth)
161++$ log ((mop @ action) lth)
162+```
163+
164+The entries in `$journal` are arranged in ascending time order using `++gth`, so
165+the right-most item is the newest. The `$log` `mop` contains the update log, and
166+is arranged in descending time order, so the right-most item is the oldest.
167+
168+We'll look at how to use ordered maps later when we get to writing the agent
169+itself.
170+
171+## Conclusion
172+
173+When we put each of these parts together, we have our complete
174+`/sur/journal.hoon` file:
175+
176+```hoon
177+|%
178+:: Basic types of the data we're dealing with
179+::
180++$ id @
181++$ txt @t
182++$ entry [=id =txt]
183+:: Poke actions
184+::
185++$ action
186+ $% [%add =id =txt]
187+ [%edit =id =txt]
188+ [%del =id]
189+ ==
190+:: Types for updates to subscribers or returned via scries
191+::
192++$ logged (pair @ action)
193++$ update
194+ %+ pair @
195+ $% action
196+ [%jrnl list=(list entry)]
197+ [%logs list=(list logged)]
198+ ==
199+:: Types for our agent's state
200+::
201++$ journal ((mop id txt) gth)
202++$ log ((mop @ action) lth)
203+--
204+```
205+
206+## Resources
207+
208+- [Gall Guide /sur section](/docs/userspace/gall-guide/7-sur-and-marks#sur) -
209+ This section of the Gall Guide covers writing a `/sur` structure library for
210+ an agent.
211+
212+- [Ordered map functions in
213+ `zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L5284-L5688) -
214+ This section of `zuse.hoon` contains all the functions for working with
215+ `mop`s, and is well commented.
content/docs/userspace/full-stack/3-agent.mdnew file+338
@@ -0,0 +1,338 @@
1++++
2+title = "3. Agent"
3+weight = 3
4+template = "doc.html"
5++++
6+
7+Now that we have our agent's types defined and have thought through its
8+behavior, we can write the `%journal` agent itself.
9+
10+## Imports
11+
12+```hoon
13+/- *journal
14+/+ default-agent, dbug, agentio
15+```
16+
17+We first import the `/sur/journal.hoon` file we previously created and expose
18+its structures. We import the standard `default-agent` and `dbug`, and also an additional library called `agentio`.
19+
20+Agentio contains a number of convenience functions to make common agent tasks
21+simpler. For example, rather than writing out the full `$card`s when sending
22+`%fact`s to subscribers, we can call `++fact` in `agentio` with the `cage` and
23+`path`s and it will compose them for us. There are many more functions in
24+`agentio` than we'll use here - you can have a look through the library in
25+[`/base/lib/agentio.hoon`](https://github.com/urbit/urbit/blob/master/pkg/base-dev/lib/agentio.hoon)
26+to see what else it can do.
27+
28+## State and type core
29+
30+```hoon
31+|%
32++$ versioned-state
33+ $% state-0
34+ ==
35++$ state-0 [%0 =journal =log]
36++$ card card:agent:gall
37+++ j-orm ((on id txt) gth)
38+++ log-orm ((on @ action) lth)
39+++ unique-time
40+ |= [=time =log]
41+ ^- @
42+ =/ unix-ms=@
43+ (unm:chrono:userlib time)
44+ |-
45+ ?. (has:log-orm log unix-ms)
46+ unix-ms
47+ $(time (add unix-ms 1))
48+--
49+```
50+
51+As we discussed in the previous section, our state will contain a `$journal`
52+structure containing all our journal entries, and a `$log` structure containing
53+the update log. These are both _ordered maps_, defined as `((mop id txt) gth)`
54+and `((mop @ action) lth)` respectively. We can therefore define our _versioned
55+state_ as `[%0 =journal =log]`, in the usual manner.
56+
57+We've define `$card` for convenience as usual, and we've also added three more
58+arms. The first two relate to our two ordered maps. If you'll recall, an
59+ordinary `map` is called with the `++by` door in the standard library, like so:
60+
61+```hoon
62+(~(get by foo) %bar)
63+```
64+
65+An ordered map uses the `++on` gate in `zuse.hoon` rather than `++by`, and its
66+invocation is slightly different. It must first be setup in a similar manner to
67+the `mop` type, by providing it the key/value molds and comparator gates. Once
68+that's done, its individual functions can be called with the `mop` and
69+arguments, like:
70+
71+```hoon
72+(get:((on @ud @ud) gth) foo %bar)
73+```
74+
75+This is quite a cumbersome expression to use every time we want to interact with
76+our `mop`. To make it easier, we can store the `((on @ud @ud) gth)` part in an
77+arm, and then when we need to use it we can just do `(get:arm-name foo %bar)`.
78+In this case, we've done one each of our ordered maps like so:
79+
80+```hoon
81+++ j-orm ((on id txt) gth)
82+++ log-orm ((on @ action) lth)
83+```
84+
85+The last arm in our state definition core is `++unique-time`. Since we'll use
86+`now.bowl` to derive the timestamp for updates, we run into an issue if multiple
87+pokes arrive in a single Arvo event. In that case, `now.bowl` would be the same
88+for each poke, so they'd be given the same key and override each other in the
89+`mop`. To avoid this, `++unique-time` is just a simple recursive function that
90+will increment the timestamp by one millisecond if the key already exists in the
91+`$log` `mop`, ensuring all updates get unique timestamps and there are no
92+collisions.
93+
94+## Agent core setup
95+
96+```hoon
97+%- agent:dbug
98+=| state-0
99+=* state -
100+^- agent:gall
101+|_ =bowl:gall
102++* this .
103+ def ~(. (default-agent this %|) bowl)
104+ io ~(. agentio bowl)
105+++ on-init on-init:def
106+++ on-save
107+ ^- vase
108+ !>(state)
109+::
110+++ on-load
111+ |= old-vase=vase
112+ ^- (quip card _this)
113+ `this(state !<(versioned-state old-vase))
114+::
115+```
116+
117+Here we setup our agent core and define the three lifecycle arms. Since we only
118+have a single state version at present, these are very simple functions. You'll
119+notice in our `+*` arm, along with the usual `this` and `def`, we've also setup
120+the `agentio` library we imported, giving it the bowl and an alias of `io`.
121+
122+## Pokes
123+
124+```hoon
125+++ on-poke
126+ |= [=mark =vase]
127+ ^- (quip card _this)
128+ |^
129+ ?> (team:title our.bowl src.bowl)
130+ ?. ?=(%journal-action mark) (on-poke:def mark vase)
131+ =/ now=@ (unique-time now.bowl log)
132+ =/ act !<(action vase)
133+ =. state (poke-action act)
134+ :_ this(log (put:log-orm log now act))
135+ ~[(fact:io journal-update+!>(`update`[now act]) ~[/updates])]
136+ ::
137+ ++ poke-action
138+ |= act=action
139+ ^- _state
140+ ?- -.act
141+ %add
142+ ?< (has:j-orm journal id.act)
143+ state(journal (put:j-orm journal id.act txt.act))
144+ ::
145+ %edit
146+ ?> (has:j-orm journal id.act)
147+ state(journal (put:j-orm journal id.act txt.act))
148+ ::
149+ %del
150+ ?> (has:j-orm journal id.act)
151+ state(journal +:(del:j-orm journal id.act))
152+ ==
153+ --
154+::
155+```
156+
157+Here we have our `++on-poke` arm, where we handle `$action`s. Since our
158+`%journal` agent is intended for local use only, we make sure only our ship or
159+our moons may perform actions with:
160+
161+```hoon
162+?> (team:title our.bowl src.bowl)
163+```
164+
165+We haven't yet written our mark files, but our mark for `$action`s will be
166+`%journal-action`, so we make sure that's what we've received and if not, call
167+`++on-poke:def` to crash with an error message. We make sure the the timestamps
168+are unique with our `++unique-time` function described earlier, and then we
169+extract the poke's vase to an `$action` structure and call `++poke-action` to
170+handle it. We've made `++on-poke` a door with a separate `++poke-action` arm to
171+make the logic a little simpler, but in principle we could have had it all
172+directly inside the main `++poke-action` gate, or even separated it out into a
173+helper core below.
174+
175+The logic in `++poke-action` is very simple, with three cases for each of the possible `$action`s:
176+
177+- `%add` - Add a new journal entry. We check it doesn't already exist with
178+ `++has:j-orm`, and then add it to our `$journal` with `++put:j-orm`.
179+
180+- `%edit` - Edit an existing journal entry. We make sure it _does_ exist with
181+ `++has:j-orm`, and then override the old entry with the new one using
182+ `++put:j-orm` again.
183+
184+- `%del` - Delete an existing journal entry. We make sure it exists again with
185+ `++has:j-orm`, and then use `++del:j-orm` to delete it from our `$journal`
186+ `mop`.
187+
188+Back in the main part of `++on-poke`, `++poke-action` updates the state with the
189+new `$journal`, then we proceed to:
190+
191+```hoon
192+:_ this(log (put:log-orm log now act))
193+~[(fact:io journal-update+!>(`update`[now act]) ~[/updates])]
194+```
195+
196+We add the timestamp to the action, converting it to a logged update. We add it
197+to the `$log` update log using `++put:log-orm`, and also send the logged update
198+out to subscribers on the `/updates` subscription path. We haven't written our
199+mark files yet, but `%journal-update` is the mark we'll use for `$update`s, so
200+we pack the `$update` in a vase and add the mark to make it a `$cage`. Notice
201+we're using the `++fact` function in `agentio` (which we aliased as `io`) rather
202+than manually composing the `%fact`.
203+
204+## Subscriptions
205+
206+```hoon
207+++ on-watch
208+ |= =path
209+ ^- (quip card _this)
210+ ?> (team:title our.bowl src.bowl)
211+ ?+ path (on-watch:def path)
212+ [%updates ~] `this
213+ ==
214+::
215+```
216+
217+Our subscription logic is extremely simple - we just have a single `/updates`
218+path, which the front-end or other local agents may subscribe to. All updates
219+get sent out on this path. We enforce local-only with the `team:title` check.
220+
221+We could have had our `++on-watch` arm send out some initial state to new
222+subscribers, but for our front-end we'll instead fetch the initial state
223+separately with a scry. This just makes it slightly easier if our front-end
224+needs to resubscribe at some point - it'll already have some state in that case
225+so we don't want it to get sent again.
226+
227+## Scry Endpoints
228+
229+```hoon
230+++ on-peek
231+ |= =path
232+ ^- (unit (unit cage))
233+ ?> (team:title our.bowl src.bowl)
234+ =/ now=@ (unm:chrono:userlib now.bowl)
235+ ?+ path (on-peek:def path)
236+ [%x %entries *]
237+ ?+ t.t.path (on-peek:def path)
238+ [%all ~]
239+ :^ ~ ~ %journal-update
240+ !> ^- update
241+ [now %jrnl (tap:j-orm journal)]
242+ ::
243+ [%before @ @ ~]
244+ =/ before=@ (rash i.t.t.t.path dem)
245+ =/ max=@ (rash i.t.t.t.t.path dem)
246+ :^ ~ ~ %journal-update
247+ !> ^- update
248+ [now %jrnl (tab:j-orm journal `before max)]
249+ ::
250+ [%between @ @ ~]
251+ =/ start=@
252+ =+ (rash i.t.t.t.path dem)
253+ ?:(=(0 -) - (sub - 1))
254+ =/ end=@ (add 1 (rash i.t.t.t.t.path dem))
255+ :^ ~ ~ %journal-update
256+ !> ^- update
257+ [now %jrnl (tap:j-orm (lot:j-orm journal `end `start))]
258+ ==
259+ ::
260+ [%x %updates *]
261+ ?+ t.t.path (on-peek:def path)
262+ [%all ~]
263+ :^ ~ ~ %journal-update
264+ !> ^- update
265+ [now %logs (tap:log-orm log)]
266+ ::
267+ [%since @ ~]
268+ =/ since=@ (rash i.t.t.t.path dem)
269+ :^ ~ ~ %journal-update
270+ !> ^- update
271+ [now %logs (tap:log-orm (lot:log-orm log `since ~))]
272+ ==
273+ ==
274+::
275+```
276+
277+Here we have our `++on-scry` arm. The scry endpoints we've defined are divided
278+into two parts: querying the update `$log` and retrieving entries from the
279+`$journal`. Each end-point is as follows:
280+
281+- `/x/entries/all` - Retrieve all entries in the `$journal`. Our front-end will
282+ use lazy-loading and only get a few at a time, so it won't use this. It's nice
283+ to have it though, in case other agents want to get that data.
284+
285+- `/x/entries/before/[before]/[max]` - Retrieve at most `[max]` entries older
286+ than the entry on `[before]` date. This is so our lazy-loading front-end can
287+ progressively load more as the user scrolls down the page. The Javascript
288+ front-end will format numbers without dot separators, so the path will look
289+ like `/x/entries/before/1648051573109/10`. We therefore have to use the
290+ [`++dem`](docs/hoon/reference/stdlib/4i#dem) parsing `rule` in a
291+ [`++rash`](/docs/hoon/reference/stdlib/4g#rash) parser to convert it to an
292+ ordinary atom. We then use the `++tap:log-orm` `mop` function to retrieve the
293+ requested range as a list and return it as an `$update` with a
294+ `%journal-update` mark.
295+
296+- `/x/entries/between/[start]/[end]` - Retrieve all journal entries between two
297+ dates. This is so our front-end can have a search function, where the user can
298+ enter a start and end date and get all the entries in between. The
299+ `++lot:j-orm` `mop` function returns the subset of a `mop` between the two
300+ given keys as a `mop`, and then we call `++tap:j-orm` to convert it to a list.
301+ The `++lot:j-orm function` excludes the start and end values, so we subtract 1
302+ from the start and add 1 to the end to make sure it includes the full range.
303+
304+- `/x/updates/all` - Retrieve the entire update `$log`. Our front-end won't use
305+ this but it might be useful for other agents, so we've included it here.
306+
307+- `/x/updates/since/[since]` - Retrieve all `$update`s that have happened since
308+ the specified timestamp, if any. This is so our front-end (or another agent)
309+ can resynchronize its state in the event its subscription is interrupted,
310+ without having to fetch everything from scratch again.
311+
312+We don't use any of the other agent arms, so the remainder have all been passed
313+to `default-agent` for handling:
314+
315+```hoon
316+++ on-leave on-leave:def
317+++ on-agent on-agent:def
318+++ on-arvo on-arvo:def
319+++ on-fail on-fail:def
320+--
321+```
322+
323+The full agent source can be viewed
324+[here](https://github.com/urbit/docs-examples/blob/main/journal-app/desk/app/journal.hoon).
325+
326+## Resources
327+
328+- [The Gall Guide](/docs/userspace/gall-guide/intro) - The Gall Guide covers all
329+ aspects of writing Gall agents in detail.
330+
331+- [Ordered map functions in
332+ `zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L5284-L5688) -
333+ This section of `zuse.hoon` contains all the functions for working with
334+ `mop`s, and is well commented.
335+
336+- [`/lib/agentio.hoon`](https://github.com/urbit/urbit/blob/master/pkg/base-dev/lib/agentio.hoon) -
337+ The `agentio` library in the `%base` desk contains a large number of useful
338+ functions which making writing Gall agents easier.
content/docs/userspace/full-stack/4-json.mdnew file+357
@@ -0,0 +1,357 @@
1++++
2+title = "4. JSON"
3+weight = 4
4+template = "doc.html"
5++++
6+
7+Data sent between our agent and our front-end will all be encoded as JSON. In
8+this section, we'll briefly look at how JSON works in Urbit, and write a library
9+to convert our agent's structures to and from JSON for our front-end.
10+
11+JSON data comes into Eyre as a string, and Eyre parses it with the
12+[`++de-json:html`](/docs/hoon/reference/zuse/2e_2-3#de-jsonhtml) function in
13+[`zuse.hoon`](/docs/hoon/reference/zuse/table-of-contents). The
14+hoon type it's parsed to is `$json`, which is defined as:
15+
16+```hoon
17++$ json :: normal json value
18+ $@ ~ :: null
19+ $% [%a p=(list json)] :: array
20+ [%b p=?] :: boolean
21+ [%o p=(map @t json)] :: object
22+ [%n p=@ta] :: number
23+ [%s p=@t] :: string
24+ == ::
25+```
26+
27+Once Eyre has converted the raw JSON string to a `$json` structure, it will be
28+converted to the mark the web client specified and then delivered to the target
29+agent (unless the mark specified is already `%json`, in which case it will be
30+delivered directly). Outbound facts will go through the same process in
31+reverse - converted from the agent's native mark to `$json`, then encoded in a
32+string by Eyre using
33+[`++en-json:html`](<(/docs/hoon/reference/zuse/2e_2-3#en-jsonhtml)>) and delivered
34+to the web client. The basic flow for both inbound messages (pokes) and outbound
35+messages (facts and scry results) looks like this:
36+
37+![eyre mark flow diagram](https://media.urbit.org/docs/userspace/full-stack-guide/eyre-mark-flow-diagram.svg)
38+
39+The mark conversion will be done by the corresponding mark file in `/mar` on the
40+agent's desk. In our case it would be `/mar/journal/action.hoon` and
41+`/mar/journal/update.hoon` in the `%journal` desk for our `%journal-action` and
42+`%journal-update` marks, which are for the `$action` and `$update` structures we
43+defined previously.
44+
45+Mark conversion functions can be included directly in the mark file, or they can
46+be written in a separate library, then imported and called by the mark file. We
47+will do the latter in this case, so before we create the mark files themselves,
48+we'll write a library called `/lib/journal.hoon` with the conversion functions.
49+
50+## `$json` utilities
51+
52+[`zuse.hoon`](/docs/hoon/reference/zuse/table-of-contents) contains three main
53+cores for converting to and from `$json`:
54+
55+- [`++enjs:format`](/docs/hoon/reference/zuse/2d_1-5#enjsformat) - Functions to
56+ help encode data structures as `$json`.
57+- [`++dejs:format`](/docs/hoon/reference/zuse/2d_6#dejsformat) - Functions to
58+ decode `$json` to other data structures.
59+- [`++dejs-soft:format`](/docs/hoon/reference/zuse/2d_7#dejs-softformat) -
60+ Mostly the same as `++dejs:format` except the functions produce units which
61+ are null if decoding fails, rather than just crashing.
62+
63+### `++enjs:format`
64+
65+This contains ten functions for encoding `$json`. Most of them are for specific
66+hoon data types, such as `++tape:enjs:format`, `++ship:enjs:format`,
67+`++path:enjs:format`, etc. We'll just have a look at the two most general and
68+useful ones: `++frond:enjs:format` and `++pairs:enjs:format`.
69+
70+#### `++frond`
71+
72+This function is for forming a JSON object from a single key-value pair. For
73+example:
74+
75+```
76+> (frond:enjs:format 'foo' s+'bar')
77+[%o p={[p='foo' q=[%s p='bar']]}]
78+```
79+
80+When stringified by Eyre, this will look like:
81+
82+```json
83+{ "foo": "bar" }
84+```
85+
86+#### `++pairs`
87+
88+This is similar to `++frond` and also forms a JSON object, but it takes multiple
89+key-value pairs rather than just one:
90+
91+```
92+> (pairs:enjs:format ~[['foo' n+~.123] ['bar' s+'abc'] ['baz' b+&]])
93+[%o p={[p='bar' q=[%s p='abc']] [p='baz' q=[%b p=%.y]] [p='foo' q=[%n p=~.123]]}]
94+```
95+
96+When stringified by Eyre, this will look like:
97+
98+```json
99+{
100+ "foo": 123,
101+ "baz": true,
102+ "bar": "abc"
103+}
104+```
105+
106+Notice that we used a knot for the value of `foo` (`n+~.123`). Numbers in JSON
107+can be signed or unsigned and integers or floating point values. The `$json`
108+structure uses a knot so that you can decide whether a particular number should
109+be treated as `@ud`, `@sd`, `@rs`, etc.
110+
111+### `++dejs:format`
112+
113+This core contains many functions for decoding `$json`. We'll touch on some
114+useful families of `++dejs` functions in brief, but because there's so many, in
115+practice you'll need to look through the [`++dejs`
116+reference](/docs/hoon/reference/zuse/2d_6) to find the correct functions for
117+your use case.
118+
119+#### Number functions
120+
121+- `++ne` - decode a number to a `@rd`.
122+- `++ni` - decode a number to a `@ud`.
123+- `++no` - decode a number to a `@ta`.
124+- `++nu` - decode a hexadecimal string to a `@ux`.
125+
126+For example:
127+
128+```
129+> (ni:dejs:format n+'123')
130+123
131+```
132+
133+#### String functions
134+
135+- `++sa` - decode a string to a `tape`.
136+- `++sd` - decode a string containing a `@da` aura date value to a `@da`.
137+- `++se` - decode a string containing the specified aura to that aura.
138+- `++so` - decode a string to a `@t`.
139+- `++su` - decode a string by parsing it with the given [parsing
140+ rule](/docs/hoon/reference/stdlib/4f).
141+
142+#### Array functions
143+
144+`++ar`, `++as`, and `++at` decode a `$json` array to a `list`, `set`, and
145+n-tuple respectively. These gates take other `++dejs` functions as an argument,
146+producing a new gate that will then take the `$json` array. For example:
147+
148+```
149+> ((ar so):dejs:format a+[s+'foo' s+'bar' s+'baz' ~])
150+<|foo bar baz|>
151+```
152+
153+Notice that `++so` is given as the argument to `++ar`. `++so` is a `++dejs`
154+function that decodes a `$json` string to a `cord`. The gate resulting from `(ar so)` is then called with a `$json` array as its argument, and its product is a
155+`(list @t)` of the elements of the array.
156+
157+Many `++dejs` functions take other `++dejs` functions as their arguments. A
158+complex nested `$json` decoding function can be built up in this manner.
159+
160+#### Object functions
161+
162+- `++of` - decode an object containing a single key-value pair to a head-tagged
163+ cell.
164+- `++ot` - decode an object to a n-tuple.
165+- `++ou` - decode an object to an n-tuple, replacing optional missing values
166+ with a given value.
167+- `++oj` - decode an object of arrays to a `jug`.
168+- `++om` - decode an object to a `map`.
169+- `++op` - decode an object to a `map`, and also parse the object keys with a
170+ [parsing rule](/docs/hoon/reference/stdlib/4f).
171+
172+For example:
173+
174+```
175+> =js %- need %- de-json:html
176+ '''
177+ {
178+ "foo": "hello",
179+ "baz": true,
180+ "bar": 123
181+ }
182+ '''
183+
184+> %- (ot ~[foo+so bar+ni]):dejs:format js
185+['hello' 123]
186+```
187+
188+## Our types as JSON
189+
190+We need to decide how our `$action` and `$update` types will be represented as
191+JSON in order to write our conversion functions. There are many ways to do this,
192+but in this case we'll do it as follows:
193+
194+### Actions
195+
196+| JSON | Noun |
197+| ------------------------------------------------- | ---------------------------------------------- |
198+| `{"add":{"id":1648366311070,"txt":"some text"}}` | `[%add id=1.648.366.034.844 txt='some text']` |
199+| `{"edit":{"id":1648366311070,"txt":"some text"}}` | `[%edit id=1.648.366.034.844 txt='some text']` |
200+| `{"del":{"id":1648366311070}}` | `[%del id=1.648.366.034.844]` |
201+
202+### Updates
203+
204+| Noun | JSON |
205+| ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
206+| `[1.648.366.492.459 %add id=1.648.366.034.844 txt='some text']` | `{time:1648366481425,"add":{"id":1648366311070,"txt":"some text"}}` |
207+| `[1.648.366.492.459 %edit id=1.648.366.034.844 txt='some text']` | `{time:1648366481425,"edit":{"id":1648366311070,"txt":"some text"}}` |
208+| `[1.648.366.492.459 %del id=1.648.366.034.844]` | `{time:1648366481425,"del":{"id":1648366311070}}` |
209+| `[1.648.366.492.459 %jrnl ~[[id=1.648.366.034.844 txt='some text'] ...]` | `{time:1648366481425,"entries":[{"id":1648366311070,"txt":"some text"},...]}` |
210+| `[1.648.366.492.459 %logs ~[[1.648.366.492.459 %add id=1.648.366.034.844 txt='some text'] ...]` | `{time:1648366481425,"logs":[{time:1648366481425,"add":{id":1648366311070,"txt":"some text"}},...]}` |
211+
212+Now let's write our library of encoding/decoding functions.
213+
214+## `/lib/journal.hoon`
215+
216+```hoon
217+/- *journal
218+|%
219+```
220+
221+First, we'll import the `/sur/journal.hoon` structures we previously created.
222+Next, we'll create two arms in our core, `++dejs-action` and `++enjs-update`, to
223+handle incoming poke `$action`s and outgoing facts or scry result `$update`s.
224+
225+### `$json` to `$action`
226+
227+```hoon
228+++ dejs-action
229+ =, dejs:format
230+ |= jon=json
231+ ^- action
232+ %. jon
233+ %- of
234+ :~ [%add (ot ~[id+ni txt+so])]
235+ [%edit (ot ~[id+ni txt+so])]
236+ [%del (ot ~[id+ni])]
237+ ==
238+```
239+
240+The first thing we do is use the [`=,`
241+rune](/docs/hoon/reference/rune/tis#-tiscom) to expose the `++dejs:format`
242+namespace. This allows us to reference `ot`, `ni`, etc rather than having to
243+write `ot:dejs:format` every time. Note that you should be careful using `=,`
244+generally as the exposed wings can shadow previous wings if they have the same
245+name.
246+
247+We then create a gate that takes `$json` and returns a `$action` structure.
248+Since we'll only take one action at a time, we can use the `++of` function,
249+which takes a single key-value pair. `++of` takes a list of all possible `$json`
250+objects it will receive, tagged by key.
251+
252+For each key, we specify a function to handle its value. Ours will be objects,
253+so we use `++ot` and specify the pairs of the key and `+dejs` function to decode
254+it. We then cast the output to our `$action` structure.
255+
256+You'll notice the nesting of these `++dejs` functions approximately reflects the
257+nested structure of the `$json` it's decoding.
258+
259+### `$update` to `$json`
260+
261+```hoon
262+++ enjs-update
263+ =, enjs:format
264+ |= upd=update
265+ ^- json
266+ |^
267+ ?+ -.q.upd (logged upd)
268+ %jrnl
269+ %- pairs
270+ :~ ['time' (numb p.upd)]
271+ ['entries' a+(turn list.q.upd entry)]
272+ ==
273+ ::
274+ %logs
275+ %- pairs
276+ :~ ['time' (numb p.upd)]
277+ ['logs' a+(turn list.q.upd logged)]
278+ ==
279+ ==
280+ ++ entry
281+ |= ent=^entry
282+ ^- json
283+ %- pairs
284+ :~ ['id' (numb id.ent)]
285+ ['txt' s+txt.ent]
286+ ==
287+ ++ logged
288+ |= lgd=^logged
289+ ^- json
290+ ?- -.q.lgd
291+ %add
292+ %- pairs
293+ :~ ['time' (numb p.lgd)]
294+ :- 'add'
295+ %- pairs
296+ :~ ['id' (numb id.q.lgd)]
297+ ['txt' s+txt.q.lgd]
298+ == ==
299+ %edit
300+ %- pairs
301+ :~ ['time' (numb p.lgd)]
302+ :- 'edit'
303+ %- pairs
304+ :~ ['id' (numb id.q.lgd)]
305+ ['txt' s+txt.q.lgd]
306+ == ==
307+ %del
308+ %- pairs
309+ :~ ['time' (numb p.lgd)]
310+ :- 'del'
311+ (frond 'id' (numb id.q.lgd))
312+ ==
313+ ==
314+ --
315+--
316+```
317+
318+Our `$update` encoding function's a little more complex than our `$action`
319+decoding function, since our `$update` structure is more complex.
320+
321+Like the previous one, we use `=,` to expose the namespace of `++enjs:format`.
322+
323+Our gate takes an `$update` and returns a `$json` structure. We use `|^` so we
324+can separate out the encoding functions for individual entries (`++entry`) and
325+individual logged actions (`++logged`).
326+
327+We first test the head of the `$update`, and if it's `%jrnl` (a list of
328+entries), we `turn` over the entries and call `++entry` to encode each one. If
329+it's `%logs`, we do the same, but call `++logged` for each item in the list.
330+Otherwise, if it's just a single update, we encode it with `++logged`.
331+
332+We primarily use `++pairs` to form the object, though sometimes `++frond` if it
333+only contains a single key-value pair. We also use `++numb` to encode numerical
334+values.
335+
336+You'll notice more of our encoding function is done manually than our previous
337+decoding function. For example, we form arrays by tagging an ordinary `list`
338+with `%a`, and strings by tagging an ordinary `cord` with `%s`. This is typical
339+when you write `$json` encoding functions, and is the reason there are far fewer
340+`+enjs` functions than `+dejs` functions.
341+
342+## Resources
343+
344+- [The JSON Guide](/docs/hoon/guides/json-guide) - The stand-alone JSON guide
345+ covers JSON encoding/decoding in great detail.
346+- [The Zuse reference](/docs/hoon/reference/zuse/table-of-contents) - The
347+ `zuse.hoon` reference documents all JSON-related functions in detail.
348+
349+- [`++enjs:format` reference](/docs/hoon/reference/zuse/2d_1-5#enjsformat) -
350+ This section of the `zuse.hoon` documentation covers all JSON encoding
351+ functions.
352+
353+- [`++dejs:format` reference](/docs/hoon/reference/zuse/2d_6) - This section of
354+ the `zuse.hoon` documentation covers all JSON _decoding_ functions.
355+
356+- [Eyre overview](/docs/arvo/eyre/eyre) - This section of the Eyre vane
357+ documentation goes over the basic features of the Eyre vane.
content/docs/userspace/full-stack/5-marks.mdnew file+97
@@ -0,0 +1,97 @@
1++++
2+title = "5. Marks"
3+weight = 5
4+template = "doc.html"
5++++
6+
7+In this section we'll write the mark files for our agent. We'll need two marks,
8+one for poke `$action`s and one for subscription updates and scry results, both
9+of which are `$update`s. Our `$action` mark will be called `%journal-action` and
10+our `$update` mark will be called `%journal-update`. These will be located at
11+`/mar/journal/action.hoon` and `/mar/journal/update.hoon`.
12+
13+Note that a mark called `%foo-bar` will first be looked for in
14+`/mar/foo-bar.hoon`, and if it's not there it will be looked for in
15+`/mar/foo/bar.hoon`. That's why we can have a single name like `%journal-action`
16+but have it in `/mar/journal/action.hoon`
17+
18+## `%journal-action`
19+
20+```hoon
21+/- *journal
22+/+ *journal
23+|_ act=action
24+++ grow
25+ |%
26+ ++ noun act
27+ --
28+++ grab
29+ |%
30+ ++ noun action
31+ ++ json dejs-action
32+ --
33+++ grad %noun
34+--
35+```
36+
37+First we import our `/sur/journal.hoon` structure file and also our
38+`/lib/journal.hoon` library (containing our `$json` conversion functions). The
39+sample of our mark door is just our `$action` structure. The `++grow` arm of a
40+mark core, if you recall, contains methods for converting _from_ our mark _to_
41+another mark. Actions only ever come inwards in pokes, so we don't need to worry
42+about converting an `$action` _to_ `$json`. The `++grow` arm can therefore just
43+handle the generic `%noun` case, simply returning our mark door's sample without
44+doing anything.
45+
46+`++grab`, conversely, defines methods for converting _to_ our mark _from_
47+another mark. Since `$action`s will come in from the front-end as `$json`, we
48+need to be able to convert `$json` data to our `$action` structure. Our
49+`/lib/journal.hoon` library contains the `++dejs-action` function for performing
50+this conversion, so we can just specify that function for the `%json` case.
51+We'll also define a standard `%noun` method, which will just "clam" (or "mold")
52+the incoming noun with the `$action` mold. Clamming/molding coerces a noun to a
53+type and is done by calling a mold as a function.
54+
55+Lastly, `++grad` defines revision control methods, but can be delegated to
56+another mark. Since this mark will never be used for actually storing files in
57+Clay, we can just delegate it to the generic `%noun` mark rather than writing a
58+proper set of `++grad` methods.
59+
60+## `%journal-update`
61+
62+```hoon
63+/- *journal
64+/+ *journal
65+|_ upd=update
66+++ grow
67+ |%
68+ ++ noun upd
69+ ++ json (enjs-update upd)
70+ --
71+++ grab
72+ |%
73+ ++ noun update
74+ --
75+++ grad %noun
76+--
77+```
78+
79+Next we have our `%journal-update` mark file. The sample of our mark door is our
80+`$update` structure. Our `$update`s are always outbound, never inbound, so we
81+only need to define a method for converting our `$update` structure to `$json`
82+in the `++grow` arm, and not the opposite direction in `++grad`. Our
83+`/lib/journal.hoon` library contains the `++enjs-update` function for performing
84+this conversion, so we can call it with the sample `$update` as its argument. We
85+can add `%noun` conversion methods and delegate revision control to the `%noun`
86+mark in the same manner as our `%journal-action` mark above.
87+
88+## Resources
89+
90+- [The Marks section of the Clay documentation](/docs/arvo/clay/marks/marks) -
91+ This section of the Clay vane documentation covers mark files comprehensively.
92+- [The mark file section of the Gall
93+ Guide](/docs/userspace/gall-guide/7-sur-and-marks#mark-files) - This part of
94+ the Gall Guide goes through the basics of mark files.
95+
96+- [The JSON Guide](/docs/hoon/guides/json-guide) - This also covers writing mark
97+ files to convert to/from JSON.
content/docs/userspace/full-stack/6-eyre.mdnew file+79
@@ -0,0 +1,79 @@
1++++
2+title = "6. Eyre"
3+weight = 6
4+template = "doc.html"
5++++
6+
7+Now that we have our structure file, agent, `$json` conversion library and mark
8+file, our back-end is complete. Before we start writing our front-end, though,
9+we should give a brief overview of how Eyre works.
10+
11+[Eyre](/docs/arvo/eyre/eyre) is the HTTP server [vane](/docs/glossary/vane) of
12+Arvo. Eyre has a handful of different subsystems, but the main two are the
13+channel system and the scry interface. These two are what we'll focus on here.
14+
15+In order to use the channel system or perform scries, a web client must have
16+authenticated with the ship's web login code (e.g.
17+`lidlut-tabwed-pillex-ridrup`) and obtained a session cookie. Our front-end will
18+be served directly from the ship by the `%docket` agent, so we can assume a
19+session cookie was already obtained when the user logged into landscape, and
20+skip over authentication.
21+
22+## Channels
23+
24+Eyre's channel system is the main way to interact with agents from a web client.
25+It provides a JSON interface to the ordinary poke and subscription system for
26+Gall agents.
27+
28+First, a unique channel ID is generated by the web client (`@urbit/http-api`
29+uses the current Unix time concatenated with a random hex string). The client
30+then sends a poke or subscription request for the channel, and Eyre
31+automatically opens a new channel with that ID. Once open, the client can then
32+connect to the channel and receive any events such as poke acks, watch acks,
33+facts from subscriptions, etc.
34+
35+The new channel is an SSE ([Server Sent
36+Event](https://html.spec.whatwg.org/#server-sent-events)) stream, and can be
37+handled by an `EventSource` object in Javascript. The `@urbit/http-api` library
38+we'll use abstracts this for us, so we won't need to deal with an `EventSource`
39+object directly. The channel can handle multiple concurrent subscriptions to
40+different agent subscription paths, and different agents can be poked through
41+the one channel. This means a client only needs to open a single channel for all
42+of its interactions with the ship. Each subscription is given a different ID, so
43+they can be individually unsubscribed later.
44+
45+A channel will timeout after 12 hours of inactivity, and the timeout is reset
46+every time Eyre receives a message of any kind from the client. Additionally,
47+each subscription on the channel may only accumulate 50 unacknowledged facts
48+before it's considered "clogged", in which case the individual clogged
49+subscription will be closed by Eyre after a short delay. All events of any kind
50+which Eyre sends out on the channel must be ack'd by the client. Ack'ing one
51+event will also ack all previous events too. The `@urbit/http-api` library we'll
52+use automatically acks events for us, so we don't need to worry about clogged
53+subscriptions or manually ack'ing events.
54+
55+Eyre expects a particular JSON object structure for each of these different
56+requests, but the `@urbit/http-api` library we'll use includes functions to send
57+pokes, subscription requests, etc, so we won't need to manually construct the
58+JSON objects in our front-end.
59+
60+## Scries
61+
62+Eyre's scry interface is separate to the channel system. Scries are performed by
63+a simple GET request to a path with a format of `/~/scry/{agent}{path}.{mark}`.
64+If successful, the HTTP response will contain the result with the mark
65+specified. If unsuccessful, an HTTP error will be thrown in response.
66+
67+The `@urbit/http-api` library we'll use includes a function for performing
68+scries, so we'll not need to manually send GET requests to the ship.
69+
70+## Resources
71+
72+- [The Eyre vane documentation](/docs/arvo/eyre/eyre) - This section of the vane
73+ docs covers all aspects of Eyre.
74+- [Eyre External API Reference](/docs/arvo/eyre/external-api-ref) - This section
75+ of the Eyre documentation contains reference material for Eyre's external API.
76+
77+- [The Eyre Guide](/docs/arvo/eyre/guide) - This section of the Eyre
78+ documentation walks through using Eyre's external API at a low level (using
79+ `curl`).
content/docs/userspace/full-stack/7-react-setup.mdnew file+214
@@ -0,0 +1,214 @@
1++++
2+title = "7. React app setup"
3+weight = 7
4+template = "doc.html"
5++++
6+
7+Now that we have a basic idea of how Eyre works, we can begin working on our
8+React app front-end.
9+
10+## Create React app
11+
12+Node.js must be installed, and can be downloaded from their
13+[website](https://nodejs.org/en/download). With that installed, we'll have the
14+`npm` package manager available. The first thing we'll do is globally install
15+the `create-react-app` package with the following command:
16+
17+```sh
18+npm install -g create-react-app
19+```
20+
21+Once installed, we can use it to create a new `journal-ui` directory and setup a
22+new React app in it with the following command:
23+
24+```sh
25+create-react-app journal-ui
26+```
27+
28+We can then open our new directory:
29+
30+```sh
31+cd journal-ui
32+```
33+
34+Its contents should look something like this:
35+
36+```
37+journal-ui
38+├── node_modules
39+├── package.json
40+├── package-lock.json
41+├── public
42+├── README.md
43+└── src
44+```
45+
46+## Install `http-api`
47+
48+Inside our React app directory, let's install the `@urbit/http-api` NPM package:
49+
50+```sh
51+npm i @urbit/http-api
52+```
53+
54+We also install a handful of other packages for the UI components (`bootstrap react-bootstrap react-textarea-autosize date-fns react-bottom-scroll-listener react-day-picker`), but that's not important to our purposes here.
55+
56+## Additional tweaks
57+
58+Our front-end will be served directly from the ship by the `%docket` app, where
59+a user will open it by clicking on its homescreen tile. Docket serves such
60+front-ends with a base URL path of `/apps/[desk]/`, so in our case it will be
61+`/apps/journal`. In order for our app to be built with correct resource paths,
62+we must add the following line to `package.json`:
63+
64+```json
65+"homepage": "/apps/journal/",
66+```
67+
68+Our app also needs to know the name of the ship it's being served from in order
69+to talk with it. The `%docket` agent serves a small file for this purpose at
70+`[host]/session.js`. This file is very simple and just contains:
71+
72+```js
73+window.ship = "sampel-palnet";
74+```
75+
76+`sampel-palnet` will of course be replaced by the actual name of the ship. We
77+include this script by adding the following line to the `&lt;head>` section of
78+`public/index.html`:
79+
80+```
81+<script src="/session.js"></script>
82+```
83+
84+## Basic API setup
85+
86+With everything now setup, we can begin work on the app itself. In this case
87+we'll just edit the existing `App.js` file in the `/src` directory. The first thing is to import the `Urbit` class from `@urbit/http-api`:
88+
89+```js
90+import Urbit from "@urbit/http-api";
91+```
92+
93+We also need to import a few other things, mostly relating to UI components (but
94+these aren't important for our purposes here):
95+
96+```js
97+import React, { Component } from "react";
98+import "bootstrap/dist/css/bootstrap.min.css";
99+import "react-day-picker/lib/style.css";
100+import TextareaAutosize from "react-textarea-autosize";
101+import Button from "react-bootstrap/Button";
102+import Card from "react-bootstrap/Card";
103+import Stack from "react-bootstrap/Stack";
104+import Tab from "react-bootstrap/Tab";
105+import Tabs from "react-bootstrap/Tabs";
106+import ToastContainer from "react-bootstrap/ToastContainer";
107+import Toast from "react-bootstrap/Toast";
108+import Spinner from "react-bootstrap/Spinner";
109+import CloseButton from "react-bootstrap/CloseButton";
110+import Modal from "react-bootstrap/Modal";
111+import DayPickerInput from "react-day-picker/DayPickerInput";
112+import endOfDay from "date-fns/endOfDay";
113+import startOfDay from "date-fns/startOfDay";
114+import { BottomScrollListener } from "react-bottom-scroll-listener";
115+```
116+
117+Inside the existing `App` class:
118+
119+```js
120+class App extends Component {
121+```
122+
123+...we'll clear out the existing demo code and start adding ours. The first thing
124+is to define our app's state. We'll look at most of the state entries in the
125+next section. For now, we'll just consider `status`.
126+
127+```js
128+state = {
129+ // .....
130+ status: null,
131+ // .....
132+};
133+```
134+
135+Next, we'll setup the `Urbit` API object in `componentDidMount`. We could do
136+this outside the `App` class since we're adding it to `window`, but we'll do it
137+this way so it's all in one place:
138+
139+```js
140+componentDidMount() {
141+ window.urbit = new Urbit("");
142+ window.urbit.ship = window.ship;
143+ window.urbit.onOpen = () => this.setState({status: "con"});
144+ window.urbit.onRetry = () => this.setState({status: "try"});
145+ window.urbit.onError = (err) => this.setState({status: "err"});
146+ this.init();
147+};
148+```
149+
150+The first thing we do is create a new instance of the `Urbit` class we imported
151+from `@urbit/http-api`, and save it to `window.urbit`. The `Urbit` class
152+constructor takes three arguments: `url`, `desk` and `code`, of which only `url`
153+is mandatory.
154+
155+- `url` is the URL of the ship we want to talk to. Since our React app will be
156+ served by the ship, we can just leave it as an empty `""` string and let
157+ `Urbit` use root-relative paths.
158+- `desk` is only necessary if we want to run threads through Eyre, and since
159+ we're not going to do that, we can exclude it.
160+- `code` is the web login code for authentication, but since the user will
161+ already have logged in, we can also exclude that.
162+
163+Therefore, we call the class contructor with just the empty `url` string:
164+
165+```js
166+window.urbit = new Urbit("");
167+```
168+
169+Next, we need to set the ship name in our `Urbit` instance. Eyre requires the
170+ship name be specified in all requests, so if we don't set it, Eyre will reject
171+all the messages we send. We previously included `session.js` which sets
172+`window.ship` to the ship name, so we just set `window.urbit.ship` as that:
173+
174+```js
175+window.urbit.ship = window.ship;
176+```
177+
178+Next, we set three callbacks: `onOpen`, `onRetry`, and `onError`. These
179+callbacks are fired when the state of our channel connection changes:
180+
181+- `onOpen` is called when a connection is established.
182+- `onRetry` is called when a channel connection has been interrupted (such as by
183+ network issues) and the `Urbit` object is trying to reconnect. Reconnection
184+ will be attempted up to three times: immediately, after 750ms, and after
185+ 3000ms.
186+- `onError` is called with an `Error` message once all retries have failed, or
187+ otherwise when a fatal error occurs.
188+
189+We'll look at how we handle these cases in the next section. For now, we'll just
190+set the `status` entry in the state to either `"con"`, `"try"`, or `"err"` as
191+the case may be. Note that it's not mandatory to set these callbacks, but
192+leaving connection problems unhandled is usually a bad idea.
193+
194+The last thing we do is call:
195+
196+```js
197+this.init();
198+```
199+
200+This function will fetch initial entries and subscribe for updates. We'll look
201+at it in the next section.
202+
203+## Resources
204+
205+- [HTTP API Guide](/docs/userspace/http-api-guide) - Reference documentation for
206+ `@urbit/http-api`.
207+
208+- [React app source
209+ code](https://github.com/urbit/docs-examples/tree/main/journal-app/ui) - The
210+ source code for the Journal app UI.
211+
212+- [`@urbit/http-api` source
213+ code](https://github.com/urbit/urbit/tree/master/pkg/npm/http-api) - The
214+ source code for the `@urbit/http-api` NPM package.
content/docs/userspace/full-stack/8-app-logic.mdnew file+406
@@ -0,0 +1,406 @@
1++++
2+title = "8. React app logic"
3+weight = 8
4+template = "doc.html"
5++++
6+
7+With the basic things setup, we can now go over the logic of our app. We'll just
8+focus on functions that are related to ship communications using the `Urbit`
9+object we previously setup, and ignore UI components and other helper functions.
10+
11+## State
12+
13+In the previous section we just mentioned the connection `status` field of our
14+state. Here's the full state of our App:
15+
16+```js
17+state = {
18+ entries: [], // list of journal entries for display
19+ drafts: {}, // edits which haven't been submitted yet
20+ newDraft: {}, // new entry which hasn't been submitted yet
21+ results: [], // search results
22+ searchStart: null, // search query start date
23+ searchEnd: null, // search query end date
24+ resultStart: null, // search results start date
25+ resultEnd: null, // search results end date
26+ searchTime: null, // time of last search
27+ latestUpdate: null, // most recent update we've received
28+ entryToDelete: null, // deletion target for confirmation modal
29+ status: null, // connection status (con, try, err)
30+ errorCount: 0, // number of errors so far
31+ errors: new Map(), // list of error messages for display
32+};
33+```
34+
35+We'll see how these are used subsequently.
36+
37+## Initialize
38+
39+The first thing our app does is call `init()`:
40+
41+```js
42+init = () => {
43+ this.getEntries().then(
44+ (result) => {
45+ this.handleUpdate(result);
46+ this.setState({ latestUpdate: result.time });
47+ this.subscribe();
48+ },
49+ (err) => {
50+ this.setErrorMsg("Connection failed");
51+ this.setState({ status: "err" });
52+ }
53+ );
54+};
55+```
56+
57+This function just calls `getEntries()` to retrieve the initial list of journal
58+entries then, if that succeeded, it calls `subscribe()` to subscribe for new
59+updates. If the initial entry retrieval failed, we set the connection `status`
60+and save an error message in the `errors` map. We'll look at what we do with
61+errors later.
62+
63+## Getting entries
64+
65+![entries screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/entries.png)
66+
67+The `getEntries` function scries our `%journal` agent for up to 10 entries
68+before the oldest we currently have. We call this initially, and then each time
69+the user scrolls to the bottom of the list.
70+
71+```js
72+getEntries = async () => {
73+ const { entries: e } = this.state;
74+ const before = e.length === 0 ? Date.now() : e[e.length - 1].id;
75+ const max = 10;
76+ const path = `/entries/before/${before}/${max}`;
77+ return window.urbit.scry({
78+ app: "journal",
79+ path: path,
80+ });
81+};
82+```
83+
84+The scry is done with the `Urbit.scry` method. This function takes two arguments
85+in an object:
86+
87+- `app` - the agent to scry.
88+- `path` - the scry path. Note the `care` is not included - all scries through
89+ Eyre are `%x` scries.
90+
91+The `Urbit.scry` method only allows JSON results, but note that scries done via
92+direct GET requests allow other marks too.
93+
94+The `Urbit.scry` method returns a Promise which will contain an HTTP error
95+message if the scry failed. We handle it with a `.then` expression back in the
96+function that called it, either [`init()`](#initialize) or `moreEntries()`. If
97+the Promise is successfuly, the results are passed to the
98+[`handleUpdate`](#updates) function which appends the new entries to the
99+existing ones in state.
100+
101+## Subscription
102+
103+A subscription to the `/updates` path of our `%journal` agent is opened with our
104+`subscribe()` function:
105+
106+```js
107+subscribe = () => {
108+ try {
109+ window.urbit.subscribe({
110+ app: "journal",
111+ path: "/updates",
112+ event: this.handleUpdate,
113+ err: () => this.setErrorMsg("Subscription rejected"),
114+ quit: () => this.setErrorMsg("Kicked from subscription"),
115+ });
116+ } catch {
117+ this.setErrorMsg("Subscription failed");
118+ }
119+};
120+```
121+
122+We use the `Urbit.subscribe` method for this, which takes five arguments in an
123+object:
124+
125+- `app` - the target agent.
126+- `path` - the `%watch` path we're subscribing to.
127+- `event` - a function to handle each fact the agent sends out. We call our
128+ `handleUpdate` function, which we'll describe below.
129+- `err` - a function to call if the subscription request is rejected (nacked).
130+ We just display an error in this case.
131+- `quit` - a function to call if we get kicked from the subscription. We also
132+ just display an error in this case.
133+
134+Note that the `Urbit.subscribe` method returns a subscription ID number. Since
135+we only have one subscription in our app which we never close, we don't bother
136+to record it. If your app has multiple subscriptions to manage, you may wish to
137+keep track of these IDs in your app's state.
138+
139+## Updates
140+
141+This `handleUpdate` function handles all updates we receive. It's called
142+whenever an event comes in for our subscription, and it's also called with the
143+results of [`getEntries`](#getting-entries) and [`getUpdates`](#error-handling)
144+(described later).
145+
146+It's a bit complex, but basically it just checks whether the JSON object is
147+`add`, `edit`, `delete`, or `entries`, and then updates the state appropriately.
148+The object it's receiving is just the `$update` structure converted to JSON by
149+the mark conversion functions we wrote previously.
150+
151+```js
152+handleUpdate = (upd) => {
153+ const { entries, drafts, results, latestUpdate } = this.state;
154+ if (upd.time !== latestUpdate) {
155+ if ("entries" in upd) {
156+ this.setState({ entries: entries.concat(upd.entries) });
157+ } else if ("add" in upd) {
158+ const { time, add } = upd;
159+ const eInd = this.spot(add.id, entries);
160+ const rInd = this.spot(add.id, results);
161+ const toE =
162+ entries.length === 0 || add.id > entries[entries.length - 1].id;
163+ const toR = this.inSearch(add.id, time);
164+ toE && entries.splice(eInd, 0, add);
165+ toR && results.splice(rInd, 0, add);
166+ this.setState({
167+ ...(toE && { entries: entries }),
168+ ...(toR && { results: results }),
169+ latestUpdate: time,
170+ });
171+ } else if ("edit" in upd) {
172+ const { time, edit } = upd;
173+ const eInd = entries.findIndex((e) => e.id === edit.id);
174+ const rInd = results.findIndex((e) => e.id === edit.id);
175+ const toE = eInd !== -1;
176+ const toR = rInd !== -1 && this.inSearch(edit.id, time);
177+ if (toE) entries[eInd] = edit;
178+ if (toR) results[rInd] = edit;
179+ (toE || toR) && delete drafts[edit.id];
180+ this.setState({
181+ ...(toE && { entries: entries }),
182+ ...(toR && { results: results }),
183+ ...((toE || toR) && { drafts: drafts }),
184+ latestUpdate: time,
185+ });
186+ } else if ("del" in upd) {
187+ const { time, del } = upd;
188+ const eInd = entries.findIndex((e) => e.id === del.id);
189+ const rInd = results.findIndex((e) => e.id === del.id);
190+ const toE = eInd !== -1;
191+ const toR = this.inSearch(del.id, time) && rInd !== -1;
192+ toE && entries.splice(eInd, 1);
193+ toR && results.splice(rInd, 1);
194+ (toE || toR) && delete drafts[del.id];
195+ this.setState({
196+ ...(toE && { entries: entries }),
197+ ...(toR && { results: results }),
198+ ...((toE || toR) && { drafts: drafts }),
199+ latestUpdate: time,
200+ });
201+ }
202+ }
203+};
204+```
205+
206+## Add, edit, delete
207+
208+![add screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/add.png)
209+
210+When a user writes a new journal entry and hits submit, the `submitNew` function
211+is called. It uses the `Urbit.poke` method to poke our `%journal` agent.
212+
213+```js
214+submitNew = (id, txt) => {
215+ window.urbit.poke({
216+ app: "journal",
217+ mark: "journal-action",
218+ json: { add: { id: id, txt: txt } },
219+ onSuccess: () => this.setState({ newDraft: {} }),
220+ onError: () => this.setErrorMsg("New entry rejected"),
221+ });
222+};
223+```
224+
225+The `Urbit.poke` method takes five arguments:
226+
227+- `app` is the agent to poke.
228+- `mark` is the mark of the data we're sending. We specify `"journal-action"`,
229+ so Eyre will use the `/mar/journal/action.hoon` mark we created to convert it
230+ to a `$action` structure with a `%journal-action` mark before it's delivered
231+ to our agent.
232+- `json` is the actual data we're poking our agent with. In this case it's the
233+ JSON form of the `%add` `$action`.
234+- `onSuccess` is a callback that fires if we get a positive ack in response. In
235+ this case we just clear the draft.
236+- `onError` is a callback that fires if we get a negative ack (nack) in
237+ response, meaning the poke failed. In this case we just set an error message
238+ to be displayed.
239+
240+`onSuccess` and `onError` are optional, but it's usually desirable to handle
241+these cases.
242+
243+The `delete` and `submitEdit` functions are similar to `submitNew`, but for the
244+`%del` and `%edit` actions rather than `%add`:
245+
246+![edit screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/edit.png)
247+
248+```js
249+submitEdit = (id, txt) => {
250+ if (txt !== null) {
251+ window.urbit.poke({
252+ app: "journal",
253+ mark: "journal-action",
254+ json: { edit: { id: id, txt: txt } },
255+ onError: () => this.setErrorMsg("Edit rejected"),
256+ });
257+ } else this.cancelEdit(id);
258+};
259+```
260+
261+![delete screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/delete.png)
262+
263+```js
264+delete = (id) => {
265+ window.urbit.poke({
266+ app: "journal",
267+ mark: "journal-action",
268+ json: {"del": {"id": id}},
269+ onError: ()=>this.setErrorMsg("Deletion rejected")
270+ })
271+ this.setState({rmModalShow: false, entryToDelete: null})
272+};
273+```
274+
275+Note that whether we're adding, editing or deleting entries, we update our state
276+when we receive the update back on the `/updates` subscription, not when we poke
277+our agent.
278+
279+## Search
280+
281+![search screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/search.png)
282+
283+When searching for entries between two dates, the `getSearch` function is
284+called, which uses the `Urbit.scry` method to scry for the results in a similar
285+fashion to [`getEntries`](#getting-entries), but using the
286+`/x/entries/between/[start]/[end]` endpoint.
287+
288+```js
289+getSearch = async () => {
290+ const { searchStart: ss, searchEnd: se, latestUpdate: lu } = this.state;
291+ if (lu !== null && ss !== null && se !== null) {
292+ let start = ss.getTime();
293+ let end = se.getTime();
294+ if (start < 0) start = 0;
295+ if (end < 0) end = 0;
296+ const path = `/entries/between/${start}/${end}`;
297+ window.urbit
298+ .scry({
299+ app: "journal",
300+ path: path,
301+ })
302+ .then(
303+ (result) => {
304+ this.setState({
305+ searchTime: result.time,
306+ searchStart: null,
307+ searchEnd: null,
308+ resultStart: ss,
309+ resultEnd: se,
310+ results: result.entries,
311+ });
312+ },
313+ (err) => {
314+ this.setErrorMsg("Search failed");
315+ }
316+ );
317+ } else {
318+ lu !== null && this.setErrorMsg("Searh failed");
319+ }
320+};
321+```
322+
323+## Error handling
324+
325+When the channel connection is interrupted, the `Urbit` object will begin trying to reconnect. On each attempt, it sets the connection `status` to `"try"`, as we specified for the `onRetry` callback. When this is set, a "reconnecting" message is displayed at the bottom of the screen:
326+
327+![reconnecting screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/reconnecting.png)
328+
329+If all three reconnection attempts fail, the `onError` callback is fired and we replace the "reconnecting" message with a "reconnect" button:
330+
331+![reconnect screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/reconnect.png)
332+
333+When clicked, the following function is called:
334+
335+```js
336+reconnect = () => {
337+ window.urbit.reset();
338+ const latest = this.state.latestUpdate;
339+ if (latest === null) {
340+ this.init();
341+ } else {
342+ this.getUpdates().then(
343+ (result) => {
344+ result.logs.map((e) => this.handleUpdate(e));
345+ this.subscribe();
346+ },
347+ (err) => {
348+ this.setErrorMsg("Connection failed");
349+ this.setState({ status: "err" });
350+ }
351+ );
352+ }
353+};
354+```
355+
356+Our `reconnect()` function first calls the `Urbit.reset` method. This closes the
357+channel connection, wipes event counts and subscriptions, and generates a new
358+channel ID. We could have tried reconnecting without resetting the connection,
359+but we don't know whether the channel still exists. We could time how long the
360+connection has been down and estimate whether it still exists, but it's easier
361+to just start fresh in this case.
362+
363+Since we've reset the channel, we don't know if we've missed any updates. Rather
364+than having to refresh our whole state, we can use the `getUpdates()` function
365+to get any missing update:
366+
367+```js
368+getUpdates = async () => {
369+ const { latestUpdate: latest } = this.state;
370+ const since = latest === null ? Date.now() : latest;
371+ const path = `/updates/since/${since}`;
372+ return window.urbit.scry({
373+ app: "journal",
374+ path: path,
375+ });
376+};
377+```
378+
379+This function uses the `Urbit.scry` method to scry the
380+`/x/updates/since/[since]` path, querying the update `$log` for entries more
381+recent than `latestUpdate`, which is always set to the last logged action we
382+received. The `getUpdates` function returns a Promise to the `reconnect`
383+function above which called it. The `reconnect` function handles it in a `.then`
384+expression, where the success case passes each update retrieved to the
385+[`handleUpdate`](#updates) function, updating our state.
386+
387+Lastly, as well as handling channel connection errors, we also handle errors
388+such as poke nacks or failed scries by printing error messages added to the
389+`error` map by the `setErrorMsg` function. You could of course handle nacks,
390+kicks, scry failures, etc differently than just printing an error, it depends on
391+the needs of your app.
392+
393+![search failed screenshot](https://media.urbit.org/docs/userspace/full-stack-guide/search-failed.png)
394+
395+## Resources
396+
397+- [HTTP API Guide](/docs/userspace/http-api-guide) - Reference documentation for
398+ `@urbit/http-api`.
399+
400+- [React app source
401+ code](https://github.com/urbit/docs-examples/tree/main/journal-app/ui) - The
402+ source code for the Journal app UI.
403+
404+- [`@urbit/http-api` source
405+ code](https://github.com/urbit/urbit/tree/master/pkg/npm/http-api) - The
406+ source code for the `@urbit/http-api` NPM package.
content/docs/userspace/full-stack/9-desk.mdnew file+226
@@ -0,0 +1,226 @@
1++++
2+title = "9. Desk and glob"
3+weight = 9
4+template = "doc.html"
5++++
6+
7+With our React app now complete, we can put together the final desk and publish
8+it.
9+
10+## Config files
11+
12+So far we've written the following files for the back-end:
13+
14+```
15+ourfiles
16+├── app
17+│ └── journal.hoon
18+├── lib
19+│ └── journal.hoon
20+├── mar
21+│ └── journal
22+│ ├── action.hoon
23+│ └── update.hoon
24+└── sur
25+ └── journal.hoon
26+```
27+
28+There's a handful of extra files we need in the root of our desk:
29+
30+- `desk.bill` - the list of agents that should be started when our app is
31+ installed.
32+- `sys.kelvin` - the kernel version our app is compatible with.
33+- `desk.docket-0` - configuration of our app tile, front-end glob and other
34+ metadata.
35+
36+We only have one agent to start, so `desk.bill` is very simple:
37+
38+```
39+:~ %journal
40+==
41+```
42+
43+Likewise, `sys.kelvin` just contains:
44+
45+```
46+[%zuse 419]
47+```
48+
49+The `desk.docket-0` file is slightly more complicated:
50+
51+```
52+:~
53+ title+'Journal'
54+ info+'Dear diary...'
55+ color+0xd9.b06d
56+ version+[0 1 0]
57+ website+'https://urbit.org'
58+ license+'MIT'
59+ base+'journal'
60+ glob-ames+[~zod 0v0]
61+==
62+```
63+
64+The fields are as follows:
65+
66+- `title` is the name of the app - this will be displayed on the tile and when
67+ people search for the app to install it.
68+- `info` is a brief description of the app.
69+- `color` - the RGB hex color of the tile.
70+- `version` - the version number of the app. The fields represent major, minor
71+ and patch version.
72+- `website` - a link to a website for the app. This would often be its Github repo.
73+- `license` - the license of for the app.
74+- `base` - the desk name of the app.
75+- `glob-ames` - the ship to retrieve the front-end files from, and the hash of
76+ those files. We've put `~zod` here but this would be the actual ship
77+ distributing the app when it's live on the network. The hash is `0v0`
78+ initially, but once we upload the front-end files it will be updated to the
79+ hash of those files automatically. Note that it's also possible to distribute
80+ front-end files from a separate web server. In that case, you'd use
81+ `glob-http` rather than `glob-ames`. The [Glob section of the distribution
82+ guide](/docs/userspace/dist/glob) covers this alternative approach in more
83+ detail.
84+
85+Our files should now look like this:
86+
87+```
88+ourfiles
89+├── app
90+│ └── journal.hoon
91+├── desk.bill
92+├── desk.docket-0
93+├── lib
94+│ └── journal.hoon
95+├── mar
96+│ └── journal
97+│ ├── action.hoon
98+│ └── update.hoon
99+├── sur
100+│ └── journal.hoon
101+└── sys.kelvin
102+```
103+
104+## New desk
105+
106+Next, we'll create a new `%journal` desk on our ship by forking an existing one.
107+Once created, we can mount it to the unix filesystem.
108+
109+In the dojo of a fake ship:
110+
111+```
112+> |merge %journal our %webterm
113+>=
114+> |mount %journal
115+>=
116+```
117+
118+Now we can browse to it in the unix terminal:
119+
120+```sh
121+cd ~/zod/journal
122+```
123+
124+Currently it has the same files as the `%webterm` desk, so we need to delete
125+those:
126+
127+```sh
128+rm -r .
129+```
130+
131+Apart from the kernel and standard library, desks need to be totally
132+self-contained, including all mark files and libraries necessary to build them.
133+For example, since our app contains a number of `.hoon` files, we need the
134+`hoon.hoon` mark, and its dependencies. The easiest way to ensure our desk has
135+everything it needs is to copy in the "dev" versions of the `%base` and
136+`%garden` desks. To do this, we first clone the Urbit git repository:
137+
138+```sh
139+git clone https://github.com/urbit/urbit.git urbit-git
140+```
141+
142+If we navigate to the `pkg` directory in the cloned repo:
143+
144+```sh
145+cd ~/urbit-git/pkg
146+```
147+
148+...we can combine the `base-dev` and `garden-dev` desks with the included
149+`symbolic-merge.sh` script:
150+
151+```sh
152+./symbolic-merge.sh base-dev journal
153+./symbolic-merge.sh garden-dev journal
154+```
155+
156+Now, we copy the contents of the new `journal` folder into our empty desk:
157+
158+```sh
159+cp -rL journal/* ~/zod/journal/
160+```
161+
162+Note we've used the `L` flag to resolve symbolic links, because the dev-desks
163+contain symlinks to files in the actual `arvo` and `garden` folders.
164+
165+We can copy across all of our own files too:
166+
167+```sh
168+cp -r ~/ourfiles/* ~/zod/journal/
169+```
170+
171+Finally, in the dojo, we can commit the whole lot:
172+
173+```
174+|commit %journal
175+```
176+
177+## Glob
178+
179+The next step is to build our front-end and upload the files to our ship. In the
180+`journal-ui` folder containing our React app, we can run:
181+
182+```sh
183+npm run build
184+```
185+
186+This will create a `build` directory containing the compiled front-end files. To
187+upload it to our ship, we need to first install the `%journal` desk. In the
188+dojo:
189+
190+```
191+|install our %journal
192+```
193+
194+Next, in the browser, we navigate to the `%docket` globulator at
195+`http://localhost:8080/docket/upload` (replacing localhost with the actual host):
196+
197+![globulator screenshot](https://m.tinnus-napbus.xyz/pub/globulator.png)
198+
199+We select our `journal` desk, then we hit `Choose file`, and select the whole
200+`build` directory which was created when we build our React app. Finally, we hit
201+`glob!` to upload it.
202+
203+If we now return to the homescreen of our ship, we'll see our tile displayed, and we can open our app by clicking on it:
204+
205+![tiles screenshot](https://m.tinnus-napbus.xyz/pub/tiles.png)
206+
207+## Publishing
208+
209+The last thing we need to do is publish our app, so other users can install it
210+from our ship. To do that, we just run the following command in the dojo:
211+
212+```
213+:treaty|publish %journal
214+```
215+
216+## Resources
217+
218+- [App publishing/distribution documentation](/docs/userspace/dist/dist) -
219+ Documentation covering third party desk composition, publishing and
220+ distribution.
221+
222+- [Glob documentation](/docs/userspace/dist/glob) - Comprehensive documentation
223+ of handling front-end files.
224+
225+- [Desk publishing guide](/docs/userspace/dist/guide) - A step-by-step guide to
226+ creating and publishing a desk.
content/docs/userspace/full-stack/_index.mdnew file+52
@@ -0,0 +1,52 @@
1++++
2+title = "Full-Stack Walkthrough"
3+weight = 10
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6+insert_anchor_links = "right"
7++++
8+
9+#### [1. Introduction](/docs/userspace/gall-2/1-intro)
10+
11+An overview of the guide and table of contents.
12+
13+#### [2. Types](/docs/userspace/gall-2/2-types)
14+
15+Creating the `/sur` structure file for our `%journal` agent.
16+
17+#### [3. Agent](/docs/userspace/gall-2/3-agent)
18+
19+Creating the `%journal` agent itself.
20+
21+#### [4. JSON](/docs/userspace/gall-2/5-json)
22+
23+Writing a library to convert between our agent's marks and JSON. This lets our
24+React front-end poke our agent, and our agent send updates back to it.
25+
26+#### [5. Marks](/docs/userspace/gall-2/4-marks)
27+
28+Creating the mark files for the pokes our agent takes and updates it sends out.
29+
30+#### [6. Eyre](/docs/userspace/gall-2/6-eyre)
31+
32+A brief overview of how the webserver vane Eyre works.
33+
34+#### [7. React App Setup](/docs/userspace/gall-2/7-react-setup)
35+
36+Creating a new React app, installing the required packages, and setting up some
37+basic things for our front-end.
38+
39+#### [8. React App Logic](/docs/userspace/gall-2/8-http-api)
40+
41+Analysing the core logic of our React app, with particular focus on using
42+methods of the `Urbit` class from `@urbit/http-api` to communicate with our
43+agent.
44+
45+#### [9. Desk and Glob](/docs/userspace/gall-2/9-web-scries)
46+
47+Building and "globbing" our front-end, and putting together a desk for
48+distribution.
49+
50+#### [10. Summary](/docs/userspace/gall-2/10-final)
51+
52+Some final comments and additional resources.
content/docs/userspace/gall-guide/10-scry.md+5−4
@@ -154,10 +154,11 @@ can do something like:
154154
155155Previously we discussed custom `mark` files. Such mark files are most commonly
156156used when the data might be accessed through Eyre's HTTP API, and therefore
157−required JSON conversion methods. We'll cover such things in part two of the
158−Gall Guide, but note that if that's the case for your agent, you may wish to
159−also have your scry endpoints return data with your custom `mark` so it can
160−easily be converted to JSON when accessed from the web.
157+required JSON conversion methods. We cover such things separately in the
158+[Full-Stack Walkthrough](/docs/userspace/full-stack/1-intro), but note that if
159+that's the case for your agent, you may wish to also have your scry endpoints
160+return data with your custom `mark` so it can easily be converted to JSON when
161+accessed from the web.
161162
162163In some cases, typically with scry `path`s that contain wildcards like the `[%x %blah @ ~]` example above, your agent may not always be able to find the
163164requested data. In such cases, you can just produce a cell of `[~ ~]` for the
content/docs/userspace/gall-guide/12-next-steps.md+11−3
@@ -9,9 +9,11 @@ to start writing your own agent.
99
1010The things haven't touched on yet are front-end development and integration,
1111Eyre's HTTP API for communicating with agents from the web, and dealing with
12−JSON data. A second part to the Gall Guide is coming soon, and will focus
13−exclusively on those aspects. In the mean time, you can refer to the following
14−documents for help writing a web front-end for your app:
12+JSON data. The [Full-stack Walkthrough](/docs/userspace/full-stack/1-intro)
13+covers these aspects of Urbit app development, and it also puts into practice
14+many of the concepts we've discussed in this guide, so you might like to work
15+through that next. In addition to that walkthrough, you can refer to the
16+following documents for help writing a web front-end for your app:
1517
1618- [Eyre's external API reference](/docs/arvo/eyre/external-api-ref) - This
1719 explains Eyre's HTTP API, through which a browser or other HTTP client can
@@ -27,6 +29,12 @@ documents for help writing a web front-end for your app:
2729- [The software distribution guide](/docs/userspace/dist/dist) - This covers
2830 everything you need to know to distribute apps to other ships. It includes
2931 details of bundling a web front-end and serving it to the user in the browser.
32+- [The HTTP API guide](/docs/userspace/http-api-guide) - This is a reference
33+ and guide to using the `@urbit/http-api` NPM module.
34+- [The Sail guide](/docs/hoon/guides/sail) - Sail is a domain-specific language
35+ for composing XML structure in Hoon. It can be used to compose front-ends for
36+ Urbit apps directly in agents, as an alternative approach to having a
37+ separate Javascript app.
3038
3139In addition to these documents about creating a web-based user interface for
3240your app, there are some other guides you might like to have a look at:
content/docs/userspace/gall-guide/7-sur-and-marks.md+9−9
@@ -282,12 +282,13 @@ arm in the previous example could test for it instead of `%noun` like so:
282282Note how `%todo-action` will be resolved to `/mar/todo/action.hoon` - the hyphen
283283will be interpreted as `/` if there's not already a `/mar/todo-action.hoon`.
284284
285−This simple mark file isn't all that useful. Typically, you'd add `json` arms to
286−`grow` and `grab`, which allow your data to be converted to and from JSON, and
287−therefore allow your agent to communicate with a web front-end. Front-ends,
288−JSON, and Eyre's APIs which facilitate such communications will be covered in a
289−forthcoming part two of the Gall guide. For now though, it's still useful to use
290−marks and understand how they work.
285+This simple mark file isn't all that useful. Typically, you'd add `json` arms
286+to `grow` and `grab`, which allow your data to be converted to and from JSON,
287+and therefore allow your agent to communicate with a web front-end. Front-ends,
288+JSON, and Eyre's APIs which facilitate such communications will be covered in
289+the separate [Full-Stack Walkthrough](/docs/userspace/full-stack/1-intro),
290+which you might like to work through after completing this guide. For now
291+though, it's still useful to use marks and understand how they work.
291292
292293One further note on marks - while data from remote ships must have a matching
293294mark file in `/mar`, it's possible to exchange data between local agents with
@@ -384,8 +385,7 @@ Mark files:
384385- Messages passed between agents on a local ship don't necessarily need mark
385386 files in `/mar`.
386387- Mark files are most commonly used for converting an agent's native types to
387− JSON, in order to interact with a web front-end (which we'll cover in part two
388− of the Gall guide).
388+ JSON, in order to interact with a web front-end.
389389
390390Permissions:
391391
@@ -404,5 +404,5 @@ Permissions:
404404- Have a quick look at the [tisket
405405 documentation](/docs/hoon/reference/rune/tis#-tisket).
406406- Try writing a mark file for the `update:todo` type, in a similar fashion to
407− the `action:todo` one in the [mark file section](#mark-file). You can compare
407+ the `action:todo` one in the [mark file section](#mark-files). You can compare
408408 yours to the one we'll use in the next lesson.
content/docs/userspace/http-api-guide.mdnew file+698
@@ -0,0 +1,698 @@
1++++
2+title = "HTTP API Guide"
3+weight = 4
4+template = "doc.html"
5++++
6+
7+[Eyre] is the web-server [vane] (kernel module) of [Arvo], an Urbit ship's
8+kernel and operating system. In this guide, we'll look at interacting with a
9+ship through Eyre's web API using the [@urbit/http-api] Javascript module.
10+
11+## Background
12+
13+Before we dig into the details of Eyre's API, we'll first give a quick run-down
14+of some concepts in Arvo. Eyre's API is a fairly thin overlay on some of Arvo's
15+internal systems, so there's some basic things to understand.
16+
17+### Clay
18+
19+[Clay] is the filesystem vane. It's typed, and it's revision-controlled in a
20+similar way to git. Clay is comprised of a number of [desk]s, which are a bit
21+like git repositories. Each app on your ship's home screen corresponds to a desk
22+in Clay. That desk contains the source code and resources for that app.
23+
24+#### Marks
25+
26+Most of Clay's workings aren't relevant to front-end development, but there's
27+one important concept to understand: [mark]s. Clay is a typed filesystem, and
28+marks are the filetypes. There's a mark for `.hoon` files, a mark for `.txt`
29+files, and so on. The mark specifies the hoon datatype for those files, and it
30+also specifies conversion methods between different marks. Marks aren't just
31+used for files saved in Clay, but also for data that goes to and from the web
32+through Eyre.
33+
34+When you send a [poke](#pokes) or run a [thread](#threads) through Eyre, it will
35+look at the mark specified (for example `graph-action-3`, `settings-event`, etc)
36+and use the corresponding mark file in the desk to convert the given JSON to
37+that datatype before passing it to the target [agent](#gall-agents) or thread.
38+The same conversion will happen in reverse for responses.
39+
40+Note that Eyre makes a best effort attempt to convert data to and from JSON. If
41+the marks in question do not contain appropriate JSON conversion functions, it
42+will fail. Not all [scry endpoints](#scry-endpoints), [subscription
43+paths](#subscriptions), pokes, etc, are intended to be used from a front-end, so
44+not all use marks which can be converted to and from JSON (the `noun` mark for
45+example). If documentation is available for the agent or thread in question, it
46+should note in some fashion whether it can take or produce JSON. The majority of
47+things you'll want to interact with through Eyre will work with JSON.
48+
49+### Gall agents
50+
51+An _agent_ is a userspace application managed by the [Gall] vane. A desk may
52+contain multiple agents that do different things. The Groups app, for example,
53+has `graph-store`, `group-store`, `contact-store`, and others in its desk.
54+Agents are the main thing you'll interact with through Eyre. They have a simple
55+interface with three main parts:
56+
57+| Interface | Description |
58+| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
59+| Pokes | One-off message to an agent. Pokes often represent actions, commands, requests, etc. |
60+| Subscriptions | An agent may have a number of different paths to which you may subscribe. If a subscription request is accepted, you'll continue to receive update/events the agent sends out on that path until you either cancel the subscription or are kicked by the agent. |
61+| Scries | Scries are one-off requests for data. Like subscriptions, they are organized by path. Scry requests will be fulfilled immediately. Scries are "read-only", they cannot alter the state of an agent. |
62+
63+#### Pokes
64+
65+Pokes are single, stand-alone messages to agents. Pokes are how you send data
66+and requests to agents. Agents will send back either a positive acknowledgement
67+(ack) or a negative acknowledgement (nack). The agent can't send actual data
68+back in the acks. If they have any response to give back, it will be sent out to
69+subscribers on a subscription path instead.
70+
71+The pokes an agent accepts will be defined in the `on-poke` section of its
72+source in the desk's `/app` directory, and typically in its type definition file
73+in the `/sur` directory too. If the agent has documentation, the data structures
74+and marks of its pokes should be listed there.
75+
76+`http-api` includes a `poke` function which allows you to perform pokes through
77+Eyre, and is [detailed below](#poke).
78+
79+#### Subscriptions
80+
81+Agents define subscription paths which you can subscribe to through Eyre. A path
82+might be simple and fixed like `/foo/bar`, or it might have variable elements
83+where you can specify a date, ship, or what have you. Each agent will define its
84+subscription paths in the `on-watch` section of its source, and if it has
85+documentation the paths should also be listed there.
86+
87+You can subscribe by sending a watch request to the agent with the desired path
88+specifed. The agent will apply some logic (such as checking permissions) to the
89+request and then ack or nack it. If acked, you'll be subscribed and begin
90+receiving any updates the agent sends out on that path. What you'll receive on a
91+given path depends entirely on the agent.
92+
93+Agents can kick subscribers, and you can also unsubscribe at any time.
94+
95+`http-api` includes a `subscribe` function which allows you to perform pokes through
96+Eyre, and is [detailed below](#subscribe).
97+
98+#### Scry Endpoints
99+
100+Pokes and subscriptions can modify the state of the agent. A third kind of
101+interaction called a _scry_ does not - it simply retrieves data from the agent
102+without any side-effects. Agents can define _scry endpoints_ which (like
103+subscriptions) are paths. A scry to one of these endpoints will retrieve some
104+data (as determined by the agent's design) from the agent's state. Like
105+subscription paths, scry paths can be simple like `/foo/bar` or contain variable
106+elements. Unlike subscriptions, a scry is a one-off request and the data will
107+come back immediately.
108+
109+Scry endpoints are defined in the `on-peek` section of an agent's source, and
110+will likely be listed in the agent's documentation if it has any. Scry endpoints
111+will often be written with a leading letter like `/x/foo/bar`. All scries
112+through Eyre are `x` scries, so that letter (called a `care`) needn't be
113+specified.
114+
115+`http-api` includes a `scry` function which allows you to perform scries through
116+Eyre, and is [detailed below](#scry).
117+
118+### Threads
119+
120+A thread is a monadic function in Arvo that takes arguments and produces a
121+result. Threads are conceptually similar to Javascript promises - they can
122+perform a series of asynchronous I/O operations and may succeed or fail. Threads
123+are often used to handle complex I/O operations for agents. Threads live in the
124+`/ted` directory of a desk.
125+
126+`http-api` includes a `thread` function which allows you to run threads through
127+Eyre, and is [detailed below](#thread).
128+
129+## `http-api` basics
130+
131+The `http-api` module provides convenient functions to interact with a ship
132+through Eyre. In this section we'll discuss the basics of how it works.
133+
134+### Importing the module
135+
136+The `http-api` module is available in npm as `@urbit/http-api`, and can be
137+installed with:
138+
139+```
140+npm i @urbit/http-api
141+```
142+
143+Once installed, you can import it into your app with:
144+
145+```
146+import Urbit from '@urbit/http-api';
147+```
148+
149+Note that the examples in this guide are simple HTML documents with vanilla
150+Javascript in `&lt;script>` tags, so they use [unpkg.com](https://unpkg.com) to
151+import `@urbit/http-api`. This is not typical, and is just done here for
152+purposes of simplicity.
153+
154+### `Urbit`
155+
156+All functionality is contained within the `Urbit` class. There are two ways to
157+instantiate it, depending on whether your web app is served directly from the
158+ship or whether it's served externally. The reason for the difference is that
159+you require a session cookie to talk to the ship. If your app is served from the
160+ship, the user will already have a cookie. If it's not, they'll need to
161+authenticate, which is [detailed separately below](#authentication).
162+
163+In the case of a front-end served from the ship, the `Urbit` class contains a `constructor` which takes three arguments:
164+
165+| Argument | Type | Description | Example |
166+| -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
167+| `url` | `string` | The host of the ship without the protocol. This is mandatory but would typically be left blank as requests will still work if they're root-relative paths. | `"example.com"`, `"localhost:8080"`, `""` |
168+| `code` | `string` | The web login code of the ship. You'll typically use this constructor when it's served directly from the ship and therefore you'll already have a session cookie, so this field is optional and is typically omitted or left empty. | `""`, `"lidlut-tabwed-pillex-ridrup"` |
169+| `desk` | `string` | The desk on which you want to run threads. This field is optional and is only used if you want to run threads, no other function uses it. If you're not running threads, you can omit it or leave it empty. | `"landscape"`, `""` |
170+
171+To create an `Urbit` instance, you can simply do:
172+
173+```javascript
174+const api = new Urbit("");
175+```
176+
177+If you want to specify a desk, you can do:
178+
179+```javascript
180+const api = new Urbit("", "", "landscape");
181+```
182+
183+### `/session.js`
184+
185+Most functions of the `Urbit` class need to know the ship name or they will
186+fail. This is given explicitly with the external authentication method [detailed
187+below](#authentication), but not when using the `Urbit` constructor in a web app
188+served directly from the ship. Rather than having the user manually enter it,
189+Urbit ships serve a JS library at `/session.js` that contains the following:
190+
191+```javascript
192+window.ship = "zod";
193+```
194+
195+`"zod"` will be replaced with the actual name of the ship in question. You can
196+include this file like:
197+
198+```
199+<script src="/session.js"></script>
200+```
201+
202+Then you need to set the `ship` field in the `Urbit` object. You would typically
203+do it immediately after instantiating it:
204+
205+```javascript
206+const api = new Urbit("");
207+api.ship = window.ship;
208+```
209+
210+### Channels
211+
212+With the exception of scries and threads, all communication with Eyre happens
213+through its channel system.
214+
215+The `Urbit` object will generate a random channel ID that looks like
216+`1646295453-e1bdfd`, and use a path of `/~/channel/1646295453-e1bdfd` for
217+channel communications. Pokes will and subscription requests will be sent to
218+that channel. Responses and subscription updates will be sent out to you on that
219+channel too.
220+
221+Eyre sends out updates and responses on an [SSE] (Server Sent Event) stream for
222+the channel. The `Urbit` object handles this internally with an `eventSource`
223+object, but you won't deal with it directly. Eyre requires all events it sends
224+out be acknowledged by the client, and will eventually close the channel if
225+enough unacknowledged events accumulate. The `Urbit` object handles event
226+acknowledgement automatically, so you don't need to worry about this.
227+
228+Eyre automatically creates a channel when a poke or subscription request is
229+first sent to `/~/channel/[a new channel ID]`. If your web app is served
230+external to the ship and you use the `authenticate` function [described
231+below](#authentication), the function will automatically send a poke and open
232+the channel. If your web app is served directly from the ship and you use
233+`Urbit` class constructor, it won't open the channel right away. Instead, the
234+channel will be opened whenever you first send a poke or subscription request.
235+
236+### Connection state
237+
238+`Urbit` class includes three optional callbacks that fire when the SSE
239+connection state changes:
240+
241+| Callback | Description |
242+| --------------- | ------------------------------------------------------------------------------------------------------------------------- |
243+| `Urbit.onOpen` | Called when an SSE channel connection is successfully established. |
244+| `Urbit.onRetry` | This is called whenever a reconnection attempt is made due to an interruption, for example if there are network problems. |
245+| `Urbit.onError` | This is called when there is an unrecoverable error, for example after enough reconnection attemps have failed. |
246+
247+As mentioned in the previous section, typically a channel will be opened and an
248+SSE connection established after you first poke the ship or make a subscription
249+request. If successful, whatever function you provided to `onOpen` will be
250+called. If at some point the connection is interrupted, a reconnection attempt will be made three times:
251+
252+1. Instantly.
253+2. 750ms after the first.
254+3. 3000ms after the second.
255+
256+Each attempt will call the function you provided to `onRetry`, if any. If all
257+three reconnection attempts failed, or if a fatal error occurred, the function
258+you provided `onError` will be called with an `Error` object containing an error
259+message as its argument.
260+
261+How you use these (if you do at all) is up to you and depends on the nature of
262+your app. If you want to try reconnecting when `onError` fires, note that Eyre
263+will delete a channel if it's had no messages from the client in the last 12
264+hours. The timeout is reset whenever it receives a message, including the acks
265+that are automatically sent by the `Urbit` object in response to subscription
266+updates.
267+
268+If you don't want to account for the possibility of the channel having been
269+deleted in your app's logic, you can also just call the [`reset()`](#reset)
270+function before you try reconnecting and consequently open a brand new channel.
271+
272+### Authentication
273+
274+**If your front-end is served directly from the Urbit ship, this step can be
275+skipped.** If your web app is served externally to the ship, you must
276+authenticate and obtain a session cookie before commencing communications with
277+the ship.
278+
279+The `Urbit` class in `http-api` includes an `authenticate` function which does
280+the following:
281+
282+1. Login to the user's ship with their `code` and obtain a session cookie.
283+2. Generate a random channel ID for the connection.
284+3. Poke the user's ship and print "opening airlock" in the dojo to initialize
285+ the channel.
286+
287+The `authenticate` function takes four arguments in an object: `ship`, `url`,
288+`code` and `verbose`:
289+
290+| Argument | Type | Description | Example |
291+| --------- | --------- | -------------------------------------------------------------------------------------- | --------------------------------- |
292+| `ship` | `string` | The ship ID (`@p`) without the leading `~`. | `"sampel-palnet"` or `"zod"` |
293+| `url` | `string` | The base URL for the ship without the protocol. | `localhost:8080` or `example.com` |
294+| `code` | `string` | The user's web login code. | `"lidlut-tabwed-pillex-ridrup"` |
295+| `verbose` | `boolean` | Whether to log details to the console. This field is optional and defaults to `false`. | `true` |
296+
297+This function returns a promise that if successful, produces an `Urbit` object
298+which can then be used for communications with the ship.
299+
300+**Note:** An Urbit ship will deny CORS requests from external URLs by default.
301+In order to allow CORS for an external web app, the user will need to run the
302+following in the dojo (replacing `https://example.com` with the address in
303+question):
304+
305+```
306+|cors-approve 'https://example.com'
307+```
308+
309+#### Example
310+
311+Here's a simple example that will run `authenticate` for a fakezod when the
312+_Connect_ button is pressed:
313+
314+```
315+<html>
316+ <head>
317+ <script src="https://unpkg.com/@urbit/http-api"></script>
318+ </head>
319+ <body>
320+ <button id="start" type="button" onClick="connect()" >Connect</button>
321+ </body>
322+ <script>
323+ async function connect() {
324+ window.api = await UrbitHttpApi.Urbit.authenticate({
325+ ship: "zod",
326+ url: "localhost:8080",
327+ code: "lidlut-tabwed-pillex-ridrup",
328+ verbose: true
329+ });
330+ document.body.innerHTML = "Connected!";
331+ };
332+ </script>
333+</html>
334+```
335+
336+`window.api` can then be used for further communications.
337+
338+## Functions
339+
340+The various functions you can use in the `Urbit` object are described below.
341+
342+### Poke
343+
344+For poking a ship, the `Urbit` class in `http-api` includes a `poke` function.
345+The `poke` function takes six arguments in a object:
346+
347+| Argument | Type | Description | Example |
348+| ----------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
349+| `app` | `string` | The Gall agent to poke. | `"graph-store"` |
350+| `mark` | `string` | The mark of the data to poke the agent with. | `"graph-update-3"` |
351+| `json` | any JSON | The data to poke the agent with. | `{foo: "bar", baz: 42}` |
352+| `ship` | `string` | The Urbit ID (`@p`) of the ship without the `~`. This may be ommitted if it's already been set for the whole `Urbit` object. | `"sampel-palnet"` |
353+| `onSuccess` | A function. | This is called if the poke succeeded (the ship ack'd the poke). | `someFunction` |
354+| `onError` | A function. | This is called if the poke failed (the ship nack'd the poke). | `anotherFunction` |
355+
356+#### Example
357+
358+This example lets you "hi" your ship with a given message, which will be printed
359+in the terminal. It pokes the `hood` agent (the system agent) with a `helm-hi`
360+mark. The `json` argument just contains the message in a string. If for some
361+reason the `hood` agent rejects the poke, "Poke failed!" will be displayed on
362+the page.
363+
364+```
365+<html>
366+ <head>
367+ <script src="https://unpkg.com/@urbit/http-api"></script>
368+ <script src="/session.js"></script>
369+ </head>
370+ <body>
371+ <input id="msg" type="text" placeholder="Message for ship" />
372+ <button id="submit" type="button" onClick="doPoke()" >Submit</button>
373+ <p id="err"></p>
374+ </body>
375+ <script>
376+ document.getElementById("msg")
377+ .addEventListener("keyup", function(event) {
378+ if (event.keyCode === 13) {
379+ document.getElementById("submit").click();
380+ }
381+ })
382+ const api = new UrbitHttpApi.Urbit("");
383+ api.ship = window.ship;
384+ function doPoke() {
385+ const msg = document.getElementById("msg").value;
386+ api.poke({
387+ app: "hood",
388+ mark: "helm-hi",
389+ json: msg,
390+ onSuccess: success,
391+ onError: error
392+ });
393+ }
394+ function success() {
395+ document.getElementById("msg").value = "";
396+ document.getElementById("err").innerHTML = "";
397+ }
398+ function error() {
399+ document.getElementById("msg").value = "";
400+ document.getElementById("err").innerHTML = "Poke failed!";
401+ }
402+ </script>
403+</html>
404+```
405+
406+### Subscribe and Unsubscribe {#subscribe}
407+
408+For subscribing to a particular path in an agent, the `Urbit` class in `http-api` includes a `subscribe` function.
409+The `subscribe` function takes six arguments in a object:
410+
411+| Argument | Type | Description | Example |
412+| -------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
413+| `app` | `string` | The Gall agent to which you'll subscribe. | `"graph-store"` |
414+| `path` | `string` | The subscription path. | `"/updates"` |
415+| `ship` | `string` | The Urbit ID (`@p`) of the ship without the `~`. This may be ommitted if it's already been set for the whole `Urbit` object. | `"sampel-palnet"` |
416+| `err` | A function. | This is called if the subscription request fails. | `someFunction` |
417+| `event` | A function. | This is the function to handle each update you receive for this subscription. The function's argument is the update's JSON data. | `anotherFunction` |
418+| `quit` | A function. | This is called if you are kicked from the subscription. | `yetAnotherFunction` |
419+
420+The `subscribe` function returns a subscription ID, which is just a number. This
421+ID can be used to unsubscribe down the line.
422+
423+If the subscription request is successful, you'll continue to receive updates
424+until you either unsubscribe or are kicked by the agent. You may subscribe to
425+multiple different agents and subscription paths by calling the `subscribe`
426+function for each one.
427+
428+If you wish to unsubscribe from a particular subscription, the `Urbit` class in
429+`http-api` includes an `unsubscribe` function. This function just takes a single
430+argument: the subscription ID number of an existing subscription. Once
431+unsubscribed, you'll stop receiving updates for the specified subscription.
432+
433+#### Example
434+
435+This example will, upon clicking the "Subscribe" button, subscribe to the
436+`/updates` path of the `graph-store` agent, and print the raw JSON of each
437+update it receives. You can test it by doing something like posting a message in
438+a chat. You can also unsubscribe by clicking the "Unsubscribe" button.
439+
440+```
441+<html>
442+ <head>
443+ <script src="https://unpkg.com/@urbit/http-api"></script>
444+ <script src="/session.js"></script>
445+ </head>
446+ <body>
447+ <button id="toggle" type="button" onClick="doSub()" >Subscribe</button>
448+ <pre id="event"></pre>
449+ </body>
450+ <script>
451+ const api = new UrbitHttpApi.Urbit("");
452+ api.ship = window.ship;
453+ const toggle = document.getElementById("toggle");
454+ const event = document.getElementById("event");
455+ function doSub() {
456+ window.id = api.subscribe({
457+ app: "graph-store",
458+ path: "/updates",
459+ event: printEvent,
460+ quit: doSub,
461+ err: subFail
462+ });
463+ toggle.innerHTML = "Unsubscribe";
464+ toggle.onclick = doUnsub;
465+ event.innerHTML = "Awaiting event";
466+ };
467+ function doUnsub() {
468+ api.unsubscribe(window.id);
469+ toggle.innerHTML = "Subscribe";
470+ toggle.onclick = doSub;
471+ event.innerHTML = "Subscription closed";
472+ };
473+ function printEvent(update) {
474+ event.innerHTML = JSON.stringify(update, null, 2);
475+ };
476+ function subFail() {
477+ event.innerHTML = "Subscription failed!";
478+ };
479+ </script>
480+</html>
481+```
482+
483+### Subscribe Once
484+
485+The `subscribeOnce` function in the `Urbit` class of `http-api` is a variation
486+on the ordinary [`subscribe`](#subscribe) function. Rather than keeping the
487+subscription going and receiving an arbitrary number of updates, instead it
488+waits to receive a single update and then closes the subscription. This is
489+useful if, for example, you send a poke and just want a response to that one
490+poke.
491+
492+The `subscribeOnce` function also takes an optional `timeout` argument, which
493+specifies the number of milliseconds to wait for an update before closing the
494+subscription. If omitted, `subscribeOnce` will wait indefinitely.
495+
496+`subscribeOnce` takes three arguments (these can't be in an object like most
497+other `Urbit` functions):
498+
499+| Argument | Type | Description | Example |
500+| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | --------------- |
501+| `app` | `string` | The Gall agent to which you'll subscribe. | `"graph-store"` |
502+| `path` | `string` | The subscription path. | `"/updates"` |
503+| `timeout` | `number` | The number of milliseconds to wait for an update before closing the subscription. If omitted, it will wait indefinitely. | `5000` |
504+
505+`subscribeOnce` returns a Promise. If successful, the Promise produces the JSON
506+data of the update it received. If it failed due to either timing out or getting
507+kicked from the subscription, it will return an error message of either
508+`"timeout"` or `"quit"`.
509+
510+#### Example
511+
512+Here's a variation on the ordinary [subscribe](#subscribe) function. Rather than
513+printing every `graph-store` update it receives, it will instead just print the
514+first one it receives and close the subscription. Additionally, it sets a five
515+second timeout, and prints an error message if it times out.
516+
517+```
518+<html>
519+ <head>
520+ <script src="https://unpkg.com/@urbit/http-api"></script>
521+ <script src="/session.js"></script>
522+ </head>
523+ <body>
524+ <button type="button" onClick="doSub()" >Subscribe Once</button>
525+ <pre id="event"></pre>
526+ </body>
527+ <script>
528+ const api = new UrbitHttpApi.Urbit("");
529+ api.ship = window.ship;
530+ const event = document.getElementById("event");
531+ function doSub() {
532+ event.innerHTML = "";
533+ api.subscribeOnce("graph-store","/updates",5000)
534+ .then(printEvent, noEvent);
535+ };
536+ function printEvent(update) {
537+ event.innerHTML = JSON.stringify(update, null, 2);
538+ };
539+ function noEvent(error) {
540+ event.innerHTML = error;
541+ };
542+ </script>
543+</html>
544+```
545+
546+### Scries
547+
548+To scry agents on the ship, the `Urbit` class in `http-api` includes a `scry` function.
549+The `scry` function takes two arguments in a object:
550+
551+| Argument | Type | Description | Example |
552+| -------- | -------- | ---------------------------------- | --------------- |
553+| `app` | `string` | The agent to scry. | `"graph-store"` |
554+| `path` | `string` | The path to scry, sans the `care`. | `"/keys"` |
555+
556+The `scry` function returns a promise that, if successful, contains the
557+requested data as JSON. If the scry failed, for example due to a non-existent
558+scry endpoint, connection problem, or mark conversion failure, the promise will
559+fail.
560+
561+#### Example
562+
563+Upon pressing the "Scry Graphs" button, this example will scry the `graph-store`
564+agent's `/keys` endpoint for the list of graphs, and print the resulting JSON
565+data.
566+
567+```
568+<html>
569+ <head>
570+ <script src="https://unpkg.com/@urbit/http-api"></script>
571+ <script src="/session.js"></script>
572+ </head>
573+ <body>
574+ <button id="scry" type="button" onClick="doScry()" >Scry Graphs</button>
575+ <pre id="result"></pre>
576+ </body>
577+ <script>
578+ const api = new UrbitHttpApi.Urbit("");
579+ api.ship = window.ship;
580+ async function doScry() {
581+ var groups = await api.scry({app: "graph-store", path: "/keys"});
582+ document.getElementById("result")
583+ .innerHTML = JSON.stringify(groups, null, 2);
584+ }
585+ </script>
586+</html>
587+```
588+
589+### Thread
590+
591+To run a thread, the `Urbit` class in `http-api` includes a `thread` function.
592+The `thread` function takes five arguments in an object:
593+
594+| Argument | Type | Description | Example |
595+| ------------ | -------- | ------------------------------------------------------------------------------------------------------------- | ----------------------- |
596+| `inputMark` | `string` | The mark to convert your JSON data to before giving it to the thread as its argument. | `"graph-view-action"` |
597+| `outputMark` | `string` | The result of the thread should be converted to this mark before being converted to JSON and returned to you. | `"tang"` |
598+| `threadName` | `string` | The name of the thread to run. | `"graph-eval"` |
599+| `body` | any JSON | The data to give to the thread as its argument. | `{foo: "bar", baz: 42}` |
600+| `desk` | `string` | The desk in which the thread resides. This may be ommitted if previously set for the whole `Urbit` object. | `"landscape"` |
601+
602+The `thread` function will produce a promise that, if successful, contains the
603+JSON result of the thread. If the thread failed, a connection error occurred, or
604+mark conversion failed, the promise will fail.
605+
606+#### Example
607+
608+This example takes a hoon expression (such as `(add 1 1)`), evalutes it with the
609+`graph-eval` thread in the `landscape` desk, and prints the result.
610+
611+```
612+<html>
613+ <head>
614+ <script src="https://unpkg.com/@urbit/http-api"></script>
615+ <script src="/session.js"></script>
616+ </head>
617+ <body>
618+ <input id="hoon" type="text" placeholder="Hoon to evaluate" />
619+ <button id="submit" type="button" onClick="runThread()" >Submit</button>
620+ <pre id="expr"></pre>
621+ <pre id="result"></pre>
622+ </body>
623+ <script>
624+ document.getElementById("hoon")
625+ .addEventListener("keyup", function(event) {
626+ if (event.keyCode === 13) {
627+ document.getElementById("submit").click();
628+ }
629+ });
630+ const hoon = document.getElementById("hoon");
631+ const expr = document.getElementById("expr");
632+ const result = document.getElementById("result");
633+ const desk = "landscape";
634+ const api = new UrbitHttpApi.Urbit("", "", desk);
635+ api.ship = window.ship;
636+ async function runThread() {
637+ const threadResult = await api.thread({
638+ inputMark: "graph-view-action",
639+ outputMark: "tang",
640+ threadName: "graph-eval",
641+ body: {eval: hoon.value}
642+ });
643+ result.innerHTML = threadResult[0].join("\n");
644+ expr.innerHTML = hoon.value;
645+ hoon.value = "";
646+ };
647+ </script>
648+</html>
649+```
650+
651+### Delete Channel
652+
653+Rather than just closing individual subscriptions, the entire channel can be
654+closed with the `delete` function in the `Urbit` class of `http-api`. The
655+function takes no arguments, and can be called like `api.cancel()` (replacing
656+`api` with whatever you've named the `Urbit` object you previously instantiated).
657+When a channel is closed, all subscriptions will be cancelled and all pending
658+updates will be discarded.
659+
660+### Reset
661+
662+An existing instance of `http-api`'s `Urbit` class can be reset with its
663+`reset` function. This function takes no arguments, and can be called like
664+`api.reset()` (replacing `api` with whatever you've named the `Urbit` object you
665+previously instantiated). When called, the channel will be closed and all
666+subscriptions cancelled. Additionally, all outstanding outbound pokes will be
667+discarded and a fresh channel ID will be generated.
668+
669+## Further reading
670+
671+- [Eyre External API Reference][eyre-ext-ref] - Lower-level documentation of
672+ Eyre's external API.
673+- [Eyre Guide][eyre-guide] - Lower-level examples of using Eyre's external API
674+ with `curl`.
675+- [`http-api` on Github][http-api-src] - The source code for `@urbit/http-api`.
676+
677+## Examples
678+
679+Here are some examples which make use of `@urbit/http-api` that might be useful
680+as a reference:
681+
682+- [Bitcoin Wallet](https://github.com/urbit/urbit/tree/master/pkg/btc-wallet)
683+- [Web Terminal](https://github.com/urbit/urbit/tree/master/pkg/interface/webterm)
684+- [UrChatFM](https://github.com/urbit/urbit-webrtc/tree/master/urchatfm)
685+
686+[eyre-ext-ref]: /docs/arvo/eyre/external-api-ref
687+[eyre-guide]: /docs/arvo/eyre/guide
688+[http-api-src]: https://github.com/urbit/urbit/tree/master/pkg/npm/http-api
689+[eyre]: /docs/glossary/eyre
690+[vane]: /docs/glossary/vane
691+[arvo]: /docs/glossary/arvo
692+[hoon]: /docs/glossary/hoon
693+[gall]: /docs/glossary/gall
694+[clay]: /docs/glossary/clay
695+[desk]: /docs/glossary/desk
696+[mark]: /docs/glossary/mark
697+[sse]: https://html.spec.whatwg.org/#server-sent-events
698+[@urbit/http-api]: https://github.com/urbit/urbit/tree/master/pkg/npm/http-api
content/docs/userspace/threads/examples/child-thread.md+8−5
@@ -56,7 +56,8 @@ Note that threads we start this way will be a child of the thread that started t
5656
5757## Start thread and get its result
5858
59−If we want to actually get the result of the thread we started, it's slightly more complicated:
59+If we want to actually get the result of the thread we started, it's slightly more complicated.
60+We note that this is mostly the same as `await-thread:strandio`.
6061
6162#### `parent.hoon`
6263
@@ -74,7 +75,7 @@ If we want to actually get the result of the thread we started, it's slightly mo
7475;< ~ bind:m %- poke-our
7576 :* %spider
7677 %spider-start
77− !>([`tid.bowl `tid byk.bowl %child !>(~)])
78+ !>([`tid.bowl `tid byk.bowl(q da+now.bowl) %child !>(~)])
7879 ==
7980;< =cage bind:m (take-fact /awaiting/[tid])
8081;< ~ bind:m (take-kick /awaiting/[tid])
@@ -130,7 +131,7 @@ We pre-emptively subscribe for the result. Spider sends the result at `/thread-r
130131;< ~ bind:m %- poke-our
131132 :* %spider
132133 %spider-start
133− !>([`tid.bowl byk.bowl `tid %child !>(~)])
134+ !>([`tid.bowl `tid byk.bowl(q da+now.bowl) %child !>(~)])
134135 ==
135136```
136137
@@ -138,7 +139,9 @@ Spider takes a poke with a mark %spider-start and a vase containing `[parent=(un
138139
139140- `parent` is an optional parent thread. In this case we say the parent is our tid. Specifying a parent means the child will be killed if the parent ends.
140141- `use` is the thread ID for the thread we're creating
141−- `beak` is a `[p=ship q=desk r=case]` triple which specifies the desk and revision containing the thread we want to run. In this case we just use `byk.bowl`.
142+- `beak` is a `[p=ship q=desk r=case]` triple which specifies the desk and
143+ revision containing the thread we want to run. In this case we just use
144+ `byk.bowl`, but with the date of revision `q` changed to `now.bowl`.
142145- `file` is the filename of the thread we want to start
143146- `vase` is the vase it will be given as an argument when it's started
144147
@@ -181,7 +184,7 @@ Finally we test whether the thread produced a `%thread-done` or a `%thread-fail`
181184;< ~ bind:m %- poke-our
182185 :* %spider
183186 %spider-start
184− !>([`tid.bowl byk.bowl `tid %child !>(~)])
187+ !>([`tid.bowl byk.bowl(q da+now.bowl) `tid %child !>(~)])
185188 ==
186189;< ~ bind:m (sleep ~s5)
187190%- (slog leaf+"Stopping child thread..." ~)
content/docs/userspace/threads/gall/poke-thread.md+1−1
@@ -29,7 +29,7 @@ Here's a modified agent that pokes our thread. I've replaced some off the previo
2929 (pair term term)
3030 =/ tid `@ta`(cat 3 'thread_' (scot %uv (sham eny.bowl)))
3131 =/ ta-now `@ta`(scot %da now.bowl)
32− =/ start-args [~ `tid byk.bowl p.q.vase !>(q.q.vase)]
32+ =/ start-args [~ `tid byk.bowl(q da+now.bowl) p.q.vase !>(q.q.vase)]
3333 :_ this
3434 :~
3535 [%pass /thread/[ta-now] %agent [our.bowl %spider] %watch /thread-result/[tid]]
content/docs/userspace/threads/gall/start-thread.md+2−2
@@ -29,7 +29,7 @@ Here's an example of a barebones gall agent that just starts a thread:
2929 (pair term term)
3030 =/ tid `@ta`(cat 3 'thread_' (scot %uv (sham eny.bowl)))
3131 =/ ta-now `@ta`(scot %da now.bowl)
32− =/ start-args [~ `tid byk.bowl p.q.vase !>(q.q.vase)]
32+ =/ start-args [~ `tid byk.bowl(q da+now.bowl) p.q.vase !>(q.q.vase)]
3333 :_ this
3434 :~
3535 [%pass /thread/[ta-now] %agent [our.bowl %spider] %poke %spider-start !>(start-args)]
@@ -116,7 +116,7 @@ We can ignore the input logic, here's the important part:
116116```hoon
117117=/ tid `@ta`(cat 3 'thread_' (scot %uv (sham eny.bowl)))
118118=/ ta-now `@ta`(scot %da now.bowl)
119−=/ start-args [~ `tid byk.bowl p.q.vase !>(q.q.vase)]
119+=/ start-args [~ `tid byk.bowl(q da+now.bowl) p.q.vase !>(q.q.vase)]
120120:_ this
121121:~
122122 [%pass /thread/[ta-now] %agent [our.bowl %spider] %poke %spider-start !>(start-args)]
content/docs/userspace/threads/gall/stop-thread.md+1−1
@@ -29,7 +29,7 @@ Here we've added one last card to `on-poke` to stop the thread and a little extr
2929 (pair term term)
3030 =/ tid `@ta`(cat 3 'thread_' (scot %uv (sham eny.bowl)))
3131 =/ ta-now `@ta`(scot %da now.bowl)
32− =/ start-args [~ `tid byk.bowl p.q.vase !>(q.q.vase)]
32+ =/ start-args [~ `tid byk.bowl(q da+now.bowl) p.q.vase !>(q.q.vase)]
3333 :_ this
3434 :~
3535 [%pass /thread/[ta-now] %agent [our.bowl %spider] %watch /thread-result/[tid]]
content/docs/userspace/threads/gall/take-facts.md+1−1
@@ -31,7 +31,7 @@ Here we've added another card to subscribe for any facts sent by the thread and
3131 (pair term term)
3232 =/ tid `@ta`(cat 3 'thread_' (scot %uv (sham eny.bowl)))
3333 =/ ta-now `@ta`(scot %da now.bowl)
34− =/ start-args [~ `tid byk.bowl p.q.vase !>(q.q.vase)]
34+ =/ start-args [~ `tid byk.bowl(q da+now.bowl) p.q.vase !>(q.q.vase)]
3535 :_ this
3636 :~
3737 [%pass /thread/[ta-now] %agent [our.bowl %spider] %watch /thread-result/[tid]]
content/docs/userspace/threads/gall/take-result.md+1−1
@@ -29,7 +29,7 @@ Here we've added an extra card to subscribe for the result and a couple of lines
2929 (pair term term)
3030 =/ tid `@ta`(cat 3 'thread_' (scot %uv (sham eny.bowl)))
3131 =/ ta-now `@ta`(scot %da now.bowl)
32− =/ start-args [~ `tid byk.bowl p.q.vase !>(q.q.vase)]
32+ =/ start-args [~ `tid byk.bowl(q da+now.bowl) p.q.vase !>(q.q.vase)]
3333 :_ this
3434 :~
3535 [%pass /thread/[ta-now] %agent [our.bowl %spider] %watch /thread-result/[tid]]
content/events/2022-04-21-developer-call-uqbar-and-urbits-first-blockchain.mdnew file+24
@@ -0,0 +1,24 @@
1++++
2+title = "Developer Call: Uqbar and Urbit’s first Blockchain"
3+starts = "2022-04-21T09:00:00"
4+ends = "2022-04-21T10:00:00"
5+timezone = "America/Los_Angeles"
6+location = "Online Event"
7+image = ""
8+registration_url = "https://www.meetup.com/urbit-sf/events/285206697/"
9+description = ""
10+dark = false
11+youtube = "XZD0ob1XTKE"
12+
13+[[hosts]]
14+name = "Neal Davis"
15+patp = "~lagrev-nocfep"
16+
17+[[guests]]
18+patp = "~hodzod-walrus"
19+
20++++
21+
22+This time Uqbar’s ~hodzod-walrus will join Neal Davis to discuss Uqbar’s latest developments in building what will be the first Blockchain on Urbit. ~hodzod-walrus will go into Uqbar’s basic outline and how they will make their plans reality. Why their ZK interpreter, Zock, is the perfect form for smart contract integration on Urbit. How they will execute parallel smart contract on Hoon and the endeavours with uHoon.
23+
24+~hodzod-walrus is a programmer working on Uqbar. Previously he built Pokur as an Urbit Foundation apprenticeship grant. He’s quickly become a Hoon evangelist and hopes to showcase its strengths in the world of smart contracts.
content/events/2022-04-26-urbit-foundation-meetup-kingsnight-amsterdam.mdnew file+24
@@ -0,0 +1,24 @@
1++++
2+title = "Urbit Foundation Meetup - Kingsnight"
3+starts = "2022-04-26T18:00:00"
4+ends = "2022-04-26T21:30:00"
5+timezone = "Europe/Amsterdam"
6+location = "Hortus Botanicus, Plantage Middenlaan 2a, 1018 DD Amsterdam, Netherlands"
7+image = "https://i.imgur.com/g75pj4M.png"
8+registration_url = "https://www.meetup.com/urbit-sf/events/285233312/"
9+description = "The Martian way of P2P social computing"
10+dark = false
11+
12+
13+[[hosts]]
14+name = "Thomas"
15+patp = "~dalweb-donfun"
16+
17+[[hosts]]
18+patp = "~palfun-foslup"
19+
20++++
21+
22+On the 26th of April the Urbit Foundation is coming to Kingsnight in Amsterdam, we will host you all in one of the oldest Botanical Gardens in the world. A short series of talks will introduce you to the technical background of Urbit, the vision on social computing by ~palfun-foslup from Tlon and an introduction to the first Urbit blockchain by Uqbar.
23+
24+Bring your orange Tee and we will sort the drinks and lots of cool people, come join us from 18:00 at the Hortus Botanicus in Amsterdam.
content/events/2022-05-06-urbit-weekend-kansas.mdnew file+20
@@ -0,0 +1,20 @@
1++++
2+title = "Urbit No-Coast Weekend Meetup"
3+starts = "2022-05-06"
4+ends = "2022-05-07"
5+timezone = "America/Chicago"
6+location = "1317 Union Ave. Kansas City, Mo. 64101"
7+image = ""
8+registration_url = "https://forms.gle/TXMrLPsnSURrXpGm6"
9+description = "A Two-Day Event in Kansas City"
10+dark = false
11+
12+
13+[[hosts]]
14+patp = "~ribben-donnyl"
15+
16++++
17+
18+The theme of this event is “Urbit: the Past and the Future” ~ribben-donnyl will give a talk about the history of Urbit from its accidental leak up to today. We will also discuss visions for the future of Urbit, and how we’d like to get there. If you have an idea on writing code for Urbit (or if you just want to talk Urbit runtime), we’ll have seasoned veterans on hand.
19+
20+Join the group to discuss logistics, coordinate travel, and whatever’s on your mind: ~ribben-donnyl/no-coast-assembly-22
content/getting-started/_index.md+1−1
@@ -103,7 +103,7 @@ There are a few ways to get your own planet:
103103
104104- Getting an invitation from a friend (or stranger).
105105- Purchasing a planet, including hosting, from a [hosting provider](#hosting-providers).
106−- Manually setting up and hosting a planet purchased from a third party such as [urbit.live](https://urbit.live), [OpenSea](https://opensea.io), [planet.market](https://planet.market/), [urbit.me](https://urbit.me), [urth systems](https://urth.systems/), [Urbitex](https://urbitex.io), or [Urbit Marketplace](https://urbitmarketplace.com/).
106+- Manually setting up and hosting a planet purchased from a third party such as [azimuth.shop](https://azimuth.shop/), [urbit.live](https://urbit.live), [urbit.me](https://urbit.me), [Urbitex](https://urbitex.io), [Urbit Marketplace](https://urbitmarketplace.com/), or [Wexpert Systems](https://wexpert.systems).
107107
108108## Hosting Providers {#hosting-providers}
109109
content/grants/app-engram.mdnew file+117
@@ -0,0 +1,117 @@
1++++
2+title = "Engram: a collaborative knowledge managment app"
3+date = "2022-03-25"
4+
5+[taxonomies]
6+grant_type = [ "Bounty" ]
7+grant_category = [ "App Dev" ]
8+
9+[extra]
10+image = ""
11+description = "Engram is a knowledge management application that allows individuals or teams to build rich note documents."
12+reward = "$70,000 in WSTR"
13+assignee = ""
14+id = "B0155"
15+champion = "Holium"
16+completed = false
17+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0155&prefill_Grant+Name=Engram"
18++++
19+
20+Engram is a knowledge management application that allows individuals or teams to build rich note documents.
21+
22+## Rationale
23+
24+Right now, the only way to collaborate on documents in Urbit is in the notebook channel via comments. There are no features around knowledge management, tagging, history, or any feature required for collaborating on documents with others. The goal of this project is to provide a robust solution for groups or individuals to collaborate on documents.
25+
26+## Overview
27+
28+For V1, Engram will focus on enabling rich document editing for an individual experience, but multiple collaborators. Different people should be able to modify the documents based on permission.
29+
30+There are several features and agents that may need to be created to support this.
31+
32+- Document editor
33+- Git-like revision history
34+- Inline comments
35+- Sentence parser for storing each sentence as a node in a graph for easy referencing, commenting, and more future features.
36+- Document permissions
37+
38+## User stories
39+
40+As a single user, I would like to:
41+
42+- See a list of documents for my own ship context.
43+- Be able to edit a document myself.
44+- Have others invited edit the document
45+- See a history of changes on the document.
46+
47+As a group member, I would like to
48+
49+- See notes associated with my group.
50+- Be able to comment on sentences at the current revision.
51+- See a log of changes via a popout panel
52+- Be able to resolve conflicting revisions.
53+
54+As a document editor, I would like to:
55+
56+- Have the current document state saved in local storage if I haven't clicked save and accidentally close the tab.
57+- Be able to edit in readme mode
58+- Be able to edit in preview mode
59+- Have a hoverable style block appear when editing
60+- Add collaborators to the document with an edit permission or view permission.
61+
62+As a document viewer, I would like to see
63+
64+- A rich document with formatting.
65+- A list of authors and editors.
66+- View comments on the document .
67+- View phrase comments on sentence hover.
68+- Have custom embeds in the document:
69+ - code block
70+ - link
71+ - video
72+ - image
73+
74+## Technical requirements
75+
76+The most complex part of this is the revision log. It should be easy to revert to a certain point in time. There will also need to be a sentence parser that stores each sentence in a store with associated comments and other metadata. Each sentence or collection of sentences should be able to be referenced by other documents.
77+
78+Holium will work with the developer(s) to provide frontend help.
79+
80+## Milestone 1 - Single user documents - $30,000 in WSTR
81+
82+The first milestone is to release a version of the app that allows for single user documents, meaning there is a document owner and only they can edit it. The app should include the rich document editor features without collaboration.
83+
84+The app should be released.
85+
86+## Milestone 2 - Revision history, comments, and referencing - $15,000 in WSTR
87+
88+This second milestone is building out the revision history log to allow for undo, redo, and time traveling through revision snapshots. This will serve as the foundation of the third milestone.
89+
90+There should be a revision history log in the UI that allows users to go back to previous snapshots as well as the ability to leave comments on the document or on sentences.
91+
92+## Milestone 3 - Collaboration - $25,000 in WSTR
93+
94+Allows multiple editors to modify the document and resolves the differences between the documents. There is not a need for live co-editing in this milestone as that is reliant on WebRTC or another streaming solution.
95+
96+You should have the ability to add new users to the document, manage those users permissions, and remove the users from the collaborator list.
97+
98+## Future work
99+There is the potential for several future releases enabling more collaboration features:
100+
101+- Public pages
102+- Live co-editing (WebRTC or Urbit native)
103+- Group-to-group document sharing (if groups enable)
104+- Inter-document referencing (hypertext-like)
105+
106+## Requirements
107+- At least three years of professional programming experience
108+- Experience with full-stack development, including JS and some server-side language
109+- Demonstrable experience with writing Gall agents
110+- Coordinate with Holium on designs, frontend, and agents
111+
112+## Schedule
113+This project has many pieces and would likely require a team size of two or more. There would need to be a significant amount of frontend work, which Holium will help build or facilitate using our design system. V1 deadline is 6 months from start.
114+
115+## Reward
116+$70,000 in WSTR (team of two)
117+
content/grants/app-urvault.md+2−2
@@ -10,7 +10,7 @@ grant_category = ["App Dev: Other"]
1010[extra]
1111image = ""
1212description = "UrVault: Urbit Password Manager"
13−reward = "$8000 in WSTR"
13+reward = "$12,000 in WSTR"
1414assignee = "~dabber-sicsup"
1515mentor = "~mocrux-nomdep"
1616grant_id = "A01465"
@@ -38,4 +38,4 @@ An initial version of the web extension which supports:
3838- Reading password from their ship/pasting them into password input boxes on the correct domain
3939- Storing passwords encrypted at rest
4040
41−Payment: $8000 in WSTR upon completion of apprenticeship
41+Payment: $12,000 in WSTR upon completion of apprenticeship at an estimated three months of work.
content/grants/apprenticeship-extending-bitcoin.md+2−2
@@ -9,9 +9,9 @@ grant_category = [ "App Dev", "Other" ]
99[extra]
1010image = ""
1111description = ""
12−reward = "$8000 in WSTR"
12+reward = "1 star"
1313mentor = "~dasrun-fadben"
14−assignee = ""
14+assignee = "~sipned-nistug"
1515completed = false
1616work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=A0138&prefill_Grant+Name=Extending%20the%20Bitcoin%20Provider%20API"
1717+++
content/grants/apprenticeship-studio-email.md+1−1
@@ -11,7 +11,7 @@ image = ""
1111description = "Build out email capabilities of ~tirrel's Studio app"
1212reward = "$8000 in WSTR"
1313mentor = "~novlud-padtyv"
14−assignee = ""
14+assignee = "~rivmud-fabwen"
1515completed = false
1616work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=A0139&prefill_Grant+Name=~tirrel%20studio%20email%20capabilities"
1717+++
content/grants/books.md+1−1
@@ -10,7 +10,7 @@ grant_category = [ "App Dev" ]
1010image = ""
1111description = "Books is an application for managing your crypto wallets, transactions, and counterparties. It allows you to add your wallet and others' wallets, track balances and transactions, and add private annotations to all of the above."
1212reward = "$45,000-$65,000 in WSTR"
13−assignee = ""
13+assignee = "Quartus"
1414id = ""
1515completed = false
1616work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0134&prefill_Grant+Name=Books%3A%20address%20and%20transaction%20manager"
content/grants/digital-editor-MROB.md+1−1
@@ -10,7 +10,7 @@ grant_category = ["Other"]
1010image = ""
1111description = "Digital Editor for the Mars Review of Books"
1212reward = "$4,500 in WSTR"
13−assignee = ""
13+assignee = "~randem-wishes"
1414champion = "~librex-dozryc"
1515id = "B0140"
1616completed = false
content/grants/dusko-valve.mdnew file+81
@@ -0,0 +1,81 @@
1++++
2+title = "Dusko Valve"
3+date = "2022-04-15"
4+
5+[taxonomies]
6+grant_type = [ "Proposal" ]
7+grant_category = [ "App Dev", "Other" ]
8+
9+[extra]
10+image = ""
11+description = "a tool which allows NFT artists to offer planets for redemption to their patrons alongside their NFTs"
12+reward = "2 stars"
13+assignee = "~tasset-norlux"
14+champion = "~tacryt-socryp"
15+grant_id = "P0143"
16+completed = false
17+canceled = false
18+link = ""
19++++
20+
21+## Purpose
22+
23+The building of Valve, a tool which allows NFT artists to offer planets for redemption to their patrons alongside their NFTs. I.e. I buy an NFT, I also get a planet. Initially, this would take the form of a contract which queries an NFT contract and whitelists planets on a corresponding webpage for those who purchased an NFT from that contract. It may evolve into a full fledged, no-code marketplace that provides NFT artists the ability to offer planets alongside their NFTs.
24+
25+## Background
26+
27+While NFTs can be many things, they function primarily as a membership pass, an access card to a community. Having a tool which allows artists to deploy ships alongside their NFTs would draw NFT projects to Urbit as the platform for interacting with their community. It would also onboard more users to Urbit in the process. Further, many smaller NFT projects typically have higher quality communities and art which would draw artists rather than collectors to the Urbit ecosystem.
28+
29+Artists such as Haleek Maul have created custom collections of Urbit sigils which auctioned off both the artwork and corresponding planet or star together. This was a great example of artists selling artwork that immediately grants access to the Urbit community. Making a tool to do this at scale would further Urbit’s goal of becoming the primary social space for web3, as well as promote Urbit as an attractive, alternative platform to smaller NFT artists who don’t want to operate and tend to Discords, but are still interested and excited by the notion of communicating more directly with their supporters.
30+
31+## Implementation
32+
33+Money from this grant would go to creating a tool for NFT artists selling artwork to provide their community immediate access to Urbit by redeeming a planet.
34+This would initially be an integration with Metamask Protocol which queries an artist’s NFT contract to provide access to a modified planettine-based react app for distributing planets.
35+
36+## Stages of Valve
37+
38+1. The Valve MVP will be a redeployment of Tlon’s planentine distribution tool behind a Metamask Protocol authentication layer. Planet slugs will be maintained in an airtable to be available for redemption through planettine’s react app. Tlon will work with me to polish onboarding copy for the frontend which will clearly explain how an NFT holder redeems, then boots up, their planet. Tlon will also host all the planets of the Dusko community, starting with the core team.
39+
40+2. The second phase of Valve will be replacing the planetine backend with Tirrel’s planet distribution tool. At this point Valve will now be open source and I will work with Tlon / Tirrel to create a guide that explains how NFT creators customize Valve to distribute planets for their specific contract.
41+
42+## Responsibilities by Organization
43+
44+### Tlon
45+
46+Tlon will help with managing the integration of planettine for the backend of Valve’s MVP. By managing, I mean working with me to polish onboarding copy for the frontend. In addition, they will host the planets of the Dusko community and help with onboarding — providing learning sessions to teach people how to onboard and essentially assist in general hand-holding of the community if necessary. They will also provide marketing help to promote the Dusko project, as well as additional onboarding and promotional support to the other artists who will use Valve initially in partnership with this grant.
47+
48+### Tirrel
49+
50+Tirrel will work with me to develop the final version of Valve as an open source tool kit for NFT creators to customize and use to distribute planets among those holding their NFTs. Their backend will replace the planettine backend in phase 2.
51+
52+### Urbit Foundation
53+
54+The foundation will provide 500 planets to be used and distributed by artists to onboard their communities into Urbit. The first 181 will be for Dusko’s community, while the additional will be gifted to additional artists who I work with who want to onboard their communities to Urbit and use groups as their community’s social hub.
55+
56+## User Story
57+
58+I’m grateful I have access to a platform which simplifies the experience of interacting with my community.
59+
60+A tool for me, as an artist selling artwork, to provide my community immediate access to an aesthetic and easy to use platform (Urbit) allows me to legitimize the use of NFTs and use them myself.
61+
62+## Milestones
63+
64+### Milestone 1 - MVP
65+
66+Payment: 1 star
67+
68+Completion: 30 Apr 2022
69+
70+MVP: a web page gated using Metamask Protocol which users are granted access to once they mint a corresponding NFT.
71+
72+### Milestone 2 - Airtable form and Tirrel Backend
73+
74+Payment: 1 star
75+
76+Completion: 30 Jun 2022
77+
78+Airtable form for Valve which other artists fill out to request redeemable planets and at least two artists lined up to transition their community over to Urbit through a Valve NFT release.
79+
80+Implementation of Tirrel backend and open-sourcing of Valve through release of repo and guide.
81+500 planets distributed in total with at least two communities transitioned over to Urbit.
content/grants/eth-provider.md+3−3
@@ -9,7 +9,7 @@ grant_category = [ "App Dev" ]
99[extra]
1010image = ""
1111description = "Eth-provider is a Gall agent that allows Urbit users to configure their Ethereum connection."
12−reward = "$30,000 in WSTR"
12+reward = "3 stars"
1313assignee = ""
1414id = ""
1515completed = false
@@ -56,10 +56,10 @@ Building the eth-provider is simplified by the extensive Ethereum JSON RPC capab
5656
5757### Eth-provider Gall agent
5858
59−$20,000 WSTR
59+Payment: 2 Stars
6060A completed eth-provider Gall agent that satifsfies the project requirements above.
6161
6262### Urbit codebase integration
6363
64−$10,000 WSTR
64+Payment: 1 Star
6565All Ethereum RPC calls in the urbit codebase have been migrated to use eth-provider instead of the direct Infura connection. This milestone is completed when a PR against the [urbit](https://github.com/urbit/urbit) repository has been merged.
content/grants/native-planet-2.mdnew file+89
@@ -0,0 +1,89 @@
1++++
2+title = "Native Planet Phase 2"
3+date = "2022-04-07"
4+
5+[taxonomies]
6+grant_type = [ "Proposal" ]
7+grant_category = [ "Other" ]
8+
9+[extra]
10+image = ""
11+description = "Native Planet - A domestic hosting solution for Urbit"
12+reward = "$50,000 in WSTR"
13+assignee = "~dalhec-banler"
14+champion = "~poldec-tonteg"
15+completed = false
16+canceled = false
17++++
18+
19+## Native Planet Phase 2 - Software Stack Development + Integration, Service development, Production model
20+
21+## Overview
22+
23+The purest Urbit experience is hosting your own ship at your home, on your desk at work, or wherever you want to keep a small, well-designed piece of hardware. This "box" will include a small but powerful chipset that will be custom built for Urbit's unique needs, featuring fast read/write speeds, a durable HD to handle re-writes, RAID or remote encrypted backup, and easily expandable storage. Ideally, the components should be available as an open source hardware project. The Native Planet is a powerful, simple and hackable implementation of these features. You will be able to purchase the Native Planet as a hacker kit, or as a fully assembled piece of high-end hardware that offers a plug and play solution for less tech-savvy users. Building hardware for Urbit is a bit of a moving target this early in the game, but building something that is modular, customizable, hackable, and powerful enough for now, and the foreseeable future, will both aid in development of future hardware and satisfy the needs of current users.
24+
25+Phase two of the project will focus on UX and custom integration of the Home-Urbit software with the Native Planet Hardware. It is worth noting that the Home-Urbit software project is currently being developed by Odysseas Lamtzidis under a separate grant, and work will continue on Home-Urbit outside of its Native Planet integration. That said, integration of these two projects is key to building a true plug-and-play product for the NativePlanet end-user. Integrations will require front-end development, hardware specific low level programming, UX design, and documentation for future development and initial customer service. Phase two will grow the Native Planet team and add features to the project, such as encrypted backup, hosted web endpoints , and native S3 buckets.
26+
27+## Home-Urbit Integration + Front End Development
28+
29+The final version of the Native Planet will extend the proof-of-concept prototype to a consumer-ready, first class Urbit device. Thoughtful design, a pre-configured software stack, and powerful hardware will make the experience of running a ship akin to operating a simple home appliance. A non-technical user will be up and running within minutes of downloading their keyfile, with all of the accouterments available to technical enthusiasts and none of the maintenance burden.
30+
31+## Milestones
32+
33+### Phase Two - Milestone 1 - Anchor server and Onboard Screen UI
34+
35+Expected Completion: 30 May 2022
36+
37+Payment: $25,000 WSTR
38+
39+Anchor Server
40+
41+- Hassle-free provisioning of a publicly-accessible proxy for Ames and Landscape
42+
43+- Transparent NAT traversal via automated WireGuard configuration
44+
45+- Automatically configured domain and TLS for HTTPS ship access
46+
47+- Automated provisioning of public S3 bucket accessible via hosted subdomain
48+
49+- Ships with commercial version, open source/self-hosted version of server software available
50+
51+Onboard screen UI
52+
53+- Simple informational screen on the chassis
54+
55+- Display access URL information & access code on initial boot
56+
57+- Display ship information and hardware diagnostics post-boot
58+
59+- Idle screen ‘planet pass’ graphic a la Bridge (contingent on HDMI screen)
60+
61+- User interaction via pleasant analog dial knob
62+
63+### Phase Two - Milestone 2 - Production
64+
65+Expected Completion: 30 July, 2022
66+
67+Payment: $25,000 WSTR
68+
69+Production UX
70+
71+- True plug-and-play – copy keyfile onto a USB drive, insert, and turn on
72+
73+- Zero-configuration setup for public web access
74+
75+- Simple web management UI for device & underlying OS
76+
77+- Automated, secure remote backup
78+
79+- Support multiple ships on one device
80+
81+Production hardware
82+
83+- Sourcing and assembling the consumer model of the Native Planet
84+
85+- Open source design and configuration
86+
87+- Optional RAID1 configuration for auxiliary Sata SSD drives
88+
89+- 3D printer STL models for case components
content/grants/native-urbit.md+1−1
@@ -11,7 +11,7 @@ image = ""
1111description = "Native Planet - A domestic hosting solution for Urbit"
1212reward = "5 stars"
1313assignee = "~dalhec-banler"
14−completed = false
14+completed = true
1515canceled = false
1616+++
1717
content/grants/port-maintenance.md+3−3
@@ -7,9 +7,9 @@ grant_category = ["App Dev"]
77[extra]
88image = ""
99description = "Maintain the Port application"
10−reward = "$8000-$12000 in WSTR"
10+reward = "$12000 in WSTR"
1111champion = "~nocsyx-lassul"
12−assignee = ""
12+assignee = "~latter-bolden"
1313id = "B0137"
1414completed = false
1515work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0137&prefill_Grant+Name=Port%20Maintenance"
@@ -69,6 +69,6 @@ Engineer Skills
6969
7070## Compensation
7171
72−- $4000 in WSTR per month initially (assuming ~10 hours/week part-time)
72+- $4000 in WSTR per month initially (assuming ~10 hours/week part-time), 3 month contract
7373
7474- More WSTR can be negotiated if the developer has greater availability and can commit more time
content/grants/slam.md+11−7
@@ -7,7 +7,7 @@ grant_category = ["App Dev"]
77[extra]
88image = ""
99description = "Slam Action Game"
10−reward = "$24000 in WSTR"
10+reward = "3 stars"
1111assignee = "~hanfel-dovned"
1212champion = "~rabsef-bicrym"
1313id = ""
@@ -37,11 +37,11 @@ Slam's integration with pals and gora is something that can only happen on Urbit
3737
3838Hi! I'm ~hanfel-dovned.
3939
40−Throughout college, I developed about two dozen games ranging in scope from small weekend projects to a multi-year professional release on consoles. I designed and coded them in GameMaker: Studio using GML, a language with C-like syntax and looser-than-C rules. Some games were made entirely by me, and on others I collaborated with a couple friends on art and sound. (I'd be happy to share this portfolio with anyone interested.)
40+Throughout college, I developed about two dozen games ranging in scope from small weekend projects to a multi-year professional release on consoles. I designed and coded them in GameMaker: Studio using GML, a language with C-like syntax and looser-than-C rules. Some games were made entirely by me, and on others I collaborated with a couple friends on art and sound.
4141
42−I recently graduated with a degree in computer science and am currently doing an internship where not much happens. I discovered Urbit in mid-2021, fell in love with it, went through Hoon School, did an apprenticeship, attended Assembly, and plan on building on Urbit full time when my internship is over in June.
42+After graduating, I discovered Urbit in mid-2021, fell in love with it, went through Hoon School, did an apprenticeship, attended Assembly, and plan on building on Urbit full time beginning this summer.
4343
44−My Hoon skills are up to par with the previous out-of-date Gall Guide; I can write a Gall agent, but don't have any experience with implementing a frontend or distributing apps. Code for my apprenticeship is here.
44+My Hoon skills are up to par with the previous out-of-date Gall Guide; I can write a Gall agent, but don't have any experience with implementing a frontend or distributing apps. Code for my apprenticeship is [here](https://github.com/hanfel-dovned/urbit-text-editor).
4545
4646## Design
4747
@@ -95,7 +95,7 @@ I’ll be working with ~rabsef-bicrym as a champion. Rabsef has, with [Quartus](
9595
9696Expected Completion: May 2022
9797
98−Payment: $12,000
98+Payment: 1 Star
9999
100100A fully playable and polished single-player version of Slam with all gameplay mechanics intact, but no pals or gora implementation, will be available for Urbit users to play via app distribution.
101101
@@ -103,6 +103,10 @@ A fully playable and polished single-player version of Slam with all gameplay me
103103
104104Expected Completion: August 2022
105105
106−Payment: $12,000
106+Payment: 2 Stars
107107
108−Slam will be updated with gora and pals functionality as described in this proposal. If any minor bugs pop up in the weeks after release, they will be quickly fixed.
108+Slam will be updated with social functionality. Enemies will be generated from the player's pals' public gorae by pulling in their images as sprites and tweaking parameters like size and color according to each gora's info.
109+
110+As part of these social features, Slam will be updated with menus for features including viewing one's gora army and seeing pals' high scores.
111+
112+If germane, Slam's core gameplay will also be tweaked according to player feedback from the demo, potentially including graphical and audio enhancements; this will be a tight, solid, highly polished little game. If any minor bugs pop up in the weeks after release, they will be quickly fixed.
content/grants/value-articles.mdnew file+50
@@ -0,0 +1,50 @@
1++++
2+title = "Value Articles"
3+date = "2022-04-27"
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["Other"]
7+[extra]
8+image = ""
9+description = "Create in-depth valuation models for Urbit address space, network effects, and commercial utilization"
10+reward = "$5000"
11+assignee = ""
12+champion = "~simfur-ritwed"
13+id = "B0156"
14+completed = false
15+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0156&prefill_Grant+Name=Urbit%20Value%20Longform%20Writing%2FAnalysis"
16++++
17+
18+## Overview
19+
20+Create in-depth valuation models for Urbit address space, network effects, and commercial utilization.
21+
22+## Background
23+
24+Understanding the economics of Urbit can be tricky; there are many different layers of analogy and historical comparison for how to value Urbit address space, network effects, and commercial potential. There is also potentially interesting territory around Urbit’s differences from previously existing infrastructure, land, etc paradigms, and the potential to unlock new forms of economic activity. Some thinking has been done here, including by [Tlon](https://urbit.org/blog/value-of-address-space-pt3) and by [Justin Murphy](https://www.otherlife.co/urbit/); but much more (and more detailed) work remains.
25+
26+We’re interested in seeing detailed economic analyses of Urbit’s valuation on a macro scale. These can involve statistical models from areas often analogized to Urbit (such as network effects, land value, or NFT token economics), or they can propose new models or scenarios. We don’t ask that you come to any particular conclusion; all submissions will be reviewed by a committee of community members (not the Urbit Foundation or Tlon).
27+
28+Some possible avenues of inquiry:
29+
30+- Analyses of how the current Urbit address space market functions and implications for future value; how current market actors perceive value; implications for growth
31+- Urbit ID as a decentralized ID protocol (including for protocols on top of Urbit)
32+- Urbit as a cryptographic asset (rare sigils and names, galaxies as DAO voting shares)
33+- Urbit OS as a stable computing stack
34+- Urbit network valuation (Stars as ISPs, stars as CDNs, Urbit as tokenized DNS, software distribution, payments)
35+- Urbit as ‘digital land’
36+- Urbit as Schelling Point for various protocols, cryptocurrencies, DAOs
37+- Emergent commercial use cases for Urbit which are difficult or impossible under current paradigms, or are highly competitive with existing businesses, and how to value them
38+- Urbit (whether ID, networking, computing stack) as hedge against geopolitical, technological, etc risk
39+
40+Qualifying research papers can be either in academic style and submitted to peer reviewed journals, or be narrative-driven for publication elsewhere, but in either case must be detailed, sober-minded, thorough argumentation with citations where appropriate. There is no firm length requirement, but notability, familiarity with (and explanation/citation of) relevant models and prior work, and familiarity with the relevant areas of Urbit being analyzed are all highly important. Likewise, there is no requirement that you have specific academic credentials, but a familiarity with economic models and financial markets is highly encouraged.
41+
42+## Responsibilities
43+
44+- Author detailed analyses of valuation models, commercial value propositions, or current Urbit market dynamics
45+- Submit for publication (Personal websites/Substacks/Urbit Groups are fine, but a clearweb presence is strongly encouraged; the Urbit Foundation may also assist in finding venues for publication if so desired. Academics are highly encouraged to submit resulting research analyses to peer-review journals)
46+- Answer questions from the Mars Invisible College Review Board, which is a collection of independent urbit academics, contributors, and developers who will ensure ethical and quality standards are met.
47+
48+## Milestones & Compensation
49+
50+$5000 upon completion of each article which meet the standards of the Mars Invisible College Review Board
content/groups/_index.mdnew file+3
@@ -0,0 +1,3 @@
1++++
2+title = "Group Directory"
3++++
content/groups/~bitbet-bolbel/urbit-community.mdnew file+14
@@ -0,0 +1,14 @@
1++++
2+title = "Urbit Community"
3+shortcode = "~bitbet-bolbel/urbit-community"
4+description = "World hub, help desk, meet and greet, etc."
5+type = "Public"
6+tile = "https://fabled-faster.nyc3.digitaloceanspaces.com/fabled-faster/2021.4.02..21.52.41-UC.png"
7+participant_range = "5000+"
8++++
9+
10+Urbit Community, or UC, is the “Town Square” of Urbit. This group, unlike most groups on Urbit, is decidedly about Urbit.
11+
12+If you’re new to the network, this is the best place to start. The team at Tlon and the Urbit Foundation hang out here to support newcomers, as well as many of the most active members of our community.
13+
14+UC is where you’ll receive important news about Urbit, get support if you have any issues, and can chat with our community about nearly anything Urbit-related. Every few weeks we host an “Urbit Dialogue,” where a guest spends an hour or so answering questions AMA-style with the community.
content/groups/~fabled-faster/new-york.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "New York"
3+shortcode = "~fabled-faster/new-york"
4+description = "Martians invade the Big Apple."
5+type = "Public"
6+tile = "#000000"
7+participant_range = "100+"
8++++
9+
10+Martians invade the Big Apple.
content/groups/~fabled-faster/structure.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "structure"
3+shortcode = "~fabled-faster-/wind"
4+description = "Urbit Structural Design and Engineering Group. Always Thinking About Mechanics."
5+type = "Public"
6+tile = "https://fabled-faster.nyc3.digitaloceanspaces.com/fabled-faster/2022.1.27..17.59.43-image.png"
7+participant_range = "400+"
8++++
9+
10+Urbit Structural Design and Engineering Group. Always Thinking About Mechanics.
content/groups/~fabled-faster/wind.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "Wind"
3+shortcode = "~fabled-faster-/wind"
4+description = "Wind was the first music. Let's chat, discuss, scheme, and learn everything about new music on Urbit."
5+type = "Public"
6+tile = "https://fabled-faster.nyc3.digitaloceanspaces.com/fabled-faster/2021.4.15..03.52.47-original_001012c5d98277b0f0061b3da18e4f1a.jpg"
7+participant_range = "200+"
8++++
9+
10+Wind was the first music. Let's chat, discuss, scheme, and learn everything about new music on Urbit.
content/groups/~hatryx-lastud/other-life.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "Other Life"
3+shortcode = "~hatryx-lastud/other-life"
4+description = "The Imperceptible City"
5+type = "Public"
6+tile = "https://dl.airtable.com/.attachmentThumbnails/85973e6c8ac12bef0ce4fbc046a2fb7c/8c21d303"
7+participant_range = "5000+"
8++++
9+
10+The Imperceptible City
content/groups/~hiddev-dannut/new-hooniverse.mdnew file+11
@@ -0,0 +1,11 @@
1++++
2+title = "New Hooniverse"
3+shortcode = "~hiddev-dannut/new-hooniverse"
4+type = "Private"
5+tile = "https://i.imgur.com/ghThlz7.png"
6+participant_range = "1000+"
7++++
8+
9+New Hooniverse is a hub for learners of Hoon and the Arvo (Urbit OS) backend.
10+
11+All who are interested in developing on Urbit (simple codes, apps, kernel dev, etc.) are invited to participate. Urbit Foundation's Hoon School effort is based in New Hooniverse.
content/groups/~ladtem-filmyr/urbit-ny-week.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "Urbit NY Week"
3+shortcode = "~ladtem-filmyr/urbit-ny-week"
4+description = "Urbit NY Takeover May 19-22"
5+type = "Public"
6+tile = "https://fabled-faster.nyc3.digitaloceanspaces.com/fabled-faster/2022.4.01..21.56.54-Frame%202.png"
7+participant_range = "100+"
8++++
9+
10+Urbit is coming to NYC from May 19-22. Come party with us. Details on network in this group.
content/groups/~matwet/networked-subject.mdnew file+11
@@ -0,0 +1,11 @@
1++++
2+title = "🌐 networked subject_ 🌲"
3+shortcode = "~matwet/networked-subject"
4+description = "Become illegible. https://subject.network"
5+type = "Public"
6+tile = "https://urbits3.ams3.digitaloceanspaces.com/sitful-hatred/2022.4.28..19.40.19-ns.png"
7+participant_range = "1000+"
8++++
9+
10+Networked Subject is a long-running group with a titular clearnet blog & and on-network notebook with a collection of tutorials and resources for self-hosting Urbit ships, and operating related software. Learn how to self-host your ship on a cloud VPS 24/7 for free, host your own S3 bucket, or read interviews with interesting community members.
11+The NetSub community is a handy nexus for troubleshooting issues with ships or the software you use to run them, offers a public Bitcoin provider node, and has a dedicated space for sharing Urbit memes
content/groups/~middev/the-forge.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "The Forge"
3+shortcode = "~middev/the-forge"
4+description = "World hub, help desk, meet and greet, etc."
5+type = "Public"
6+tile = "https://nyc3.digitaloceanspaces.com/archiv/littel-wolfur/2021.5.06..21.01.58-the%20forge.png"
7+participant_range = "900+"
8++++
9+
10+pale fire computing
content/groups/~napmer-rilnut/wet-brain.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "ᴡᴇᴛ ʙʀᴀɪɴ"
3+shortcode = "~napmer-rilnut/wet-brain"
4+description = "wet brain Wet brain wet Brain wet Brain patreon.com/wetbrain"
5+type = "Public"
6+tile = "https://snipboard.io/uhWLiQ.jpg"
7+participant_range = "500+"
8++++
9+
10+wet brain Wet brain wet Brain wet Brain patreon.com/wetbrain
content/groups/~natnex-ronret/door-link.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "door.link"
3+shortcode = "~natnex-ronret/door-link"
4+description = "music cult"
5+type = "Public"
6+tile = "#000000"
7+participant_range = "300+"
8++++
9+
10+an enthusiastic deep listening community with curation brought to you by Tlon's ~natnex-ronnet
content/groups/~sillus-mallus/toki-pona.mdnew file+11
@@ -0,0 +1,11 @@
1++++
2+title = "toki pona"
3+shortcode = "~sillus-mallus/toki-pona"
4+type = "Public"
5+tile = "https://personal-server.fra1.digitaloceanspaces.com/sillus-mallus/tp-lg.png"
6+participant_range = "100"
7++++
8+
9+For speakers and learners of the hyper-simple constructed language, toki pona.
10+
11+This group provides extensive learning and reading materials for beginners. Also, the Faux chatbot posts regular updates from users across the entire toki pona internet.
content/groups/~widbep-faltev/asheville.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "Asheville"
3+shortcode = "~widbep-faltev/asheville"
4+type = "Public"
5+tile = "https://cdn.substack.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ed64f02-8e48-4f58-8ebb-f275760aa6f8_295x297.png"
6+participant_range = ""
7++++
8+
9+Urbit for Asheville Locals.
content/groups/~winder-dapsym/urchan.mdnew file+9
@@ -0,0 +1,9 @@
1++++
2+title = "urChan"
3+shortcode = "~winder-dapsym/urchan"
4+type = "Public"
5+tile = "https://winder-dapsym.sfo3.digitaloceanspaces.com/Images/urChan/urChanlogo_dark.png"
6+participant_range = "1131"
7++++
8+
9+a comfy place to discuss with frens, this is the newest chan. this is ur chan. decentralized: urChan2.0
content/guides/getting-an-urbit-id.mdnew file+46
@@ -0,0 +1,46 @@
1++++
2+title = "Getting an Urbit ID"
3++++
4+
5+Urbit IDs are NFTs on Ethereum that give you access to the Urbit Network. There are a few types of Urbit IDs, but what most people will find useful is called a planet.
6+
7+There are a few options to obtain planets.
8+
9+## A) Ask Nicely
10+
11+Some people, such as [imperceptible.computer](https://imperceptible.computer), are generously giving away planets, so if you have patience you can sign up for a free planet.
12+
13+You can also ask around on Twitter or boot up a comet and ask on the Urbit network. If you get a planet this way you’ll get an email with instructions on setting it up.
14+
15+## B) Buy a Planet
16+
17+There are many places to buy a planet using either cryptocurrency or fiat.
18+
19+Layer 1 planets are the most available through marketplaces, however they can be expensive due to Ethereum gas fees. You will need an Ethereum wallet such as Metamask to purchase these planets, and will later need to sign in to [Bridge](https://bridge.urbit.org/) with your wallet to configure your planet.
20+
21+Layer 2 planets do not require any crypto wallet management, but are at present less readily available on marketplaces.
22+
23+Don’t worry, both types work the same on the network.
24+
25+Here are just a few of the places where you can buy planets:
26+
27+**L1 Planets**
28+
29+- [Urbitex](https://urbitex.io)
30+- [Urbit.live](https://urbit.live)
31+- [Urbit.me](https://urbit.me)
32+
33+**L2 Planets**
34+
35+- [Azimuth.shop](https://azimuth.shop)
36+- [\_networked subject\_](https://subject.network/)
37+- [~mocbel house](https://mocbel.house)
38+- [Wexpert.systems](https://wexpert.systems)
39+
40+**Included With Hosting**
41+
42+- [Urbit Host](https://urbithost.com)
43+
44+## Next steps
45+
46+Once you buy your planet you’ll want to log in to Bridge to configure your planet and get your ship running. See our [Getting Started guide](/getting-started) to learn more.
content/guides/installing-applications.mdnew file+39
@@ -0,0 +1,39 @@
1++++
2+title = "Installing applications on Urbit"
3++++
4+
5+## 1. Get on the network
6+
7+First, you’ll need to get on Urbit. You can quickly check out the network by [downloading the Port application](https://github.com/urbit/port) and booting up a comet–a temporary Urbit ID.
8+
9+For long-term use, you’ll want to get a permanent Urbit ID and consider a running your urbit in the cloud or on a hosted service.
10+
11+Read our [Getting Started guide](https://urbit.org/install) for details.
12+
13+## 2. Finding applications
14+
15+Urbit is still in its early stages, so you’ll need to join groups and browse around the network to discover new applications as they are being brought up.
16+
17+However, we can get started a simple app from Urbit developer [`~paldev`](/ids/~paldev).
18+
19+## 3. Search for a Developer
20+
21+Once you’re on the network, you’ll see and large tiled interface with a few applications installed and a search bar on the top of the page.
22+
23+Click and the search bar and search for the software provider’s Urbit ID.
24+
25+For example, to install the picture application, search for `~paldev` and then click on the result for `~paldev` to show his applications.
26+
27+![](https://media.urbit.org/site/application/app-guide1.png)
28+
29+![](https://media.urbit.org/site/application/app-guide2.png)
30+
31+## 4. Get the Application
32+
33+After selecting the “picture” app, a pane will open that shows some information about the application. Go ahead and click the “Get App” button, and confirm the following modal window to begin the installation process.
34+
35+Soon you’ll have a new application tile on your home screen that will let you upload and display a picture to your home screen.
36+
37+![](https://media.urbit.org/site/application/app-guide3.png)
38+
39+![](https://media.urbit.org/site/application/app-guide4.png)
content/guides/joining-groups.mdnew file+53
@@ -0,0 +1,53 @@
1++++
2+title = "Joining groups on Urbit"
3++++
4+
5+## 1. Get on the network
6+
7+First, you’ll need to get on Urbit. You can quickly check out the network by [downloading the Port application](https://github.com/urbit/port) and booting up a comet–a temporary Urbit ID.
8+
9+For long-term use, you’ll want to get a permanent Urbit ID and consider a running your urbit in the cloud or on a hosted service.
10+
11+Read our [Getting Started guide](https://urbit.org/install) for details.
12+
13+## 2. Open the Groups app
14+
15+Once you’re on the network, you’ll see and large tiled interface with a few applications installed: Terminal, Groups, and Bitcoin. Click on Groups.
16+
17+![](https://media.urbit.org/site/group/groups-guide1.png)
18+
19+## 3. Enter the group shortcode
20+
21+We’ll start by joining Urbit Community, a friendly introductory Urbit group.
22+
23+In the Groups app, click the “Join Group” button and enter `~bitbet-bolbel/urbit-community`.
24+
25+Then confirm by clicking with the second “Join Group” button.
26+
27+![](https://media.urbit.org/site/group/groups-guide2.png)
28+![](https://media.urbit.org/site/group/groups-guide3.png)
29+
30+## 4. Confirm join
31+
32+You should see a window that provides a description and group information. If not, check the spelling of the group name and address and try again.
33+
34+Alternatively, the ship that is hosting the group may be offline.
35+
36+Click "Join Urbit Community".
37+
38+![](https://media.urbit.org/site/group/groups-guide4.png)
39+
40+## 5. Join channels
41+
42+Congratulations, if you’re seeing a window like the one that appears below then you’ve joined the group!
43+
44+There two types of channels in the left column: Chats, and Notebooks. The former is self-explanatory, while the latter is like a blog with optional comments.
45+
46+To join a channel within the group, select a channel name from the left column, and click the Join Channel button.
47+
48+![](https://media.urbit.org/site/group/groups-guide5.png)
49+![](https://media.urbit.org/site/group/groups-guide6.png)
50+
51+## 6. Chat and post on the network
52+
53+Congratulations you’re now a part of a peer-to-peer Urbit group. Be friendly, be curious, and have fun.
content/ids/battus-datsun.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+ship = "~battus-datsun"
3+nickname = "gordon"
4+bgColor = "#fff700"
5+image = ""
6++++
7+
8+Automotive, crypto, and holistic health enthusiast
9+
10+Communications at Urbit Foundation
content/ids/bitbet-bolbel.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+ship = "~bitbet-bolbel"
3+description = "The host of Urbit Community, run by the Urbit Foundation."
4++++
content/ids/fallyn-balfus.mdnew file+8
@@ -0,0 +1,8 @@
1++++
2+ship = "fallyn-balfus"
3+nickname = ""
4+bgColor = "#000000"
5+image = ""
6++++
7+
8+ima blow up and act like a no nobody
content/ids/haddef-sigwen.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+ship = "~haddef-sigwen"
3+nickname = "~am"
4+bgColor = "#dcedce"
5+image = "https://s3.us-east-1.amazonaws.com/haddefsigwen1/haddef-sigwen/2021.2.24..20.22.37-bw400.png"
6++++
7+
8+Tlon Corporation (2019-2021), Urbit Foundation (2022-)
9+
10+Lawful neutral, interactive media artist, mercenary for hire. [Decept.org](https://decept.org) proprietor. More projects at [my website](https://matildepark.ca).
content/ids/lagrev-nocfep.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+ship = "~lagrev-nocfep"
3+nickname = "𐐝𐐮𐐾𐐮𐑊𐐰𐑌𐐻𐐨"
4+bgColor = ""
5+image = "https://pbs.twimg.com/profile_images/1508135477664268288/5VhAqOUI_400x400.jpg"
6++++
content/ids/mallus-fabres.mdnew file+12
@@ -0,0 +1,12 @@
1++++
2+ship = "~mallus-fabres"
3+nickname = ""
4+bgColor = "#b8d0d5"
5+image = ""
6++++
7+
8+Puzzler, Edna St Vincent Millay enjoyer, and now Austinite! Get to know me in my interview w/Orbis Ledger [here](https://orbisledger.news/2021/12/05/epidsode-025-with-mallus-aforethought/). Enthusiastic HSL participant.
9+
10+Chromebook -> pi -> hosted
11+
12+I run the group for women on Urbit; please DM for an invitation.
content/ids/poldec-tonteg.mdnew file+14
@@ -0,0 +1,14 @@
1++++
2+ship = "~poldec-tonteg"
3+nickname = ""
4+bgColor = "#f2bd58"
5+image = ""
6++++
7+
8+encryption, digital money, anonymous networks, digital pseudonyms, zero knowledge, reputations, information markets, black markets, collapse of governments
9+
10+Director @ [The Combine](https://the-combine.org)
11+
12+Book some time to say [hello](https://calendly.com/the-combine/intro)
13+
14+backup ship is ~famreb-todmec
content/ids/rabsef-bicrym.mdnew file+14
@@ -0,0 +1,14 @@
1++++
2+ship = "~rabsef-bicrym"
3+nickname = ""
4+bgColor = "#000000"
5+image = ""
6++++
7+
8+Hails from parts unknown.
9+
10+Aliases: Professor Boulder B. Traprock, Uncle ~rabsef
11+
12+CTO of Quartus Co. - Creators of Gora, Orca, Expo, Ibis, Wrdu, etc.
13+
14+Hooner with a dream.
content/ids/ravmel-ropdyl.mdnew file+8
@@ -0,0 +1,8 @@
1++++
2+ship = "~ravmel-ropdyl"
3+nickname = "galen"
4+bgColor = "#ffffff"
5+image = ""
6++++
7+
8+i work on making urbit the only computer that matters
content/ids/sitful-hatred.mdnew file+8
@@ -0,0 +1,8 @@
1++++
2+ship = "~sitful-hatred"
3+nickname = "⍨𝖘𝖎𝖙𝖋𝖚𝖑-𝖍𝖆𝖙𝖗𝖊𝖉 🐛"
4+bgColor = "#686362"
5+image = "https://urbits3.ams3.digitaloceanspaces.com/sitful-hatred/2021.4.12..21.14.57-av.png"
6++++
7+
8+reid from texas, [networked subject](/groups/~matwet/networked-subject) guy
content/proposals.md+6−6
@@ -43,10 +43,10 @@ Good proposals all include the following:
4343- A **detailed and clear description of the proposal**. If you're proposing something technical, user stories are a good idea.
4444- An overview of **why you are the right person for the job**. A description of your background, familiarity with the project, and professional/education experience are all good starts.
4545- Your estimate for **date of completion**.
46−- The **amount of funding** you'd like for the project.
46+- The **amount of funding** you'd like for the project, denominated in stars.
4747- What **specific deliverables** will look like.
4848
49−It's recommended to break your project into _milestones_, each of which must have its own completion dates, funding amounts and deliverables. In general, proposals should target a first deliverable within two months of the start of the project.
49+It's recommended to break your project into _milestones_, each of which must have its own completion dates, funding amounts and deliverables. In general, proposals should target a first deliverable within two months of the start of the project. Proposals should have a maximum of five milestones as scoping a project beyond that is impractical, and each milestone should constitute significant enough work to warrant the reward of a full star.
5050
5151Here are some examples of exceptional proposals for reference:
5252
@@ -56,7 +56,7 @@ Here are some examples of exceptional proposals for reference:
5656
5757### Funding
5858
59−The Urbit Foundation will provide funding of up to $50,000 USD for any one grant, paid in [WSTR](https://star.market).
59+The Urbit Foundation will provide funding of up to five stars for any one grant.
6060
6161Our formula for determining how much to value a particular grant is a function of time spent on the project, value to the Urbit universe, and track record of the contributor (either via past work within the grants program, or a relevant external background).
6262
@@ -104,10 +104,10 @@ If your Champion becomes unresponsive or is unhelpful, let someone at the Urbit
104104
105105After your proposal is Championed the Urbit Foundation will need to get a **signed contributor agreement** and **collect a small amount of personal information** from you as part of our KYC process.
106106
107−The Urbit Foundation must comply with international law when distributing address space. We try to keep this process as minimal as we can, but there's no way to avoid it entirely without legally jeapardizing the Foundation's operations.
107+The Urbit Foundation must comply with international law when distributing address space. We try to keep this process as minimal as we can, but there's no way to avoid it entirely without legally jeopardizing the Foundation's operations.
108108
109109## Getting Paid
110110
111−After you've finished your work and gotten signoff from your champion, you'll [submit an invoice](https://airtable.com/shrXXCs1uaxtNSBcg) to the Urbit Foundation for the amount in USD agreed upon in your grant or milestone, which the Foundation will pay in WSTR.
111+After you've finished your work and gotten signoff from your champion, you'll [submit an invoice](https://airtable.com/shrXXCs1uaxtNSBcg) to the Urbit Foundation for the amount agreed upon in your grant or milestone, which the Foundation will pay.
112112
113−We approve and issue payments twice per month, **on the 2nd and 17th**, with payments happening over the course of **up to five days following those dates.** It takes a while because we have to issue each payment individual, and weekends/holidays sometimes interfere.
113+We approve and issue payments twice per month, **on the 2nd and 17th**, with payments happening over the course of **up to five days following those dates.** It takes a while because we have to issue each payment individually, and weekends/holidays sometimes interfere.
lib/cache.js+3−1
@@ -27,7 +27,9 @@ function buildSearchIndex(dir) {
2727
2828 const children = fs.readdirSync(dir, { withFileTypes: true });
2929 const pages = children.filter((f) => f.isFile() && f.name !== "_index.md");
30− const subdirs = children.filter((f) => f.isDirectory());
30+ const subdirs = children.filter(
31+ (f) => f.isDirectory() && f.name !== "ids" && f.name !== "glossary"
32+ );
3133
3234 index.push(
3335 ...pages.map((page) => {
lib/hooks.js+12
@@ -57,3 +57,15 @@ export const useLocalStorage = (key, defaultValue) => {
5757
5858 return [value, setValue];
5959};
60+
61+export const useInputChange = () => {
62+ const [input, setInput] = useState({});
63+
64+ const handleInputChange = (e) =>
65+ setInput({
66+ ...input,
67+ [e.currentTarget.name]: e.currentTarget.value,
68+ });
69+
70+ return [input, handleInputChange];
71+};
lib/lib.js+4−2
@@ -28,7 +28,9 @@ const directories = (dir) => {
2828};
2929
3030export function getPostSlugs(key) {
31− const dir = fs.readdirSync(directories(key), { withFileTypes: true });
31+ const dir = fs.existsSync(directories(key))
32+ ? fs.readdirSync(directories(key), { withFileTypes: true })
33+ : [];
3234 return dir
3335 .filter((f) => f.isFile() && f.name !== "_index.md")
3436 .map((f) => f.name);
@@ -68,7 +70,7 @@ export function getPostBySlug(slug, fields = [], key) {
6870 return items;
6971}
7072
71−export function getAllPosts(fields = [], key, sort = "date") {
73+export function getAllPosts(fields = [], key, sort = "") {
7274 const slugs = getPostSlugs(key);
7375 const posts = slugs
7476 .map((slug) => getPostBySlug(slug, fields, key))
next.config.js+9−3
@@ -44,14 +44,20 @@ const withTM = require("next-transpile-modules")([
4444module.exports = withTM({
4545 reactStrictMode: false,
4646 // target: 'serverless',
47− webpack5: false,
4847 webpack: (config, { isServer }) => {
4948 // Fixes npm packages that depend on `fs` module
5049 if (!isServer) {
51− config.node = {
52− fs: "empty",
50+ config.resolve.fallback = {
51+ fs: false,
52+ path: "path-browserify",
53+ events: false,
5354 };
5455 }
56+ if (isServer) {
57+ config.externals.push("_http_common");
58+ }
59+ config.resolve.alias.stream = "stream-browserify";
60+ config.resolve.alias.zlib = "browserify-zlib";
5561 // config.externals = {
5662 // ...config.externals,
5763 // canvas: "util",
package-lock.json+6577−3668
@@ -1,71 +1,5300 @@
11{
22 "name": "urbit.org-2",
33 "version": "0.1.0",
4− "lockfileVersion": 1,
4+ "lockfileVersion": 2,
55 "requires": true,
6− "dependencies": {
7− "@babel/code-frame": {
8− "version": "7.12.11",
9− "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
10− "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
11− "requires": {
12− "@babel/highlight": "^7.10.4"
6+ "packages": {
7+ "": {
8+ "name": "urbit.org-2",
9+ "version": "0.1.0",
10+ "dependencies": {
11+ "@iarna/toml": "^2.2.5",
12+ "@socialgouv/matomo-next": "^1.3.0",
13+ "@tailwindcss/aspect-ratio": "^0.4.0",
14+ "@tlon/sigil-js": "^1.4.5",
15+ "axios": "^0.26.1",
16+ "buffer": "^6.0.3",
17+ "classnames": "^2.3.1",
18+ "deepmerge": "^4.2.2",
19+ "downshift": "^6.1.5",
20+ "feed": "^4.2.2",
21+ "fuzzy-search": "^3.2.1",
22+ "gray-matter": "^4.0.3",
23+ "html-entities": "^2.3.2",
24+ "lodash.debounce": "^4.0.8",
25+ "luxon": "^2.0.2",
26+ "next": "^12.1.5",
27+ "path-browserify": "^1.0.1",
28+ "prismjs": "^1.25.0",
29+ "process": "^0.11.10",
30+ "react": "^17.0.0",
31+ "react-dom": "^17.0.0",
32+ "react-hotkeys": "^2.0.0",
33+ "react-swipeable": "^6.2.1",
34+ "react-use-localstorage": "^3.5.3",
35+ "rehype-raw": "^6.1.0",
36+ "rehype-stringify": "^9.0.2",
37+ "remark": "^13.0.0",
38+ "remark-gfm": "^3.0.0",
39+ "remark-heading-id": "^1.0.0",
40+ "remark-html": "^13.0.1",
41+ "remark-parse": "^10.0.0",
42+ "remark-prism": "^1.3.6",
43+ "remark-rehype": "^10.0.0",
44+ "remark-slug": "^6.0.0",
45+ "stream-browserify": "^3.0.0",
46+ "unified": "^9.2.1",
47+ "urbit-ob": "^5.0.1"
48+ },
49+ "devDependencies": {
50+ "autoprefixer": "^10.4.4",
51+ "husky": "^6.0.0",
52+ "next-transpile-modules": "^9.0.0",
53+ "postcss": "^8.4.12",
54+ "prettier": "^2.3.1",
55+ "pretty-quick": "^3.1.0",
56+ "tailwindcss": "^3.0.24"
57+ }
58+ },
59+ "node_modules/@babel/runtime": {
60+ "version": "7.17.9",
61+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
62+ "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
63+ "dependencies": {
64+ "regenerator-runtime": "^0.13.4"
65+ },
66+ "engines": {
67+ "node": ">=6.9.0"
68+ }
69+ },
70+ "node_modules/@iarna/toml": {
71+ "version": "2.2.5",
72+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
73+ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg=="
74+ },
75+ "node_modules/@next/env": {
76+ "version": "12.1.5",
77+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.5.tgz",
78+ "integrity": "sha512-+34yUJslfJi7Lyx6ELuN8nWcOzi27izfYnZIC1Dqv7kmmfiBVxgzR3BXhlvEMTKC2IRJhXVs2FkMY+buQe3k7Q=="
79+ },
80+ "node_modules/@next/swc-android-arm-eabi": {
81+ "version": "12.1.5",
82+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.5.tgz",
83+ "integrity": "sha512-SKnGTdYcoN04Y2DvE0/Y7/MjkA+ltsmbuH/y/hR7Ob7tsj+8ZdOYuk+YvW1B8dY20nDPHP58XgDTSm2nA8BzzA==",
84+ "cpu": [
85+ "arm"
86+ ],
87+ "optional": true,
88+ "os": [
89+ "android"
90+ ],
91+ "engines": {
92+ "node": ">= 10"
93+ }
94+ },
95+ "node_modules/@next/swc-android-arm64": {
96+ "version": "12.1.5",
97+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.5.tgz",
98+ "integrity": "sha512-YXiqgQ/9Rxg1dXp6brXbeQM1JDx9SwUY/36JiE+36FXqYEmDYbxld9qkX6GEzkc5rbwJ+RCitargnzEtwGW0mw==",
99+ "cpu": [
100+ "arm64"
101+ ],
102+ "optional": true,
103+ "os": [
104+ "android"
105+ ],
106+ "engines": {
107+ "node": ">= 10"
108+ }
109+ },
110+ "node_modules/@next/swc-darwin-arm64": {
111+ "version": "12.1.5",
112+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.5.tgz",
113+ "integrity": "sha512-y8mhldb/WFZ6lFeowkGfi0cO/lBdiBqDk4T4LZLvCpoQp4Or/NzUN6P5NzBQZ5/b4oUHM/wQICEM+1wKA4qIVw==",
114+ "cpu": [
115+ "arm64"
116+ ],
117+ "optional": true,
118+ "os": [
119+ "darwin"
120+ ],
121+ "engines": {
122+ "node": ">= 10"
123+ }
124+ },
125+ "node_modules/@next/swc-darwin-x64": {
126+ "version": "12.1.5",
127+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.5.tgz",
128+ "integrity": "sha512-wqJ3X7WQdTwSGi0kIDEmzw34QHISRIQ5uvC+VXmsIlCPFcMA+zM5723uh8NfuKGquDMiEMS31a83QgkuHMYbwQ==",
129+ "cpu": [
130+ "x64"
131+ ],
132+ "optional": true,
133+ "os": [
134+ "darwin"
135+ ],
136+ "engines": {
137+ "node": ">= 10"
138+ }
139+ },
140+ "node_modules/@next/swc-linux-arm-gnueabihf": {
141+ "version": "12.1.5",
142+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.5.tgz",
143+ "integrity": "sha512-WnhdM5duONMvt2CncAl+9pim0wBxDS2lHoo7ub/o/i1bRbs11UTzosKzEXVaTDCUkCX2c32lIDi1WcN2ZPkcdw==",
144+ "cpu": [
145+ "arm"
146+ ],
147+ "optional": true,
148+ "os": [
149+ "linux"
150+ ],
151+ "engines": {
152+ "node": ">= 10"
153+ }
154+ },
155+ "node_modules/@next/swc-linux-arm64-gnu": {
156+ "version": "12.1.5",
157+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.5.tgz",
158+ "integrity": "sha512-Jq2H68yQ4bLUhR/XQnbw3LDW0GMQn355qx6rU36BthDLeGue7YV7MqNPa8GKvrpPocEMW77nWx/1yI6w6J07gw==",
159+ "cpu": [
160+ "arm64"
161+ ],
162+ "optional": true,
163+ "os": [
164+ "linux"
165+ ],
166+ "engines": {
167+ "node": ">= 10"
168+ }
169+ },
170+ "node_modules/@next/swc-linux-arm64-musl": {
171+ "version": "12.1.5",
172+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.5.tgz",
173+ "integrity": "sha512-KgPjwdbhDqXI7ghNN8V/WAiLquc9Ebe8KBrNNEL0NQr+yd9CyKJ6KqjayVkmX+hbHzbyvbui/5wh/p3CZQ9xcQ==",
174+ "cpu": [
175+ "arm64"
176+ ],
177+ "optional": true,
178+ "os": [
179+ "linux"
180+ ],
181+ "engines": {
182+ "node": ">= 10"
183+ }
184+ },
185+ "node_modules/@next/swc-linux-x64-gnu": {
186+ "version": "12.1.5",
187+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.5.tgz",
188+ "integrity": "sha512-O2ErUTvCJ6DkNTSr9pbu1n3tcqykqE/ebty1rwClzIYdOgpB3T2MfEPP+K7GhUR87wmN/hlihO9ch7qpVFDGKw==",
189+ "cpu": [
190+ "x64"
191+ ],
192+ "optional": true,
193+ "os": [
194+ "linux"
195+ ],
196+ "engines": {
197+ "node": ">= 10"
198+ }
199+ },
200+ "node_modules/@next/swc-linux-x64-musl": {
201+ "version": "12.1.5",
202+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.5.tgz",
203+ "integrity": "sha512-1eIlZmlO/VRjxxzUBcVosf54AFU3ltAzHi+BJA+9U/lPxCYIsT+R4uO3QksRzRjKWhVQMRjEnlXyyq5SKJm7BA==",
204+ "cpu": [
205+ "x64"
206+ ],
207+ "optional": true,
208+ "os": [
209+ "linux"
210+ ],
211+ "engines": {
212+ "node": ">= 10"
213+ }
214+ },
215+ "node_modules/@next/swc-win32-arm64-msvc": {
216+ "version": "12.1.5",
217+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.5.tgz",
218+ "integrity": "sha512-oromsfokbEuVb0CBLLE7R9qX3KGXucZpsojLpzUh1QJjuy1QkrPJncwr8xmWQnwgtQ6ecMWXgXPB+qtvizT9Tw==",
219+ "cpu": [
220+ "arm64"
221+ ],
222+ "optional": true,
223+ "os": [
224+ "win32"
225+ ],
226+ "engines": {
227+ "node": ">= 10"
228+ }
229+ },
230+ "node_modules/@next/swc-win32-ia32-msvc": {
231+ "version": "12.1.5",
232+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.5.tgz",
233+ "integrity": "sha512-a/51L5KzBpeZSW9LbekMo3I3Cwul+V+QKwbEIMA+Qwb2qrlcn1L9h3lt8cHqNTFt2y72ce6aTwDTw1lyi5oIRA==",
234+ "cpu": [
235+ "ia32"
236+ ],
237+ "optional": true,
238+ "os": [
239+ "win32"
240+ ],
241+ "engines": {
242+ "node": ">= 10"
243+ }
244+ },
245+ "node_modules/@next/swc-win32-x64-msvc": {
246+ "version": "12.1.5",
247+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.5.tgz",
248+ "integrity": "sha512-/SoXW1Ntpmpw3AXAzfDRaQidnd8kbZ2oSni8u5z0yw6t4RwJvmdZy1eOaAADRThWKV+2oU90++LSnXJIwBRWYQ==",
249+ "cpu": [
250+ "x64"
251+ ],
252+ "optional": true,
253+ "os": [
254+ "win32"
255+ ],
256+ "engines": {
257+ "node": ">= 10"
258+ }
259+ },
260+ "node_modules/@nodelib/fs.scandir": {
261+ "version": "2.1.5",
262+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
263+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
264+ "dependencies": {
265+ "@nodelib/fs.stat": "2.0.5",
266+ "run-parallel": "^1.1.9"
267+ },
268+ "engines": {
269+ "node": ">= 8"
270+ }
271+ },
272+ "node_modules/@nodelib/fs.stat": {
273+ "version": "2.0.5",
274+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
275+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
276+ "engines": {
277+ "node": ">= 8"
278+ }
279+ },
280+ "node_modules/@nodelib/fs.walk": {
281+ "version": "1.2.8",
282+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
283+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
284+ "dependencies": {
285+ "@nodelib/fs.scandir": "2.1.5",
286+ "fastq": "^1.6.0"
287+ },
288+ "engines": {
289+ "node": ">= 8"
290+ }
291+ },
292+ "node_modules/@socialgouv/matomo-next": {
293+ "version": "1.3.0",
294+ "resolved": "https://registry.npmjs.org/@socialgouv/matomo-next/-/matomo-next-1.3.0.tgz",
295+ "integrity": "sha512-1EWGFre4CudvcJPIaLYyAwHsGk8mMK5/IKztEIaU14uUifv117dlIJmcpJIVEow70AMY1VqRHh1x5z7Dx+H7dQ==",
296+ "peerDependencies": {
297+ "next": ">= 9.5.5"
298+ }
299+ },
300+ "node_modules/@tailwindcss/aspect-ratio": {
301+ "version": "0.4.0",
302+ "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.0.tgz",
303+ "integrity": "sha512-WJu0I4PpqNPuutpaA9zDUq2JXR+lorZ7PbLcKNLmb6GL9/HLfC7w3CRsMhJF4BbYd/lkY6CfXOvkYpuGnZfkpQ==",
304+ "peerDependencies": {
305+ "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
306+ }
307+ },
308+ "node_modules/@tlon/sigil-js": {
309+ "version": "1.4.5",
310+ "resolved": "https://registry.npmjs.org/@tlon/sigil-js/-/sigil-js-1.4.5.tgz",
311+ "integrity": "sha512-+Fn0EizPetjePaK+z8njjzE74wxzqIRLVM8W53Dlri6XU87wJ4vk82baVGgZQFAQs96rYM/f4WV7kCzuSxSMAw==",
312+ "dependencies": {
313+ "invariant": "^2.2.4",
314+ "svgson": "^4.0.0",
315+ "transformation-matrix": "2.1.1"
316+ },
317+ "peerDependencies": {
318+ "react": "^16 || ^17"
319+ }
320+ },
321+ "node_modules/@tootallnate/once": {
322+ "version": "1.1.2",
323+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
324+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
325+ "engines": {
326+ "node": ">= 6"
327+ }
328+ },
329+ "node_modules/@types/debug": {
330+ "version": "4.1.7",
331+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz",
332+ "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==",
333+ "dependencies": {
334+ "@types/ms": "*"
335+ }
336+ },
337+ "node_modules/@types/hast": {
338+ "version": "2.3.4",
339+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
340+ "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
341+ "dependencies": {
342+ "@types/unist": "*"
343+ }
344+ },
345+ "node_modules/@types/mdast": {
346+ "version": "3.0.10",
347+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
348+ "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
349+ "dependencies": {
350+ "@types/unist": "*"
351+ }
352+ },
353+ "node_modules/@types/mdurl": {
354+ "version": "1.0.2",
355+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
356+ "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA=="
357+ },
358+ "node_modules/@types/minimatch": {
359+ "version": "3.0.5",
360+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
361+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
362+ "dev": true
363+ },
364+ "node_modules/@types/ms": {
365+ "version": "0.7.31",
366+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
367+ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
368+ },
369+ "node_modules/@types/parse5": {
370+ "version": "6.0.3",
371+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
372+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
373+ },
374+ "node_modules/@types/unist": {
375+ "version": "2.0.6",
376+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
377+ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
378+ },
379+ "node_modules/abab": {
380+ "version": "2.0.6",
381+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
382+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
383+ },
384+ "node_modules/acorn": {
385+ "version": "8.7.0",
386+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
387+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
388+ "bin": {
389+ "acorn": "bin/acorn"
390+ },
391+ "engines": {
392+ "node": ">=0.4.0"
393+ }
394+ },
395+ "node_modules/acorn-globals": {
396+ "version": "6.0.0",
397+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
398+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
399+ "dependencies": {
400+ "acorn": "^7.1.1",
401+ "acorn-walk": "^7.1.1"
402+ }
403+ },
404+ "node_modules/acorn-globals/node_modules/acorn": {
405+ "version": "7.4.1",
406+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
407+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
408+ "bin": {
409+ "acorn": "bin/acorn"
410+ },
411+ "engines": {
412+ "node": ">=0.4.0"
413+ }
414+ },
415+ "node_modules/acorn-node": {
416+ "version": "1.8.2",
417+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
418+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
419+ "dependencies": {
420+ "acorn": "^7.0.0",
421+ "acorn-walk": "^7.0.0",
422+ "xtend": "^4.0.2"
423+ }
424+ },
425+ "node_modules/acorn-node/node_modules/acorn": {
426+ "version": "7.4.1",
427+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
428+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
429+ "bin": {
430+ "acorn": "bin/acorn"
431+ },
432+ "engines": {
433+ "node": ">=0.4.0"
434+ }
435+ },
436+ "node_modules/acorn-walk": {
437+ "version": "7.2.0",
438+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
439+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
440+ "engines": {
441+ "node": ">=0.4.0"
442+ }
443+ },
444+ "node_modules/agent-base": {
445+ "version": "6.0.2",
446+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
447+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
448+ "dependencies": {
449+ "debug": "4"
450+ },
451+ "engines": {
452+ "node": ">= 6.0.0"
453+ }
454+ },
455+ "node_modules/ansi-styles": {
456+ "version": "4.3.0",
457+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
458+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
459+ "dev": true,
460+ "dependencies": {
461+ "color-convert": "^2.0.1"
462+ },
463+ "engines": {
464+ "node": ">=8"
465+ },
466+ "funding": {
467+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
468+ }
469+ },
470+ "node_modules/anymatch": {
471+ "version": "3.1.2",
472+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
473+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
474+ "dependencies": {
475+ "normalize-path": "^3.0.0",
476+ "picomatch": "^2.0.4"
477+ },
478+ "engines": {
479+ "node": ">= 8"
480+ }
481+ },
482+ "node_modules/arg": {
483+ "version": "5.0.1",
484+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
485+ "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
486+ },
487+ "node_modules/argparse": {
488+ "version": "1.0.10",
489+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
490+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
491+ "dependencies": {
492+ "sprintf-js": "~1.0.2"
493+ }
494+ },
495+ "node_modules/array-differ": {
496+ "version": "3.0.0",
497+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
498+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
499+ "dev": true,
500+ "engines": {
501+ "node": ">=8"
502+ }
503+ },
504+ "node_modules/array-union": {
505+ "version": "2.1.0",
506+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
507+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
508+ "dev": true,
509+ "engines": {
510+ "node": ">=8"
511+ }
512+ },
513+ "node_modules/arrify": {
514+ "version": "2.0.1",
515+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
516+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
517+ "dev": true,
518+ "engines": {
519+ "node": ">=8"
520+ }
521+ },
522+ "node_modules/asynckit": {
523+ "version": "0.4.0",
524+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
525+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
526+ },
527+ "node_modules/autoprefixer": {
528+ "version": "10.4.5",
529+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz",
530+ "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==",
531+ "dev": true,
532+ "funding": [
533+ {
534+ "type": "opencollective",
535+ "url": "https://opencollective.com/postcss/"
536+ },
537+ {
538+ "type": "tidelift",
539+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
540+ }
541+ ],
542+ "dependencies": {
543+ "browserslist": "^4.20.2",
544+ "caniuse-lite": "^1.0.30001332",
545+ "fraction.js": "^4.2.0",
546+ "normalize-range": "^0.1.2",
547+ "picocolors": "^1.0.0",
548+ "postcss-value-parser": "^4.2.0"
549+ },
550+ "bin": {
551+ "autoprefixer": "bin/autoprefixer"
552+ },
553+ "engines": {
554+ "node": "^10 || ^12 || >=14"
555+ },
556+ "peerDependencies": {
557+ "postcss": "^8.1.0"
558+ }
559+ },
560+ "node_modules/axios": {
561+ "version": "0.26.1",
562+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
563+ "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
564+ "dependencies": {
565+ "follow-redirects": "^1.14.8"
566+ }
567+ },
568+ "node_modules/bail": {
569+ "version": "1.0.5",
570+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
571+ "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
572+ "funding": {
573+ "type": "github",
574+ "url": "https://github.com/sponsors/wooorm"
575+ }
576+ },
577+ "node_modules/balanced-match": {
578+ "version": "1.0.2",
579+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
580+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
581+ "dev": true
582+ },
583+ "node_modules/base64-js": {
584+ "version": "1.5.1",
585+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
586+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
587+ "funding": [
588+ {
589+ "type": "github",
590+ "url": "https://github.com/sponsors/feross"
591+ },
592+ {
593+ "type": "patreon",
594+ "url": "https://www.patreon.com/feross"
595+ },
596+ {
597+ "type": "consulting",
598+ "url": "https://feross.org/support"
599+ }
600+ ]
601+ },
602+ "node_modules/binary-extensions": {
603+ "version": "2.2.0",
604+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
605+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
606+ "engines": {
607+ "node": ">=8"
608+ }
609+ },
610+ "node_modules/bn.js": {
611+ "version": "4.12.0",
612+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
613+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
614+ },
615+ "node_modules/brace-expansion": {
616+ "version": "1.1.11",
617+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
618+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
619+ "dev": true,
620+ "dependencies": {
621+ "balanced-match": "^1.0.0",
622+ "concat-map": "0.0.1"
623+ }
624+ },
625+ "node_modules/braces": {
626+ "version": "3.0.2",
627+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
628+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
629+ "dependencies": {
630+ "fill-range": "^7.0.1"
631+ },
632+ "engines": {
633+ "node": ">=8"
634+ }
635+ },
636+ "node_modules/browser-process-hrtime": {
637+ "version": "1.0.0",
638+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
639+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
640+ },
641+ "node_modules/browserslist": {
642+ "version": "4.20.2",
643+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
644+ "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
645+ "dev": true,
646+ "funding": [
647+ {
648+ "type": "opencollective",
649+ "url": "https://opencollective.com/browserslist"
650+ },
651+ {
652+ "type": "tidelift",
653+ "url": "https://tidelift.com/funding/github/npm/browserslist"
654+ }
655+ ],
656+ "dependencies": {
657+ "caniuse-lite": "^1.0.30001317",
658+ "electron-to-chromium": "^1.4.84",
659+ "escalade": "^3.1.1",
660+ "node-releases": "^2.0.2",
661+ "picocolors": "^1.0.0"
662+ },
663+ "bin": {
664+ "browserslist": "cli.js"
665+ },
666+ "engines": {
667+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
668+ }
669+ },
670+ "node_modules/buffer": {
671+ "version": "6.0.3",
672+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
673+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
674+ "funding": [
675+ {
676+ "type": "github",
677+ "url": "https://github.com/sponsors/feross"
678+ },
679+ {
680+ "type": "patreon",
681+ "url": "https://www.patreon.com/feross"
682+ },
683+ {
684+ "type": "consulting",
685+ "url": "https://feross.org/support"
686+ }
687+ ],
688+ "dependencies": {
689+ "base64-js": "^1.3.1",
690+ "ieee754": "^1.2.1"
691+ }
692+ },
693+ "node_modules/camelcase-css": {
694+ "version": "2.0.1",
695+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
696+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
697+ "engines": {
698+ "node": ">= 6"
699+ }
700+ },
701+ "node_modules/caniuse-lite": {
702+ "version": "1.0.30001332",
703+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
704+ "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==",
705+ "funding": [
706+ {
707+ "type": "opencollective",
708+ "url": "https://opencollective.com/browserslist"
709+ },
710+ {
711+ "type": "tidelift",
712+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
713+ }
714+ ]
715+ },
716+ "node_modules/ccount": {
717+ "version": "2.0.1",
718+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
719+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
720+ "funding": {
721+ "type": "github",
722+ "url": "https://github.com/sponsors/wooorm"
723+ }
724+ },
725+ "node_modules/chalk": {
726+ "version": "3.0.0",
727+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
728+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
729+ "dev": true,
730+ "dependencies": {
731+ "ansi-styles": "^4.1.0",
732+ "supports-color": "^7.1.0"
733+ },
734+ "engines": {
735+ "node": ">=8"
736+ }
737+ },
738+ "node_modules/character-entities": {
739+ "version": "2.0.1",
740+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz",
741+ "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==",
742+ "funding": {
743+ "type": "github",
744+ "url": "https://github.com/sponsors/wooorm"
745+ }
746+ },
747+ "node_modules/character-entities-html4": {
748+ "version": "2.1.0",
749+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
750+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
751+ "funding": {
752+ "type": "github",
753+ "url": "https://github.com/sponsors/wooorm"
754+ }
755+ },
756+ "node_modules/character-entities-legacy": {
757+ "version": "3.0.0",
758+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
759+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
760+ "funding": {
761+ "type": "github",
762+ "url": "https://github.com/sponsors/wooorm"
763+ }
764+ },
765+ "node_modules/character-reference-invalid": {
766+ "version": "1.1.4",
767+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
768+ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
769+ "funding": {
770+ "type": "github",
771+ "url": "https://github.com/sponsors/wooorm"
772+ }
773+ },
774+ "node_modules/chokidar": {
775+ "version": "3.5.3",
776+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
777+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
778+ "funding": [
779+ {
780+ "type": "individual",
781+ "url": "https://paulmillr.com/funding/"
782+ }
783+ ],
784+ "dependencies": {
785+ "anymatch": "~3.1.2",
786+ "braces": "~3.0.2",
787+ "glob-parent": "~5.1.2",
788+ "is-binary-path": "~2.1.0",
789+ "is-glob": "~4.0.1",
790+ "normalize-path": "~3.0.0",
791+ "readdirp": "~3.6.0"
792+ },
793+ "engines": {
794+ "node": ">= 8.10.0"
795+ },
796+ "optionalDependencies": {
797+ "fsevents": "~2.3.2"
798+ }
799+ },
800+ "node_modules/chokidar/node_modules/glob-parent": {
801+ "version": "5.1.2",
802+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
803+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
804+ "dependencies": {
805+ "is-glob": "^4.0.1"
806+ },
807+ "engines": {
808+ "node": ">= 6"
809+ }
810+ },
811+ "node_modules/classnames": {
812+ "version": "2.3.1",
813+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
814+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
815+ },
816+ "node_modules/color-convert": {
817+ "version": "2.0.1",
818+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
819+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
820+ "dev": true,
821+ "dependencies": {
822+ "color-name": "~1.1.4"
823+ },
824+ "engines": {
825+ "node": ">=7.0.0"
826+ }
827+ },
828+ "node_modules/color-name": {
829+ "version": "1.1.4",
830+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
831+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
832+ },
833+ "node_modules/combined-stream": {
834+ "version": "1.0.8",
835+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
836+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
837+ "dependencies": {
838+ "delayed-stream": "~1.0.0"
839+ },
840+ "engines": {
841+ "node": ">= 0.8"
842+ }
843+ },
844+ "node_modules/comma-separated-tokens": {
845+ "version": "2.0.2",
846+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
847+ "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==",
848+ "funding": {
849+ "type": "github",
850+ "url": "https://github.com/sponsors/wooorm"
851+ }
852+ },
853+ "node_modules/compute-scroll-into-view": {
854+ "version": "1.0.17",
855+ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz",
856+ "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg=="
857+ },
858+ "node_modules/concat-map": {
859+ "version": "0.0.1",
860+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
861+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
862+ "dev": true
863+ },
864+ "node_modules/cross-spawn": {
865+ "version": "7.0.3",
866+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
867+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
868+ "dev": true,
869+ "dependencies": {
870+ "path-key": "^3.1.0",
871+ "shebang-command": "^2.0.0",
872+ "which": "^2.0.1"
873+ },
874+ "engines": {
875+ "node": ">= 8"
876+ }
877+ },
878+ "node_modules/css-selector-parser": {
879+ "version": "1.4.1",
880+ "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz",
881+ "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g=="
882+ },
883+ "node_modules/cssesc": {
884+ "version": "3.0.0",
885+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
886+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
887+ "bin": {
888+ "cssesc": "bin/cssesc"
889+ },
890+ "engines": {
891+ "node": ">=4"
892+ }
893+ },
894+ "node_modules/cssom": {
895+ "version": "0.4.4",
896+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
897+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
898+ },
899+ "node_modules/cssstyle": {
900+ "version": "2.3.0",
901+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
902+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
903+ "dependencies": {
904+ "cssom": "~0.3.6"
905+ },
906+ "engines": {
907+ "node": ">=8"
908+ }
909+ },
910+ "node_modules/cssstyle/node_modules/cssom": {
911+ "version": "0.3.8",
912+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
913+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
914+ },
915+ "node_modules/data-urls": {
916+ "version": "2.0.0",
917+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
918+ "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
919+ "dependencies": {
920+ "abab": "^2.0.3",
921+ "whatwg-mimetype": "^2.3.0",
922+ "whatwg-url": "^8.0.0"
923+ },
924+ "engines": {
925+ "node": ">=10"
926+ }
927+ },
928+ "node_modules/debug": {
929+ "version": "4.3.4",
930+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
931+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
932+ "dependencies": {
933+ "ms": "2.1.2"
934+ },
935+ "engines": {
936+ "node": ">=6.0"
937+ },
938+ "peerDependenciesMeta": {
939+ "supports-color": {
940+ "optional": true
941+ }
942+ }
943+ },
944+ "node_modules/decimal.js": {
945+ "version": "10.3.1",
946+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
947+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
948+ },
949+ "node_modules/decode-named-character-reference": {
950+ "version": "1.0.1",
951+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz",
952+ "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==",
953+ "dependencies": {
954+ "character-entities": "^2.0.0"
955+ },
956+ "funding": {
957+ "type": "github",
958+ "url": "https://github.com/sponsors/wooorm"
959+ }
960+ },
961+ "node_modules/deep-is": {
962+ "version": "0.1.4",
963+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
964+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
965+ },
966+ "node_modules/deep-rename-keys": {
967+ "version": "0.2.1",
968+ "resolved": "https://registry.npmjs.org/deep-rename-keys/-/deep-rename-keys-0.2.1.tgz",
969+ "integrity": "sha1-7eeFN9emaivmFRfir5Vtf1ij8dg=",
970+ "dependencies": {
971+ "kind-of": "^3.0.2",
972+ "rename-keys": "^1.1.2"
973+ },
974+ "engines": {
975+ "node": ">=0.10.0"
976+ }
977+ },
978+ "node_modules/deep-rename-keys/node_modules/is-buffer": {
979+ "version": "1.1.6",
980+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
981+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
982+ },
983+ "node_modules/deep-rename-keys/node_modules/kind-of": {
984+ "version": "3.2.2",
985+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
986+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
987+ "dependencies": {
988+ "is-buffer": "^1.1.5"
989+ },
990+ "engines": {
991+ "node": ">=0.10.0"
992+ }
993+ },
994+ "node_modules/deepmerge": {
995+ "version": "4.2.2",
996+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
997+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
998+ "engines": {
999+ "node": ">=0.10.0"
1000+ }
1001+ },
1002+ "node_modules/defined": {
1003+ "version": "1.0.0",
1004+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
1005+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
1006+ },
1007+ "node_modules/delayed-stream": {
1008+ "version": "1.0.0",
1009+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1010+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
1011+ "engines": {
1012+ "node": ">=0.4.0"
1013+ }
1014+ },
1015+ "node_modules/dequal": {
1016+ "version": "2.0.2",
1017+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz",
1018+ "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==",
1019+ "engines": {
1020+ "node": ">=6"
1021+ }
1022+ },
1023+ "node_modules/detective": {
1024+ "version": "5.2.0",
1025+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
1026+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
1027+ "dependencies": {
1028+ "acorn-node": "^1.6.1",
1029+ "defined": "^1.0.0",
1030+ "minimist": "^1.1.1"
1031+ },
1032+ "bin": {
1033+ "detective": "bin/detective.js"
1034+ },
1035+ "engines": {
1036+ "node": ">=0.8.0"
1037+ }
1038+ },
1039+ "node_modules/didyoumean": {
1040+ "version": "1.2.2",
1041+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1042+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
1043+ },
1044+ "node_modules/diff": {
1045+ "version": "5.0.0",
1046+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
1047+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
1048+ "engines": {
1049+ "node": ">=0.3.1"
1050+ }
1051+ },
1052+ "node_modules/dlv": {
1053+ "version": "1.1.3",
1054+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1055+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
1056+ },
1057+ "node_modules/domexception": {
1058+ "version": "2.0.1",
1059+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
1060+ "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
1061+ "dependencies": {
1062+ "webidl-conversions": "^5.0.0"
1063+ },
1064+ "engines": {
1065+ "node": ">=8"
1066+ }
1067+ },
1068+ "node_modules/domexception/node_modules/webidl-conversions": {
1069+ "version": "5.0.0",
1070+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
1071+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
1072+ "engines": {
1073+ "node": ">=8"
1074+ }
1075+ },
1076+ "node_modules/downshift": {
1077+ "version": "6.1.7",
1078+ "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
1079+ "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==",
1080+ "dependencies": {
1081+ "@babel/runtime": "^7.14.8",
1082+ "compute-scroll-into-view": "^1.0.17",
1083+ "prop-types": "^15.7.2",
1084+ "react-is": "^17.0.2",
1085+ "tslib": "^2.3.0"
1086+ },
1087+ "peerDependencies": {
1088+ "react": ">=16.12.0"
1089+ }
1090+ },
1091+ "node_modules/electron-to-chromium": {
1092+ "version": "1.4.118",
1093+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz",
1094+ "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==",
1095+ "dev": true
1096+ },
1097+ "node_modules/end-of-stream": {
1098+ "version": "1.4.4",
1099+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1100+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1101+ "dev": true,
1102+ "dependencies": {
1103+ "once": "^1.4.0"
1104+ }
1105+ },
1106+ "node_modules/enhanced-resolve": {
1107+ "version": "5.9.3",
1108+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
1109+ "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
1110+ "dev": true,
1111+ "dependencies": {
1112+ "graceful-fs": "^4.2.4",
1113+ "tapable": "^2.2.0"
1114+ },
1115+ "engines": {
1116+ "node": ">=10.13.0"
1117+ }
1118+ },
1119+ "node_modules/escalade": {
1120+ "version": "3.1.1",
1121+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1122+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1123+ "dev": true,
1124+ "engines": {
1125+ "node": ">=6"
1126+ }
1127+ },
1128+ "node_modules/escape-html": {
1129+ "version": "1.0.3",
1130+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1131+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
1132+ },
1133+ "node_modules/escape-string-regexp": {
1134+ "version": "5.0.0",
1135+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
1136+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
1137+ "engines": {
1138+ "node": ">=12"
1139+ },
1140+ "funding": {
1141+ "url": "https://github.com/sponsors/sindresorhus"
1142+ }
1143+ },
1144+ "node_modules/escodegen": {
1145+ "version": "2.0.0",
1146+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
1147+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
1148+ "dependencies": {
1149+ "esprima": "^4.0.1",
1150+ "estraverse": "^5.2.0",
1151+ "esutils": "^2.0.2",
1152+ "optionator": "^0.8.1"
1153+ },
1154+ "bin": {
1155+ "escodegen": "bin/escodegen.js",
1156+ "esgenerate": "bin/esgenerate.js"
1157+ },
1158+ "engines": {
1159+ "node": ">=6.0"
1160+ },
1161+ "optionalDependencies": {
1162+ "source-map": "~0.6.1"
1163+ }
1164+ },
1165+ "node_modules/esprima": {
1166+ "version": "4.0.1",
1167+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1168+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1169+ "bin": {
1170+ "esparse": "bin/esparse.js",
1171+ "esvalidate": "bin/esvalidate.js"
1172+ },
1173+ "engines": {
1174+ "node": ">=4"
1175+ }
1176+ },
1177+ "node_modules/estraverse": {
1178+ "version": "5.3.0",
1179+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1180+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1181+ "engines": {
1182+ "node": ">=4.0"
1183+ }
1184+ },
1185+ "node_modules/esutils": {
1186+ "version": "2.0.3",
1187+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1188+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1189+ "engines": {
1190+ "node": ">=0.10.0"
1191+ }
1192+ },
1193+ "node_modules/eventemitter3": {
1194+ "version": "2.0.3",
1195+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
1196+ "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
1197+ },
1198+ "node_modules/execa": {
1199+ "version": "4.1.0",
1200+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
1201+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
1202+ "dev": true,
1203+ "dependencies": {
1204+ "cross-spawn": "^7.0.0",
1205+ "get-stream": "^5.0.0",
1206+ "human-signals": "^1.1.1",
1207+ "is-stream": "^2.0.0",
1208+ "merge-stream": "^2.0.0",
1209+ "npm-run-path": "^4.0.0",
1210+ "onetime": "^5.1.0",
1211+ "signal-exit": "^3.0.2",
1212+ "strip-final-newline": "^2.0.0"
1213+ },
1214+ "engines": {
1215+ "node": ">=10"
1216+ },
1217+ "funding": {
1218+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
1219+ }
1220+ },
1221+ "node_modules/extend": {
1222+ "version": "3.0.2",
1223+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1224+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1225+ },
1226+ "node_modules/extend-shallow": {
1227+ "version": "2.0.1",
1228+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1229+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1230+ "dependencies": {
1231+ "is-extendable": "^0.1.0"
1232+ },
1233+ "engines": {
1234+ "node": ">=0.10.0"
1235+ }
1236+ },
1237+ "node_modules/fast-glob": {
1238+ "version": "3.2.11",
1239+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
1240+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
1241+ "dependencies": {
1242+ "@nodelib/fs.stat": "^2.0.2",
1243+ "@nodelib/fs.walk": "^1.2.3",
1244+ "glob-parent": "^5.1.2",
1245+ "merge2": "^1.3.0",
1246+ "micromatch": "^4.0.4"
1247+ },
1248+ "engines": {
1249+ "node": ">=8.6.0"
1250+ }
1251+ },
1252+ "node_modules/fast-glob/node_modules/glob-parent": {
1253+ "version": "5.1.2",
1254+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1255+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1256+ "dependencies": {
1257+ "is-glob": "^4.0.1"
1258+ },
1259+ "engines": {
1260+ "node": ">= 6"
1261+ }
1262+ },
1263+ "node_modules/fast-levenshtein": {
1264+ "version": "2.0.6",
1265+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1266+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
1267+ },
1268+ "node_modules/fastq": {
1269+ "version": "1.13.0",
1270+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
1271+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
1272+ "dependencies": {
1273+ "reusify": "^1.0.4"
1274+ }
1275+ },
1276+ "node_modules/feed": {
1277+ "version": "4.2.2",
1278+ "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz",
1279+ "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==",
1280+ "dependencies": {
1281+ "xml-js": "^1.6.11"
1282+ },
1283+ "engines": {
1284+ "node": ">=0.4.0"
1285+ }
1286+ },
1287+ "node_modules/fill-range": {
1288+ "version": "7.0.1",
1289+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1290+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1291+ "dependencies": {
1292+ "to-regex-range": "^5.0.1"
1293+ },
1294+ "engines": {
1295+ "node": ">=8"
1296+ }
1297+ },
1298+ "node_modules/find-up": {
1299+ "version": "4.1.0",
1300+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
1301+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
1302+ "dev": true,
1303+ "dependencies": {
1304+ "locate-path": "^5.0.0",
1305+ "path-exists": "^4.0.0"
1306+ },
1307+ "engines": {
1308+ "node": ">=8"
1309+ }
1310+ },
1311+ "node_modules/follow-redirects": {
1312+ "version": "1.14.9",
1313+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
1314+ "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
1315+ "funding": [
1316+ {
1317+ "type": "individual",
1318+ "url": "https://github.com/sponsors/RubenVerborgh"
1319+ }
1320+ ],
1321+ "engines": {
1322+ "node": ">=4.0"
1323+ },
1324+ "peerDependenciesMeta": {
1325+ "debug": {
1326+ "optional": true
1327+ }
1328+ }
1329+ },
1330+ "node_modules/form-data": {
1331+ "version": "3.0.1",
1332+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
1333+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
1334+ "dependencies": {
1335+ "asynckit": "^0.4.0",
1336+ "combined-stream": "^1.0.8",
1337+ "mime-types": "^2.1.12"
1338+ },
1339+ "engines": {
1340+ "node": ">= 6"
1341+ }
1342+ },
1343+ "node_modules/fraction.js": {
1344+ "version": "4.2.0",
1345+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
1346+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
1347+ "dev": true,
1348+ "engines": {
1349+ "node": "*"
1350+ },
1351+ "funding": {
1352+ "type": "patreon",
1353+ "url": "https://www.patreon.com/infusion"
1354+ }
1355+ },
1356+ "node_modules/fsevents": {
1357+ "version": "2.3.2",
1358+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1359+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1360+ "hasInstallScript": true,
1361+ "optional": true,
1362+ "os": [
1363+ "darwin"
1364+ ],
1365+ "engines": {
1366+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1367+ }
1368+ },
1369+ "node_modules/function-bind": {
1370+ "version": "1.1.1",
1371+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1372+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1373+ },
1374+ "node_modules/fuzzy-search": {
1375+ "version": "3.2.1",
1376+ "resolved": "https://registry.npmjs.org/fuzzy-search/-/fuzzy-search-3.2.1.tgz",
1377+ "integrity": "sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg=="
1378+ },
1379+ "node_modules/get-stream": {
1380+ "version": "5.2.0",
1381+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
1382+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
1383+ "dev": true,
1384+ "dependencies": {
1385+ "pump": "^3.0.0"
1386+ },
1387+ "engines": {
1388+ "node": ">=8"
1389+ },
1390+ "funding": {
1391+ "url": "https://github.com/sponsors/sindresorhus"
1392+ }
1393+ },
1394+ "node_modules/get-value": {
1395+ "version": "2.0.6",
1396+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
1397+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
1398+ "engines": {
1399+ "node": ">=0.10.0"
1400+ }
1401+ },
1402+ "node_modules/github-slugger": {
1403+ "version": "1.4.0",
1404+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz",
1405+ "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ=="
1406+ },
1407+ "node_modules/glob-parent": {
1408+ "version": "6.0.2",
1409+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1410+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1411+ "dependencies": {
1412+ "is-glob": "^4.0.3"
1413+ },
1414+ "engines": {
1415+ "node": ">=10.13.0"
1416+ }
1417+ },
1418+ "node_modules/graceful-fs": {
1419+ "version": "4.2.10",
1420+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1421+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
1422+ "dev": true
1423+ },
1424+ "node_modules/gray-matter": {
1425+ "version": "4.0.3",
1426+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
1427+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
1428+ "dependencies": {
1429+ "js-yaml": "^3.13.1",
1430+ "kind-of": "^6.0.2",
1431+ "section-matter": "^1.0.0",
1432+ "strip-bom-string": "^1.0.0"
1433+ },
1434+ "engines": {
1435+ "node": ">=6.0"
1436+ }
1437+ },
1438+ "node_modules/has": {
1439+ "version": "1.0.3",
1440+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1441+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1442+ "dependencies": {
1443+ "function-bind": "^1.1.1"
1444+ },
1445+ "engines": {
1446+ "node": ">= 0.4.0"
1447+ }
1448+ },
1449+ "node_modules/has-flag": {
1450+ "version": "4.0.0",
1451+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1452+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1453+ "dev": true,
1454+ "engines": {
1455+ "node": ">=8"
1456+ }
1457+ },
1458+ "node_modules/has-value": {
1459+ "version": "0.3.1",
1460+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
1461+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
1462+ "dependencies": {
1463+ "get-value": "^2.0.3",
1464+ "has-values": "^0.1.4",
1465+ "isobject": "^2.0.0"
1466+ },
1467+ "engines": {
1468+ "node": ">=0.10.0"
1469+ }
1470+ },
1471+ "node_modules/has-value/node_modules/isobject": {
1472+ "version": "2.1.0",
1473+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1474+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1475+ "dependencies": {
1476+ "isarray": "1.0.0"
1477+ },
1478+ "engines": {
1479+ "node": ">=0.10.0"
1480+ }
1481+ },
1482+ "node_modules/has-values": {
1483+ "version": "0.1.4",
1484+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
1485+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
1486+ "engines": {
1487+ "node": ">=0.10.0"
1488+ }
1489+ },
1490+ "node_modules/hast-to-hyperscript": {
1491+ "version": "10.0.1",
1492+ "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.1.tgz",
1493+ "integrity": "sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==",
1494+ "dependencies": {
1495+ "@types/unist": "^2.0.0",
1496+ "comma-separated-tokens": "^2.0.0",
1497+ "property-information": "^6.0.0",
1498+ "space-separated-tokens": "^2.0.0",
1499+ "style-to-object": "^0.3.0",
1500+ "unist-util-is": "^5.0.0",
1501+ "web-namespaces": "^2.0.0"
1502+ },
1503+ "funding": {
1504+ "type": "opencollective",
1505+ "url": "https://opencollective.com/unified"
1506+ }
1507+ },
1508+ "node_modules/hast-util-from-parse5": {
1509+ "version": "7.1.0",
1510+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz",
1511+ "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==",
1512+ "dependencies": {
1513+ "@types/hast": "^2.0.0",
1514+ "@types/parse5": "^6.0.0",
1515+ "@types/unist": "^2.0.0",
1516+ "hastscript": "^7.0.0",
1517+ "property-information": "^6.0.0",
1518+ "vfile": "^5.0.0",
1519+ "vfile-location": "^4.0.0",
1520+ "web-namespaces": "^2.0.0"
1521+ },
1522+ "funding": {
1523+ "type": "opencollective",
1524+ "url": "https://opencollective.com/unified"
1525+ }
1526+ },
1527+ "node_modules/hast-util-is-element": {
1528+ "version": "2.1.2",
1529+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
1530+ "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
1531+ "dependencies": {
1532+ "@types/hast": "^2.0.0",
1533+ "@types/unist": "^2.0.0"
1534+ },
1535+ "funding": {
1536+ "type": "opencollective",
1537+ "url": "https://opencollective.com/unified"
1538+ }
1539+ },
1540+ "node_modules/hast-util-parse-selector": {
1541+ "version": "3.1.0",
1542+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz",
1543+ "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==",
1544+ "dependencies": {
1545+ "@types/hast": "^2.0.0"
1546+ },
1547+ "funding": {
1548+ "type": "opencollective",
1549+ "url": "https://opencollective.com/unified"
1550+ }
1551+ },
1552+ "node_modules/hast-util-raw": {
1553+ "version": "7.2.1",
1554+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.1.tgz",
1555+ "integrity": "sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==",
1556+ "dependencies": {
1557+ "@types/hast": "^2.0.0",
1558+ "@types/parse5": "^6.0.0",
1559+ "hast-util-from-parse5": "^7.0.0",
1560+ "hast-util-to-parse5": "^7.0.0",
1561+ "html-void-elements": "^2.0.0",
1562+ "parse5": "^6.0.0",
1563+ "unist-util-position": "^4.0.0",
1564+ "unist-util-visit": "^4.0.0",
1565+ "vfile": "^5.0.0",
1566+ "web-namespaces": "^2.0.0",
1567+ "zwitch": "^2.0.0"
1568+ },
1569+ "funding": {
1570+ "type": "opencollective",
1571+ "url": "https://opencollective.com/unified"
1572+ }
1573+ },
1574+ "node_modules/hast-util-sanitize": {
1575+ "version": "3.0.2",
1576+ "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-3.0.2.tgz",
1577+ "integrity": "sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA==",
1578+ "dependencies": {
1579+ "xtend": "^4.0.0"
1580+ },
1581+ "funding": {
1582+ "type": "opencollective",
1583+ "url": "https://opencollective.com/unified"
1584+ }
1585+ },
1586+ "node_modules/hast-util-to-html": {
1587+ "version": "8.0.3",
1588+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
1589+ "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
1590+ "dependencies": {
1591+ "@types/hast": "^2.0.0",
1592+ "ccount": "^2.0.0",
1593+ "comma-separated-tokens": "^2.0.0",
1594+ "hast-util-is-element": "^2.0.0",
1595+ "hast-util-whitespace": "^2.0.0",
1596+ "html-void-elements": "^2.0.0",
1597+ "property-information": "^6.0.0",
1598+ "space-separated-tokens": "^2.0.0",
1599+ "stringify-entities": "^4.0.2",
1600+ "unist-util-is": "^5.0.0"
1601+ },
1602+ "funding": {
1603+ "type": "opencollective",
1604+ "url": "https://opencollective.com/unified"
1605+ }
1606+ },
1607+ "node_modules/hast-util-to-parse5": {
1608+ "version": "7.0.0",
1609+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.0.0.tgz",
1610+ "integrity": "sha512-YHiS6aTaZ3N0Q3nxaY/Tj98D6kM8QX5Q8xqgg8G45zR7PvWnPGPP0vcKCgb/moIydEJ/QWczVrX0JODCVeoV7A==",
1611+ "dependencies": {
1612+ "@types/hast": "^2.0.0",
1613+ "@types/parse5": "^6.0.0",
1614+ "hast-to-hyperscript": "^10.0.0",
1615+ "property-information": "^6.0.0",
1616+ "web-namespaces": "^2.0.0",
1617+ "zwitch": "^2.0.0"
1618+ },
1619+ "funding": {
1620+ "type": "opencollective",
1621+ "url": "https://opencollective.com/unified"
1622+ }
1623+ },
1624+ "node_modules/hast-util-whitespace": {
1625+ "version": "2.0.0",
1626+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
1627+ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==",
1628+ "funding": {
1629+ "type": "opencollective",
1630+ "url": "https://opencollective.com/unified"
1631+ }
1632+ },
1633+ "node_modules/hastscript": {
1634+ "version": "7.0.2",
1635+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz",
1636+ "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==",
1637+ "dependencies": {
1638+ "@types/hast": "^2.0.0",
1639+ "comma-separated-tokens": "^2.0.0",
1640+ "hast-util-parse-selector": "^3.0.0",
1641+ "property-information": "^6.0.0",
1642+ "space-separated-tokens": "^2.0.0"
1643+ },
1644+ "funding": {
1645+ "type": "opencollective",
1646+ "url": "https://opencollective.com/unified"
1647+ }
1648+ },
1649+ "node_modules/html-encoding-sniffer": {
1650+ "version": "2.0.1",
1651+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
1652+ "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
1653+ "dependencies": {
1654+ "whatwg-encoding": "^1.0.5"
1655+ },
1656+ "engines": {
1657+ "node": ">=10"
1658+ }
1659+ },
1660+ "node_modules/html-entities": {
1661+ "version": "2.3.3",
1662+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
1663+ "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
1664+ },
1665+ "node_modules/html-void-elements": {
1666+ "version": "2.0.1",
1667+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
1668+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
1669+ "funding": {
1670+ "type": "github",
1671+ "url": "https://github.com/sponsors/wooorm"
1672+ }
1673+ },
1674+ "node_modules/http-proxy-agent": {
1675+ "version": "4.0.1",
1676+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
1677+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
1678+ "dependencies": {
1679+ "@tootallnate/once": "1",
1680+ "agent-base": "6",
1681+ "debug": "4"
1682+ },
1683+ "engines": {
1684+ "node": ">= 6"
1685+ }
1686+ },
1687+ "node_modules/https-proxy-agent": {
1688+ "version": "5.0.1",
1689+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
1690+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
1691+ "dependencies": {
1692+ "agent-base": "6",
1693+ "debug": "4"
1694+ },
1695+ "engines": {
1696+ "node": ">= 6"
1697+ }
1698+ },
1699+ "node_modules/human-signals": {
1700+ "version": "1.1.1",
1701+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
1702+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
1703+ "dev": true,
1704+ "engines": {
1705+ "node": ">=8.12.0"
1706+ }
1707+ },
1708+ "node_modules/husky": {
1709+ "version": "6.0.0",
1710+ "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz",
1711+ "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==",
1712+ "dev": true,
1713+ "bin": {
1714+ "husky": "lib/bin.js"
1715+ },
1716+ "funding": {
1717+ "url": "https://github.com/sponsors/typicode"
1718+ }
1719+ },
1720+ "node_modules/iconv-lite": {
1721+ "version": "0.4.24",
1722+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1723+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1724+ "dependencies": {
1725+ "safer-buffer": ">= 2.1.2 < 3"
1726+ },
1727+ "engines": {
1728+ "node": ">=0.10.0"
1729+ }
1730+ },
1731+ "node_modules/ieee754": {
1732+ "version": "1.2.1",
1733+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1734+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
1735+ "funding": [
1736+ {
1737+ "type": "github",
1738+ "url": "https://github.com/sponsors/feross"
1739+ },
1740+ {
1741+ "type": "patreon",
1742+ "url": "https://www.patreon.com/feross"
1743+ },
1744+ {
1745+ "type": "consulting",
1746+ "url": "https://feross.org/support"
1747+ }
1748+ ]
1749+ },
1750+ "node_modules/ignore": {
1751+ "version": "5.2.0",
1752+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
1753+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
1754+ "dev": true,
1755+ "engines": {
1756+ "node": ">= 4"
1757+ }
1758+ },
1759+ "node_modules/inherits": {
1760+ "version": "2.0.4",
1761+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1762+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1763+ },
1764+ "node_modules/inline-style-parser": {
1765+ "version": "0.1.1",
1766+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
1767+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
1768+ },
1769+ "node_modules/invariant": {
1770+ "version": "2.2.4",
1771+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
1772+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
1773+ "dependencies": {
1774+ "loose-envify": "^1.0.0"
1775+ }
1776+ },
1777+ "node_modules/is-alphabetical": {
1778+ "version": "1.0.4",
1779+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
1780+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
1781+ "funding": {
1782+ "type": "github",
1783+ "url": "https://github.com/sponsors/wooorm"
1784+ }
1785+ },
1786+ "node_modules/is-alphanumerical": {
1787+ "version": "1.0.4",
1788+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
1789+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
1790+ "dependencies": {
1791+ "is-alphabetical": "^1.0.0",
1792+ "is-decimal": "^1.0.0"
1793+ },
1794+ "funding": {
1795+ "type": "github",
1796+ "url": "https://github.com/sponsors/wooorm"
1797+ }
1798+ },
1799+ "node_modules/is-binary-path": {
1800+ "version": "2.1.0",
1801+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1802+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1803+ "dependencies": {
1804+ "binary-extensions": "^2.0.0"
1805+ },
1806+ "engines": {
1807+ "node": ">=8"
1808+ }
1809+ },
1810+ "node_modules/is-buffer": {
1811+ "version": "2.0.5",
1812+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
1813+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
1814+ "funding": [
1815+ {
1816+ "type": "github",
1817+ "url": "https://github.com/sponsors/feross"
1818+ },
1819+ {
1820+ "type": "patreon",
1821+ "url": "https://www.patreon.com/feross"
1822+ },
1823+ {
1824+ "type": "consulting",
1825+ "url": "https://feross.org/support"
1826+ }
1827+ ],
1828+ "engines": {
1829+ "node": ">=4"
1830+ }
1831+ },
1832+ "node_modules/is-core-module": {
1833+ "version": "2.9.0",
1834+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
1835+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
1836+ "dependencies": {
1837+ "has": "^1.0.3"
1838+ },
1839+ "funding": {
1840+ "url": "https://github.com/sponsors/ljharb"
1841+ }
1842+ },
1843+ "node_modules/is-decimal": {
1844+ "version": "1.0.4",
1845+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
1846+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
1847+ "funding": {
1848+ "type": "github",
1849+ "url": "https://github.com/sponsors/wooorm"
1850+ }
1851+ },
1852+ "node_modules/is-extendable": {
1853+ "version": "0.1.1",
1854+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1855+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1856+ "engines": {
1857+ "node": ">=0.10.0"
1858+ }
1859+ },
1860+ "node_modules/is-extglob": {
1861+ "version": "2.1.1",
1862+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1863+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1864+ "engines": {
1865+ "node": ">=0.10.0"
1866+ }
1867+ },
1868+ "node_modules/is-glob": {
1869+ "version": "4.0.3",
1870+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1871+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1872+ "dependencies": {
1873+ "is-extglob": "^2.1.1"
1874+ },
1875+ "engines": {
1876+ "node": ">=0.10.0"
1877+ }
1878+ },
1879+ "node_modules/is-hexadecimal": {
1880+ "version": "1.0.4",
1881+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
1882+ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
1883+ "funding": {
1884+ "type": "github",
1885+ "url": "https://github.com/sponsors/wooorm"
1886+ }
1887+ },
1888+ "node_modules/is-number": {
1889+ "version": "7.0.0",
1890+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1891+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1892+ "engines": {
1893+ "node": ">=0.12.0"
1894+ }
1895+ },
1896+ "node_modules/is-plain-obj": {
1897+ "version": "2.1.0",
1898+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
1899+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
1900+ "engines": {
1901+ "node": ">=8"
1902+ }
1903+ },
1904+ "node_modules/is-plain-object": {
1905+ "version": "2.0.4",
1906+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
1907+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
1908+ "dependencies": {
1909+ "isobject": "^3.0.1"
1910+ },
1911+ "engines": {
1912+ "node": ">=0.10.0"
1913+ }
1914+ },
1915+ "node_modules/is-potential-custom-element-name": {
1916+ "version": "1.0.1",
1917+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
1918+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
1919+ },
1920+ "node_modules/is-stream": {
1921+ "version": "2.0.1",
1922+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
1923+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
1924+ "dev": true,
1925+ "engines": {
1926+ "node": ">=8"
1927+ },
1928+ "funding": {
1929+ "url": "https://github.com/sponsors/sindresorhus"
1930+ }
1931+ },
1932+ "node_modules/isarray": {
1933+ "version": "1.0.0",
1934+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1935+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1936+ },
1937+ "node_modules/isexe": {
1938+ "version": "2.0.0",
1939+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1940+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1941+ "dev": true
1942+ },
1943+ "node_modules/isobject": {
1944+ "version": "3.0.1",
1945+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
1946+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
1947+ "engines": {
1948+ "node": ">=0.10.0"
1949+ }
1950+ },
1951+ "node_modules/js-tokens": {
1952+ "version": "4.0.0",
1953+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1954+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1955+ },
1956+ "node_modules/js-yaml": {
1957+ "version": "3.14.1",
1958+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
1959+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
1960+ "dependencies": {
1961+ "argparse": "^1.0.7",
1962+ "esprima": "^4.0.0"
1963+ },
1964+ "bin": {
1965+ "js-yaml": "bin/js-yaml.js"
1966+ }
1967+ },
1968+ "node_modules/jsdom": {
1969+ "version": "16.7.0",
1970+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
1971+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
1972+ "dependencies": {
1973+ "abab": "^2.0.5",
1974+ "acorn": "^8.2.4",
1975+ "acorn-globals": "^6.0.0",
1976+ "cssom": "^0.4.4",
1977+ "cssstyle": "^2.3.0",
1978+ "data-urls": "^2.0.0",
1979+ "decimal.js": "^10.2.1",
1980+ "domexception": "^2.0.1",
1981+ "escodegen": "^2.0.0",
1982+ "form-data": "^3.0.0",
1983+ "html-encoding-sniffer": "^2.0.1",
1984+ "http-proxy-agent": "^4.0.1",
1985+ "https-proxy-agent": "^5.0.0",
1986+ "is-potential-custom-element-name": "^1.0.1",
1987+ "nwsapi": "^2.2.0",
1988+ "parse5": "6.0.1",
1989+ "saxes": "^5.0.1",
1990+ "symbol-tree": "^3.2.4",
1991+ "tough-cookie": "^4.0.0",
1992+ "w3c-hr-time": "^1.0.2",
1993+ "w3c-xmlserializer": "^2.0.0",
1994+ "webidl-conversions": "^6.1.0",
1995+ "whatwg-encoding": "^1.0.5",
1996+ "whatwg-mimetype": "^2.3.0",
1997+ "whatwg-url": "^8.5.0",
1998+ "ws": "^7.4.6",
1999+ "xml-name-validator": "^3.0.0"
2000+ },
2001+ "engines": {
2002+ "node": ">=10"
2003+ },
2004+ "peerDependencies": {
2005+ "canvas": "^2.5.0"
2006+ },
2007+ "peerDependenciesMeta": {
2008+ "canvas": {
2009+ "optional": true
2010+ }
2011+ }
2012+ },
2013+ "node_modules/kind-of": {
2014+ "version": "6.0.3",
2015+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
2016+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
2017+ "engines": {
2018+ "node": ">=0.10.0"
2019+ }
2020+ },
2021+ "node_modules/kleur": {
2022+ "version": "4.1.4",
2023+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz",
2024+ "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==",
2025+ "engines": {
2026+ "node": ">=6"
2027+ }
2028+ },
2029+ "node_modules/levn": {
2030+ "version": "0.3.0",
2031+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
2032+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
2033+ "dependencies": {
2034+ "prelude-ls": "~1.1.2",
2035+ "type-check": "~0.3.2"
2036+ },
2037+ "engines": {
2038+ "node": ">= 0.8.0"
2039+ }
2040+ },
2041+ "node_modules/lilconfig": {
2042+ "version": "2.0.5",
2043+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
2044+ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
2045+ "engines": {
2046+ "node": ">=10"
2047+ }
2048+ },
2049+ "node_modules/locate-path": {
2050+ "version": "5.0.0",
2051+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
2052+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
2053+ "dev": true,
2054+ "dependencies": {
2055+ "p-locate": "^4.1.0"
2056+ },
2057+ "engines": {
2058+ "node": ">=8"
2059+ }
2060+ },
2061+ "node_modules/lodash": {
2062+ "version": "4.17.21",
2063+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
2064+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
2065+ },
2066+ "node_modules/lodash.chunk": {
2067+ "version": "4.2.0",
2068+ "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
2069+ "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw="
2070+ },
2071+ "node_modules/lodash.debounce": {
2072+ "version": "4.0.8",
2073+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
2074+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
2075+ },
2076+ "node_modules/lodash.isequal": {
2077+ "version": "4.5.0",
2078+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
2079+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
2080+ },
2081+ "node_modules/longest-streak": {
2082+ "version": "3.0.1",
2083+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz",
2084+ "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==",
2085+ "funding": {
2086+ "type": "github",
2087+ "url": "https://github.com/sponsors/wooorm"
2088+ }
2089+ },
2090+ "node_modules/loose-envify": {
2091+ "version": "1.4.0",
2092+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
2093+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
2094+ "dependencies": {
2095+ "js-tokens": "^3.0.0 || ^4.0.0"
2096+ },
2097+ "bin": {
2098+ "loose-envify": "cli.js"
2099+ }
2100+ },
2101+ "node_modules/luxon": {
2102+ "version": "2.3.2",
2103+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.3.2.tgz",
2104+ "integrity": "sha512-MlAQQVMFhGk4WUA6gpfsy0QycnKP0+NlCBJRVRNPxxSIbjrCbQ65nrpJD3FVyJNZLuJ0uoqL57ye6BmDYgHaSw==",
2105+ "engines": {
2106+ "node": ">=12"
2107+ }
2108+ },
2109+ "node_modules/markdown-table": {
2110+ "version": "3.0.2",
2111+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz",
2112+ "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==",
2113+ "funding": {
2114+ "type": "github",
2115+ "url": "https://github.com/sponsors/wooorm"
2116+ }
2117+ },
2118+ "node_modules/mdast-util-definitions": {
2119+ "version": "4.0.0",
2120+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz",
2121+ "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==",
2122+ "dependencies": {
2123+ "unist-util-visit": "^2.0.0"
2124+ },
2125+ "funding": {
2126+ "type": "opencollective",
2127+ "url": "https://opencollective.com/unified"
2128+ }
2129+ },
2130+ "node_modules/mdast-util-definitions/node_modules/unist-util-is": {
2131+ "version": "4.1.0",
2132+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
2133+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
2134+ "funding": {
2135+ "type": "opencollective",
2136+ "url": "https://opencollective.com/unified"
2137+ }
2138+ },
2139+ "node_modules/mdast-util-definitions/node_modules/unist-util-visit": {
2140+ "version": "2.0.3",
2141+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
2142+ "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
2143+ "dependencies": {
2144+ "@types/unist": "^2.0.0",
2145+ "unist-util-is": "^4.0.0",
2146+ "unist-util-visit-parents": "^3.0.0"
2147+ },
2148+ "funding": {
2149+ "type": "opencollective",
2150+ "url": "https://opencollective.com/unified"
2151+ }
2152+ },
2153+ "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": {
2154+ "version": "3.1.1",
2155+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
2156+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
2157+ "dependencies": {
2158+ "@types/unist": "^2.0.0",
2159+ "unist-util-is": "^4.0.0"
2160+ },
2161+ "funding": {
2162+ "type": "opencollective",
2163+ "url": "https://opencollective.com/unified"
2164+ }
2165+ },
2166+ "node_modules/mdast-util-find-and-replace": {
2167+ "version": "2.1.0",
2168+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz",
2169+ "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==",
2170+ "dependencies": {
2171+ "escape-string-regexp": "^5.0.0",
2172+ "unist-util-is": "^5.0.0",
2173+ "unist-util-visit-parents": "^4.0.0"
2174+ },
2175+ "funding": {
2176+ "type": "opencollective",
2177+ "url": "https://opencollective.com/unified"
2178+ }
2179+ },
2180+ "node_modules/mdast-util-from-markdown": {
2181+ "version": "1.2.0",
2182+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz",
2183+ "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==",
2184+ "dependencies": {
2185+ "@types/mdast": "^3.0.0",
2186+ "@types/unist": "^2.0.0",
2187+ "decode-named-character-reference": "^1.0.0",
2188+ "mdast-util-to-string": "^3.1.0",
2189+ "micromark": "^3.0.0",
2190+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
2191+ "micromark-util-decode-string": "^1.0.0",
2192+ "micromark-util-normalize-identifier": "^1.0.0",
2193+ "micromark-util-symbol": "^1.0.0",
2194+ "micromark-util-types": "^1.0.0",
2195+ "unist-util-stringify-position": "^3.0.0",
2196+ "uvu": "^0.5.0"
2197+ },
2198+ "funding": {
2199+ "type": "opencollective",
2200+ "url": "https://opencollective.com/unified"
2201+ }
2202+ },
2203+ "node_modules/mdast-util-gfm": {
2204+ "version": "2.0.1",
2205+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz",
2206+ "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==",
2207+ "dependencies": {
2208+ "mdast-util-from-markdown": "^1.0.0",
2209+ "mdast-util-gfm-autolink-literal": "^1.0.0",
2210+ "mdast-util-gfm-footnote": "^1.0.0",
2211+ "mdast-util-gfm-strikethrough": "^1.0.0",
2212+ "mdast-util-gfm-table": "^1.0.0",
2213+ "mdast-util-gfm-task-list-item": "^1.0.0",
2214+ "mdast-util-to-markdown": "^1.0.0"
2215+ },
2216+ "funding": {
2217+ "type": "opencollective",
2218+ "url": "https://opencollective.com/unified"
2219+ }
2220+ },
2221+ "node_modules/mdast-util-gfm-autolink-literal": {
2222+ "version": "1.0.2",
2223+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz",
2224+ "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==",
2225+ "dependencies": {
2226+ "@types/mdast": "^3.0.0",
2227+ "ccount": "^2.0.0",
2228+ "mdast-util-find-and-replace": "^2.0.0",
2229+ "micromark-util-character": "^1.0.0"
2230+ },
2231+ "funding": {
2232+ "type": "opencollective",
2233+ "url": "https://opencollective.com/unified"
2234+ }
2235+ },
2236+ "node_modules/mdast-util-gfm-footnote": {
2237+ "version": "1.0.1",
2238+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz",
2239+ "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==",
2240+ "dependencies": {
2241+ "@types/mdast": "^3.0.0",
2242+ "mdast-util-to-markdown": "^1.3.0",
2243+ "micromark-util-normalize-identifier": "^1.0.0"
2244+ },
2245+ "funding": {
2246+ "type": "opencollective",
2247+ "url": "https://opencollective.com/unified"
2248+ }
2249+ },
2250+ "node_modules/mdast-util-gfm-strikethrough": {
2251+ "version": "1.0.1",
2252+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz",
2253+ "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==",
2254+ "dependencies": {
2255+ "@types/mdast": "^3.0.0",
2256+ "mdast-util-to-markdown": "^1.3.0"
2257+ },
2258+ "funding": {
2259+ "type": "opencollective",
2260+ "url": "https://opencollective.com/unified"
2261+ }
2262+ },
2263+ "node_modules/mdast-util-gfm-table": {
2264+ "version": "1.0.4",
2265+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz",
2266+ "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==",
2267+ "dependencies": {
2268+ "markdown-table": "^3.0.0",
2269+ "mdast-util-from-markdown": "^1.0.0",
2270+ "mdast-util-to-markdown": "^1.3.0"
2271+ },
2272+ "funding": {
2273+ "type": "opencollective",
2274+ "url": "https://opencollective.com/unified"
2275+ }
2276+ },
2277+ "node_modules/mdast-util-gfm-task-list-item": {
2278+ "version": "1.0.1",
2279+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz",
2280+ "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==",
2281+ "dependencies": {
2282+ "@types/mdast": "^3.0.0",
2283+ "mdast-util-to-markdown": "^1.3.0"
2284+ },
2285+ "funding": {
2286+ "type": "opencollective",
2287+ "url": "https://opencollective.com/unified"
2288+ }
2289+ },
2290+ "node_modules/mdast-util-to-hast": {
2291+ "version": "10.2.0",
2292+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz",
2293+ "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==",
2294+ "dependencies": {
2295+ "@types/mdast": "^3.0.0",
2296+ "@types/unist": "^2.0.0",
2297+ "mdast-util-definitions": "^4.0.0",
2298+ "mdurl": "^1.0.0",
2299+ "unist-builder": "^2.0.0",
2300+ "unist-util-generated": "^1.0.0",
2301+ "unist-util-position": "^3.0.0",
2302+ "unist-util-visit": "^2.0.0"
2303+ },
2304+ "funding": {
2305+ "type": "opencollective",
2306+ "url": "https://opencollective.com/unified"
2307+ }
2308+ },
2309+ "node_modules/mdast-util-to-hast/node_modules/unist-util-is": {
2310+ "version": "4.1.0",
2311+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
2312+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
2313+ "funding": {
2314+ "type": "opencollective",
2315+ "url": "https://opencollective.com/unified"
2316+ }
2317+ },
2318+ "node_modules/mdast-util-to-hast/node_modules/unist-util-position": {
2319+ "version": "3.1.0",
2320+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
2321+ "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==",
2322+ "funding": {
2323+ "type": "opencollective",
2324+ "url": "https://opencollective.com/unified"
2325+ }
2326+ },
2327+ "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": {
2328+ "version": "2.0.3",
2329+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
2330+ "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
2331+ "dependencies": {
2332+ "@types/unist": "^2.0.0",
2333+ "unist-util-is": "^4.0.0",
2334+ "unist-util-visit-parents": "^3.0.0"
2335+ },
2336+ "funding": {
2337+ "type": "opencollective",
2338+ "url": "https://opencollective.com/unified"
2339+ }
2340+ },
2341+ "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": {
2342+ "version": "3.1.1",
2343+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
2344+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
2345+ "dependencies": {
2346+ "@types/unist": "^2.0.0",
2347+ "unist-util-is": "^4.0.0"
2348+ },
2349+ "funding": {
2350+ "type": "opencollective",
2351+ "url": "https://opencollective.com/unified"
2352+ }
2353+ },
2354+ "node_modules/mdast-util-to-markdown": {
2355+ "version": "1.3.0",
2356+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz",
2357+ "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==",
2358+ "dependencies": {
2359+ "@types/mdast": "^3.0.0",
2360+ "@types/unist": "^2.0.0",
2361+ "longest-streak": "^3.0.0",
2362+ "mdast-util-to-string": "^3.0.0",
2363+ "micromark-util-decode-string": "^1.0.0",
2364+ "unist-util-visit": "^4.0.0",
2365+ "zwitch": "^2.0.0"
2366+ },
2367+ "funding": {
2368+ "type": "opencollective",
2369+ "url": "https://opencollective.com/unified"
2370+ }
2371+ },
2372+ "node_modules/mdast-util-to-string": {
2373+ "version": "3.1.0",
2374+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
2375+ "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==",
2376+ "funding": {
2377+ "type": "opencollective",
2378+ "url": "https://opencollective.com/unified"
2379+ }
2380+ },
2381+ "node_modules/mdurl": {
2382+ "version": "1.0.1",
2383+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
2384+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
2385+ },
2386+ "node_modules/merge-stream": {
2387+ "version": "2.0.0",
2388+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
2389+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
2390+ "dev": true
2391+ },
2392+ "node_modules/merge2": {
2393+ "version": "1.4.1",
2394+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2395+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2396+ "engines": {
2397+ "node": ">= 8"
2398+ }
2399+ },
2400+ "node_modules/micromark": {
2401+ "version": "3.0.10",
2402+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz",
2403+ "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==",
2404+ "funding": [
2405+ {
2406+ "type": "GitHub Sponsors",
2407+ "url": "https://github.com/sponsors/unifiedjs"
2408+ },
2409+ {
2410+ "type": "OpenCollective",
2411+ "url": "https://opencollective.com/unified"
2412+ }
2413+ ],
2414+ "dependencies": {
2415+ "@types/debug": "^4.0.0",
2416+ "debug": "^4.0.0",
2417+ "decode-named-character-reference": "^1.0.0",
2418+ "micromark-core-commonmark": "^1.0.1",
2419+ "micromark-factory-space": "^1.0.0",
2420+ "micromark-util-character": "^1.0.0",
2421+ "micromark-util-chunked": "^1.0.0",
2422+ "micromark-util-combine-extensions": "^1.0.0",
2423+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
2424+ "micromark-util-encode": "^1.0.0",
2425+ "micromark-util-normalize-identifier": "^1.0.0",
2426+ "micromark-util-resolve-all": "^1.0.0",
2427+ "micromark-util-sanitize-uri": "^1.0.0",
2428+ "micromark-util-subtokenize": "^1.0.0",
2429+ "micromark-util-symbol": "^1.0.0",
2430+ "micromark-util-types": "^1.0.1",
2431+ "uvu": "^0.5.0"
2432+ }
2433+ },
2434+ "node_modules/micromark-core-commonmark": {
2435+ "version": "1.0.6",
2436+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
2437+ "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
2438+ "funding": [
2439+ {
2440+ "type": "GitHub Sponsors",
2441+ "url": "https://github.com/sponsors/unifiedjs"
2442+ },
2443+ {
2444+ "type": "OpenCollective",
2445+ "url": "https://opencollective.com/unified"
2446+ }
2447+ ],
2448+ "dependencies": {
2449+ "decode-named-character-reference": "^1.0.0",
2450+ "micromark-factory-destination": "^1.0.0",
2451+ "micromark-factory-label": "^1.0.0",
2452+ "micromark-factory-space": "^1.0.0",
2453+ "micromark-factory-title": "^1.0.0",
2454+ "micromark-factory-whitespace": "^1.0.0",
2455+ "micromark-util-character": "^1.0.0",
2456+ "micromark-util-chunked": "^1.0.0",
2457+ "micromark-util-classify-character": "^1.0.0",
2458+ "micromark-util-html-tag-name": "^1.0.0",
2459+ "micromark-util-normalize-identifier": "^1.0.0",
2460+ "micromark-util-resolve-all": "^1.0.0",
2461+ "micromark-util-subtokenize": "^1.0.0",
2462+ "micromark-util-symbol": "^1.0.0",
2463+ "micromark-util-types": "^1.0.1",
2464+ "uvu": "^0.5.0"
2465+ }
2466+ },
2467+ "node_modules/micromark-extension-gfm": {
2468+ "version": "2.0.1",
2469+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz",
2470+ "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==",
2471+ "dependencies": {
2472+ "micromark-extension-gfm-autolink-literal": "^1.0.0",
2473+ "micromark-extension-gfm-footnote": "^1.0.0",
2474+ "micromark-extension-gfm-strikethrough": "^1.0.0",
2475+ "micromark-extension-gfm-table": "^1.0.0",
2476+ "micromark-extension-gfm-tagfilter": "^1.0.0",
2477+ "micromark-extension-gfm-task-list-item": "^1.0.0",
2478+ "micromark-util-combine-extensions": "^1.0.0",
2479+ "micromark-util-types": "^1.0.0"
2480+ },
2481+ "funding": {
2482+ "type": "opencollective",
2483+ "url": "https://opencollective.com/unified"
2484+ }
2485+ },
2486+ "node_modules/micromark-extension-gfm-autolink-literal": {
2487+ "version": "1.0.3",
2488+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz",
2489+ "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==",
2490+ "dependencies": {
2491+ "micromark-util-character": "^1.0.0",
2492+ "micromark-util-sanitize-uri": "^1.0.0",
2493+ "micromark-util-symbol": "^1.0.0",
2494+ "micromark-util-types": "^1.0.0",
2495+ "uvu": "^0.5.0"
2496+ },
2497+ "funding": {
2498+ "type": "opencollective",
2499+ "url": "https://opencollective.com/unified"
2500+ }
2501+ },
2502+ "node_modules/micromark-extension-gfm-footnote": {
2503+ "version": "1.0.4",
2504+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz",
2505+ "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==",
2506+ "dependencies": {
2507+ "micromark-core-commonmark": "^1.0.0",
2508+ "micromark-factory-space": "^1.0.0",
2509+ "micromark-util-character": "^1.0.0",
2510+ "micromark-util-normalize-identifier": "^1.0.0",
2511+ "micromark-util-sanitize-uri": "^1.0.0",
2512+ "micromark-util-symbol": "^1.0.0",
2513+ "micromark-util-types": "^1.0.0",
2514+ "uvu": "^0.5.0"
2515+ },
2516+ "funding": {
2517+ "type": "opencollective",
2518+ "url": "https://opencollective.com/unified"
2519+ }
2520+ },
2521+ "node_modules/micromark-extension-gfm-strikethrough": {
2522+ "version": "1.0.4",
2523+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz",
2524+ "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==",
2525+ "dependencies": {
2526+ "micromark-util-chunked": "^1.0.0",
2527+ "micromark-util-classify-character": "^1.0.0",
2528+ "micromark-util-resolve-all": "^1.0.0",
2529+ "micromark-util-symbol": "^1.0.0",
2530+ "micromark-util-types": "^1.0.0",
2531+ "uvu": "^0.5.0"
2532+ },
2533+ "funding": {
2534+ "type": "opencollective",
2535+ "url": "https://opencollective.com/unified"
2536+ }
2537+ },
2538+ "node_modules/micromark-extension-gfm-table": {
2539+ "version": "1.0.5",
2540+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz",
2541+ "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==",
2542+ "dependencies": {
2543+ "micromark-factory-space": "^1.0.0",
2544+ "micromark-util-character": "^1.0.0",
2545+ "micromark-util-symbol": "^1.0.0",
2546+ "micromark-util-types": "^1.0.0",
2547+ "uvu": "^0.5.0"
2548+ },
2549+ "funding": {
2550+ "type": "opencollective",
2551+ "url": "https://opencollective.com/unified"
2552+ }
2553+ },
2554+ "node_modules/micromark-extension-gfm-tagfilter": {
2555+ "version": "1.0.1",
2556+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz",
2557+ "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==",
2558+ "dependencies": {
2559+ "micromark-util-types": "^1.0.0"
2560+ },
2561+ "funding": {
2562+ "type": "opencollective",
2563+ "url": "https://opencollective.com/unified"
2564+ }
2565+ },
2566+ "node_modules/micromark-extension-gfm-task-list-item": {
2567+ "version": "1.0.3",
2568+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz",
2569+ "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==",
2570+ "dependencies": {
2571+ "micromark-factory-space": "^1.0.0",
2572+ "micromark-util-character": "^1.0.0",
2573+ "micromark-util-symbol": "^1.0.0",
2574+ "micromark-util-types": "^1.0.0",
2575+ "uvu": "^0.5.0"
2576+ },
2577+ "funding": {
2578+ "type": "opencollective",
2579+ "url": "https://opencollective.com/unified"
2580+ }
2581+ },
2582+ "node_modules/micromark-factory-destination": {
2583+ "version": "1.0.0",
2584+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz",
2585+ "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==",
2586+ "funding": [
2587+ {
2588+ "type": "GitHub Sponsors",
2589+ "url": "https://github.com/sponsors/unifiedjs"
2590+ },
2591+ {
2592+ "type": "OpenCollective",
2593+ "url": "https://opencollective.com/unified"
2594+ }
2595+ ],
2596+ "dependencies": {
2597+ "micromark-util-character": "^1.0.0",
2598+ "micromark-util-symbol": "^1.0.0",
2599+ "micromark-util-types": "^1.0.0"
2600+ }
2601+ },
2602+ "node_modules/micromark-factory-label": {
2603+ "version": "1.0.2",
2604+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
2605+ "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
2606+ "funding": [
2607+ {
2608+ "type": "GitHub Sponsors",
2609+ "url": "https://github.com/sponsors/unifiedjs"
2610+ },
2611+ {
2612+ "type": "OpenCollective",
2613+ "url": "https://opencollective.com/unified"
2614+ }
2615+ ],
2616+ "dependencies": {
2617+ "micromark-util-character": "^1.0.0",
2618+ "micromark-util-symbol": "^1.0.0",
2619+ "micromark-util-types": "^1.0.0",
2620+ "uvu": "^0.5.0"
2621+ }
2622+ },
2623+ "node_modules/micromark-factory-space": {
2624+ "version": "1.0.0",
2625+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz",
2626+ "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==",
2627+ "funding": [
2628+ {
2629+ "type": "GitHub Sponsors",
2630+ "url": "https://github.com/sponsors/unifiedjs"
2631+ },
2632+ {
2633+ "type": "OpenCollective",
2634+ "url": "https://opencollective.com/unified"
2635+ }
2636+ ],
2637+ "dependencies": {
2638+ "micromark-util-character": "^1.0.0",
2639+ "micromark-util-types": "^1.0.0"
2640+ }
2641+ },
2642+ "node_modules/micromark-factory-title": {
2643+ "version": "1.0.2",
2644+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
2645+ "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
2646+ "funding": [
2647+ {
2648+ "type": "GitHub Sponsors",
2649+ "url": "https://github.com/sponsors/unifiedjs"
2650+ },
2651+ {
2652+ "type": "OpenCollective",
2653+ "url": "https://opencollective.com/unified"
2654+ }
2655+ ],
2656+ "dependencies": {
2657+ "micromark-factory-space": "^1.0.0",
2658+ "micromark-util-character": "^1.0.0",
2659+ "micromark-util-symbol": "^1.0.0",
2660+ "micromark-util-types": "^1.0.0",
2661+ "uvu": "^0.5.0"
2662+ }
2663+ },
2664+ "node_modules/micromark-factory-whitespace": {
2665+ "version": "1.0.0",
2666+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz",
2667+ "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==",
2668+ "funding": [
2669+ {
2670+ "type": "GitHub Sponsors",
2671+ "url": "https://github.com/sponsors/unifiedjs"
2672+ },
2673+ {
2674+ "type": "OpenCollective",
2675+ "url": "https://opencollective.com/unified"
2676+ }
2677+ ],
2678+ "dependencies": {
2679+ "micromark-factory-space": "^1.0.0",
2680+ "micromark-util-character": "^1.0.0",
2681+ "micromark-util-symbol": "^1.0.0",
2682+ "micromark-util-types": "^1.0.0"
2683+ }
2684+ },
2685+ "node_modules/micromark-util-character": {
2686+ "version": "1.1.0",
2687+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz",
2688+ "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==",
2689+ "funding": [
2690+ {
2691+ "type": "GitHub Sponsors",
2692+ "url": "https://github.com/sponsors/unifiedjs"
2693+ },
2694+ {
2695+ "type": "OpenCollective",
2696+ "url": "https://opencollective.com/unified"
2697+ }
2698+ ],
2699+ "dependencies": {
2700+ "micromark-util-symbol": "^1.0.0",
2701+ "micromark-util-types": "^1.0.0"
2702+ }
2703+ },
2704+ "node_modules/micromark-util-chunked": {
2705+ "version": "1.0.0",
2706+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz",
2707+ "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==",
2708+ "funding": [
2709+ {
2710+ "type": "GitHub Sponsors",
2711+ "url": "https://github.com/sponsors/unifiedjs"
2712+ },
2713+ {
2714+ "type": "OpenCollective",
2715+ "url": "https://opencollective.com/unified"
2716+ }
2717+ ],
2718+ "dependencies": {
2719+ "micromark-util-symbol": "^1.0.0"
2720+ }
2721+ },
2722+ "node_modules/micromark-util-classify-character": {
2723+ "version": "1.0.0",
2724+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz",
2725+ "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==",
2726+ "funding": [
2727+ {
2728+ "type": "GitHub Sponsors",
2729+ "url": "https://github.com/sponsors/unifiedjs"
2730+ },
2731+ {
2732+ "type": "OpenCollective",
2733+ "url": "https://opencollective.com/unified"
2734+ }
2735+ ],
2736+ "dependencies": {
2737+ "micromark-util-character": "^1.0.0",
2738+ "micromark-util-symbol": "^1.0.0",
2739+ "micromark-util-types": "^1.0.0"
2740+ }
2741+ },
2742+ "node_modules/micromark-util-combine-extensions": {
2743+ "version": "1.0.0",
2744+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz",
2745+ "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==",
2746+ "funding": [
2747+ {
2748+ "type": "GitHub Sponsors",
2749+ "url": "https://github.com/sponsors/unifiedjs"
2750+ },
2751+ {
2752+ "type": "OpenCollective",
2753+ "url": "https://opencollective.com/unified"
2754+ }
2755+ ],
2756+ "dependencies": {
2757+ "micromark-util-chunked": "^1.0.0",
2758+ "micromark-util-types": "^1.0.0"
2759+ }
2760+ },
2761+ "node_modules/micromark-util-decode-numeric-character-reference": {
2762+ "version": "1.0.0",
2763+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz",
2764+ "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==",
2765+ "funding": [
2766+ {
2767+ "type": "GitHub Sponsors",
2768+ "url": "https://github.com/sponsors/unifiedjs"
2769+ },
2770+ {
2771+ "type": "OpenCollective",
2772+ "url": "https://opencollective.com/unified"
2773+ }
2774+ ],
2775+ "dependencies": {
2776+ "micromark-util-symbol": "^1.0.0"
2777+ }
2778+ },
2779+ "node_modules/micromark-util-decode-string": {
2780+ "version": "1.0.2",
2781+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
2782+ "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
2783+ "funding": [
2784+ {
2785+ "type": "GitHub Sponsors",
2786+ "url": "https://github.com/sponsors/unifiedjs"
2787+ },
2788+ {
2789+ "type": "OpenCollective",
2790+ "url": "https://opencollective.com/unified"
2791+ }
2792+ ],
2793+ "dependencies": {
2794+ "decode-named-character-reference": "^1.0.0",
2795+ "micromark-util-character": "^1.0.0",
2796+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
2797+ "micromark-util-symbol": "^1.0.0"
2798+ }
2799+ },
2800+ "node_modules/micromark-util-encode": {
2801+ "version": "1.0.1",
2802+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
2803+ "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==",
2804+ "funding": [
2805+ {
2806+ "type": "GitHub Sponsors",
2807+ "url": "https://github.com/sponsors/unifiedjs"
2808+ },
2809+ {
2810+ "type": "OpenCollective",
2811+ "url": "https://opencollective.com/unified"
2812+ }
2813+ ]
2814+ },
2815+ "node_modules/micromark-util-html-tag-name": {
2816+ "version": "1.0.0",
2817+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz",
2818+ "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==",
2819+ "funding": [
2820+ {
2821+ "type": "GitHub Sponsors",
2822+ "url": "https://github.com/sponsors/unifiedjs"
2823+ },
2824+ {
2825+ "type": "OpenCollective",
2826+ "url": "https://opencollective.com/unified"
2827+ }
2828+ ]
2829+ },
2830+ "node_modules/micromark-util-normalize-identifier": {
2831+ "version": "1.0.0",
2832+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz",
2833+ "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==",
2834+ "funding": [
2835+ {
2836+ "type": "GitHub Sponsors",
2837+ "url": "https://github.com/sponsors/unifiedjs"
2838+ },
2839+ {
2840+ "type": "OpenCollective",
2841+ "url": "https://opencollective.com/unified"
2842+ }
2843+ ],
2844+ "dependencies": {
2845+ "micromark-util-symbol": "^1.0.0"
2846+ }
2847+ },
2848+ "node_modules/micromark-util-resolve-all": {
2849+ "version": "1.0.0",
2850+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz",
2851+ "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==",
2852+ "funding": [
2853+ {
2854+ "type": "GitHub Sponsors",
2855+ "url": "https://github.com/sponsors/unifiedjs"
2856+ },
2857+ {
2858+ "type": "OpenCollective",
2859+ "url": "https://opencollective.com/unified"
2860+ }
2861+ ],
2862+ "dependencies": {
2863+ "micromark-util-types": "^1.0.0"
2864+ }
2865+ },
2866+ "node_modules/micromark-util-sanitize-uri": {
2867+ "version": "1.0.0",
2868+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz",
2869+ "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==",
2870+ "funding": [
2871+ {
2872+ "type": "GitHub Sponsors",
2873+ "url": "https://github.com/sponsors/unifiedjs"
2874+ },
2875+ {
2876+ "type": "OpenCollective",
2877+ "url": "https://opencollective.com/unified"
2878+ }
2879+ ],
2880+ "dependencies": {
2881+ "micromark-util-character": "^1.0.0",
2882+ "micromark-util-encode": "^1.0.0",
2883+ "micromark-util-symbol": "^1.0.0"
2884+ }
2885+ },
2886+ "node_modules/micromark-util-subtokenize": {
2887+ "version": "1.0.2",
2888+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
2889+ "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
2890+ "funding": [
2891+ {
2892+ "type": "GitHub Sponsors",
2893+ "url": "https://github.com/sponsors/unifiedjs"
2894+ },
2895+ {
2896+ "type": "OpenCollective",
2897+ "url": "https://opencollective.com/unified"
2898+ }
2899+ ],
2900+ "dependencies": {
2901+ "micromark-util-chunked": "^1.0.0",
2902+ "micromark-util-symbol": "^1.0.0",
2903+ "micromark-util-types": "^1.0.0",
2904+ "uvu": "^0.5.0"
2905+ }
2906+ },
2907+ "node_modules/micromark-util-symbol": {
2908+ "version": "1.0.1",
2909+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
2910+ "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==",
2911+ "funding": [
2912+ {
2913+ "type": "GitHub Sponsors",
2914+ "url": "https://github.com/sponsors/unifiedjs"
2915+ },
2916+ {
2917+ "type": "OpenCollective",
2918+ "url": "https://opencollective.com/unified"
2919+ }
2920+ ]
2921+ },
2922+ "node_modules/micromark-util-types": {
2923+ "version": "1.0.2",
2924+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
2925+ "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==",
2926+ "funding": [
2927+ {
2928+ "type": "GitHub Sponsors",
2929+ "url": "https://github.com/sponsors/unifiedjs"
2930+ },
2931+ {
2932+ "type": "OpenCollective",
2933+ "url": "https://opencollective.com/unified"
2934+ }
2935+ ]
2936+ },
2937+ "node_modules/micromatch": {
2938+ "version": "4.0.5",
2939+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
2940+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
2941+ "dependencies": {
2942+ "braces": "^3.0.2",
2943+ "picomatch": "^2.3.1"
2944+ },
2945+ "engines": {
2946+ "node": ">=8.6"
2947+ }
2948+ },
2949+ "node_modules/mime-db": {
2950+ "version": "1.52.0",
2951+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2952+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
2953+ "engines": {
2954+ "node": ">= 0.6"
2955+ }
2956+ },
2957+ "node_modules/mime-types": {
2958+ "version": "2.1.35",
2959+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2960+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2961+ "dependencies": {
2962+ "mime-db": "1.52.0"
2963+ },
2964+ "engines": {
2965+ "node": ">= 0.6"
2966+ }
2967+ },
2968+ "node_modules/mimic-fn": {
2969+ "version": "2.1.0",
2970+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
2971+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
2972+ "dev": true,
2973+ "engines": {
2974+ "node": ">=6"
2975+ }
2976+ },
2977+ "node_modules/minimatch": {
2978+ "version": "3.1.2",
2979+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2980+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2981+ "dev": true,
2982+ "dependencies": {
2983+ "brace-expansion": "^1.1.7"
2984+ },
2985+ "engines": {
2986+ "node": "*"
2987+ }
2988+ },
2989+ "node_modules/minimist": {
2990+ "version": "1.2.6",
2991+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
2992+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
2993+ },
2994+ "node_modules/mri": {
2995+ "version": "1.2.0",
2996+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
2997+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
2998+ "engines": {
2999+ "node": ">=4"
3000+ }
3001+ },
3002+ "node_modules/ms": {
3003+ "version": "2.1.2",
3004+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3005+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3006+ },
3007+ "node_modules/multimatch": {
3008+ "version": "4.0.0",
3009+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
3010+ "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
3011+ "dev": true,
3012+ "dependencies": {
3013+ "@types/minimatch": "^3.0.3",
3014+ "array-differ": "^3.0.0",
3015+ "array-union": "^2.1.0",
3016+ "arrify": "^2.0.1",
3017+ "minimatch": "^3.0.4"
3018+ },
3019+ "engines": {
3020+ "node": ">=8"
3021+ }
3022+ },
3023+ "node_modules/nanoid": {
3024+ "version": "3.3.3",
3025+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
3026+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
3027+ "bin": {
3028+ "nanoid": "bin/nanoid.cjs"
3029+ },
3030+ "engines": {
3031+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3032+ }
3033+ },
3034+ "node_modules/next": {
3035+ "version": "12.1.5",
3036+ "resolved": "https://registry.npmjs.org/next/-/next-12.1.5.tgz",
3037+ "integrity": "sha512-YGHDpyfgCfnT5GZObsKepmRnne7Kzp7nGrac07dikhutWQug7hHg85/+sPJ4ZW5Q2pDkb+n0FnmLkmd44htIJQ==",
3038+ "dependencies": {
3039+ "@next/env": "12.1.5",
3040+ "caniuse-lite": "^1.0.30001283",
3041+ "postcss": "8.4.5",
3042+ "styled-jsx": "5.0.1"
3043+ },
3044+ "bin": {
3045+ "next": "dist/bin/next"
3046+ },
3047+ "engines": {
3048+ "node": ">=12.22.0"
3049+ },
3050+ "optionalDependencies": {
3051+ "@next/swc-android-arm-eabi": "12.1.5",
3052+ "@next/swc-android-arm64": "12.1.5",
3053+ "@next/swc-darwin-arm64": "12.1.5",
3054+ "@next/swc-darwin-x64": "12.1.5",
3055+ "@next/swc-linux-arm-gnueabihf": "12.1.5",
3056+ "@next/swc-linux-arm64-gnu": "12.1.5",
3057+ "@next/swc-linux-arm64-musl": "12.1.5",
3058+ "@next/swc-linux-x64-gnu": "12.1.5",
3059+ "@next/swc-linux-x64-musl": "12.1.5",
3060+ "@next/swc-win32-arm64-msvc": "12.1.5",
3061+ "@next/swc-win32-ia32-msvc": "12.1.5",
3062+ "@next/swc-win32-x64-msvc": "12.1.5"
3063+ },
3064+ "peerDependencies": {
3065+ "fibers": ">= 3.1.0",
3066+ "node-sass": "^6.0.0 || ^7.0.0",
3067+ "react": "^17.0.2 || ^18.0.0-0",
3068+ "react-dom": "^17.0.2 || ^18.0.0-0",
3069+ "sass": "^1.3.0"
3070+ },
3071+ "peerDependenciesMeta": {
3072+ "fibers": {
3073+ "optional": true
3074+ },
3075+ "node-sass": {
3076+ "optional": true
3077+ },
3078+ "sass": {
3079+ "optional": true
3080+ }
3081+ }
3082+ },
3083+ "node_modules/next-transpile-modules": {
3084+ "version": "9.0.0",
3085+ "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-9.0.0.tgz",
3086+ "integrity": "sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ==",
3087+ "dev": true,
3088+ "dependencies": {
3089+ "enhanced-resolve": "^5.7.0",
3090+ "escalade": "^3.1.1"
3091+ }
3092+ },
3093+ "node_modules/next/node_modules/postcss": {
3094+ "version": "8.4.5",
3095+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
3096+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
3097+ "dependencies": {
3098+ "nanoid": "^3.1.30",
3099+ "picocolors": "^1.0.0",
3100+ "source-map-js": "^1.0.1"
3101+ },
3102+ "engines": {
3103+ "node": "^10 || ^12 || >=14"
3104+ },
3105+ "funding": {
3106+ "type": "opencollective",
3107+ "url": "https://opencollective.com/postcss/"
3108+ }
3109+ },
3110+ "node_modules/node-releases": {
3111+ "version": "2.0.3",
3112+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
3113+ "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
3114+ "dev": true
3115+ },
3116+ "node_modules/normalize-path": {
3117+ "version": "3.0.0",
3118+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3119+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
3120+ "engines": {
3121+ "node": ">=0.10.0"
3122+ }
3123+ },
3124+ "node_modules/normalize-range": {
3125+ "version": "0.1.2",
3126+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
3127+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
3128+ "dev": true,
3129+ "engines": {
3130+ "node": ">=0.10.0"
3131+ }
3132+ },
3133+ "node_modules/npm-run-path": {
3134+ "version": "4.0.1",
3135+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
3136+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
3137+ "dev": true,
3138+ "dependencies": {
3139+ "path-key": "^3.0.0"
3140+ },
3141+ "engines": {
3142+ "node": ">=8"
3143+ }
3144+ },
3145+ "node_modules/nwsapi": {
3146+ "version": "2.2.0",
3147+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
3148+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
3149+ },
3150+ "node_modules/object-assign": {
3151+ "version": "4.1.1",
3152+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
3153+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
3154+ "engines": {
3155+ "node": ">=0.10.0"
3156+ }
3157+ },
3158+ "node_modules/object-hash": {
3159+ "version": "3.0.0",
3160+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
3161+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
3162+ "engines": {
3163+ "node": ">= 6"
3164+ }
3165+ },
3166+ "node_modules/omit-deep": {
3167+ "version": "0.3.0",
3168+ "resolved": "https://registry.npmjs.org/omit-deep/-/omit-deep-0.3.0.tgz",
3169+ "integrity": "sha1-IcivNJm8rdKWUaIyy8rLxSRF6+w=",
3170+ "dependencies": {
3171+ "is-plain-object": "^2.0.1",
3172+ "unset-value": "^0.1.1"
3173+ },
3174+ "engines": {
3175+ "node": ">=0.10.0"
3176+ }
3177+ },
3178+ "node_modules/once": {
3179+ "version": "1.4.0",
3180+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3181+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
3182+ "dev": true,
3183+ "dependencies": {
3184+ "wrappy": "1"
3185+ }
3186+ },
3187+ "node_modules/onetime": {
3188+ "version": "5.1.2",
3189+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
3190+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
3191+ "dev": true,
3192+ "dependencies": {
3193+ "mimic-fn": "^2.1.0"
3194+ },
3195+ "engines": {
3196+ "node": ">=6"
3197+ },
3198+ "funding": {
3199+ "url": "https://github.com/sponsors/sindresorhus"
3200+ }
3201+ },
3202+ "node_modules/optionator": {
3203+ "version": "0.8.3",
3204+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
3205+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
3206+ "dependencies": {
3207+ "deep-is": "~0.1.3",
3208+ "fast-levenshtein": "~2.0.6",
3209+ "levn": "~0.3.0",
3210+ "prelude-ls": "~1.1.2",
3211+ "type-check": "~0.3.2",
3212+ "word-wrap": "~1.2.3"
3213+ },
3214+ "engines": {
3215+ "node": ">= 0.8.0"
3216+ }
3217+ },
3218+ "node_modules/p-limit": {
3219+ "version": "2.3.0",
3220+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
3221+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
3222+ "dev": true,
3223+ "dependencies": {
3224+ "p-try": "^2.0.0"
3225+ },
3226+ "engines": {
3227+ "node": ">=6"
3228+ },
3229+ "funding": {
3230+ "url": "https://github.com/sponsors/sindresorhus"
3231+ }
3232+ },
3233+ "node_modules/p-locate": {
3234+ "version": "4.1.0",
3235+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
3236+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
3237+ "dev": true,
3238+ "dependencies": {
3239+ "p-limit": "^2.2.0"
3240+ },
3241+ "engines": {
3242+ "node": ">=8"
3243+ }
3244+ },
3245+ "node_modules/p-try": {
3246+ "version": "2.2.0",
3247+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
3248+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
3249+ "dev": true,
3250+ "engines": {
3251+ "node": ">=6"
3252+ }
3253+ },
3254+ "node_modules/parse-entities": {
3255+ "version": "2.0.0",
3256+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
3257+ "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
3258+ "dependencies": {
3259+ "character-entities": "^1.0.0",
3260+ "character-entities-legacy": "^1.0.0",
3261+ "character-reference-invalid": "^1.0.0",
3262+ "is-alphanumerical": "^1.0.0",
3263+ "is-decimal": "^1.0.0",
3264+ "is-hexadecimal": "^1.0.0"
3265+ },
3266+ "funding": {
3267+ "type": "github",
3268+ "url": "https://github.com/sponsors/wooorm"
3269+ }
3270+ },
3271+ "node_modules/parse-entities/node_modules/character-entities": {
3272+ "version": "1.2.4",
3273+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
3274+ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
3275+ "funding": {
3276+ "type": "github",
3277+ "url": "https://github.com/sponsors/wooorm"
3278+ }
3279+ },
3280+ "node_modules/parse-entities/node_modules/character-entities-legacy": {
3281+ "version": "1.1.4",
3282+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
3283+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
3284+ "funding": {
3285+ "type": "github",
3286+ "url": "https://github.com/sponsors/wooorm"
3287+ }
3288+ },
3289+ "node_modules/parse-numeric-range": {
3290+ "version": "1.3.0",
3291+ "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz",
3292+ "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ=="
3293+ },
3294+ "node_modules/parse5": {
3295+ "version": "6.0.1",
3296+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
3297+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
3298+ },
3299+ "node_modules/parse5-htmlparser2-tree-adapter": {
3300+ "version": "6.0.1",
3301+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
3302+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
3303+ "dependencies": {
3304+ "parse5": "^6.0.1"
3305+ }
3306+ },
3307+ "node_modules/path-browserify": {
3308+ "version": "1.0.1",
3309+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
3310+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
3311+ },
3312+ "node_modules/path-exists": {
3313+ "version": "4.0.0",
3314+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
3315+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
3316+ "dev": true,
3317+ "engines": {
3318+ "node": ">=8"
3319+ }
3320+ },
3321+ "node_modules/path-key": {
3322+ "version": "3.1.1",
3323+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3324+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3325+ "dev": true,
3326+ "engines": {
3327+ "node": ">=8"
3328+ }
3329+ },
3330+ "node_modules/path-parse": {
3331+ "version": "1.0.7",
3332+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
3333+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
3334+ },
3335+ "node_modules/picocolors": {
3336+ "version": "1.0.0",
3337+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
3338+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
3339+ },
3340+ "node_modules/picomatch": {
3341+ "version": "2.3.1",
3342+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3343+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
3344+ "engines": {
3345+ "node": ">=8.6"
3346+ },
3347+ "funding": {
3348+ "url": "https://github.com/sponsors/jonschlinkert"
3349+ }
3350+ },
3351+ "node_modules/postcss": {
3352+ "version": "8.4.12",
3353+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
3354+ "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
3355+ "funding": [
3356+ {
3357+ "type": "opencollective",
3358+ "url": "https://opencollective.com/postcss/"
3359+ },
3360+ {
3361+ "type": "tidelift",
3362+ "url": "https://tidelift.com/funding/github/npm/postcss"
3363+ }
3364+ ],
3365+ "dependencies": {
3366+ "nanoid": "^3.3.1",
3367+ "picocolors": "^1.0.0",
3368+ "source-map-js": "^1.0.2"
3369+ },
3370+ "engines": {
3371+ "node": "^10 || ^12 || >=14"
3372+ }
3373+ },
3374+ "node_modules/postcss-js": {
3375+ "version": "4.0.0",
3376+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
3377+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
3378+ "dependencies": {
3379+ "camelcase-css": "^2.0.1"
3380+ },
3381+ "engines": {
3382+ "node": "^12 || ^14 || >= 16"
3383+ },
3384+ "funding": {
3385+ "type": "opencollective",
3386+ "url": "https://opencollective.com/postcss/"
3387+ },
3388+ "peerDependencies": {
3389+ "postcss": "^8.3.3"
3390+ }
3391+ },
3392+ "node_modules/postcss-load-config": {
3393+ "version": "3.1.4",
3394+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
3395+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
3396+ "dependencies": {
3397+ "lilconfig": "^2.0.5",
3398+ "yaml": "^1.10.2"
3399+ },
3400+ "engines": {
3401+ "node": ">= 10"
3402+ },
3403+ "funding": {
3404+ "type": "opencollective",
3405+ "url": "https://opencollective.com/postcss/"
3406+ },
3407+ "peerDependencies": {
3408+ "postcss": ">=8.0.9",
3409+ "ts-node": ">=9.0.0"
3410+ },
3411+ "peerDependenciesMeta": {
3412+ "postcss": {
3413+ "optional": true
3414+ },
3415+ "ts-node": {
3416+ "optional": true
3417+ }
3418+ }
3419+ },
3420+ "node_modules/postcss-nested": {
3421+ "version": "5.0.6",
3422+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
3423+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
3424+ "dependencies": {
3425+ "postcss-selector-parser": "^6.0.6"
3426+ },
3427+ "engines": {
3428+ "node": ">=12.0"
3429+ },
3430+ "funding": {
3431+ "type": "opencollective",
3432+ "url": "https://opencollective.com/postcss/"
3433+ },
3434+ "peerDependencies": {
3435+ "postcss": "^8.2.14"
3436+ }
3437+ },
3438+ "node_modules/postcss-selector-parser": {
3439+ "version": "6.0.10",
3440+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
3441+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
3442+ "dependencies": {
3443+ "cssesc": "^3.0.0",
3444+ "util-deprecate": "^1.0.2"
3445+ },
3446+ "engines": {
3447+ "node": ">=4"
3448+ }
3449+ },
3450+ "node_modules/postcss-value-parser": {
3451+ "version": "4.2.0",
3452+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
3453+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
3454+ },
3455+ "node_modules/prelude-ls": {
3456+ "version": "1.1.2",
3457+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
3458+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
3459+ "engines": {
3460+ "node": ">= 0.8.0"
3461+ }
3462+ },
3463+ "node_modules/prettier": {
3464+ "version": "2.6.2",
3465+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
3466+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
3467+ "dev": true,
3468+ "bin": {
3469+ "prettier": "bin-prettier.js"
3470+ },
3471+ "engines": {
3472+ "node": ">=10.13.0"
3473+ },
3474+ "funding": {
3475+ "url": "https://github.com/prettier/prettier?sponsor=1"
3476+ }
3477+ },
3478+ "node_modules/pretty-quick": {
3479+ "version": "3.1.3",
3480+ "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz",
3481+ "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==",
3482+ "dev": true,
3483+ "dependencies": {
3484+ "chalk": "^3.0.0",
3485+ "execa": "^4.0.0",
3486+ "find-up": "^4.1.0",
3487+ "ignore": "^5.1.4",
3488+ "mri": "^1.1.5",
3489+ "multimatch": "^4.0.0"
3490+ },
3491+ "bin": {
3492+ "pretty-quick": "bin/pretty-quick.js"
3493+ },
3494+ "engines": {
3495+ "node": ">=10.13"
3496+ },
3497+ "peerDependencies": {
3498+ "prettier": ">=2.0.0"
3499+ }
3500+ },
3501+ "node_modules/prismjs": {
3502+ "version": "1.28.0",
3503+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz",
3504+ "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==",
3505+ "engines": {
3506+ "node": ">=6"
3507+ }
3508+ },
3509+ "node_modules/process": {
3510+ "version": "0.11.10",
3511+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
3512+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
3513+ "engines": {
3514+ "node": ">= 0.6.0"
3515+ }
3516+ },
3517+ "node_modules/prop-types": {
3518+ "version": "15.8.1",
3519+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
3520+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
3521+ "dependencies": {
3522+ "loose-envify": "^1.4.0",
3523+ "object-assign": "^4.1.1",
3524+ "react-is": "^16.13.1"
3525+ }
3526+ },
3527+ "node_modules/prop-types/node_modules/react-is": {
3528+ "version": "16.13.1",
3529+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
3530+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
3531+ },
3532+ "node_modules/property-information": {
3533+ "version": "6.1.1",
3534+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
3535+ "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==",
3536+ "funding": {
3537+ "type": "github",
3538+ "url": "https://github.com/sponsors/wooorm"
3539+ }
3540+ },
3541+ "node_modules/psl": {
3542+ "version": "1.8.0",
3543+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
3544+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
3545+ },
3546+ "node_modules/pump": {
3547+ "version": "3.0.0",
3548+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
3549+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
3550+ "dev": true,
3551+ "dependencies": {
3552+ "end-of-stream": "^1.1.0",
3553+ "once": "^1.3.1"
3554+ }
3555+ },
3556+ "node_modules/punycode": {
3557+ "version": "2.1.1",
3558+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
3559+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
3560+ "engines": {
3561+ "node": ">=6"
3562+ }
3563+ },
3564+ "node_modules/queue-microtask": {
3565+ "version": "1.2.3",
3566+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
3567+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
3568+ "funding": [
3569+ {
3570+ "type": "github",
3571+ "url": "https://github.com/sponsors/feross"
3572+ },
3573+ {
3574+ "type": "patreon",
3575+ "url": "https://www.patreon.com/feross"
3576+ },
3577+ {
3578+ "type": "consulting",
3579+ "url": "https://feross.org/support"
3580+ }
3581+ ]
3582+ },
3583+ "node_modules/quick-lru": {
3584+ "version": "5.1.1",
3585+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
3586+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
3587+ "engines": {
3588+ "node": ">=10"
3589+ },
3590+ "funding": {
3591+ "url": "https://github.com/sponsors/sindresorhus"
3592+ }
3593+ },
3594+ "node_modules/react": {
3595+ "version": "17.0.2",
3596+ "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
3597+ "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
3598+ "dependencies": {
3599+ "loose-envify": "^1.1.0",
3600+ "object-assign": "^4.1.1"
3601+ },
3602+ "engines": {
3603+ "node": ">=0.10.0"
3604+ }
3605+ },
3606+ "node_modules/react-dom": {
3607+ "version": "17.0.2",
3608+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
3609+ "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
3610+ "dependencies": {
3611+ "loose-envify": "^1.1.0",
3612+ "object-assign": "^4.1.1",
3613+ "scheduler": "^0.20.2"
3614+ },
3615+ "peerDependencies": {
3616+ "react": "17.0.2"
3617+ }
3618+ },
3619+ "node_modules/react-hotkeys": {
3620+ "version": "2.0.0",
3621+ "resolved": "https://registry.npmjs.org/react-hotkeys/-/react-hotkeys-2.0.0.tgz",
3622+ "integrity": "sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q==",
3623+ "dependencies": {
3624+ "prop-types": "^15.6.1"
3625+ },
3626+ "peerDependencies": {
3627+ "react": ">= 0.14.0"
3628+ }
3629+ },
3630+ "node_modules/react-is": {
3631+ "version": "17.0.2",
3632+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
3633+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
3634+ },
3635+ "node_modules/react-swipeable": {
3636+ "version": "6.2.1",
3637+ "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.1.tgz",
3638+ "integrity": "sha512-JpTj+tjJTDcIWtoMkab6zfwWD1T1tBzUyEfXsXnohnNkwA2dTuNS0gtN7HoxU1Qa+e3GDnfNYk2z7vwzfO4SoQ==",
3639+ "peerDependencies": {
3640+ "react": "^16.8.3 || ^17"
3641+ }
3642+ },
3643+ "node_modules/react-use-localstorage": {
3644+ "version": "3.5.3",
3645+ "resolved": "https://registry.npmjs.org/react-use-localstorage/-/react-use-localstorage-3.5.3.tgz",
3646+ "integrity": "sha512-1oNvJmo72G4v5P9ytJZZTb6ywD3UzWBiainTtfbNlb+U08hc+SOD5HqgiLTKUF0MxGcIR9JSnZGmBttNLXaQYA==",
3647+ "peerDependencies": {
3648+ "react": ">=16.8.1"
3649+ }
3650+ },
3651+ "node_modules/readable-stream": {
3652+ "version": "3.6.0",
3653+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
3654+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
3655+ "dependencies": {
3656+ "inherits": "^2.0.3",
3657+ "string_decoder": "^1.1.1",
3658+ "util-deprecate": "^1.0.1"
3659+ },
3660+ "engines": {
3661+ "node": ">= 6"
3662+ }
3663+ },
3664+ "node_modules/readdirp": {
3665+ "version": "3.6.0",
3666+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3667+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3668+ "dependencies": {
3669+ "picomatch": "^2.2.1"
3670+ },
3671+ "engines": {
3672+ "node": ">=8.10.0"
3673+ }
3674+ },
3675+ "node_modules/regenerator-runtime": {
3676+ "version": "0.13.9",
3677+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
3678+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
3679+ },
3680+ "node_modules/rehype-raw": {
3681+ "version": "6.1.1",
3682+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz",
3683+ "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==",
3684+ "dependencies": {
3685+ "@types/hast": "^2.0.0",
3686+ "hast-util-raw": "^7.2.0",
3687+ "unified": "^10.0.0"
3688+ },
3689+ "funding": {
3690+ "type": "opencollective",
3691+ "url": "https://opencollective.com/unified"
3692+ }
3693+ },
3694+ "node_modules/rehype-raw/node_modules/bail": {
3695+ "version": "2.0.2",
3696+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
3697+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
3698+ "funding": {
3699+ "type": "github",
3700+ "url": "https://github.com/sponsors/wooorm"
3701+ }
3702+ },
3703+ "node_modules/rehype-raw/node_modules/is-plain-obj": {
3704+ "version": "4.0.0",
3705+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
3706+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
3707+ "engines": {
3708+ "node": ">=12"
3709+ },
3710+ "funding": {
3711+ "url": "https://github.com/sponsors/sindresorhus"
3712+ }
3713+ },
3714+ "node_modules/rehype-raw/node_modules/trough": {
3715+ "version": "2.1.0",
3716+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
3717+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
3718+ "funding": {
3719+ "type": "github",
3720+ "url": "https://github.com/sponsors/wooorm"
3721+ }
3722+ },
3723+ "node_modules/rehype-raw/node_modules/unified": {
3724+ "version": "10.1.2",
3725+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
3726+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
3727+ "dependencies": {
3728+ "@types/unist": "^2.0.0",
3729+ "bail": "^2.0.0",
3730+ "extend": "^3.0.0",
3731+ "is-buffer": "^2.0.0",
3732+ "is-plain-obj": "^4.0.0",
3733+ "trough": "^2.0.0",
3734+ "vfile": "^5.0.0"
3735+ },
3736+ "funding": {
3737+ "type": "opencollective",
3738+ "url": "https://opencollective.com/unified"
3739+ }
3740+ },
3741+ "node_modules/rehype-stringify": {
3742+ "version": "9.0.3",
3743+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
3744+ "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
3745+ "dependencies": {
3746+ "@types/hast": "^2.0.0",
3747+ "hast-util-to-html": "^8.0.0",
3748+ "unified": "^10.0.0"
3749+ },
3750+ "funding": {
3751+ "type": "opencollective",
3752+ "url": "https://opencollective.com/unified"
3753+ }
3754+ },
3755+ "node_modules/rehype-stringify/node_modules/bail": {
3756+ "version": "2.0.2",
3757+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
3758+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
3759+ "funding": {
3760+ "type": "github",
3761+ "url": "https://github.com/sponsors/wooorm"
3762+ }
3763+ },
3764+ "node_modules/rehype-stringify/node_modules/is-plain-obj": {
3765+ "version": "4.0.0",
3766+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
3767+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
3768+ "engines": {
3769+ "node": ">=12"
3770+ },
3771+ "funding": {
3772+ "url": "https://github.com/sponsors/sindresorhus"
3773+ }
3774+ },
3775+ "node_modules/rehype-stringify/node_modules/trough": {
3776+ "version": "2.1.0",
3777+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
3778+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
3779+ "funding": {
3780+ "type": "github",
3781+ "url": "https://github.com/sponsors/wooorm"
3782+ }
3783+ },
3784+ "node_modules/rehype-stringify/node_modules/unified": {
3785+ "version": "10.1.2",
3786+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
3787+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
3788+ "dependencies": {
3789+ "@types/unist": "^2.0.0",
3790+ "bail": "^2.0.0",
3791+ "extend": "^3.0.0",
3792+ "is-buffer": "^2.0.0",
3793+ "is-plain-obj": "^4.0.0",
3794+ "trough": "^2.0.0",
3795+ "vfile": "^5.0.0"
3796+ },
3797+ "funding": {
3798+ "type": "opencollective",
3799+ "url": "https://opencollective.com/unified"
3800+ }
3801+ },
3802+ "node_modules/remark": {
3803+ "version": "13.0.0",
3804+ "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz",
3805+ "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==",
3806+ "dependencies": {
3807+ "remark-parse": "^9.0.0",
3808+ "remark-stringify": "^9.0.0",
3809+ "unified": "^9.1.0"
3810+ },
3811+ "funding": {
3812+ "type": "opencollective",
3813+ "url": "https://opencollective.com/unified"
3814+ }
3815+ },
3816+ "node_modules/remark-gfm": {
3817+ "version": "3.0.1",
3818+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
3819+ "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
3820+ "dependencies": {
3821+ "@types/mdast": "^3.0.0",
3822+ "mdast-util-gfm": "^2.0.0",
3823+ "micromark-extension-gfm": "^2.0.0",
3824+ "unified": "^10.0.0"
3825+ },
3826+ "funding": {
3827+ "type": "opencollective",
3828+ "url": "https://opencollective.com/unified"
3829+ }
3830+ },
3831+ "node_modules/remark-gfm/node_modules/bail": {
3832+ "version": "2.0.2",
3833+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
3834+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
3835+ "funding": {
3836+ "type": "github",
3837+ "url": "https://github.com/sponsors/wooorm"
3838+ }
3839+ },
3840+ "node_modules/remark-gfm/node_modules/is-plain-obj": {
3841+ "version": "4.0.0",
3842+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
3843+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
3844+ "engines": {
3845+ "node": ">=12"
3846+ },
3847+ "funding": {
3848+ "url": "https://github.com/sponsors/sindresorhus"
3849+ }
3850+ },
3851+ "node_modules/remark-gfm/node_modules/trough": {
3852+ "version": "2.1.0",
3853+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
3854+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
3855+ "funding": {
3856+ "type": "github",
3857+ "url": "https://github.com/sponsors/wooorm"
3858+ }
3859+ },
3860+ "node_modules/remark-gfm/node_modules/unified": {
3861+ "version": "10.1.2",
3862+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
3863+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
3864+ "dependencies": {
3865+ "@types/unist": "^2.0.0",
3866+ "bail": "^2.0.0",
3867+ "extend": "^3.0.0",
3868+ "is-buffer": "^2.0.0",
3869+ "is-plain-obj": "^4.0.0",
3870+ "trough": "^2.0.0",
3871+ "vfile": "^5.0.0"
3872+ },
3873+ "funding": {
3874+ "type": "opencollective",
3875+ "url": "https://opencollective.com/unified"
3876+ }
3877+ },
3878+ "node_modules/remark-heading-id": {
3879+ "version": "1.0.0",
3880+ "resolved": "https://registry.npmjs.org/remark-heading-id/-/remark-heading-id-1.0.0.tgz",
3881+ "integrity": "sha512-86QaOiL+8jTV9P5Y0S25kSIcykCd/XmnqiFltWZRWKHmsVT4sevN7QJnkpUjkCJUpIeWte/LYH7pVlCTGz89fw==",
3882+ "dependencies": {
3883+ "unist-util-visit": "^1.4.0"
3884+ },
3885+ "engines": {
3886+ "node": ">=8"
3887+ }
3888+ },
3889+ "node_modules/remark-heading-id/node_modules/unist-util-is": {
3890+ "version": "3.0.0",
3891+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
3892+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="
3893+ },
3894+ "node_modules/remark-heading-id/node_modules/unist-util-visit": {
3895+ "version": "1.4.1",
3896+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
3897+ "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
3898+ "dependencies": {
3899+ "unist-util-visit-parents": "^2.0.0"
3900+ }
3901+ },
3902+ "node_modules/remark-heading-id/node_modules/unist-util-visit-parents": {
3903+ "version": "2.1.2",
3904+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
3905+ "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
3906+ "dependencies": {
3907+ "unist-util-is": "^3.0.0"
3908+ }
3909+ },
3910+ "node_modules/remark-html": {
3911+ "version": "13.0.2",
3912+ "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-13.0.2.tgz",
3913+ "integrity": "sha512-LhSRQ+3RKdBqB/RGesFWkNNfkGqprDUCwjq54SylfFeNyZby5kqOG8Dn/vYsRoM8htab6EWxFXCY6XIZvMoRiQ==",
3914+ "dependencies": {
3915+ "hast-util-sanitize": "^3.0.0",
3916+ "hast-util-to-html": "^7.0.0",
3917+ "mdast-util-to-hast": "^10.0.0"
3918+ },
3919+ "funding": {
3920+ "type": "opencollective",
3921+ "url": "https://opencollective.com/unified"
3922+ }
3923+ },
3924+ "node_modules/remark-html/node_modules/ccount": {
3925+ "version": "1.1.0",
3926+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
3927+ "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
3928+ "funding": {
3929+ "type": "github",
3930+ "url": "https://github.com/sponsors/wooorm"
3931+ }
3932+ },
3933+ "node_modules/remark-html/node_modules/character-entities-html4": {
3934+ "version": "1.1.4",
3935+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
3936+ "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
3937+ "funding": {
3938+ "type": "github",
3939+ "url": "https://github.com/sponsors/wooorm"
3940+ }
3941+ },
3942+ "node_modules/remark-html/node_modules/character-entities-legacy": {
3943+ "version": "1.1.4",
3944+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
3945+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
3946+ "funding": {
3947+ "type": "github",
3948+ "url": "https://github.com/sponsors/wooorm"
3949+ }
3950+ },
3951+ "node_modules/remark-html/node_modules/comma-separated-tokens": {
3952+ "version": "1.0.8",
3953+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
3954+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
3955+ "funding": {
3956+ "type": "github",
3957+ "url": "https://github.com/sponsors/wooorm"
3958+ }
3959+ },
3960+ "node_modules/remark-html/node_modules/hast-util-is-element": {
3961+ "version": "1.1.0",
3962+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
3963+ "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==",
3964+ "funding": {
3965+ "type": "opencollective",
3966+ "url": "https://opencollective.com/unified"
3967+ }
3968+ },
3969+ "node_modules/remark-html/node_modules/hast-util-to-html": {
3970+ "version": "7.1.3",
3971+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz",
3972+ "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==",
3973+ "dependencies": {
3974+ "ccount": "^1.0.0",
3975+ "comma-separated-tokens": "^1.0.0",
3976+ "hast-util-is-element": "^1.0.0",
3977+ "hast-util-whitespace": "^1.0.0",
3978+ "html-void-elements": "^1.0.0",
3979+ "property-information": "^5.0.0",
3980+ "space-separated-tokens": "^1.0.0",
3981+ "stringify-entities": "^3.0.1",
3982+ "unist-util-is": "^4.0.0",
3983+ "xtend": "^4.0.0"
3984+ },
3985+ "funding": {
3986+ "type": "opencollective",
3987+ "url": "https://opencollective.com/unified"
3988+ }
3989+ },
3990+ "node_modules/remark-html/node_modules/hast-util-whitespace": {
3991+ "version": "1.0.4",
3992+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
3993+ "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==",
3994+ "funding": {
3995+ "type": "opencollective",
3996+ "url": "https://opencollective.com/unified"
3997+ }
3998+ },
3999+ "node_modules/remark-html/node_modules/html-void-elements": {
4000+ "version": "1.0.5",
4001+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
4002+ "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
4003+ "funding": {
4004+ "type": "github",
4005+ "url": "https://github.com/sponsors/wooorm"
4006+ }
4007+ },
4008+ "node_modules/remark-html/node_modules/property-information": {
4009+ "version": "5.6.0",
4010+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
4011+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
4012+ "dependencies": {
4013+ "xtend": "^4.0.0"
4014+ },
4015+ "funding": {
4016+ "type": "github",
4017+ "url": "https://github.com/sponsors/wooorm"
4018+ }
4019+ },
4020+ "node_modules/remark-html/node_modules/space-separated-tokens": {
4021+ "version": "1.1.5",
4022+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
4023+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
4024+ "funding": {
4025+ "type": "github",
4026+ "url": "https://github.com/sponsors/wooorm"
4027+ }
4028+ },
4029+ "node_modules/remark-html/node_modules/stringify-entities": {
4030+ "version": "3.1.0",
4031+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz",
4032+ "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==",
4033+ "dependencies": {
4034+ "character-entities-html4": "^1.0.0",
4035+ "character-entities-legacy": "^1.0.0",
4036+ "xtend": "^4.0.0"
4037+ },
4038+ "funding": {
4039+ "type": "github",
4040+ "url": "https://github.com/sponsors/wooorm"
4041+ }
4042+ },
4043+ "node_modules/remark-html/node_modules/unist-util-is": {
4044+ "version": "4.1.0",
4045+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
4046+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
4047+ "funding": {
4048+ "type": "opencollective",
4049+ "url": "https://opencollective.com/unified"
4050+ }
4051+ },
4052+ "node_modules/remark-parse": {
4053+ "version": "10.0.1",
4054+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
4055+ "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
4056+ "dependencies": {
4057+ "@types/mdast": "^3.0.0",
4058+ "mdast-util-from-markdown": "^1.0.0",
4059+ "unified": "^10.0.0"
4060+ },
4061+ "funding": {
4062+ "type": "opencollective",
4063+ "url": "https://opencollective.com/unified"
4064+ }
4065+ },
4066+ "node_modules/remark-parse/node_modules/bail": {
4067+ "version": "2.0.2",
4068+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
4069+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
4070+ "funding": {
4071+ "type": "github",
4072+ "url": "https://github.com/sponsors/wooorm"
4073+ }
4074+ },
4075+ "node_modules/remark-parse/node_modules/is-plain-obj": {
4076+ "version": "4.0.0",
4077+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
4078+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
4079+ "engines": {
4080+ "node": ">=12"
4081+ },
4082+ "funding": {
4083+ "url": "https://github.com/sponsors/sindresorhus"
4084+ }
4085+ },
4086+ "node_modules/remark-parse/node_modules/trough": {
4087+ "version": "2.1.0",
4088+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
4089+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
4090+ "funding": {
4091+ "type": "github",
4092+ "url": "https://github.com/sponsors/wooorm"
4093+ }
4094+ },
4095+ "node_modules/remark-parse/node_modules/unified": {
4096+ "version": "10.1.2",
4097+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
4098+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
4099+ "dependencies": {
4100+ "@types/unist": "^2.0.0",
4101+ "bail": "^2.0.0",
4102+ "extend": "^3.0.0",
4103+ "is-buffer": "^2.0.0",
4104+ "is-plain-obj": "^4.0.0",
4105+ "trough": "^2.0.0",
4106+ "vfile": "^5.0.0"
4107+ },
4108+ "funding": {
4109+ "type": "opencollective",
4110+ "url": "https://opencollective.com/unified"
4111+ }
4112+ },
4113+ "node_modules/remark-prism": {
4114+ "version": "1.3.6",
4115+ "resolved": "https://registry.npmjs.org/remark-prism/-/remark-prism-1.3.6.tgz",
4116+ "integrity": "sha512-yYSXJ2MEK2DeD9UKDKFkQPcVqRx6aX2FYD1kE27ScogpZ/BBO8MoOO6gf/AKqfXvKGnP51wqvDEBmPseypgaug==",
4117+ "dependencies": {
4118+ "classnames": "^2.3.1",
4119+ "css-selector-parser": "^1.4.1",
4120+ "escape-html": "^1.0.3",
4121+ "jsdom": "^16.5.3",
4122+ "parse-numeric-range": "^1.2.0",
4123+ "parse5": "^6.0.1",
4124+ "parse5-htmlparser2-tree-adapter": "^6.0.1",
4125+ "prismjs": "^1.23.0",
4126+ "unist-util-map": "^2.0.1"
4127+ }
4128+ },
4129+ "node_modules/remark-rehype": {
4130+ "version": "10.1.0",
4131+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
4132+ "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
4133+ "dependencies": {
4134+ "@types/hast": "^2.0.0",
4135+ "@types/mdast": "^3.0.0",
4136+ "mdast-util-to-hast": "^12.1.0",
4137+ "unified": "^10.0.0"
4138+ },
4139+ "funding": {
4140+ "type": "opencollective",
4141+ "url": "https://opencollective.com/unified"
4142+ }
4143+ },
4144+ "node_modules/remark-rehype/node_modules/bail": {
4145+ "version": "2.0.2",
4146+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
4147+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
4148+ "funding": {
4149+ "type": "github",
4150+ "url": "https://github.com/sponsors/wooorm"
4151+ }
4152+ },
4153+ "node_modules/remark-rehype/node_modules/is-plain-obj": {
4154+ "version": "4.0.0",
4155+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
4156+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
4157+ "engines": {
4158+ "node": ">=12"
4159+ },
4160+ "funding": {
4161+ "url": "https://github.com/sponsors/sindresorhus"
4162+ }
4163+ },
4164+ "node_modules/remark-rehype/node_modules/mdast-util-definitions": {
4165+ "version": "5.1.0",
4166+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz",
4167+ "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==",
4168+ "dependencies": {
4169+ "@types/mdast": "^3.0.0",
4170+ "@types/unist": "^2.0.0",
4171+ "unist-util-visit": "^3.0.0"
4172+ },
4173+ "funding": {
4174+ "type": "opencollective",
4175+ "url": "https://opencollective.com/unified"
4176+ }
4177+ },
4178+ "node_modules/remark-rehype/node_modules/mdast-util-definitions/node_modules/unist-util-visit": {
4179+ "version": "3.1.0",
4180+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz",
4181+ "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==",
4182+ "dependencies": {
4183+ "@types/unist": "^2.0.0",
4184+ "unist-util-is": "^5.0.0",
4185+ "unist-util-visit-parents": "^4.0.0"
4186+ },
4187+ "funding": {
4188+ "type": "opencollective",
4189+ "url": "https://opencollective.com/unified"
4190+ }
4191+ },
4192+ "node_modules/remark-rehype/node_modules/mdast-util-to-hast": {
4193+ "version": "12.1.1",
4194+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz",
4195+ "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==",
4196+ "dependencies": {
4197+ "@types/hast": "^2.0.0",
4198+ "@types/mdast": "^3.0.0",
4199+ "@types/mdurl": "^1.0.0",
4200+ "mdast-util-definitions": "^5.0.0",
4201+ "mdurl": "^1.0.0",
4202+ "micromark-util-sanitize-uri": "^1.0.0",
4203+ "unist-builder": "^3.0.0",
4204+ "unist-util-generated": "^2.0.0",
4205+ "unist-util-position": "^4.0.0",
4206+ "unist-util-visit": "^4.0.0"
4207+ },
4208+ "funding": {
4209+ "type": "opencollective",
4210+ "url": "https://opencollective.com/unified"
4211+ }
4212+ },
4213+ "node_modules/remark-rehype/node_modules/trough": {
4214+ "version": "2.1.0",
4215+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
4216+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
4217+ "funding": {
4218+ "type": "github",
4219+ "url": "https://github.com/sponsors/wooorm"
4220+ }
4221+ },
4222+ "node_modules/remark-rehype/node_modules/unified": {
4223+ "version": "10.1.2",
4224+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
4225+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
4226+ "dependencies": {
4227+ "@types/unist": "^2.0.0",
4228+ "bail": "^2.0.0",
4229+ "extend": "^3.0.0",
4230+ "is-buffer": "^2.0.0",
4231+ "is-plain-obj": "^4.0.0",
4232+ "trough": "^2.0.0",
4233+ "vfile": "^5.0.0"
4234+ },
4235+ "funding": {
4236+ "type": "opencollective",
4237+ "url": "https://opencollective.com/unified"
4238+ }
4239+ },
4240+ "node_modules/remark-rehype/node_modules/unist-builder": {
4241+ "version": "3.0.0",
4242+ "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz",
4243+ "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==",
4244+ "dependencies": {
4245+ "@types/unist": "^2.0.0"
4246+ },
4247+ "funding": {
4248+ "type": "opencollective",
4249+ "url": "https://opencollective.com/unified"
4250+ }
4251+ },
4252+ "node_modules/remark-rehype/node_modules/unist-util-generated": {
4253+ "version": "2.0.0",
4254+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
4255+ "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==",
4256+ "funding": {
4257+ "type": "opencollective",
4258+ "url": "https://opencollective.com/unified"
4259+ }
4260+ },
4261+ "node_modules/remark-slug": {
4262+ "version": "6.1.0",
4263+ "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz",
4264+ "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==",
4265+ "dependencies": {
4266+ "github-slugger": "^1.0.0",
4267+ "mdast-util-to-string": "^1.0.0",
4268+ "unist-util-visit": "^2.0.0"
4269+ },
4270+ "funding": {
4271+ "type": "opencollective",
4272+ "url": "https://opencollective.com/unified"
4273+ }
4274+ },
4275+ "node_modules/remark-slug/node_modules/mdast-util-to-string": {
4276+ "version": "1.1.0",
4277+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz",
4278+ "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==",
4279+ "funding": {
4280+ "type": "opencollective",
4281+ "url": "https://opencollective.com/unified"
4282+ }
4283+ },
4284+ "node_modules/remark-slug/node_modules/unist-util-is": {
4285+ "version": "4.1.0",
4286+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
4287+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
4288+ "funding": {
4289+ "type": "opencollective",
4290+ "url": "https://opencollective.com/unified"
4291+ }
4292+ },
4293+ "node_modules/remark-slug/node_modules/unist-util-visit": {
4294+ "version": "2.0.3",
4295+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
4296+ "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
4297+ "dependencies": {
4298+ "@types/unist": "^2.0.0",
4299+ "unist-util-is": "^4.0.0",
4300+ "unist-util-visit-parents": "^3.0.0"
4301+ },
4302+ "funding": {
4303+ "type": "opencollective",
4304+ "url": "https://opencollective.com/unified"
4305+ }
4306+ },
4307+ "node_modules/remark-slug/node_modules/unist-util-visit-parents": {
4308+ "version": "3.1.1",
4309+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
4310+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
4311+ "dependencies": {
4312+ "@types/unist": "^2.0.0",
4313+ "unist-util-is": "^4.0.0"
4314+ },
4315+ "funding": {
4316+ "type": "opencollective",
4317+ "url": "https://opencollective.com/unified"
4318+ }
4319+ },
4320+ "node_modules/remark-stringify": {
4321+ "version": "9.0.1",
4322+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz",
4323+ "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==",
4324+ "dependencies": {
4325+ "mdast-util-to-markdown": "^0.6.0"
4326+ },
4327+ "funding": {
4328+ "type": "opencollective",
4329+ "url": "https://opencollective.com/unified"
4330+ }
4331+ },
4332+ "node_modules/remark-stringify/node_modules/longest-streak": {
4333+ "version": "2.0.4",
4334+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
4335+ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
4336+ "funding": {
4337+ "type": "github",
4338+ "url": "https://github.com/sponsors/wooorm"
4339+ }
4340+ },
4341+ "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": {
4342+ "version": "0.6.5",
4343+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
4344+ "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
4345+ "dependencies": {
4346+ "@types/unist": "^2.0.0",
4347+ "longest-streak": "^2.0.0",
4348+ "mdast-util-to-string": "^2.0.0",
4349+ "parse-entities": "^2.0.0",
4350+ "repeat-string": "^1.0.0",
4351+ "zwitch": "^1.0.0"
4352+ },
4353+ "funding": {
4354+ "type": "opencollective",
4355+ "url": "https://opencollective.com/unified"
4356+ }
4357+ },
4358+ "node_modules/remark-stringify/node_modules/mdast-util-to-string": {
4359+ "version": "2.0.0",
4360+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
4361+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
4362+ "funding": {
4363+ "type": "opencollective",
4364+ "url": "https://opencollective.com/unified"
4365+ }
4366+ },
4367+ "node_modules/remark-stringify/node_modules/zwitch": {
4368+ "version": "1.0.5",
4369+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
4370+ "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
4371+ "funding": {
4372+ "type": "github",
4373+ "url": "https://github.com/sponsors/wooorm"
4374+ }
4375+ },
4376+ "node_modules/remark/node_modules/mdast-util-from-markdown": {
4377+ "version": "0.8.5",
4378+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
4379+ "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
4380+ "dependencies": {
4381+ "@types/mdast": "^3.0.0",
4382+ "mdast-util-to-string": "^2.0.0",
4383+ "micromark": "~2.11.0",
4384+ "parse-entities": "^2.0.0",
4385+ "unist-util-stringify-position": "^2.0.0"
4386+ },
4387+ "funding": {
4388+ "type": "opencollective",
4389+ "url": "https://opencollective.com/unified"
4390+ }
4391+ },
4392+ "node_modules/remark/node_modules/mdast-util-to-string": {
4393+ "version": "2.0.0",
4394+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
4395+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
4396+ "funding": {
4397+ "type": "opencollective",
4398+ "url": "https://opencollective.com/unified"
4399+ }
4400+ },
4401+ "node_modules/remark/node_modules/micromark": {
4402+ "version": "2.11.4",
4403+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
4404+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
4405+ "funding": [
4406+ {
4407+ "type": "GitHub Sponsors",
4408+ "url": "https://github.com/sponsors/unifiedjs"
4409+ },
4410+ {
4411+ "type": "OpenCollective",
4412+ "url": "https://opencollective.com/unified"
4413+ }
4414+ ],
4415+ "dependencies": {
4416+ "debug": "^4.0.0",
4417+ "parse-entities": "^2.0.0"
4418+ }
4419+ },
4420+ "node_modules/remark/node_modules/remark-parse": {
4421+ "version": "9.0.0",
4422+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
4423+ "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
4424+ "dependencies": {
4425+ "mdast-util-from-markdown": "^0.8.0"
4426+ },
4427+ "funding": {
4428+ "type": "opencollective",
4429+ "url": "https://opencollective.com/unified"
4430+ }
4431+ },
4432+ "node_modules/remark/node_modules/unist-util-stringify-position": {
4433+ "version": "2.0.3",
4434+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
4435+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
4436+ "dependencies": {
4437+ "@types/unist": "^2.0.2"
4438+ },
4439+ "funding": {
4440+ "type": "opencollective",
4441+ "url": "https://opencollective.com/unified"
4442+ }
4443+ },
4444+ "node_modules/rename-keys": {
4445+ "version": "1.2.0",
4446+ "resolved": "https://registry.npmjs.org/rename-keys/-/rename-keys-1.2.0.tgz",
4447+ "integrity": "sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==",
4448+ "engines": {
4449+ "node": ">= 0.8.0"
4450+ }
4451+ },
4452+ "node_modules/repeat-string": {
4453+ "version": "1.6.1",
4454+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
4455+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
4456+ "engines": {
4457+ "node": ">=0.10"
4458+ }
4459+ },
4460+ "node_modules/resolve": {
4461+ "version": "1.22.0",
4462+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
4463+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
4464+ "dependencies": {
4465+ "is-core-module": "^2.8.1",
4466+ "path-parse": "^1.0.7",
4467+ "supports-preserve-symlinks-flag": "^1.0.0"
4468+ },
4469+ "bin": {
4470+ "resolve": "bin/resolve"
4471+ },
4472+ "funding": {
4473+ "url": "https://github.com/sponsors/ljharb"
4474+ }
4475+ },
4476+ "node_modules/reusify": {
4477+ "version": "1.0.4",
4478+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
4479+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
4480+ "engines": {
4481+ "iojs": ">=1.0.0",
4482+ "node": ">=0.10.0"
4483+ }
4484+ },
4485+ "node_modules/run-parallel": {
4486+ "version": "1.2.0",
4487+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
4488+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
4489+ "funding": [
4490+ {
4491+ "type": "github",
4492+ "url": "https://github.com/sponsors/feross"
4493+ },
4494+ {
4495+ "type": "patreon",
4496+ "url": "https://www.patreon.com/feross"
4497+ },
4498+ {
4499+ "type": "consulting",
4500+ "url": "https://feross.org/support"
4501+ }
4502+ ],
4503+ "dependencies": {
4504+ "queue-microtask": "^1.2.2"
4505+ }
4506+ },
4507+ "node_modules/sade": {
4508+ "version": "1.8.1",
4509+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
4510+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
4511+ "dependencies": {
4512+ "mri": "^1.1.0"
4513+ },
4514+ "engines": {
4515+ "node": ">=6"
4516+ }
4517+ },
4518+ "node_modules/safe-buffer": {
4519+ "version": "5.2.1",
4520+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
4521+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
4522+ "funding": [
4523+ {
4524+ "type": "github",
4525+ "url": "https://github.com/sponsors/feross"
4526+ },
4527+ {
4528+ "type": "patreon",
4529+ "url": "https://www.patreon.com/feross"
4530+ },
4531+ {
4532+ "type": "consulting",
4533+ "url": "https://feross.org/support"
4534+ }
4535+ ]
4536+ },
4537+ "node_modules/safer-buffer": {
4538+ "version": "2.1.2",
4539+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
4540+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
4541+ },
4542+ "node_modules/sax": {
4543+ "version": "1.2.4",
4544+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
4545+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
4546+ },
4547+ "node_modules/saxes": {
4548+ "version": "5.0.1",
4549+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
4550+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
4551+ "dependencies": {
4552+ "xmlchars": "^2.2.0"
4553+ },
4554+ "engines": {
4555+ "node": ">=10"
4556+ }
4557+ },
4558+ "node_modules/scheduler": {
4559+ "version": "0.20.2",
4560+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
4561+ "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
4562+ "dependencies": {
4563+ "loose-envify": "^1.1.0",
4564+ "object-assign": "^4.1.1"
4565+ }
4566+ },
4567+ "node_modules/section-matter": {
4568+ "version": "1.0.0",
4569+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
4570+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
4571+ "dependencies": {
4572+ "extend-shallow": "^2.0.1",
4573+ "kind-of": "^6.0.0"
4574+ },
4575+ "engines": {
4576+ "node": ">=4"
4577+ }
4578+ },
4579+ "node_modules/shebang-command": {
4580+ "version": "2.0.0",
4581+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
4582+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
4583+ "dev": true,
4584+ "dependencies": {
4585+ "shebang-regex": "^3.0.0"
4586+ },
4587+ "engines": {
4588+ "node": ">=8"
4589+ }
4590+ },
4591+ "node_modules/shebang-regex": {
4592+ "version": "3.0.0",
4593+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
4594+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
4595+ "dev": true,
4596+ "engines": {
4597+ "node": ">=8"
4598+ }
4599+ },
4600+ "node_modules/signal-exit": {
4601+ "version": "3.0.7",
4602+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
4603+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
4604+ "dev": true
4605+ },
4606+ "node_modules/source-map": {
4607+ "version": "0.6.1",
4608+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
4609+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
4610+ "optional": true,
4611+ "engines": {
4612+ "node": ">=0.10.0"
4613+ }
4614+ },
4615+ "node_modules/source-map-js": {
4616+ "version": "1.0.2",
4617+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
4618+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
4619+ "engines": {
4620+ "node": ">=0.10.0"
4621+ }
4622+ },
4623+ "node_modules/space-separated-tokens": {
4624+ "version": "2.0.1",
4625+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
4626+ "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==",
4627+ "funding": {
4628+ "type": "github",
4629+ "url": "https://github.com/sponsors/wooorm"
4630+ }
4631+ },
4632+ "node_modules/sprintf-js": {
4633+ "version": "1.0.3",
4634+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
4635+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
4636+ },
4637+ "node_modules/stream-browserify": {
4638+ "version": "3.0.0",
4639+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
4640+ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
4641+ "dependencies": {
4642+ "inherits": "~2.0.4",
4643+ "readable-stream": "^3.5.0"
4644+ }
4645+ },
4646+ "node_modules/string_decoder": {
4647+ "version": "1.3.0",
4648+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
4649+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
4650+ "dependencies": {
4651+ "safe-buffer": "~5.2.0"
4652+ }
4653+ },
4654+ "node_modules/stringify-entities": {
4655+ "version": "4.0.2",
4656+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
4657+ "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
4658+ "dependencies": {
4659+ "character-entities-html4": "^2.0.0",
4660+ "character-entities-legacy": "^3.0.0"
4661+ },
4662+ "funding": {
4663+ "type": "github",
4664+ "url": "https://github.com/sponsors/wooorm"
4665+ }
4666+ },
4667+ "node_modules/strip-bom-string": {
4668+ "version": "1.0.0",
4669+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
4670+ "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
4671+ "engines": {
4672+ "node": ">=0.10.0"
4673+ }
4674+ },
4675+ "node_modules/strip-final-newline": {
4676+ "version": "2.0.0",
4677+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
4678+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
4679+ "dev": true,
4680+ "engines": {
4681+ "node": ">=6"
4682+ }
4683+ },
4684+ "node_modules/style-to-object": {
4685+ "version": "0.3.0",
4686+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
4687+ "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
4688+ "dependencies": {
4689+ "inline-style-parser": "0.1.1"
4690+ }
4691+ },
4692+ "node_modules/styled-jsx": {
4693+ "version": "5.0.1",
4694+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.1.tgz",
4695+ "integrity": "sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==",
4696+ "engines": {
4697+ "node": ">= 12.0.0"
4698+ },
4699+ "peerDependencies": {
4700+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
4701+ },
4702+ "peerDependenciesMeta": {
4703+ "@babel/core": {
4704+ "optional": true
4705+ },
4706+ "babel-plugin-macros": {
4707+ "optional": true
4708+ }
4709+ }
4710+ },
4711+ "node_modules/supports-color": {
4712+ "version": "7.2.0",
4713+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
4714+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
4715+ "dev": true,
4716+ "dependencies": {
4717+ "has-flag": "^4.0.0"
4718+ },
4719+ "engines": {
4720+ "node": ">=8"
4721+ }
4722+ },
4723+ "node_modules/supports-preserve-symlinks-flag": {
4724+ "version": "1.0.0",
4725+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
4726+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
4727+ "engines": {
4728+ "node": ">= 0.4"
4729+ },
4730+ "funding": {
4731+ "url": "https://github.com/sponsors/ljharb"
4732+ }
4733+ },
4734+ "node_modules/svgson": {
4735+ "version": "4.1.0",
4736+ "resolved": "https://registry.npmjs.org/svgson/-/svgson-4.1.0.tgz",
4737+ "integrity": "sha512-DodISxHtdLKUghDYA+PGK4Qq350+CbBAkdvGLkBFSmWd9WKSg4dijgjB1IiRPTmsUCd+a7KYe+ILHtklYgQyzQ==",
4738+ "dependencies": {
4739+ "deep-rename-keys": "^0.2.1",
4740+ "omit-deep": "0.3.0",
4741+ "xml-reader": "2.4.3"
4742+ }
4743+ },
4744+ "node_modules/symbol-tree": {
4745+ "version": "3.2.4",
4746+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
4747+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
4748+ },
4749+ "node_modules/tailwindcss": {
4750+ "version": "3.0.24",
4751+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
4752+ "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
4753+ "dependencies": {
4754+ "arg": "^5.0.1",
4755+ "chokidar": "^3.5.3",
4756+ "color-name": "^1.1.4",
4757+ "detective": "^5.2.0",
4758+ "didyoumean": "^1.2.2",
4759+ "dlv": "^1.1.3",
4760+ "fast-glob": "^3.2.11",
4761+ "glob-parent": "^6.0.2",
4762+ "is-glob": "^4.0.3",
4763+ "lilconfig": "^2.0.5",
4764+ "normalize-path": "^3.0.0",
4765+ "object-hash": "^3.0.0",
4766+ "picocolors": "^1.0.0",
4767+ "postcss": "^8.4.12",
4768+ "postcss-js": "^4.0.0",
4769+ "postcss-load-config": "^3.1.4",
4770+ "postcss-nested": "5.0.6",
4771+ "postcss-selector-parser": "^6.0.10",
4772+ "postcss-value-parser": "^4.2.0",
4773+ "quick-lru": "^5.1.1",
4774+ "resolve": "^1.22.0"
4775+ },
4776+ "bin": {
4777+ "tailwind": "lib/cli.js",
4778+ "tailwindcss": "lib/cli.js"
4779+ },
4780+ "engines": {
4781+ "node": ">=12.13.0"
4782+ },
4783+ "peerDependencies": {
4784+ "postcss": "^8.0.9"
4785+ }
4786+ },
4787+ "node_modules/tapable": {
4788+ "version": "2.2.1",
4789+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
4790+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
4791+ "dev": true,
4792+ "engines": {
4793+ "node": ">=6"
4794+ }
4795+ },
4796+ "node_modules/to-regex-range": {
4797+ "version": "5.0.1",
4798+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
4799+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
4800+ "dependencies": {
4801+ "is-number": "^7.0.0"
4802+ },
4803+ "engines": {
4804+ "node": ">=8.0"
4805+ }
4806+ },
4807+ "node_modules/tough-cookie": {
4808+ "version": "4.0.0",
4809+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
4810+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
4811+ "dependencies": {
4812+ "psl": "^1.1.33",
4813+ "punycode": "^2.1.1",
4814+ "universalify": "^0.1.2"
4815+ },
4816+ "engines": {
4817+ "node": ">=6"
4818+ }
4819+ },
4820+ "node_modules/tr46": {
4821+ "version": "2.1.0",
4822+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
4823+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
4824+ "dependencies": {
4825+ "punycode": "^2.1.1"
4826+ },
4827+ "engines": {
4828+ "node": ">=8"
4829+ }
4830+ },
4831+ "node_modules/transformation-matrix": {
4832+ "version": "2.1.1",
4833+ "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.1.1.tgz",
4834+ "integrity": "sha512-74MoNHhwLVuzwaPDcAecFjSkOA9vwWqyOdkeB0Be8Jc/IWSS5SNZKapFllqzkTliqZptkvqX5CZnVeDvfhN8cw=="
4835+ },
4836+ "node_modules/trough": {
4837+ "version": "1.0.5",
4838+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
4839+ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
4840+ "funding": {
4841+ "type": "github",
4842+ "url": "https://github.com/sponsors/wooorm"
4843+ }
4844+ },
4845+ "node_modules/tslib": {
4846+ "version": "2.4.0",
4847+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
4848+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
4849+ },
4850+ "node_modules/type-check": {
4851+ "version": "0.3.2",
4852+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
4853+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
4854+ "dependencies": {
4855+ "prelude-ls": "~1.1.2"
4856+ },
4857+ "engines": {
4858+ "node": ">= 0.8.0"
4859+ }
4860+ },
4861+ "node_modules/unified": {
4862+ "version": "9.2.2",
4863+ "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
4864+ "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
4865+ "dependencies": {
4866+ "bail": "^1.0.0",
4867+ "extend": "^3.0.0",
4868+ "is-buffer": "^2.0.0",
4869+ "is-plain-obj": "^2.0.0",
4870+ "trough": "^1.0.0",
4871+ "vfile": "^4.0.0"
4872+ },
4873+ "funding": {
4874+ "type": "opencollective",
4875+ "url": "https://opencollective.com/unified"
4876+ }
4877+ },
4878+ "node_modules/unified/node_modules/unist-util-stringify-position": {
4879+ "version": "2.0.3",
4880+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
4881+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
4882+ "dependencies": {
4883+ "@types/unist": "^2.0.2"
4884+ },
4885+ "funding": {
4886+ "type": "opencollective",
4887+ "url": "https://opencollective.com/unified"
134888 }
144889 },
15− "@babel/helper-validator-identifier": {
16− "version": "7.15.7",
17− "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
18− "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
4890+ "node_modules/unified/node_modules/vfile": {
4891+ "version": "4.2.1",
4892+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
4893+ "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
4894+ "dependencies": {
4895+ "@types/unist": "^2.0.0",
4896+ "is-buffer": "^2.0.0",
4897+ "unist-util-stringify-position": "^2.0.0",
4898+ "vfile-message": "^2.0.0"
4899+ },
4900+ "funding": {
4901+ "type": "opencollective",
4902+ "url": "https://opencollective.com/unified"
4903+ }
194904 },
20− "@babel/highlight": {
21− "version": "7.14.5",
22− "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
23− "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
24− "requires": {
25− "@babel/helper-validator-identifier": "^7.14.5",
26− "chalk": "^2.0.0",
27− "js-tokens": "^4.0.0"
4905+ "node_modules/unified/node_modules/vfile-message": {
4906+ "version": "2.0.4",
4907+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
4908+ "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
4909+ "dependencies": {
4910+ "@types/unist": "^2.0.0",
4911+ "unist-util-stringify-position": "^2.0.0"
4912+ },
4913+ "funding": {
4914+ "type": "opencollective",
4915+ "url": "https://opencollective.com/unified"
284916 }
294917 },
30− "@babel/runtime": {
31− "version": "7.15.4",
32− "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz",
33− "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==",
34− "requires": {
35− "regenerator-runtime": "^0.13.4"
4918+ "node_modules/unist-builder": {
4919+ "version": "2.0.3",
4920+ "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
4921+ "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==",
4922+ "funding": {
4923+ "type": "opencollective",
4924+ "url": "https://opencollective.com/unified"
364925 }
374926 },
38− "@babel/types": {
39− "version": "7.8.3",
40− "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
41− "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
42− "requires": {
43− "esutils": "^2.0.2",
44− "lodash": "^4.17.13",
45− "to-fast-properties": "^2.0.0"
4927+ "node_modules/unist-util-generated": {
4928+ "version": "1.1.6",
4929+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
4930+ "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==",
4931+ "funding": {
4932+ "type": "opencollective",
4933+ "url": "https://opencollective.com/unified"
464934 }
474935 },
48− "@hapi/accept": {
49− "version": "5.0.2",
50− "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz",
51− "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==",
52− "requires": {
53− "@hapi/boom": "9.x.x",
54− "@hapi/hoek": "9.x.x"
4936+ "node_modules/unist-util-is": {
4937+ "version": "5.1.1",
4938+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
4939+ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==",
4940+ "funding": {
4941+ "type": "opencollective",
4942+ "url": "https://opencollective.com/unified"
554943 }
564944 },
57− "@hapi/boom": {
58− "version": "9.1.4",
59− "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz",
60− "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==",
61− "requires": {
62− "@hapi/hoek": "9.x.x"
4945+ "node_modules/unist-util-map": {
4946+ "version": "2.0.1",
4947+ "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-2.0.1.tgz",
4948+ "integrity": "sha512-VdNvk4BQUUU9Rgr8iUOvclHa/iN9O+6Dt66FKij8l9OVezGG37gGWCPU5KSax1R2degqXFvl3kWTkvzL79e9tQ==",
4949+ "dependencies": {
4950+ "@types/mdast": "^3.0.0",
4951+ "object-assign": "^4.0.0"
4952+ },
4953+ "funding": {
4954+ "type": "opencollective",
4955+ "url": "https://opencollective.com/unified"
4956+ }
4957+ },
4958+ "node_modules/unist-util-position": {
4959+ "version": "4.0.3",
4960+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz",
4961+ "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==",
4962+ "dependencies": {
4963+ "@types/unist": "^2.0.0"
4964+ },
4965+ "funding": {
4966+ "type": "opencollective",
4967+ "url": "https://opencollective.com/unified"
4968+ }
4969+ },
4970+ "node_modules/unist-util-stringify-position": {
4971+ "version": "3.0.2",
4972+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
4973+ "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
4974+ "dependencies": {
4975+ "@types/unist": "^2.0.0"
4976+ },
4977+ "funding": {
4978+ "type": "opencollective",
4979+ "url": "https://opencollective.com/unified"
4980+ }
4981+ },
4982+ "node_modules/unist-util-visit": {
4983+ "version": "4.1.0",
4984+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
4985+ "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
4986+ "dependencies": {
4987+ "@types/unist": "^2.0.0",
4988+ "unist-util-is": "^5.0.0",
4989+ "unist-util-visit-parents": "^5.0.0"
4990+ },
4991+ "funding": {
4992+ "type": "opencollective",
4993+ "url": "https://opencollective.com/unified"
4994+ }
4995+ },
4996+ "node_modules/unist-util-visit-parents": {
4997+ "version": "4.1.1",
4998+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
4999+ "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
5000+ "dependencies": {
5001+ "@types/unist": "^2.0.0",
5002+ "unist-util-is": "^5.0.0"
5003+ },
5004+ "funding": {
5005+ "type": "opencollective",
5006+ "url": "https://opencollective.com/unified"
5007+ }
5008+ },
5009+ "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": {
5010+ "version": "5.1.0",
5011+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
5012+ "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
5013+ "dependencies": {
5014+ "@types/unist": "^2.0.0",
5015+ "unist-util-is": "^5.0.0"
5016+ },
5017+ "funding": {
5018+ "type": "opencollective",
5019+ "url": "https://opencollective.com/unified"
5020+ }
5021+ },
5022+ "node_modules/universalify": {
5023+ "version": "0.1.2",
5024+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
5025+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
5026+ "engines": {
5027+ "node": ">= 4.0.0"
5028+ }
5029+ },
5030+ "node_modules/unset-value": {
5031+ "version": "0.1.2",
5032+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
5033+ "integrity": "sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA=",
5034+ "dependencies": {
5035+ "has-value": "^0.3.1",
5036+ "isobject": "^3.0.0"
5037+ },
5038+ "engines": {
5039+ "node": ">=0.10.0"
5040+ }
5041+ },
5042+ "node_modules/urbit-ob": {
5043+ "version": "5.0.1",
5044+ "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz",
5045+ "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==",
5046+ "dependencies": {
5047+ "bn.js": "^4.11.8",
5048+ "lodash.chunk": "^4.2.0",
5049+ "lodash.isequal": "^4.5.0"
5050+ }
5051+ },
5052+ "node_modules/util-deprecate": {
5053+ "version": "1.0.2",
5054+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5055+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
5056+ },
5057+ "node_modules/uvu": {
5058+ "version": "0.5.3",
5059+ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz",
5060+ "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==",
5061+ "dependencies": {
5062+ "dequal": "^2.0.0",
5063+ "diff": "^5.0.0",
5064+ "kleur": "^4.0.3",
5065+ "sade": "^1.7.3"
5066+ },
5067+ "bin": {
5068+ "uvu": "bin.js"
5069+ },
5070+ "engines": {
5071+ "node": ">=8"
5072+ }
5073+ },
5074+ "node_modules/vfile": {
5075+ "version": "5.3.2",
5076+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
5077+ "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
5078+ "dependencies": {
5079+ "@types/unist": "^2.0.0",
5080+ "is-buffer": "^2.0.0",
5081+ "unist-util-stringify-position": "^3.0.0",
5082+ "vfile-message": "^3.0.0"
5083+ },
5084+ "funding": {
5085+ "type": "opencollective",
5086+ "url": "https://opencollective.com/unified"
5087+ }
5088+ },
5089+ "node_modules/vfile-location": {
5090+ "version": "4.0.1",
5091+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz",
5092+ "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==",
5093+ "dependencies": {
5094+ "@types/unist": "^2.0.0",
5095+ "vfile": "^5.0.0"
5096+ },
5097+ "funding": {
5098+ "type": "opencollective",
5099+ "url": "https://opencollective.com/unified"
5100+ }
5101+ },
5102+ "node_modules/vfile-message": {
5103+ "version": "3.1.2",
5104+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
5105+ "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
5106+ "dependencies": {
5107+ "@types/unist": "^2.0.0",
5108+ "unist-util-stringify-position": "^3.0.0"
5109+ },
5110+ "funding": {
5111+ "type": "opencollective",
5112+ "url": "https://opencollective.com/unified"
5113+ }
5114+ },
5115+ "node_modules/w3c-hr-time": {
5116+ "version": "1.0.2",
5117+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
5118+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
5119+ "dependencies": {
5120+ "browser-process-hrtime": "^1.0.0"
5121+ }
5122+ },
5123+ "node_modules/w3c-xmlserializer": {
5124+ "version": "2.0.0",
5125+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
5126+ "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
5127+ "dependencies": {
5128+ "xml-name-validator": "^3.0.0"
5129+ },
5130+ "engines": {
5131+ "node": ">=10"
5132+ }
5133+ },
5134+ "node_modules/web-namespaces": {
5135+ "version": "2.0.1",
5136+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
5137+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
5138+ "funding": {
5139+ "type": "github",
5140+ "url": "https://github.com/sponsors/wooorm"
5141+ }
5142+ },
5143+ "node_modules/webidl-conversions": {
5144+ "version": "6.1.0",
5145+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
5146+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
5147+ "engines": {
5148+ "node": ">=10.4"
5149+ }
5150+ },
5151+ "node_modules/whatwg-encoding": {
5152+ "version": "1.0.5",
5153+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
5154+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
5155+ "dependencies": {
5156+ "iconv-lite": "0.4.24"
5157+ }
5158+ },
5159+ "node_modules/whatwg-mimetype": {
5160+ "version": "2.3.0",
5161+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
5162+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
5163+ },
5164+ "node_modules/whatwg-url": {
5165+ "version": "8.7.0",
5166+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
5167+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
5168+ "dependencies": {
5169+ "lodash": "^4.7.0",
5170+ "tr46": "^2.1.0",
5171+ "webidl-conversions": "^6.1.0"
5172+ },
5173+ "engines": {
5174+ "node": ">=10"
5175+ }
5176+ },
5177+ "node_modules/which": {
5178+ "version": "2.0.2",
5179+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
5180+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
5181+ "dev": true,
5182+ "dependencies": {
5183+ "isexe": "^2.0.0"
5184+ },
5185+ "bin": {
5186+ "node-which": "bin/node-which"
5187+ },
5188+ "engines": {
5189+ "node": ">= 8"
5190+ }
5191+ },
5192+ "node_modules/word-wrap": {
5193+ "version": "1.2.3",
5194+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
5195+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
5196+ "engines": {
5197+ "node": ">=0.10.0"
5198+ }
5199+ },
5200+ "node_modules/wrappy": {
5201+ "version": "1.0.2",
5202+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5203+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
5204+ "dev": true
5205+ },
5206+ "node_modules/ws": {
5207+ "version": "7.5.7",
5208+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
5209+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
5210+ "engines": {
5211+ "node": ">=8.3.0"
5212+ },
5213+ "peerDependencies": {
5214+ "bufferutil": "^4.0.1",
5215+ "utf-8-validate": "^5.0.2"
5216+ },
5217+ "peerDependenciesMeta": {
5218+ "bufferutil": {
5219+ "optional": true
5220+ },
5221+ "utf-8-validate": {
5222+ "optional": true
5223+ }
5224+ }
5225+ },
5226+ "node_modules/xml-js": {
5227+ "version": "1.6.11",
5228+ "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
5229+ "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
5230+ "dependencies": {
5231+ "sax": "^1.2.4"
5232+ },
5233+ "bin": {
5234+ "xml-js": "bin/cli.js"
5235+ }
5236+ },
5237+ "node_modules/xml-lexer": {
5238+ "version": "0.2.2",
5239+ "resolved": "https://registry.npmjs.org/xml-lexer/-/xml-lexer-0.2.2.tgz",
5240+ "integrity": "sha1-UYGTpKozTVj8fSSLVJB5uJkH4EY=",
5241+ "dependencies": {
5242+ "eventemitter3": "^2.0.0"
5243+ }
5244+ },
5245+ "node_modules/xml-name-validator": {
5246+ "version": "3.0.0",
5247+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
5248+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
5249+ },
5250+ "node_modules/xml-reader": {
5251+ "version": "2.4.3",
5252+ "resolved": "https://registry.npmjs.org/xml-reader/-/xml-reader-2.4.3.tgz",
5253+ "integrity": "sha1-n4EMr3xCWlqvuEixxFEDyecddTA=",
5254+ "dependencies": {
5255+ "eventemitter3": "^2.0.0",
5256+ "xml-lexer": "^0.2.2"
5257+ }
5258+ },
5259+ "node_modules/xmlchars": {
5260+ "version": "2.2.0",
5261+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
5262+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
5263+ },
5264+ "node_modules/xtend": {
5265+ "version": "4.0.2",
5266+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
5267+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
5268+ "engines": {
5269+ "node": ">=0.4"
5270+ }
5271+ },
5272+ "node_modules/yaml": {
5273+ "version": "1.10.2",
5274+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
5275+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
5276+ "engines": {
5277+ "node": ">= 6"
635278 }
645279 },
65− "@hapi/hoek": {
66− "version": "9.2.0",
67− "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
68− "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug=="
5280+ "node_modules/zwitch": {
5281+ "version": "2.0.2",
5282+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
5283+ "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==",
5284+ "funding": {
5285+ "type": "github",
5286+ "url": "https://github.com/sponsors/wooorm"
5287+ }
5288+ }
5289+ },
5290+ "dependencies": {
5291+ "@babel/runtime": {
5292+ "version": "7.17.9",
5293+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
5294+ "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
5295+ "requires": {
5296+ "regenerator-runtime": "^0.13.4"
5297+ }
695298 },
705299 "@iarna/toml": {
715300 "version": "2.2.5",
@@ -73,87 +5302,81 @@
735302 "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg=="
745303 },
755304 "@next/env": {
76− "version": "10.2.3",
77− "resolved": "https://registry.npmjs.org/@next/env/-/env-10.2.3.tgz",
78− "integrity": "sha512-uBOjRBjsWC4C8X3DfmWWP6ekwLnf2JCCwQX9KVnJtJkqfDsv1yQPakdOEwvJzXQc3JC/v5KKffYPVmV2wHXCgQ=="
79− },
80− "@next/polyfill-module": {
81− "version": "10.2.3",
82− "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-10.2.3.tgz",
83− "integrity": "sha512-OkeY4cLhzfYbXxM4fd+6V4s5pTPuyfKSlavItfNRA6PpS7t1/R6YjO7S7rB8tu1pbTGuDHGIdE1ioDv15bAbDQ=="
84− },
85− "@next/react-dev-overlay": {
86− "version": "10.2.3",
87− "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-10.2.3.tgz",
88− "integrity": "sha512-E6g2jws4YW94l0lMMopBVKIZK2mEHfSBvM0d9dmzKG9L/A/kEq6LZCB4SiwGJbNsAdlk2y3USDa0oNbpA+m5Kw==",
89− "requires": {
90− "@babel/code-frame": "7.12.11",
91− "anser": "1.4.9",
92− "chalk": "4.0.0",
93− "classnames": "2.2.6",
94− "css.escape": "1.5.1",
95− "data-uri-to-buffer": "3.0.1",
96− "platform": "1.3.6",
97− "shell-quote": "1.7.2",
98− "source-map": "0.8.0-beta.0",
99− "stacktrace-parser": "0.1.10",
100− "strip-ansi": "6.0.0"
101− },
102− "dependencies": {
103− "ansi-styles": {
104− "version": "4.3.0",
105− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
106− "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
107− "requires": {
108− "color-convert": "^2.0.1"
109− }
110− },
111− "chalk": {
112− "version": "4.0.0",
113− "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
114− "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
115− "requires": {
116− "ansi-styles": "^4.1.0",
117− "supports-color": "^7.1.0"
118− }
119− },
120− "classnames": {
121− "version": "2.2.6",
122− "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
123− "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
124− },
125− "color-convert": {
126− "version": "2.0.1",
127− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
128− "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
129− "requires": {
130− "color-name": "~1.1.4"
131− }
132− },
133− "color-name": {
134− "version": "1.1.4",
135− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
136− "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
137− },
138− "has-flag": {
139− "version": "4.0.0",
140− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
141− "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
142− },
143− "supports-color": {
144− "version": "7.2.0",
145− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
146− "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
147− "requires": {
148− "has-flag": "^4.0.0"
149− }
150− }
151− }
5305+ "version": "12.1.5",
5306+ "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.5.tgz",
5307+ "integrity": "sha512-+34yUJslfJi7Lyx6ELuN8nWcOzi27izfYnZIC1Dqv7kmmfiBVxgzR3BXhlvEMTKC2IRJhXVs2FkMY+buQe3k7Q=="
5308+ },
5309+ "@next/swc-android-arm-eabi": {
5310+ "version": "12.1.5",
5311+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.5.tgz",
5312+ "integrity": "sha512-SKnGTdYcoN04Y2DvE0/Y7/MjkA+ltsmbuH/y/hR7Ob7tsj+8ZdOYuk+YvW1B8dY20nDPHP58XgDTSm2nA8BzzA==",
5313+ "optional": true
5314+ },
5315+ "@next/swc-android-arm64": {
5316+ "version": "12.1.5",
5317+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.5.tgz",
5318+ "integrity": "sha512-YXiqgQ/9Rxg1dXp6brXbeQM1JDx9SwUY/36JiE+36FXqYEmDYbxld9qkX6GEzkc5rbwJ+RCitargnzEtwGW0mw==",
5319+ "optional": true
5320+ },
5321+ "@next/swc-darwin-arm64": {
5322+ "version": "12.1.5",
5323+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.5.tgz",
5324+ "integrity": "sha512-y8mhldb/WFZ6lFeowkGfi0cO/lBdiBqDk4T4LZLvCpoQp4Or/NzUN6P5NzBQZ5/b4oUHM/wQICEM+1wKA4qIVw==",
5325+ "optional": true
5326+ },
5327+ "@next/swc-darwin-x64": {
5328+ "version": "12.1.5",
5329+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.5.tgz",
5330+ "integrity": "sha512-wqJ3X7WQdTwSGi0kIDEmzw34QHISRIQ5uvC+VXmsIlCPFcMA+zM5723uh8NfuKGquDMiEMS31a83QgkuHMYbwQ==",
5331+ "optional": true
5332+ },
5333+ "@next/swc-linux-arm-gnueabihf": {
5334+ "version": "12.1.5",
5335+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.5.tgz",
5336+ "integrity": "sha512-WnhdM5duONMvt2CncAl+9pim0wBxDS2lHoo7ub/o/i1bRbs11UTzosKzEXVaTDCUkCX2c32lIDi1WcN2ZPkcdw==",
5337+ "optional": true
5338+ },
5339+ "@next/swc-linux-arm64-gnu": {
5340+ "version": "12.1.5",
5341+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.5.tgz",
5342+ "integrity": "sha512-Jq2H68yQ4bLUhR/XQnbw3LDW0GMQn355qx6rU36BthDLeGue7YV7MqNPa8GKvrpPocEMW77nWx/1yI6w6J07gw==",
5343+ "optional": true
1525344 },
153− "@next/react-refresh-utils": {
154− "version": "10.2.3",
155− "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-10.2.3.tgz",
156− "integrity": "sha512-qtBF56vPC6d6a8p7LYd0iRjW89fhY80kAIzmj+VonvIGjK/nymBjcFUhbKiMFqlhsarCksnhwX+Zmn95Dw9qvA=="
5345+ "@next/swc-linux-arm64-musl": {
5346+ "version": "12.1.5",
5347+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.5.tgz",
5348+ "integrity": "sha512-KgPjwdbhDqXI7ghNN8V/WAiLquc9Ebe8KBrNNEL0NQr+yd9CyKJ6KqjayVkmX+hbHzbyvbui/5wh/p3CZQ9xcQ==",
5349+ "optional": true
5350+ },
5351+ "@next/swc-linux-x64-gnu": {
5352+ "version": "12.1.5",
5353+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.5.tgz",
5354+ "integrity": "sha512-O2ErUTvCJ6DkNTSr9pbu1n3tcqykqE/ebty1rwClzIYdOgpB3T2MfEPP+K7GhUR87wmN/hlihO9ch7qpVFDGKw==",
5355+ "optional": true
5356+ },
5357+ "@next/swc-linux-x64-musl": {
5358+ "version": "12.1.5",
5359+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.5.tgz",
5360+ "integrity": "sha512-1eIlZmlO/VRjxxzUBcVosf54AFU3ltAzHi+BJA+9U/lPxCYIsT+R4uO3QksRzRjKWhVQMRjEnlXyyq5SKJm7BA==",
5361+ "optional": true
5362+ },
5363+ "@next/swc-win32-arm64-msvc": {
5364+ "version": "12.1.5",
5365+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.5.tgz",
5366+ "integrity": "sha512-oromsfokbEuVb0CBLLE7R9qX3KGXucZpsojLpzUh1QJjuy1QkrPJncwr8xmWQnwgtQ6ecMWXgXPB+qtvizT9Tw==",
5367+ "optional": true
5368+ },
5369+ "@next/swc-win32-ia32-msvc": {
5370+ "version": "12.1.5",
5371+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.5.tgz",
5372+ "integrity": "sha512-a/51L5KzBpeZSW9LbekMo3I3Cwul+V+QKwbEIMA+Qwb2qrlcn1L9h3lt8cHqNTFt2y72ce6aTwDTw1lyi5oIRA==",
5373+ "optional": true
5374+ },
5375+ "@next/swc-win32-x64-msvc": {
5376+ "version": "12.1.5",
5377+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.5.tgz",
5378+ "integrity": "sha512-/SoXW1Ntpmpw3AXAzfDRaQidnd8kbZ2oSni8u5z0yw6t4RwJvmdZy1eOaAADRThWKV+2oU90++LSnXJIwBRWYQ==",
5379+ "optional": true
1575380 },
1585381 "@nodelib/fs.scandir": {
1595382 "version": "2.1.5",
@@ -178,28 +5401,27 @@
1785401 "fastq": "^1.6.0"
1795402 }
1805403 },
181− "@opentelemetry/api": {
182− "version": "0.14.0",
183− "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz",
184− "integrity": "sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==",
185− "requires": {
186− "@opentelemetry/context-base": "^0.14.0"
187− }
188− },
189− "@opentelemetry/context-base": {
190− "version": "0.14.0",
191− "resolved": "https://registry.npmjs.org/@opentelemetry/context-base/-/context-base-0.14.0.tgz",
192− "integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw=="
193− },
1945404 "@socialgouv/matomo-next": {
195− "version": "1.2.2",
196− "resolved": "https://registry.npmjs.org/@socialgouv/matomo-next/-/matomo-next-1.2.2.tgz",
197− "integrity": "sha512-VWIToHeF0rFtLlGGkjdfUCtLckZebwXwYlnAVYwqMivUboqRgxl7wsUGkGfp6HM4cfYla9NQw4mbqRPXfTGu5Q=="
5405+ "version": "1.3.0",
5406+ "resolved": "https://registry.npmjs.org/@socialgouv/matomo-next/-/matomo-next-1.3.0.tgz",
5407+ "integrity": "sha512-1EWGFre4CudvcJPIaLYyAwHsGk8mMK5/IKztEIaU14uUifv117dlIJmcpJIVEow70AMY1VqRHh1x5z7Dx+H7dQ==",
5408+ "requires": {}
1985409 },
1995410 "@tailwindcss/aspect-ratio": {
200− "version": "0.2.1",
201− "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.2.1.tgz",
202− "integrity": "sha512-aDFi80aHQ3JM3symJ5iKU70lm151ugIGFCI0yRZGpyjgQSDS+Fbe93QwypC1tCEllQE8p0S7TUu20ih1b9IKLA=="
5411+ "version": "0.4.0",
5412+ "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.0.tgz",
5413+ "integrity": "sha512-WJu0I4PpqNPuutpaA9zDUq2JXR+lorZ7PbLcKNLmb6GL9/HLfC7w3CRsMhJF4BbYd/lkY6CfXOvkYpuGnZfkpQ==",
5414+ "requires": {}
5415+ },
5416+ "@tlon/sigil-js": {
5417+ "version": "1.4.5",
5418+ "resolved": "https://registry.npmjs.org/@tlon/sigil-js/-/sigil-js-1.4.5.tgz",
5419+ "integrity": "sha512-+Fn0EizPetjePaK+z8njjzE74wxzqIRLVM8W53Dlri6XU87wJ4vk82baVGgZQFAQs96rYM/f4WV7kCzuSxSMAw==",
5420+ "requires": {
5421+ "invariant": "^2.2.4",
5422+ "svgson": "^4.0.0",
5423+ "transformation-matrix": "2.1.1"
5424+ }
2035425 },
2045426 "@tootallnate/once": {
2055427 "version": "1.1.2",
@@ -246,20 +5468,10 @@
2465468 "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
2475469 "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
2485470 },
249− "@types/node": {
250− "version": "16.9.6",
251− "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz",
252− "integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ=="
253− },
254− "@types/parse-json": {
255− "version": "4.0.0",
256− "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
257− "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
258− },
2595471 "@types/parse5": {
260− "version": "6.0.1",
261− "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz",
262− "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA=="
5472+ "version": "6.0.3",
5473+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
5474+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
2635475 },
2645476 "@types/unist": {
2655477 "version": "2.0.6",
@@ -267,19 +5479,14 @@
2675479 "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
2685480 },
2695481 "abab": {
270− "version": "2.0.5",
271− "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
272− "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
5482+ "version": "2.0.6",
5483+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
5484+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
2735485 },
2745486 "acorn": {
275− "version": "8.5.0",
276− "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
277− "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q=="
278− },
279− "acorn-es7-plugin": {
280− "version": "1.1.7",
281− "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz",
282− "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s="
5487+ "version": "8.7.0",
5488+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
5489+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
2835490 },
2845491 "acorn-globals": {
2855492 "version": "6.0.0",
@@ -325,39 +5532,15 @@
3255532 "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
3265533 "requires": {
3275534 "debug": "4"
328− },
329− "dependencies": {
330− "debug": {
331− "version": "4.3.2",
332− "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
333− "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
334− "requires": {
335− "ms": "2.1.2"
336− }
337− },
338− "ms": {
339− "version": "2.1.2",
340− "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
341− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
342− }
3435535 }
3445536 },
345− "anser": {
346− "version": "1.4.9",
347− "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz",
348− "integrity": "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA=="
349− },
350− "ansi-regex": {
351− "version": "5.0.1",
352− "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
353− "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
354− },
3555537 "ansi-styles": {
356− "version": "3.2.1",
357− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
358− "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
5538+ "version": "4.3.0",
5539+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
5540+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
5541+ "dev": true,
3595542 "requires": {
360− "color-convert": "^1.9.0"
5543+ "color-convert": "^2.0.1"
3615544 }
3625545 },
3635546 "anymatch": {
@@ -388,11 +5571,6 @@
3885571 "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
3895572 "dev": true
3905573 },
391− "array-filter": {
392− "version": "1.0.0",
393− "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
394− "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
395− },
3965574 "array-union": {
3975575 "version": "2.1.0",
3985576 "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
@@ -405,67 +5583,32 @@
4055583 "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
4065584 "dev": true
4075585 },
408− "asn1.js": {
409− "version": "5.4.1",
410− "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
411− "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
412− "requires": {
413− "bn.js": "^4.0.0",
414− "inherits": "^2.0.1",
415− "minimalistic-assert": "^1.0.0",
416− "safer-buffer": "^2.1.0"
417− },
418− "dependencies": {
419− "bn.js": {
420− "version": "4.12.0",
421− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
422− "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
423− }
424− }
425− },
426− "assert": {
427− "version": "2.0.0",
428− "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
429− "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==",
430− "requires": {
431− "es6-object-assign": "^1.1.0",
432− "is-nan": "^1.2.1",
433− "object-is": "^1.0.1",
434− "util": "^0.12.0"
435− }
436− },
437− "ast-types": {
438− "version": "0.13.2",
439− "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz",
440− "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA=="
441− },
4425586 "asynckit": {
4435587 "version": "0.4.0",
4445588 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
4455589 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
4465590 },
4475591 "autoprefixer": {
448− "version": "10.3.5",
449− "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.5.tgz",
450− "integrity": "sha512-2H5kQSsyoOMdIehTzIt/sC9ZDIgWqlkG/dbevm9B9xQZ1TDPBHpNUDW5ENqqQQzuaBWEo75JkV0LJe+o5Lnr5g==",
451− "requires": {
452− "browserslist": "^4.17.1",
453− "caniuse-lite": "^1.0.30001259",
454− "fraction.js": "^4.1.1",
455− "nanocolors": "^0.1.5",
5592+ "version": "10.4.5",
5593+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz",
5594+ "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==",
5595+ "dev": true,
5596+ "requires": {
5597+ "browserslist": "^4.20.2",
5598+ "caniuse-lite": "^1.0.30001332",
5599+ "fraction.js": "^4.2.0",
4565600 "normalize-range": "^0.1.2",
457− "postcss-value-parser": "^4.1.0"
5601+ "picocolors": "^1.0.0",
5602+ "postcss-value-parser": "^4.2.0"
4585603 }
4595604 },
460− "available-typed-arrays": {
461− "version": "1.0.5",
462− "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
463− "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
464− },
465− "babel-plugin-syntax-jsx": {
466− "version": "6.18.0",
467− "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
468− "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
5605+ "axios": {
5606+ "version": "0.26.1",
5607+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
5608+ "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
5609+ "requires": {
5610+ "follow-redirects": "^1.14.8"
5611+ }
4695612 },
4705613 "bail": {
4715614 "version": "1.0.5",
@@ -475,32 +5618,29 @@
4755618 "balanced-match": {
4765619 "version": "1.0.2",
4775620 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
478− "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
5621+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
5622+ "dev": true
4795623 },
4805624 "base64-js": {
4815625 "version": "1.5.1",
4825626 "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
4835627 "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
4845628 },
485− "big.js": {
486− "version": "5.2.2",
487− "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
488− "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
489− },
4905629 "binary-extensions": {
4915630 "version": "2.2.0",
4925631 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
4935632 "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
4945633 },
4955634 "bn.js": {
496− "version": "5.2.0",
497− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
498− "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
5635+ "version": "4.12.0",
5636+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
5637+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
4995638 },
5005639 "brace-expansion": {
5015640 "version": "1.1.11",
5025641 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
5035642 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
5643+ "dev": true,
5045644 "requires": {
5055645 "balanced-match": "^1.0.0",
5065646 "concat-map": "0.0.1"
@@ -514,180 +5654,72 @@
5145654 "fill-range": "^7.0.1"
5155655 }
5165656 },
517− "brorand": {
518− "version": "1.1.0",
519− "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
520− "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
521− },
5225657 "browser-process-hrtime": {
5235658 "version": "1.0.0",
5245659 "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
5255660 "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
5265661 },
527− "browserify-aes": {
528− "version": "1.2.0",
529− "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
530− "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
531− "requires": {
532− "buffer-xor": "^1.0.3",
533− "cipher-base": "^1.0.0",
534− "create-hash": "^1.1.0",
535− "evp_bytestokey": "^1.0.3",
536− "inherits": "^2.0.1",
537− "safe-buffer": "^5.0.1"
538− }
539− },
540− "browserify-cipher": {
541− "version": "1.0.1",
542− "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
543− "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
544− "requires": {
545− "browserify-aes": "^1.0.4",
546− "browserify-des": "^1.0.0",
547− "evp_bytestokey": "^1.0.0"
548− }
549− },
550− "browserify-des": {
551− "version": "1.0.2",
552− "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
553− "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
554− "requires": {
555− "cipher-base": "^1.0.1",
556− "des.js": "^1.0.0",
557− "inherits": "^2.0.1",
558− "safe-buffer": "^5.1.2"
559− }
560− },
561− "browserify-rsa": {
562− "version": "4.1.0",
563− "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
564− "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
565− "requires": {
566− "bn.js": "^5.0.0",
567− "randombytes": "^2.0.1"
568− }
569− },
570− "browserify-sign": {
571− "version": "4.2.1",
572− "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
573− "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
574− "requires": {
575− "bn.js": "^5.1.1",
576− "browserify-rsa": "^4.0.1",
577− "create-hash": "^1.2.0",
578− "create-hmac": "^1.1.7",
579− "elliptic": "^6.5.3",
580− "inherits": "^2.0.4",
581− "parse-asn1": "^5.1.5",
582− "readable-stream": "^3.6.0",
583− "safe-buffer": "^5.2.0"
584− }
585− },
586− "browserify-zlib": {
587− "version": "0.2.0",
588− "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
589− "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
590− "requires": {
591− "pako": "~1.0.5"
592− }
593− },
5945662 "browserslist": {
595− "version": "4.17.1",
596− "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz",
597− "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==",
5663+ "version": "4.20.2",
5664+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
5665+ "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
5666+ "dev": true,
5985667 "requires": {
599− "caniuse-lite": "^1.0.30001259",
600− "electron-to-chromium": "^1.3.846",
5668+ "caniuse-lite": "^1.0.30001317",
5669+ "electron-to-chromium": "^1.4.84",
6015670 "escalade": "^3.1.1",
602− "nanocolors": "^0.1.5",
603− "node-releases": "^1.1.76"
5671+ "node-releases": "^2.0.2",
5672+ "picocolors": "^1.0.0"
6045673 }
6055674 },
6065675 "buffer": {
607− "version": "5.6.0",
608− "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
609− "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
610− "requires": {
611− "base64-js": "^1.0.2",
612− "ieee754": "^1.1.4"
613− }
614− },
615− "buffer-xor": {
616− "version": "1.0.3",
617− "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
618− "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
619− },
620− "builtin-status-codes": {
621− "version": "3.0.0",
622− "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
623− "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
624− },
625− "bytes": {
626− "version": "3.1.0",
627− "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
628− "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
629− },
630− "call-bind": {
631− "version": "1.0.2",
632− "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
633− "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
5676+ "version": "6.0.3",
5677+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
5678+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
6345679 "requires": {
635− "function-bind": "^1.1.1",
636− "get-intrinsic": "^1.0.2"
5680+ "base64-js": "^1.3.1",
5681+ "ieee754": "^1.2.1"
6375682 }
6385683 },
639− "call-signature": {
640− "version": "0.0.2",
641− "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz",
642− "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY="
643− },
644− "callsites": {
645− "version": "3.1.0",
646− "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
647− "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
648− },
6495684 "camelcase-css": {
6505685 "version": "2.0.1",
6515686 "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
6525687 "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
6535688 },
6545689 "caniuse-lite": {
655− "version": "1.0.30001260",
656− "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001260.tgz",
657− "integrity": "sha512-Fhjc/k8725ItmrvW5QomzxLeojewxvqiYCKeFcfFEhut28IVLdpHU19dneOmltZQIE5HNbawj1HYD+1f2bM1Dg==",
658− "requires": {
659− "nanocolors": "^0.1.0"
660− }
5690+ "version": "1.0.30001332",
5691+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
5692+ "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw=="
6615693 },
6625694 "ccount": {
663− "version": "1.1.0",
664− "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
665− "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg=="
5695+ "version": "2.0.1",
5696+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
5697+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
6665698 },
6675699 "chalk": {
668− "version": "2.4.2",
669− "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
670− "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
5700+ "version": "3.0.0",
5701+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
5702+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
5703+ "dev": true,
6715704 "requires": {
672− "ansi-styles": "^3.2.1",
673− "escape-string-regexp": "^1.0.5",
674− "supports-color": "^5.3.0"
5705+ "ansi-styles": "^4.1.0",
5706+ "supports-color": "^7.1.0"
6755707 }
6765708 },
6775709 "character-entities": {
678− "version": "1.2.4",
679− "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
680− "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
5710+ "version": "2.0.1",
5711+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz",
5712+ "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ=="
6815713 },
6825714 "character-entities-html4": {
683− "version": "1.1.4",
684− "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
685− "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g=="
5715+ "version": "2.1.0",
5716+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
5717+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="
6865718 },
6875719 "character-entities-legacy": {
688− "version": "1.1.4",
689− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
690− "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
5720+ "version": "3.0.0",
5721+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
5722+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="
6915723 },
6925724 "character-reference-invalid": {
6935725 "version": "1.1.4",
@@ -695,84 +5727,48 @@
6955727 "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="
6965728 },
6975729 "chokidar": {
698− "version": "3.5.1",
699− "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
700− "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
5730+ "version": "3.5.3",
5731+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
5732+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
7015733 "requires": {
702− "anymatch": "~3.1.1",
5734+ "anymatch": "~3.1.2",
7035735 "braces": "~3.0.2",
704− "fsevents": "~2.3.1",
705− "glob-parent": "~5.1.0",
5736+ "fsevents": "~2.3.2",
5737+ "glob-parent": "~5.1.2",
7065738 "is-binary-path": "~2.1.0",
7075739 "is-glob": "~4.0.1",
7085740 "normalize-path": "~3.0.0",
709− "readdirp": "~3.5.0"
710− }
711− },
712− "cipher-base": {
713− "version": "1.0.4",
714− "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
715− "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
716− "requires": {
717− "inherits": "^2.0.1",
718− "safe-buffer": "^5.0.1"
719− }
720− },
721− "classnames": {
722− "version": "2.3.1",
723− "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
724− "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
725− },
726− "color": {
727− "version": "4.0.1",
728− "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz",
729− "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==",
730− "requires": {
731− "color-convert": "^2.0.1",
732− "color-string": "^1.6.0"
5741+ "readdirp": "~3.6.0"
7335742 },
7345743 "dependencies": {
735− "color-convert": {
736− "version": "2.0.1",
737− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
738− "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
5744+ "glob-parent": {
5745+ "version": "5.1.2",
5746+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
5747+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
7395748 "requires": {
740− "color-name": "~1.1.4"
5749+ "is-glob": "^4.0.1"
7415750 }
742− },
743− "color-name": {
744− "version": "1.1.4",
745− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
746− "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
7475751 }
7485752 }
7495753 },
5754+ "classnames": {
5755+ "version": "2.3.1",
5756+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
5757+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
5758+ },
7505759 "color-convert": {
751− "version": "1.9.3",
752− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
753− "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
5760+ "version": "2.0.1",
5761+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
5762+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
5763+ "dev": true,
7545764 "requires": {
755− "color-name": "1.1.3"
5765+ "color-name": "~1.1.4"
7565766 }
7575767 },
7585768 "color-name": {
759− "version": "1.1.3",
760− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
761− "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
762− },
763− "color-string": {
764− "version": "1.6.0",
765− "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
766− "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
767− "requires": {
768− "color-name": "^1.0.0",
769− "simple-swizzle": "^0.2.2"
770− }
771− },
772− "colorette": {
773− "version": "1.4.0",
774− "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
775− "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="
5769+ "version": "1.1.4",
5770+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
5771+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
7765772 },
7775773 "combined-stream": {
7785774 "version": "1.0.8",
@@ -783,19 +5779,9 @@
7835779 }
7845780 },
7855781 "comma-separated-tokens": {
786− "version": "1.0.8",
787− "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
788− "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw=="
789− },
790− "commander": {
791− "version": "6.2.1",
792− "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
793− "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="
794− },
795− "commondir": {
796− "version": "1.0.1",
797− "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
798− "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
5782+ "version": "2.0.2",
5783+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
5784+ "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
7995785 },
8005786 "compute-scroll-into-view": {
8015787 "version": "1.0.17",
@@ -805,155 +5791,30 @@
8055791 "concat-map": {
8065792 "version": "0.0.1",
8075793 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
808− "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
809− },
810− "console-browserify": {
811− "version": "1.2.0",
812− "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
813− "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
814− },
815− "constants-browserify": {
816− "version": "1.0.0",
817− "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
818− "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
819− },
820− "convert-source-map": {
821− "version": "1.7.0",
822− "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
823− "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
824− "requires": {
825− "safe-buffer": "~5.1.1"
826− },
827− "dependencies": {
828− "safe-buffer": {
829− "version": "5.1.2",
830− "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
831− "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
832− }
833− }
834− },
835− "core-js": {
836− "version": "2.6.12",
837− "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
838− "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
839− },
840− "core-util-is": {
841− "version": "1.0.3",
842− "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
843− "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
844− },
845− "cosmiconfig": {
846− "version": "7.0.1",
847− "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
848− "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
849− "requires": {
850− "@types/parse-json": "^4.0.0",
851− "import-fresh": "^3.2.1",
852− "parse-json": "^5.0.0",
853− "path-type": "^4.0.0",
854− "yaml": "^1.10.0"
855− }
5794+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
5795+ "dev": true
8565796 },
857− "create-ecdh": {
858− "version": "4.0.4",
859− "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
860− "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
5797+ "cross-spawn": {
5798+ "version": "7.0.3",
5799+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
5800+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
5801+ "dev": true,
8615802 "requires": {
862− "bn.js": "^4.1.0",
863− "elliptic": "^6.5.3"
864− },
865− "dependencies": {
866− "bn.js": {
867− "version": "4.12.0",
868− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
869− "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
870− }
5803+ "path-key": "^3.1.0",
5804+ "shebang-command": "^2.0.0",
5805+ "which": "^2.0.1"
8715806 }
8725807 },
873− "create-hash": {
874− "version": "1.2.0",
875− "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
876− "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
877− "requires": {
878− "cipher-base": "^1.0.1",
879− "inherits": "^2.0.1",
880− "md5.js": "^1.3.4",
881− "ripemd160": "^2.0.1",
882− "sha.js": "^2.4.0"
883− }
884− },
885− "create-hmac": {
886− "version": "1.1.7",
887− "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
888− "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
889− "requires": {
890− "cipher-base": "^1.0.3",
891− "create-hash": "^1.1.0",
892− "inherits": "^2.0.1",
893− "ripemd160": "^2.0.0",
894− "safe-buffer": "^5.0.1",
895− "sha.js": "^2.4.8"
896− }
897− },
898− "crypto-browserify": {
899− "version": "3.12.0",
900− "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
901− "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
902− "requires": {
903− "browserify-cipher": "^1.0.0",
904− "browserify-sign": "^4.0.0",
905− "create-ecdh": "^4.0.0",
906− "create-hash": "^1.1.0",
907− "create-hmac": "^1.1.0",
908− "diffie-hellman": "^5.0.0",
909− "inherits": "^2.0.1",
910− "pbkdf2": "^3.0.3",
911− "public-encrypt": "^4.0.0",
912− "randombytes": "^2.0.0",
913− "randomfill": "^1.0.3"
914− }
915− },
916− "css-color-names": {
917− "version": "0.0.4",
918− "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
919− "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
920− },
9215808 "css-selector-parser": {
9225809 "version": "1.4.1",
9235810 "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz",
9245811 "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g=="
9255812 },
926− "css-unit-converter": {
927− "version": "1.1.2",
928− "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
929− "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
930− },
931− "css.escape": {
932− "version": "1.5.1",
933− "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
934− "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s="
935− },
9365813 "cssesc": {
9375814 "version": "3.0.0",
9385815 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
9395816 "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
9405817 },
941− "cssnano-preset-simple": {
942− "version": "2.0.0",
943− "resolved": "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-2.0.0.tgz",
944− "integrity": "sha512-HkufSLkaBJbKBFx/7aj5HmCK9Ni/JedRQm0mT2qBzMG/dEuJOLnMt2lK6K1rwOOyV4j9aSY+knbW9WoS7BYpzg==",
945− "requires": {
946− "caniuse-lite": "^1.0.30001202"
947− }
948− },
949− "cssnano-simple": {
950− "version": "2.0.0",
951− "resolved": "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-2.0.0.tgz",
952− "integrity": "sha512-0G3TXaFxlh/szPEG/o3VcmCwl0N3E60XNb9YZZijew5eIs6fLjJuOPxQd9yEBaX2p/YfJtt49i4vYi38iH6/6w==",
953− "requires": {
954− "cssnano-preset-simple": "^2.0.0"
955− }
956− },
9575818 "cssom": {
9585819 "version": "0.4.4",
9595820 "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
@@ -974,11 +5835,6 @@
9745835 }
9755836 }
9765837 },
977− "data-uri-to-buffer": {
978− "version": "3.0.1",
979− "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
980− "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
981− },
9825838 "data-urls": {
9835839 "version": "2.0.0",
9845840 "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
@@ -987,39 +5843,14 @@
9875843 "abab": "^2.0.3",
9885844 "whatwg-mimetype": "^2.3.0",
9895845 "whatwg-url": "^8.0.0"
990− },
991− "dependencies": {
992− "tr46": {
993− "version": "2.1.0",
994− "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
995− "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
996− "requires": {
997− "punycode": "^2.1.1"
998− }
999− },
1000− "webidl-conversions": {
1001− "version": "6.1.0",
1002− "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
1003− "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
1004− },
1005− "whatwg-url": {
1006− "version": "8.7.0",
1007− "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
1008− "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
1009− "requires": {
1010− "lodash": "^4.7.0",
1011− "tr46": "^2.1.0",
1012− "webidl-conversions": "^6.1.0"
1013− }
1014− }
10155846 }
10165847 },
10175848 "debug": {
1018− "version": "2.6.9",
1019− "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1020− "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
5849+ "version": "4.3.4",
5850+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
5851+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
10215852 "requires": {
1022− "ms": "2.0.0"
5853+ "ms": "2.1.2"
10235854 }
10245855 },
10255856 "decimal.js": {
@@ -1027,24 +5858,48 @@
10275858 "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
10285859 "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
10295860 },
5861+ "decode-named-character-reference": {
5862+ "version": "1.0.1",
5863+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz",
5864+ "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==",
5865+ "requires": {
5866+ "character-entities": "^2.0.0"
5867+ }
5868+ },
10305869 "deep-is": {
10315870 "version": "0.1.4",
10325871 "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
10335872 "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
10345873 },
5874+ "deep-rename-keys": {
5875+ "version": "0.2.1",
5876+ "resolved": "https://registry.npmjs.org/deep-rename-keys/-/deep-rename-keys-0.2.1.tgz",
5877+ "integrity": "sha1-7eeFN9emaivmFRfir5Vtf1ij8dg=",
5878+ "requires": {
5879+ "kind-of": "^3.0.2",
5880+ "rename-keys": "^1.1.2"
5881+ },
5882+ "dependencies": {
5883+ "is-buffer": {
5884+ "version": "1.1.6",
5885+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
5886+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
5887+ },
5888+ "kind-of": {
5889+ "version": "3.2.2",
5890+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
5891+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
5892+ "requires": {
5893+ "is-buffer": "^1.1.5"
5894+ }
5895+ }
5896+ }
5897+ },
10355898 "deepmerge": {
10365899 "version": "4.2.2",
10375900 "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
10385901 "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
10395902 },
1040− "define-properties": {
1041− "version": "1.1.3",
1042− "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
1043− "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
1044− "requires": {
1045− "object-keys": "^1.0.12"
1046− }
1047− },
10485903 "defined": {
10495904 "version": "1.0.0",
10505905 "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
@@ -1055,19 +5910,10 @@
10555910 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
10565911 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
10575912 },
1058− "depd": {
1059− "version": "1.1.2",
1060− "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
1061− "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
1062− },
1063− "des.js": {
1064− "version": "1.0.1",
1065− "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
1066− "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
1067− "requires": {
1068− "inherits": "^2.0.1",
1069− "minimalistic-assert": "^1.0.0"
1070− }
5913+ "dequal": {
5914+ "version": "2.0.2",
5915+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz",
5916+ "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug=="
10715917 },
10725918 "detective": {
10735919 "version": "5.2.0",
@@ -1084,38 +5930,16 @@
10845930 "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
10855931 "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
10865932 },
1087− "diff-match-patch": {
1088− "version": "1.0.5",
1089− "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
1090− "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="
1091− },
1092− "diffie-hellman": {
1093− "version": "5.0.3",
1094− "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
1095− "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
1096− "requires": {
1097− "bn.js": "^4.1.0",
1098− "miller-rabin": "^4.0.0",
1099− "randombytes": "^2.0.0"
1100− },
1101− "dependencies": {
1102− "bn.js": {
1103− "version": "4.12.0",
1104− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
1105− "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
1106− }
1107− }
5933+ "diff": {
5934+ "version": "5.0.0",
5935+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
5936+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
11085937 },
11095938 "dlv": {
11105939 "version": "1.1.3",
11115940 "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
11125941 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
11135942 },
1114− "domain-browser": {
1115− "version": "4.19.0",
1116− "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz",
1117− "integrity": "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ=="
1118− },
11195943 "domexception": {
11205944 "version": "2.0.1",
11215945 "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
@@ -1143,67 +5967,11 @@
11435967 "tslib": "^2.3.0"
11445968 }
11455969 },
1146− "eastasianwidth": {
1147− "version": "0.2.0",
1148− "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1149− "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
1150− },
11515970 "electron-to-chromium": {
1152− "version": "1.3.850",
1153− "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.850.tgz",
1154− "integrity": "sha512-ZzkDcdzePeF4dhoGZQT77V2CyJOpwfTZEOg4h0x6R/jQhGt/rIRpbRyVreWLtD7B/WsVxo91URm2WxMKR9JQZA=="
1155− },
1156− "elliptic": {
1157− "version": "6.5.4",
1158− "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
1159− "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
1160− "requires": {
1161− "bn.js": "^4.11.9",
1162− "brorand": "^1.1.0",
1163− "hash.js": "^1.0.0",
1164− "hmac-drbg": "^1.0.1",
1165− "inherits": "^2.0.4",
1166− "minimalistic-assert": "^1.0.1",
1167− "minimalistic-crypto-utils": "^1.0.1"
1168− },
1169− "dependencies": {
1170− "bn.js": {
1171− "version": "4.12.0",
1172− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
1173− "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
1174− }
1175− }
1176− },
1177− "emojis-list": {
1178− "version": "2.1.0",
1179− "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
1180− "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
1181− },
1182− "empower": {
1183− "version": "1.3.1",
1184− "resolved": "https://registry.npmjs.org/empower/-/empower-1.3.1.tgz",
1185− "integrity": "sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==",
1186− "requires": {
1187− "core-js": "^2.0.0",
1188− "empower-core": "^1.2.0"
1189− }
1190− },
1191− "empower-core": {
1192− "version": "1.2.0",
1193− "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-1.2.0.tgz",
1194− "integrity": "sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==",
1195− "requires": {
1196− "call-signature": "0.0.2",
1197− "core-js": "^2.0.0"
1198− }
1199− },
1200− "encoding": {
1201− "version": "0.1.13",
1202− "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
1203− "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
1204− "requires": {
1205− "iconv-lite": "^0.6.2"
1206− }
5971+ "version": "1.4.118",
5972+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz",
5973+ "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==",
5974+ "dev": true
12075975 },
12085976 "end-of-stream": {
12095977 "version": "1.4.4",
@@ -1215,74 +5983,20 @@
12155983 }
12165984 },
12175985 "enhanced-resolve": {
1218− "version": "5.8.3",
1219− "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
1220− "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
5986+ "version": "5.9.3",
5987+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
5988+ "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
12215989 "dev": true,
12225990 "requires": {
12235991 "graceful-fs": "^4.2.4",
1224− "tapable": "^2.2.0"
1225− }
1226− },
1227− "error-ex": {
1228− "version": "1.3.2",
1229− "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
1230− "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
1231− "requires": {
1232− "is-arrayish": "^0.2.1"
1233− },
1234− "dependencies": {
1235− "is-arrayish": {
1236− "version": "0.2.1",
1237− "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1238− "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
1239− }
1240− }
1241− },
1242− "es-abstract": {
1243− "version": "1.18.6",
1244− "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
1245− "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==",
1246− "requires": {
1247− "call-bind": "^1.0.2",
1248− "es-to-primitive": "^1.2.1",
1249− "function-bind": "^1.1.1",
1250− "get-intrinsic": "^1.1.1",
1251− "get-symbol-description": "^1.0.0",
1252− "has": "^1.0.3",
1253− "has-symbols": "^1.0.2",
1254− "internal-slot": "^1.0.3",
1255− "is-callable": "^1.2.4",
1256− "is-negative-zero": "^2.0.1",
1257− "is-regex": "^1.1.4",
1258− "is-string": "^1.0.7",
1259− "object-inspect": "^1.11.0",
1260− "object-keys": "^1.1.1",
1261− "object.assign": "^4.1.2",
1262− "string.prototype.trimend": "^1.0.4",
1263− "string.prototype.trimstart": "^1.0.4",
1264− "unbox-primitive": "^1.0.1"
1265− }
1266− },
1267− "es-to-primitive": {
1268− "version": "1.2.1",
1269− "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
1270− "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
1271− "requires": {
1272− "is-callable": "^1.1.4",
1273− "is-date-object": "^1.0.1",
1274− "is-symbol": "^1.0.2"
5992+ "tapable": "^2.2.0"
12755993 }
12765994 },
1277− "es6-object-assign": {
1278− "version": "1.1.0",
1279− "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
1280− "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw="
1281− },
12825995 "escalade": {
12835996 "version": "3.1.1",
12845997 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1285− "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
5998+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
5999+ "dev": true
12866000 },
12876001 "escape-html": {
12886002 "version": "1.0.3",
@@ -1290,9 +6004,9 @@
12906004 "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
12916005 },
12926006 "escape-string-regexp": {
1293− "version": "1.0.5",
1294− "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1295− "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
6007+ "version": "5.0.0",
6008+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
6009+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
12966010 },
12976011 "escodegen": {
12986012 "version": "2.0.0",
@@ -1304,14 +6018,6 @@
13046018 "esutils": "^2.0.2",
13056019 "optionator": "^0.8.1",
13066020 "source-map": "~0.6.1"
1307− },
1308− "dependencies": {
1309− "source-map": {
1310− "version": "0.6.1",
1311− "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1312− "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1313− "optional": true
1314− }
13156021 }
13166022 },
13176023 "esprima": {
@@ -1319,42 +6025,20 @@
13196025 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
13206026 "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
13216027 },
1322− "espurify": {
1323− "version": "1.8.1",
1324− "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.8.1.tgz",
1325− "integrity": "sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==",
1326− "requires": {
1327− "core-js": "^2.0.0"
1328− }
1329− },
13306028 "estraverse": {
1331− "version": "5.2.0",
1332− "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
1333− "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
6029+ "version": "5.3.0",
6030+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
6031+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
13346032 },
13356033 "esutils": {
13366034 "version": "2.0.3",
13376035 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
13386036 "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
13396037 },
1340− "etag": {
1341− "version": "1.8.1",
1342− "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1343− "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
1344− },
1345− "events": {
1346− "version": "3.3.0",
1347− "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
1348− "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
1349− },
1350− "evp_bytestokey": {
1351− "version": "1.0.3",
1352− "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
1353− "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
1354− "requires": {
1355− "md5.js": "^1.3.4",
1356− "safe-buffer": "^5.1.1"
1357− }
6038+ "eventemitter3": {
6039+ "version": "2.0.3",
6040+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
6041+ "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
13586042 },
13596043 "execa": {
13606044 "version": "4.1.0",
@@ -1371,49 +6055,6 @@
13716055 "onetime": "^5.1.0",
13726056 "signal-exit": "^3.0.2",
13736057 "strip-final-newline": "^2.0.0"
1374− },
1375− "dependencies": {
1376− "cross-spawn": {
1377− "version": "7.0.3",
1378− "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1379− "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1380− "dev": true,
1381− "requires": {
1382− "path-key": "^3.1.0",
1383− "shebang-command": "^2.0.0",
1384− "which": "^2.0.1"
1385− }
1386− },
1387− "path-key": {
1388− "version": "3.1.1",
1389− "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1390− "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1391− "dev": true
1392− },
1393− "shebang-command": {
1394− "version": "2.0.0",
1395− "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1396− "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1397− "dev": true,
1398− "requires": {
1399− "shebang-regex": "^3.0.0"
1400− }
1401− },
1402− "shebang-regex": {
1403− "version": "3.0.0",
1404− "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1405− "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1406− "dev": true
1407− },
1408− "which": {
1409− "version": "2.0.2",
1410− "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1411− "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1412− "dev": true,
1413− "requires": {
1414− "isexe": "^2.0.0"
1415− }
1416− }
14176058 }
14186059 },
14196060 "extend": {
@@ -1430,15 +6071,25 @@
14306071 }
14316072 },
14326073 "fast-glob": {
1433− "version": "3.2.7",
1434− "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
1435− "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
6074+ "version": "3.2.11",
6075+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
6076+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
14366077 "requires": {
14376078 "@nodelib/fs.stat": "^2.0.2",
14386079 "@nodelib/fs.walk": "^1.2.3",
14396080 "glob-parent": "^5.1.2",
14406081 "merge2": "^1.3.0",
14416082 "micromatch": "^4.0.4"
6083+ },
6084+ "dependencies": {
6085+ "glob-parent": {
6086+ "version": "5.1.2",
6087+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
6088+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
6089+ "requires": {
6090+ "is-glob": "^4.0.1"
6091+ }
6092+ }
14426093 }
14436094 },
14446095 "fast-levenshtein": {
@@ -1470,29 +6121,20 @@
14706121 "to-regex-range": "^5.0.1"
14716122 }
14726123 },
1473− "find-cache-dir": {
1474− "version": "3.3.1",
1475− "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
1476− "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
1477− "requires": {
1478− "commondir": "^1.0.1",
1479− "make-dir": "^3.0.2",
1480− "pkg-dir": "^4.1.0"
1481− }
1482− },
14836124 "find-up": {
14846125 "version": "4.1.0",
14856126 "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
14866127 "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
6128+ "dev": true,
14876129 "requires": {
14886130 "locate-path": "^5.0.0",
14896131 "path-exists": "^4.0.0"
14906132 }
14916133 },
1492− "foreach": {
1493− "version": "2.0.5",
1494− "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
1495− "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
6134+ "follow-redirects": {
6135+ "version": "1.14.9",
6136+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
6137+ "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
14966138 },
14976139 "form-data": {
14986140 "version": "3.0.1",
@@ -1505,14 +6147,10 @@
15056147 }
15066148 },
15076149 "fraction.js": {
1508− "version": "4.1.1",
1509− "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz",
1510− "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg=="
1511− },
1512− "fs.realpath": {
1513− "version": "1.0.0",
1514− "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1515− "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
6150+ "version": "4.2.0",
6151+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
6152+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
6153+ "dev": true
15166154 },
15176155 "fsevents": {
15186156 "version": "2.3.2",
@@ -1530,24 +6168,6 @@
15306168 "resolved": "https://registry.npmjs.org/fuzzy-search/-/fuzzy-search-3.2.1.tgz",
15316169 "integrity": "sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg=="
15326170 },
1533− "get-intrinsic": {
1534− "version": "1.1.1",
1535− "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
1536− "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
1537− "requires": {
1538− "function-bind": "^1.1.1",
1539− "has": "^1.0.3",
1540− "has-symbols": "^1.0.1"
1541− }
1542− },
1543− "get-orientation": {
1544− "version": "1.1.2",
1545− "resolved": "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz",
1546− "integrity": "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==",
1547− "requires": {
1548− "stream-parser": "^0.3.1"
1549− }
1550− },
15516171 "get-stream": {
15526172 "version": "5.2.0",
15536173 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -1557,50 +6177,29 @@
15576177 "pump": "^3.0.0"
15586178 }
15596179 },
1560− "get-symbol-description": {
1561− "version": "1.0.0",
1562− "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
1563− "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
1564− "requires": {
1565− "call-bind": "^1.0.2",
1566− "get-intrinsic": "^1.1.1"
1567− }
6180+ "get-value": {
6181+ "version": "2.0.6",
6182+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
6183+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
15686184 },
15696185 "github-slugger": {
15706186 "version": "1.4.0",
15716187 "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz",
15726188 "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ=="
15736189 },
1574− "glob": {
1575− "version": "7.2.0",
1576− "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1577− "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
1578− "requires": {
1579− "fs.realpath": "^1.0.0",
1580− "inflight": "^1.0.4",
1581− "inherits": "2",
1582− "minimatch": "^3.0.4",
1583− "once": "^1.3.0",
1584− "path-is-absolute": "^1.0.0"
1585− }
1586− },
15876190 "glob-parent": {
1588− "version": "5.1.2",
1589− "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1590− "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
6191+ "version": "6.0.2",
6192+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
6193+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
15916194 "requires": {
1592− "is-glob": "^4.0.1"
6195+ "is-glob": "^4.0.3"
15936196 }
15946197 },
1595− "glob-to-regexp": {
1596− "version": "0.4.1",
1597− "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
1598− "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
1599− },
16006198 "graceful-fs": {
1601− "version": "4.2.8",
1602− "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
1603− "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
6199+ "version": "4.2.10",
6200+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
6201+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
6202+ "dev": true
16046203 },
16056204 "gray-matter": {
16066205 "version": "4.0.3",
@@ -1621,47 +6220,36 @@
16216220 "function-bind": "^1.1.1"
16226221 }
16236222 },
1624− "has-bigints": {
1625− "version": "1.0.1",
1626− "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
1627− "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
1628− },
16296223 "has-flag": {
1630− "version": "3.0.0",
1631− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1632− "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
1633− },
1634− "has-symbols": {
1635− "version": "1.0.2",
1636− "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
1637− "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
1638− },
1639− "has-tostringtag": {
1640− "version": "1.0.0",
1641− "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
1642− "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
1643− "requires": {
1644− "has-symbols": "^1.0.2"
1645− }
6224+ "version": "4.0.0",
6225+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
6226+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
6227+ "dev": true
16466228 },
1647− "hash-base": {
1648− "version": "3.1.0",
1649− "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
1650− "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
6229+ "has-value": {
6230+ "version": "0.3.1",
6231+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
6232+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
16516233 "requires": {
1652− "inherits": "^2.0.4",
1653− "readable-stream": "^3.6.0",
1654− "safe-buffer": "^5.2.0"
6234+ "get-value": "^2.0.3",
6235+ "has-values": "^0.1.4",
6236+ "isobject": "^2.0.0"
6237+ },
6238+ "dependencies": {
6239+ "isobject": {
6240+ "version": "2.1.0",
6241+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
6242+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
6243+ "requires": {
6244+ "isarray": "1.0.0"
6245+ }
6246+ }
16556247 }
16566248 },
1657− "hash.js": {
1658− "version": "1.1.7",
1659− "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
1660− "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
1661− "requires": {
1662− "inherits": "^2.0.3",
1663− "minimalistic-assert": "^1.0.1"
1664− }
6249+ "has-values": {
6250+ "version": "0.1.4",
6251+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
6252+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
16656253 },
16666254 "hast-to-hyperscript": {
16676255 "version": "10.0.1",
@@ -1675,28 +6263,6 @@
16756263 "style-to-object": "^0.3.0",
16766264 "unist-util-is": "^5.0.0",
16776265 "web-namespaces": "^2.0.0"
1678− },
1679− "dependencies": {
1680− "comma-separated-tokens": {
1681− "version": "2.0.2",
1682− "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
1683− "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
1684− },
1685− "property-information": {
1686− "version": "6.0.1",
1687− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
1688− "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
1689− },
1690− "space-separated-tokens": {
1691− "version": "2.0.1",
1692− "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
1693− "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
1694− },
1695− "unist-util-is": {
1696− "version": "5.1.1",
1697− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
1698− "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
1699− }
17006266 }
17016267 },
17026268 "hast-util-from-parse5": {
@@ -1712,47 +6278,16 @@
17126278 "vfile": "^5.0.0",
17136279 "vfile-location": "^4.0.0",
17146280 "web-namespaces": "^2.0.0"
1715− },
1716− "dependencies": {
1717− "property-information": {
1718− "version": "6.0.1",
1719− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
1720− "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
1721− },
1722− "unist-util-stringify-position": {
1723− "version": "3.0.0",
1724− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
1725− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
1726− "requires": {
1727− "@types/unist": "^2.0.0"
1728− }
1729− },
1730− "vfile": {
1731− "version": "5.1.0",
1732− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
1733− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
1734− "requires": {
1735− "@types/unist": "^2.0.0",
1736− "is-buffer": "^2.0.0",
1737− "unist-util-stringify-position": "^3.0.0",
1738− "vfile-message": "^3.0.0"
1739− }
1740− },
1741− "vfile-message": {
1742− "version": "3.0.2",
1743− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
1744− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
1745− "requires": {
1746− "@types/unist": "^2.0.0",
1747− "unist-util-stringify-position": "^3.0.0"
1748− }
1749− }
17506281 }
17516282 },
17526283 "hast-util-is-element": {
1753− "version": "1.1.0",
1754− "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
1755− "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ=="
6284+ "version": "2.1.2",
6285+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz",
6286+ "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==",
6287+ "requires": {
6288+ "@types/hast": "^2.0.0",
6289+ "@types/unist": "^2.0.0"
6290+ }
17566291 },
17576292 "hast-util-parse-selector": {
17586293 "version": "3.1.0",
@@ -1763,9 +6298,9 @@
17636298 }
17646299 },
17656300 "hast-util-raw": {
1766− "version": "7.2.0",
1767− "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.0.tgz",
1768− "integrity": "sha512-K2ofsY59XqrtBNUAkvT2vPdyNPUchjj1Z0FxUOwBadS6R5h9O3LaRZqpukQ+YfgQ/IMy9GGMB/Nlpzpu+cuuMA==",
6301+ "version": "7.2.1",
6302+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.1.tgz",
6303+ "integrity": "sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A==",
17696304 "requires": {
17706305 "@types/hast": "^2.0.0",
17716306 "@types/parse5": "^6.0.0",
@@ -1778,75 +6313,6 @@
17786313 "vfile": "^5.0.0",
17796314 "web-namespaces": "^2.0.0",
17806315 "zwitch": "^2.0.0"
1781− },
1782− "dependencies": {
1783− "html-void-elements": {
1784− "version": "2.0.0",
1785− "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.0.tgz",
1786− "integrity": "sha512-4OYzQQsBt0G9bJ/nM9/DDsjm4+fVdzAaPJJcWk5QwA3GIAPxQEeOR0rsI8HbDHQz5Gta8pVvGnnTNSbZVEVvkQ=="
1787− },
1788− "unist-util-is": {
1789− "version": "5.1.1",
1790− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
1791− "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
1792− },
1793− "unist-util-position": {
1794− "version": "4.0.1",
1795− "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz",
1796− "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA=="
1797− },
1798− "unist-util-stringify-position": {
1799− "version": "3.0.0",
1800− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
1801− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
1802− "requires": {
1803− "@types/unist": "^2.0.0"
1804− }
1805− },
1806− "unist-util-visit": {
1807− "version": "4.1.0",
1808− "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
1809− "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
1810− "requires": {
1811− "@types/unist": "^2.0.0",
1812− "unist-util-is": "^5.0.0",
1813− "unist-util-visit-parents": "^5.0.0"
1814− }
1815− },
1816− "unist-util-visit-parents": {
1817− "version": "5.1.0",
1818− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
1819− "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
1820− "requires": {
1821− "@types/unist": "^2.0.0",
1822− "unist-util-is": "^5.0.0"
1823− }
1824− },
1825− "vfile": {
1826− "version": "5.1.0",
1827− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
1828− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
1829− "requires": {
1830− "@types/unist": "^2.0.0",
1831− "is-buffer": "^2.0.0",
1832− "unist-util-stringify-position": "^3.0.0",
1833− "vfile-message": "^3.0.0"
1834− }
1835− },
1836− "vfile-message": {
1837− "version": "3.0.2",
1838− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
1839− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
1840− "requires": {
1841− "@types/unist": "^2.0.0",
1842− "unist-util-stringify-position": "^3.0.0"
1843− }
1844− },
1845− "zwitch": {
1846− "version": "2.0.2",
1847− "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
1848− "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA=="
1849− }
18506316 }
18516317 },
18526318 "hast-util-sanitize": {
@@ -1858,20 +6324,20 @@
18586324 }
18596325 },
18606326 "hast-util-to-html": {
1861− "version": "7.1.3",
1862− "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz",
1863− "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==",
6327+ "version": "8.0.3",
6328+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz",
6329+ "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==",
18646330 "requires": {
1865− "ccount": "^1.0.0",
1866− "comma-separated-tokens": "^1.0.0",
1867− "hast-util-is-element": "^1.0.0",
1868− "hast-util-whitespace": "^1.0.0",
1869− "html-void-elements": "^1.0.0",
1870− "property-information": "^5.0.0",
1871− "space-separated-tokens": "^1.0.0",
1872− "stringify-entities": "^3.0.1",
1873− "unist-util-is": "^4.0.0",
1874− "xtend": "^4.0.0"
6331+ "@types/hast": "^2.0.0",
6332+ "ccount": "^2.0.0",
6333+ "comma-separated-tokens": "^2.0.0",
6334+ "hast-util-is-element": "^2.0.0",
6335+ "hast-util-whitespace": "^2.0.0",
6336+ "html-void-elements": "^2.0.0",
6337+ "property-information": "^6.0.0",
6338+ "space-separated-tokens": "^2.0.0",
6339+ "stringify-entities": "^4.0.2",
6340+ "unist-util-is": "^5.0.0"
18756341 }
18766342 },
18776343 "hast-util-to-parse5": {
@@ -1885,24 +6351,12 @@
18856351 "property-information": "^6.0.0",
18866352 "web-namespaces": "^2.0.0",
18876353 "zwitch": "^2.0.0"
1888− },
1889− "dependencies": {
1890− "property-information": {
1891− "version": "6.0.1",
1892− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
1893− "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
1894− },
1895− "zwitch": {
1896− "version": "2.0.2",
1897− "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
1898− "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA=="
1899− }
19006354 }
19016355 },
19026356 "hast-util-whitespace": {
1903− "version": "1.0.4",
1904− "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
1905− "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A=="
6357+ "version": "2.0.0",
6358+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
6359+ "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg=="
19066360 },
19076361 "hastscript": {
19086362 "version": "7.0.2",
@@ -1914,55 +6368,8 @@
19146368 "hast-util-parse-selector": "^3.0.0",
19156369 "property-information": "^6.0.0",
19166370 "space-separated-tokens": "^2.0.0"
1917− },
1918− "dependencies": {
1919− "comma-separated-tokens": {
1920− "version": "2.0.2",
1921− "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
1922− "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
1923− },
1924− "property-information": {
1925− "version": "6.0.1",
1926− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
1927− "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
1928− },
1929− "space-separated-tokens": {
1930− "version": "2.0.1",
1931− "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
1932− "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
1933− }
1934− }
1935− },
1936− "he": {
1937− "version": "1.2.0",
1938− "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
1939− "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
1940− },
1941− "hex-color-regex": {
1942− "version": "1.1.0",
1943− "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
1944− "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
1945− },
1946− "hmac-drbg": {
1947− "version": "1.0.1",
1948− "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
1949− "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
1950− "requires": {
1951− "hash.js": "^1.0.3",
1952− "minimalistic-assert": "^1.0.0",
1953− "minimalistic-crypto-utils": "^1.0.1"
19546371 }
19556372 },
1956− "hsl-regex": {
1957− "version": "1.0.0",
1958− "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
1959− "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4="
1960− },
1961− "hsla-regex": {
1962− "version": "1.0.0",
1963− "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
1964− "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
1965− },
19666373 "html-encoding-sniffer": {
19676374 "version": "2.0.1",
19686375 "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
@@ -1972,31 +6379,14 @@
19726379 }
19736380 },
19746381 "html-entities": {
1975− "version": "2.3.2",
1976− "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
1977− "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ=="
1978− },
1979− "html-tags": {
1980− "version": "3.1.0",
1981− "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
1982− "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg=="
6382+ "version": "2.3.3",
6383+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
6384+ "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
19836385 },
19846386 "html-void-elements": {
1985− "version": "1.0.5",
1986− "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
1987− "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w=="
1988− },
1989− "http-errors": {
1990− "version": "1.7.3",
1991− "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
1992− "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
1993− "requires": {
1994− "depd": "~1.1.2",
1995− "inherits": "2.0.4",
1996− "setprototypeof": "1.1.1",
1997− "statuses": ">= 1.5.0 < 2",
1998− "toidentifier": "1.0.0"
1999− }
6387+ "version": "2.0.1",
6388+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
6389+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
20006390 },
20016391 "http-proxy-agent": {
20026392 "version": "4.0.1",
@@ -2006,50 +6396,15 @@
20066396 "@tootallnate/once": "1",
20076397 "agent-base": "6",
20086398 "debug": "4"
2009− },
2010− "dependencies": {
2011− "debug": {
2012− "version": "4.3.2",
2013− "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
2014− "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
2015− "requires": {
2016− "ms": "2.1.2"
2017− }
2018− },
2019− "ms": {
2020− "version": "2.1.2",
2021− "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2022− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2023− }
20246399 }
20256400 },
2026− "https-browserify": {
2027− "version": "1.0.0",
2028− "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
2029− "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
2030− },
20316401 "https-proxy-agent": {
2032− "version": "5.0.0",
2033− "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
2034− "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
6402+ "version": "5.0.1",
6403+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
6404+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
20356405 "requires": {
20366406 "agent-base": "6",
20376407 "debug": "4"
2038− },
2039− "dependencies": {
2040− "debug": {
2041− "version": "4.3.2",
2042− "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
2043− "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
2044− "requires": {
2045− "ms": "2.1.2"
2046− }
2047− },
2048− "ms": {
2049− "version": "2.1.2",
2050− "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2051− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2052− }
20536408 }
20546409 },
20556410 "human-signals": {
@@ -2065,11 +6420,11 @@
20656420 "dev": true
20666421 },
20676422 "iconv-lite": {
2068− "version": "0.6.3",
2069− "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
2070− "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
6423+ "version": "0.4.24",
6424+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
6425+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
20716426 "requires": {
2072− "safer-buffer": ">= 2.1.2 < 3.0.0"
6427+ "safer-buffer": ">= 2.1.2 < 3"
20736428 }
20746429 },
20756430 "ieee754": {
@@ -2078,57 +6433,11 @@
20786433 "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
20796434 },
20806435 "ignore": {
2081− "version": "5.1.8",
2082− "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
2083− "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
6436+ "version": "5.2.0",
6437+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
6438+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
20846439 "dev": true
20856440 },
2086− "import-cwd": {
2087− "version": "3.0.0",
2088− "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
2089− "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
2090− "requires": {
2091− "import-from": "^3.0.0"
2092− }
2093− },
2094− "import-fresh": {
2095− "version": "3.3.0",
2096− "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2097− "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2098− "requires": {
2099− "parent-module": "^1.0.0",
2100− "resolve-from": "^4.0.0"
2101− }
2102− },
2103− "import-from": {
2104− "version": "3.0.0",
2105− "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
2106− "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
2107− "requires": {
2108− "resolve-from": "^5.0.0"
2109− },
2110− "dependencies": {
2111− "resolve-from": {
2112− "version": "5.0.0",
2113− "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
2114− "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
2115− }
2116− }
2117− },
2118− "indexof": {
2119− "version": "0.0.1",
2120− "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
2121− "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
2122− },
2123− "inflight": {
2124− "version": "1.0.6",
2125− "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2126− "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
2127− "requires": {
2128− "once": "^1.3.0",
2129− "wrappy": "1"
2130− }
2131− },
21326441 "inherits": {
21336442 "version": "2.0.4",
21346443 "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -2139,14 +6448,12 @@
21396448 "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
21406449 "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
21416450 },
2142− "internal-slot": {
2143− "version": "1.0.3",
2144− "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
2145− "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
6451+ "invariant": {
6452+ "version": "2.2.4",
6453+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
6454+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
21466455 "requires": {
2147− "get-intrinsic": "^1.1.0",
2148− "has": "^1.0.3",
2149− "side-channel": "^1.0.4"
6456+ "loose-envify": "^1.0.0"
21506457 }
21516458 },
21526459 "is-alphabetical": {
@@ -2163,28 +6470,6 @@
21636470 "is-decimal": "^1.0.0"
21646471 }
21656472 },
2166− "is-arguments": {
2167− "version": "1.1.1",
2168− "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
2169− "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
2170− "requires": {
2171− "call-bind": "^1.0.2",
2172− "has-tostringtag": "^1.0.0"
2173− }
2174− },
2175− "is-arrayish": {
2176− "version": "0.3.2",
2177− "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
2178− "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
2179− },
2180− "is-bigint": {
2181− "version": "1.0.4",
2182− "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
2183− "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
2184− "requires": {
2185− "has-bigints": "^1.0.1"
2186− }
2187− },
21886473 "is-binary-path": {
21896474 "version": "2.1.0",
21906475 "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -2193,54 +6478,19 @@
21936478 "binary-extensions": "^2.0.0"
21946479 }
21956480 },
2196− "is-boolean-object": {
2197− "version": "1.1.2",
2198− "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
2199− "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
2200− "requires": {
2201− "call-bind": "^1.0.2",
2202− "has-tostringtag": "^1.0.0"
2203− }
2204− },
22056481 "is-buffer": {
22066482 "version": "2.0.5",
22076483 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
22086484 "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
22096485 },
2210− "is-callable": {
2211− "version": "1.2.4",
2212− "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
2213− "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w=="
2214− },
2215− "is-color-stop": {
2216− "version": "1.1.0",
2217− "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
2218− "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
2219− "requires": {
2220− "css-color-names": "^0.0.4",
2221− "hex-color-regex": "^1.1.0",
2222− "hsl-regex": "^1.0.0",
2223− "hsla-regex": "^1.0.0",
2224− "rgb-regex": "^1.0.1",
2225− "rgba-regex": "^1.0.0"
2226− }
2227− },
22286486 "is-core-module": {
2229− "version": "2.6.0",
2230− "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
2231− "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
6487+ "version": "2.9.0",
6488+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
6489+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
22326490 "requires": {
22336491 "has": "^1.0.3"
22346492 }
22356493 },
2236− "is-date-object": {
2237− "version": "1.0.5",
2238− "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
2239− "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
2240− "requires": {
2241− "has-tostringtag": "^1.0.0"
2242− }
2243− },
22446494 "is-decimal": {
22456495 "version": "1.0.4",
22466496 "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
@@ -2256,18 +6506,10 @@
22566506 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
22576507 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
22586508 },
2259− "is-generator-function": {
2260− "version": "1.0.10",
2261− "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
2262− "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
2263− "requires": {
2264− "has-tostringtag": "^1.0.0"
2265− }
2266− },
22676509 "is-glob": {
2268− "version": "4.0.1",
2269− "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
2270− "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
6510+ "version": "4.0.3",
6511+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
6512+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
22716513 "requires": {
22726514 "is-extglob": "^2.1.1"
22736515 }
@@ -2277,86 +6519,35 @@
22776519 "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
22786520 "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
22796521 },
2280− "is-nan": {
2281− "version": "1.3.2",
2282− "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
2283− "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
2284− "requires": {
2285− "call-bind": "^1.0.0",
2286− "define-properties": "^1.1.3"
2287− }
2288− },
2289− "is-negative-zero": {
2290− "version": "2.0.1",
2291− "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
2292− "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
2293− },
22946522 "is-number": {
22956523 "version": "7.0.0",
22966524 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
22976525 "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
22986526 },
2299− "is-number-object": {
2300− "version": "1.0.6",
2301− "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
2302− "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
2303− "requires": {
2304− "has-tostringtag": "^1.0.0"
2305− }
2306− },
23076527 "is-plain-obj": {
23086528 "version": "2.1.0",
23096529 "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
23106530 "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
23116531 },
6532+ "is-plain-object": {
6533+ "version": "2.0.4",
6534+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
6535+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
6536+ "requires": {
6537+ "isobject": "^3.0.1"
6538+ }
6539+ },
23126540 "is-potential-custom-element-name": {
23136541 "version": "1.0.1",
23146542 "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
23156543 "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
23166544 },
2317− "is-regex": {
2318− "version": "1.1.4",
2319− "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
2320− "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
2321− "requires": {
2322− "call-bind": "^1.0.2",
2323− "has-tostringtag": "^1.0.0"
2324− }
2325− },
23266545 "is-stream": {
23276546 "version": "2.0.1",
23286547 "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
23296548 "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
23306549 "dev": true
23316550 },
2332− "is-string": {
2333− "version": "1.0.7",
2334− "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
2335− "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
2336− "requires": {
2337− "has-tostringtag": "^1.0.0"
2338− }
2339− },
2340− "is-symbol": {
2341− "version": "1.0.4",
2342− "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
2343− "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
2344− "requires": {
2345− "has-symbols": "^1.0.2"
2346− }
2347− },
2348− "is-typed-array": {
2349− "version": "1.1.8",
2350− "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz",
2351− "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==",
2352− "requires": {
2353− "available-typed-arrays": "^1.0.5",
2354− "call-bind": "^1.0.2",
2355− "es-abstract": "^1.18.5",
2356− "foreach": "^2.0.5",
2357− "has-tostringtag": "^1.0.0"
2358− }
2359− },
23606551 "isarray": {
23616552 "version": "1.0.0",
23626553 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -2368,30 +6559,10 @@
23686559 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
23696560 "dev": true
23706561 },
2371− "jest-worker": {
2372− "version": "27.0.0-next.5",
2373− "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz",
2374− "integrity": "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==",
2375− "requires": {
2376− "@types/node": "*",
2377− "merge-stream": "^2.0.0",
2378− "supports-color": "^8.0.0"
2379− },
2380− "dependencies": {
2381− "has-flag": {
2382− "version": "4.0.0",
2383− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2384− "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
2385− },
2386− "supports-color": {
2387− "version": "8.1.1",
2388− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2389− "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2390− "requires": {
2391− "has-flag": "^4.0.0"
2392− }
2393− }
2394− }
6562+ "isobject": {
6563+ "version": "3.0.1",
6564+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
6565+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
23956566 },
23966567 "js-tokens": {
23976568 "version": "4.0.0",
@@ -2439,44 +6610,6 @@
24396610 "whatwg-url": "^8.5.0",
24406611 "ws": "^7.4.6",
24416612 "xml-name-validator": "^3.0.0"
2442− },
2443− "dependencies": {
2444− "tr46": {
2445− "version": "2.1.0",
2446− "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
2447− "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
2448− "requires": {
2449− "punycode": "^2.1.1"
2450− }
2451− },
2452− "webidl-conversions": {
2453− "version": "6.1.0",
2454− "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
2455− "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
2456− },
2457− "whatwg-url": {
2458− "version": "8.7.0",
2459− "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
2460− "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
2461− "requires": {
2462− "lodash": "^4.7.0",
2463− "tr46": "^2.1.0",
2464− "webidl-conversions": "^6.1.0"
2465− }
2466− }
2467− }
2468− },
2469− "json-parse-even-better-errors": {
2470− "version": "2.3.1",
2471− "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
2472− "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
2473− },
2474− "json5": {
2475− "version": "1.0.1",
2476− "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
2477− "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
2478− "requires": {
2479− "minimist": "^1.2.0"
24806613 }
24816614 },
24826615 "kind-of": {
@@ -2484,6 +6617,11 @@
24846617 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
24856618 "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
24866619 },
6620+ "kleur": {
6621+ "version": "4.1.4",
6622+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz",
6623+ "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA=="
6624+ },
24876625 "levn": {
24886626 "version": "0.3.0",
24896627 "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -2494,29 +6632,15 @@
24946632 }
24956633 },
24966634 "lilconfig": {
2497− "version": "2.0.3",
2498− "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz",
2499− "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg=="
2500− },
2501− "lines-and-columns": {
2502− "version": "1.1.6",
2503− "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
2504− "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
2505− },
2506− "loader-utils": {
2507− "version": "1.2.3",
2508− "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
2509− "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
2510− "requires": {
2511− "big.js": "^5.2.2",
2512− "emojis-list": "^2.0.0",
2513− "json5": "^1.0.1"
2514− }
6635+ "version": "2.0.5",
6636+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
6637+ "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg=="
25156638 },
25166639 "locate-path": {
25176640 "version": "5.0.0",
25186641 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
25196642 "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
6643+ "dev": true,
25206644 "requires": {
25216645 "p-locate": "^4.1.0"
25226646 }
@@ -2526,20 +6650,25 @@
25266650 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
25276651 "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
25286652 },
2529− "lodash.sortby": {
2530− "version": "4.7.0",
2531− "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
2532− "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
6653+ "lodash.chunk": {
6654+ "version": "4.2.0",
6655+ "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
6656+ "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw="
6657+ },
6658+ "lodash.debounce": {
6659+ "version": "4.0.8",
6660+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
6661+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
25336662 },
2534− "lodash.topath": {
2535− "version": "4.5.2",
2536− "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
2537− "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak="
6663+ "lodash.isequal": {
6664+ "version": "4.5.0",
6665+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
6666+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
25386667 },
25396668 "longest-streak": {
2540− "version": "2.0.4",
2541− "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
2542− "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg=="
6669+ "version": "3.0.1",
6670+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz",
6671+ "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg=="
25436672 },
25446673 "loose-envify": {
25456674 "version": "1.4.0",
@@ -2550,35 +6679,14 @@
25506679 }
25516680 },
25526681 "luxon": {
2553− "version": "2.0.2",
2554− "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.0.2.tgz",
2555− "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg=="
2556− },
2557− "make-dir": {
2558− "version": "3.1.0",
2559− "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
2560− "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
2561− "requires": {
2562− "semver": "^6.0.0"
2563− }
6682+ "version": "2.3.2",
6683+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.3.2.tgz",
6684+ "integrity": "sha512-MlAQQVMFhGk4WUA6gpfsy0QycnKP0+NlCBJRVRNPxxSIbjrCbQ65nrpJD3FVyJNZLuJ0uoqL57ye6BmDYgHaSw=="
25646685 },
25656686 "markdown-table": {
2566− "version": "2.0.0",
2567− "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz",
2568− "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==",
2569− "requires": {
2570− "repeat-string": "^1.0.0"
2571− }
2572− },
2573− "md5.js": {
2574− "version": "1.3.5",
2575− "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
2576− "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
2577− "requires": {
2578− "hash-base": "^3.0.0",
2579− "inherits": "^2.0.1",
2580− "safe-buffer": "^5.1.2"
2581− }
6687+ "version": "3.0.2",
6688+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz",
6689+ "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA=="
25826690 },
25836691 "mdast-util-definitions": {
25846692 "version": "4.0.0",
@@ -2588,6 +6696,11 @@
25886696 "unist-util-visit": "^2.0.0"
25896697 },
25906698 "dependencies": {
6699+ "unist-util-is": {
6700+ "version": "4.1.0",
6701+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
6702+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="
6703+ },
25916704 "unist-util-visit": {
25926705 "version": "2.0.3",
25936706 "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
@@ -2597,33 +6710,36 @@
25976710 "unist-util-is": "^4.0.0",
25986711 "unist-util-visit-parents": "^3.0.0"
25996712 }
6713+ },
6714+ "unist-util-visit-parents": {
6715+ "version": "3.1.1",
6716+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
6717+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
6718+ "requires": {
6719+ "@types/unist": "^2.0.0",
6720+ "unist-util-is": "^4.0.0"
6721+ }
26006722 }
26016723 }
26026724 },
26036725 "mdast-util-find-and-replace": {
2604− "version": "1.1.1",
2605− "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz",
2606− "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==",
6726+ "version": "2.1.0",
6727+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.1.0.tgz",
6728+ "integrity": "sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==",
26076729 "requires": {
2608− "escape-string-regexp": "^4.0.0",
2609− "unist-util-is": "^4.0.0",
2610− "unist-util-visit-parents": "^3.0.0"
2611− },
2612− "dependencies": {
2613− "escape-string-regexp": {
2614− "version": "4.0.0",
2615− "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2616− "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
2617− }
6730+ "escape-string-regexp": "^5.0.0",
6731+ "unist-util-is": "^5.0.0",
6732+ "unist-util-visit-parents": "^4.0.0"
26186733 }
26196734 },
26206735 "mdast-util-from-markdown": {
2621− "version": "1.0.3",
2622− "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.0.3.tgz",
2623− "integrity": "sha512-8/GPJsE3h73C+PBFJ3cCdvegz07mLS8/5NfuIsP8q/cw/Ph/aximc6OYdfwerwcZqTYVu7WeXm/8+RDztxreZQ==",
6736+ "version": "1.2.0",
6737+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz",
6738+ "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==",
26246739 "requires": {
26256740 "@types/mdast": "^3.0.0",
26266741 "@types/unist": "^2.0.0",
6742+ "decode-named-character-reference": "^1.0.0",
26276743 "mdast-util-to-string": "^3.1.0",
26286744 "micromark": "^3.0.0",
26296745 "micromark-util-decode-numeric-character-reference": "^1.0.0",
@@ -2631,159 +6747,71 @@
26316747 "micromark-util-normalize-identifier": "^1.0.0",
26326748 "micromark-util-symbol": "^1.0.0",
26336749 "micromark-util-types": "^1.0.0",
2634− "parse-entities": "^3.0.0",
2635− "power-assert": "^1.0.0",
2636− "unist-util-stringify-position": "^3.0.0"
2637− },
2638− "dependencies": {
2639− "character-entities": {
2640− "version": "2.0.0",
2641− "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
2642− "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA=="
2643− },
2644− "character-entities-legacy": {
2645− "version": "2.0.0",
2646− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
2647− "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA=="
2648− },
2649− "character-reference-invalid": {
2650− "version": "2.0.0",
2651− "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
2652− "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g=="
2653− },
2654− "debug": {
2655− "version": "4.3.2",
2656− "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
2657− "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
2658− "requires": {
2659− "ms": "2.1.2"
2660− }
2661− },
2662− "is-alphabetical": {
2663− "version": "2.0.0",
2664− "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
2665− "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w=="
2666− },
2667− "is-alphanumerical": {
2668− "version": "2.0.0",
2669− "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
2670− "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
2671− "requires": {
2672− "is-alphabetical": "^2.0.0",
2673− "is-decimal": "^2.0.0"
2674− }
2675− },
2676− "is-decimal": {
2677− "version": "2.0.0",
2678− "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
2679− "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw=="
2680− },
2681− "is-hexadecimal": {
2682− "version": "2.0.0",
2683− "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
2684− "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug=="
2685− },
2686− "mdast-util-to-string": {
2687− "version": "3.1.0",
2688− "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
2689− "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA=="
2690− },
2691− "micromark": {
2692− "version": "3.0.6",
2693− "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.6.tgz",
2694− "integrity": "sha512-yzyfAHhglgEDprJnsvoQVPSXy5OnQfgyatGTxh0XVpismB5+aECnsHY2I1oxsySf6t/2FeamjOLoxun47nVhvw==",
2695− "requires": {
2696− "@types/debug": "^4.0.0",
2697− "debug": "^4.0.0",
2698− "micromark-core-commonmark": "^1.0.1",
2699− "micromark-factory-space": "^1.0.0",
2700− "micromark-util-character": "^1.0.0",
2701− "micromark-util-chunked": "^1.0.0",
2702− "micromark-util-combine-extensions": "^1.0.0",
2703− "micromark-util-decode-numeric-character-reference": "^1.0.0",
2704− "micromark-util-encode": "^1.0.0",
2705− "micromark-util-normalize-identifier": "^1.0.0",
2706− "micromark-util-resolve-all": "^1.0.0",
2707− "micromark-util-sanitize-uri": "^1.0.0",
2708− "micromark-util-subtokenize": "^1.0.0",
2709− "micromark-util-symbol": "^1.0.0",
2710− "micromark-util-types": "^1.0.1",
2711− "parse-entities": "^3.0.0"
2712− }
2713− },
2714− "ms": {
2715− "version": "2.1.2",
2716− "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2717− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2718− },
2719− "parse-entities": {
2720− "version": "3.0.0",
2721− "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
2722− "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
2723− "requires": {
2724− "character-entities": "^2.0.0",
2725− "character-entities-legacy": "^2.0.0",
2726− "character-reference-invalid": "^2.0.0",
2727− "is-alphanumerical": "^2.0.0",
2728− "is-decimal": "^2.0.0",
2729− "is-hexadecimal": "^2.0.0"
2730− }
2731− },
2732− "unist-util-stringify-position": {
2733− "version": "3.0.0",
2734− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
2735− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
2736− "requires": {
2737− "@types/unist": "^2.0.0"
2738− }
2739− }
6750+ "unist-util-stringify-position": "^3.0.0",
6751+ "uvu": "^0.5.0"
27406752 }
27416753 },
27426754 "mdast-util-gfm": {
2743− "version": "0.1.2",
2744− "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz",
2745− "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==",
6755+ "version": "2.0.1",
6756+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz",
6757+ "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==",
27466758 "requires": {
2747− "mdast-util-gfm-autolink-literal": "^0.1.0",
2748− "mdast-util-gfm-strikethrough": "^0.2.0",
2749− "mdast-util-gfm-table": "^0.1.0",
2750− "mdast-util-gfm-task-list-item": "^0.1.0",
2751− "mdast-util-to-markdown": "^0.6.1"
6759+ "mdast-util-from-markdown": "^1.0.0",
6760+ "mdast-util-gfm-autolink-literal": "^1.0.0",
6761+ "mdast-util-gfm-footnote": "^1.0.0",
6762+ "mdast-util-gfm-strikethrough": "^1.0.0",
6763+ "mdast-util-gfm-table": "^1.0.0",
6764+ "mdast-util-gfm-task-list-item": "^1.0.0",
6765+ "mdast-util-to-markdown": "^1.0.0"
27526766 }
27536767 },
27546768 "mdast-util-gfm-autolink-literal": {
2755− "version": "0.1.3",
2756− "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz",
2757− "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==",
6769+ "version": "1.0.2",
6770+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz",
6771+ "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==",
27586772 "requires": {
2759− "ccount": "^1.0.0",
2760− "mdast-util-find-and-replace": "^1.1.0",
2761− "micromark": "^2.11.3"
6773+ "@types/mdast": "^3.0.0",
6774+ "ccount": "^2.0.0",
6775+ "mdast-util-find-and-replace": "^2.0.0",
6776+ "micromark-util-character": "^1.0.0"
6777+ }
6778+ },
6779+ "mdast-util-gfm-footnote": {
6780+ "version": "1.0.1",
6781+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz",
6782+ "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==",
6783+ "requires": {
6784+ "@types/mdast": "^3.0.0",
6785+ "mdast-util-to-markdown": "^1.3.0",
6786+ "micromark-util-normalize-identifier": "^1.0.0"
27626787 }
27636788 },
27646789 "mdast-util-gfm-strikethrough": {
2765− "version": "0.2.3",
2766− "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz",
2767− "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==",
6790+ "version": "1.0.1",
6791+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz",
6792+ "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==",
27686793 "requires": {
2769− "mdast-util-to-markdown": "^0.6.0"
6794+ "@types/mdast": "^3.0.0",
6795+ "mdast-util-to-markdown": "^1.3.0"
27706796 }
27716797 },
27726798 "mdast-util-gfm-table": {
2773− "version": "0.1.6",
2774− "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz",
2775− "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==",
6799+ "version": "1.0.4",
6800+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz",
6801+ "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==",
27766802 "requires": {
2777− "markdown-table": "^2.0.0",
2778− "mdast-util-to-markdown": "~0.6.0"
6803+ "markdown-table": "^3.0.0",
6804+ "mdast-util-from-markdown": "^1.0.0",
6805+ "mdast-util-to-markdown": "^1.3.0"
27796806 }
27806807 },
27816808 "mdast-util-gfm-task-list-item": {
2782− "version": "0.1.6",
2783− "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz",
2784− "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==",
6809+ "version": "1.0.1",
6810+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz",
6811+ "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==",
27856812 "requires": {
2786− "mdast-util-to-markdown": "~0.6.0"
6813+ "@types/mdast": "^3.0.0",
6814+ "mdast-util-to-markdown": "^1.3.0"
27876815 }
27886816 },
27896817 "mdast-util-to-hast": {
@@ -2801,6 +6829,16 @@
28016829 "unist-util-visit": "^2.0.0"
28026830 },
28036831 "dependencies": {
6832+ "unist-util-is": {
6833+ "version": "4.1.0",
6834+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
6835+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="
6836+ },
6837+ "unist-util-position": {
6838+ "version": "3.1.0",
6839+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
6840+ "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA=="
6841+ },
28046842 "unist-util-visit": {
28056843 "version": "2.0.3",
28066844 "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
@@ -2810,26 +6848,36 @@
28106848 "unist-util-is": "^4.0.0",
28116849 "unist-util-visit-parents": "^3.0.0"
28126850 }
6851+ },
6852+ "unist-util-visit-parents": {
6853+ "version": "3.1.1",
6854+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
6855+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
6856+ "requires": {
6857+ "@types/unist": "^2.0.0",
6858+ "unist-util-is": "^4.0.0"
6859+ }
28136860 }
28146861 }
28156862 },
28166863 "mdast-util-to-markdown": {
2817− "version": "0.6.5",
2818− "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
2819− "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
2820− "requires": {
2821− "@types/unist": "^2.0.0",
2822− "longest-streak": "^2.0.0",
2823− "mdast-util-to-string": "^2.0.0",
2824− "parse-entities": "^2.0.0",
2825− "repeat-string": "^1.0.0",
2826− "zwitch": "^1.0.0"
6864+ "version": "1.3.0",
6865+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz",
6866+ "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==",
6867+ "requires": {
6868+ "@types/mdast": "^3.0.0",
6869+ "@types/unist": "^2.0.0",
6870+ "longest-streak": "^3.0.0",
6871+ "mdast-util-to-string": "^3.0.0",
6872+ "micromark-util-decode-string": "^1.0.0",
6873+ "unist-util-visit": "^4.0.0",
6874+ "zwitch": "^2.0.0"
28276875 }
28286876 },
28296877 "mdast-util-to-string": {
2830− "version": "2.0.0",
2831− "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
2832− "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="
6878+ "version": "3.1.0",
6879+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz",
6880+ "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA=="
28336881 },
28346882 "mdurl": {
28356883 "version": "1.0.1",
@@ -2839,7 +6887,8 @@
28396887 "merge-stream": {
28406888 "version": "2.0.0",
28416889 "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
2842− "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
6890+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
6891+ "dev": true
28436892 },
28446893 "merge2": {
28456894 "version": "1.4.1",
@@ -2847,34 +6896,35 @@
28476896 "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
28486897 },
28496898 "micromark": {
2850− "version": "2.11.4",
2851− "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
2852− "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
6899+ "version": "3.0.10",
6900+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz",
6901+ "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==",
28536902 "requires": {
6903+ "@types/debug": "^4.0.0",
28546904 "debug": "^4.0.0",
2855− "parse-entities": "^2.0.0"
2856− },
2857− "dependencies": {
2858− "debug": {
2859− "version": "4.3.2",
2860− "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
2861− "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
2862− "requires": {
2863− "ms": "2.1.2"
2864− }
2865− },
2866− "ms": {
2867− "version": "2.1.2",
2868− "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2869− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
2870− }
6905+ "decode-named-character-reference": "^1.0.0",
6906+ "micromark-core-commonmark": "^1.0.1",
6907+ "micromark-factory-space": "^1.0.0",
6908+ "micromark-util-character": "^1.0.0",
6909+ "micromark-util-chunked": "^1.0.0",
6910+ "micromark-util-combine-extensions": "^1.0.0",
6911+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
6912+ "micromark-util-encode": "^1.0.0",
6913+ "micromark-util-normalize-identifier": "^1.0.0",
6914+ "micromark-util-resolve-all": "^1.0.0",
6915+ "micromark-util-sanitize-uri": "^1.0.0",
6916+ "micromark-util-subtokenize": "^1.0.0",
6917+ "micromark-util-symbol": "^1.0.0",
6918+ "micromark-util-types": "^1.0.1",
6919+ "uvu": "^0.5.0"
28716920 }
28726921 },
28736922 "micromark-core-commonmark": {
2874− "version": "1.0.2",
2875− "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.2.tgz",
2876− "integrity": "sha512-nIxVDZnm1ra2BcnUSUWe9LC3UBTQ/sqUp4do80xXhtCWxBYj7u70Qw2CH54oZu7jblDCxDO3tmNBSprV5EWndg==",
6923+ "version": "1.0.6",
6924+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz",
6925+ "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==",
28776926 "requires": {
6927+ "decode-named-character-reference": "^1.0.0",
28786928 "micromark-factory-destination": "^1.0.0",
28796929 "micromark-factory-label": "^1.0.0",
28806930 "micromark-factory-space": "^1.0.0",
@@ -2889,112 +6939,94 @@
28896939 "micromark-util-subtokenize": "^1.0.0",
28906940 "micromark-util-symbol": "^1.0.0",
28916941 "micromark-util-types": "^1.0.1",
2892− "parse-entities": "^3.0.0",
2893− "power-assert": "^1.0.0"
2894− },
2895− "dependencies": {
2896− "character-entities": {
2897− "version": "2.0.0",
2898− "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
2899− "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA=="
2900− },
2901− "character-entities-legacy": {
2902− "version": "2.0.0",
2903− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
2904− "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA=="
2905− },
2906− "character-reference-invalid": {
2907− "version": "2.0.0",
2908− "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
2909− "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g=="
2910− },
2911− "is-alphabetical": {
2912− "version": "2.0.0",
2913− "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
2914− "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w=="
2915− },
2916− "is-alphanumerical": {
2917− "version": "2.0.0",
2918− "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
2919− "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
2920− "requires": {
2921− "is-alphabetical": "^2.0.0",
2922− "is-decimal": "^2.0.0"
2923− }
2924− },
2925− "is-decimal": {
2926− "version": "2.0.0",
2927− "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
2928− "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw=="
2929− },
2930− "is-hexadecimal": {
2931− "version": "2.0.0",
2932− "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
2933− "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug=="
2934− },
2935− "parse-entities": {
2936− "version": "3.0.0",
2937− "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
2938− "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
2939− "requires": {
2940− "character-entities": "^2.0.0",
2941− "character-entities-legacy": "^2.0.0",
2942− "character-reference-invalid": "^2.0.0",
2943− "is-alphanumerical": "^2.0.0",
2944− "is-decimal": "^2.0.0",
2945− "is-hexadecimal": "^2.0.0"
2946− }
2947− }
6942+ "uvu": "^0.5.0"
29486943 }
29496944 },
29506945 "micromark-extension-gfm": {
2951− "version": "0.3.3",
2952− "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz",
2953− "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==",
2954− "requires": {
2955− "micromark": "~2.11.0",
2956− "micromark-extension-gfm-autolink-literal": "~0.5.0",
2957− "micromark-extension-gfm-strikethrough": "~0.6.5",
2958− "micromark-extension-gfm-table": "~0.4.0",
2959− "micromark-extension-gfm-tagfilter": "~0.3.0",
2960− "micromark-extension-gfm-task-list-item": "~0.3.0"
6946+ "version": "2.0.1",
6947+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz",
6948+ "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==",
6949+ "requires": {
6950+ "micromark-extension-gfm-autolink-literal": "^1.0.0",
6951+ "micromark-extension-gfm-footnote": "^1.0.0",
6952+ "micromark-extension-gfm-strikethrough": "^1.0.0",
6953+ "micromark-extension-gfm-table": "^1.0.0",
6954+ "micromark-extension-gfm-tagfilter": "^1.0.0",
6955+ "micromark-extension-gfm-task-list-item": "^1.0.0",
6956+ "micromark-util-combine-extensions": "^1.0.0",
6957+ "micromark-util-types": "^1.0.0"
29616958 }
29626959 },
29636960 "micromark-extension-gfm-autolink-literal": {
2964− "version": "0.5.7",
2965− "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz",
2966− "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==",
6961+ "version": "1.0.3",
6962+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz",
6963+ "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==",
29676964 "requires": {
2968− "micromark": "~2.11.3"
6965+ "micromark-util-character": "^1.0.0",
6966+ "micromark-util-sanitize-uri": "^1.0.0",
6967+ "micromark-util-symbol": "^1.0.0",
6968+ "micromark-util-types": "^1.0.0",
6969+ "uvu": "^0.5.0"
6970+ }
6971+ },
6972+ "micromark-extension-gfm-footnote": {
6973+ "version": "1.0.4",
6974+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz",
6975+ "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==",
6976+ "requires": {
6977+ "micromark-core-commonmark": "^1.0.0",
6978+ "micromark-factory-space": "^1.0.0",
6979+ "micromark-util-character": "^1.0.0",
6980+ "micromark-util-normalize-identifier": "^1.0.0",
6981+ "micromark-util-sanitize-uri": "^1.0.0",
6982+ "micromark-util-symbol": "^1.0.0",
6983+ "micromark-util-types": "^1.0.0",
6984+ "uvu": "^0.5.0"
29696985 }
29706986 },
29716987 "micromark-extension-gfm-strikethrough": {
2972− "version": "0.6.5",
2973− "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz",
2974− "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==",
6988+ "version": "1.0.4",
6989+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz",
6990+ "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==",
29756991 "requires": {
2976− "micromark": "~2.11.0"
6992+ "micromark-util-chunked": "^1.0.0",
6993+ "micromark-util-classify-character": "^1.0.0",
6994+ "micromark-util-resolve-all": "^1.0.0",
6995+ "micromark-util-symbol": "^1.0.0",
6996+ "micromark-util-types": "^1.0.0",
6997+ "uvu": "^0.5.0"
29776998 }
29786999 },
29797000 "micromark-extension-gfm-table": {
2980− "version": "0.4.3",
2981− "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz",
2982− "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==",
7001+ "version": "1.0.5",
7002+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz",
7003+ "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==",
29837004 "requires": {
2984− "micromark": "~2.11.0"
7005+ "micromark-factory-space": "^1.0.0",
7006+ "micromark-util-character": "^1.0.0",
7007+ "micromark-util-symbol": "^1.0.0",
7008+ "micromark-util-types": "^1.0.0",
7009+ "uvu": "^0.5.0"
29857010 }
29867011 },
29877012 "micromark-extension-gfm-tagfilter": {
2988− "version": "0.3.0",
2989− "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz",
2990− "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q=="
7013+ "version": "1.0.1",
7014+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz",
7015+ "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==",
7016+ "requires": {
7017+ "micromark-util-types": "^1.0.0"
7018+ }
29917019 },
29927020 "micromark-extension-gfm-task-list-item": {
2993− "version": "0.3.3",
2994− "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz",
2995− "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==",
7021+ "version": "1.0.3",
7022+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz",
7023+ "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==",
29967024 "requires": {
2997− "micromark": "~2.11.0"
7025+ "micromark-factory-space": "^1.0.0",
7026+ "micromark-util-character": "^1.0.0",
7027+ "micromark-util-symbol": "^1.0.0",
7028+ "micromark-util-types": "^1.0.0",
7029+ "uvu": "^0.5.0"
29987030 }
29997031 },
30007032 "micromark-factory-destination": {
@@ -3008,14 +7040,14 @@
30087040 }
30097041 },
30107042 "micromark-factory-label": {
3011− "version": "1.0.1",
3012− "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.1.tgz",
3013− "integrity": "sha512-d/we+Gm9cqySOaPmtx109GEbG2dadb2myK9Tcm3aAx9Ug0IL4ucQtzKVoO+02HI10E76ncv9n/VEEF5ym0RzTQ==",
7043+ "version": "1.0.2",
7044+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz",
7045+ "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==",
30147046 "requires": {
30157047 "micromark-util-character": "^1.0.0",
30167048 "micromark-util-symbol": "^1.0.0",
30177049 "micromark-util-types": "^1.0.0",
3018− "power-assert": "^1.0.0"
7050+ "uvu": "^0.5.0"
30197051 }
30207052 },
30217053 "micromark-factory-space": {
@@ -3028,15 +7060,15 @@
30287060 }
30297061 },
30307062 "micromark-factory-title": {
3031− "version": "1.0.1",
3032− "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.1.tgz",
3033− "integrity": "sha512-nAdDygUZK7WtHFkNi01PzS33jeWPKZXA6LEABQiCVDXvNNUjdQ9o4stT8jBu3BNsE3ZulfG5IGdfWuOWS/CS+w==",
7063+ "version": "1.0.2",
7064+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz",
7065+ "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==",
30347066 "requires": {
30357067 "micromark-factory-space": "^1.0.0",
30367068 "micromark-util-character": "^1.0.0",
30377069 "micromark-util-symbol": "^1.0.0",
30387070 "micromark-util-types": "^1.0.0",
3039− "power-assert": "^1.0.0"
7071+ "uvu": "^0.5.0"
30407072 }
30417073 },
30427074 "micromark-factory-whitespace": {
@@ -3095,74 +7127,20 @@
30957127 }
30967128 },
30977129 "micromark-util-decode-string": {
3098− "version": "1.0.1",
3099− "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.1.tgz",
3100− "integrity": "sha512-Wf3H6jLaO3iIlHEvblESXaKAr72nK7JtBbLLICPwuZc3eJkMcp4j8rJ5Xv1VbQWMCWWDvKUbVUbE2MfQNznwTA==",
7130+ "version": "1.0.2",
7131+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz",
7132+ "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==",
31017133 "requires": {
7134+ "decode-named-character-reference": "^1.0.0",
31027135 "micromark-util-character": "^1.0.0",
31037136 "micromark-util-decode-numeric-character-reference": "^1.0.0",
3104− "micromark-util-symbol": "^1.0.0",
3105− "parse-entities": "^3.0.0"
3106− },
3107− "dependencies": {
3108− "character-entities": {
3109− "version": "2.0.0",
3110− "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.0.tgz",
3111− "integrity": "sha512-oHqMj3eAuJ77/P5PaIRcqk+C3hdfNwyCD2DAUcD5gyXkegAuF2USC40CEqPscDk4I8FRGMTojGJQkXDsN5QlJA=="
3112− },
3113− "character-entities-legacy": {
3114− "version": "2.0.0",
3115− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
3116− "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA=="
3117− },
3118− "character-reference-invalid": {
3119− "version": "2.0.0",
3120− "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.0.tgz",
3121− "integrity": "sha512-pE3Z15lLRxDzWJy7bBHBopRwfI20sbrMVLQTC7xsPglCHf4Wv1e167OgYAFP78co2XlhojDyAqA+IAJse27//g=="
3122− },
3123− "is-alphabetical": {
3124− "version": "2.0.0",
3125− "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.0.tgz",
3126− "integrity": "sha512-5OV8Toyq3oh4eq6sbWTYzlGdnMT/DPI5I0zxUBxjiigQsZycpkKF3kskkao3JyYGuYDHvhgJF+DrjMQp9SX86w=="
3127− },
3128− "is-alphanumerical": {
3129− "version": "2.0.0",
3130− "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.0.tgz",
3131− "integrity": "sha512-t+2GlJ+hO9yagJ+jU3+HSh80VKvz/3cG2cxbGGm4S0hjKuhWQXgPVUVOZz3tqZzMjhmphZ+1TIJTlRZRoe6GCQ==",
3132− "requires": {
3133− "is-alphabetical": "^2.0.0",
3134− "is-decimal": "^2.0.0"
3135− }
3136− },
3137− "is-decimal": {
3138− "version": "2.0.0",
3139− "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.0.tgz",
3140− "integrity": "sha512-QfrfjQV0LjoWQ1K1XSoEZkTAzSa14RKVMa5zg3SdAfzEmQzRM4+tbSFWb78creCeA9rNBzaZal92opi1TwPWZw=="
3141− },
3142− "is-hexadecimal": {
3143− "version": "2.0.0",
3144− "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.0.tgz",
3145− "integrity": "sha512-vGOtYkiaxwIiR0+Ng/zNId+ZZehGfINwTzdrDqc6iubbnQWhnPuYymOzOKUDqa2cSl59yHnEh2h6MvRLQsyNug=="
3146− },
3147− "parse-entities": {
3148− "version": "3.0.0",
3149− "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-3.0.0.tgz",
3150− "integrity": "sha512-AJlcIFDNPEP33KyJLguv0xJc83BNvjxwpuUIcetyXUsLpVXAUCePJ5kIoYtEN2R1ac0cYaRu/vk9dVFkewHQhQ==",
3151− "requires": {
3152− "character-entities": "^2.0.0",
3153− "character-entities-legacy": "^2.0.0",
3154− "character-reference-invalid": "^2.0.0",
3155− "is-alphanumerical": "^2.0.0",
3156− "is-decimal": "^2.0.0",
3157− "is-hexadecimal": "^2.0.0"
3158− }
3159− }
7137+ "micromark-util-symbol": "^1.0.0"
31607138 }
31617139 },
31627140 "micromark-util-encode": {
3163− "version": "1.0.0",
3164− "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.0.tgz",
3165− "integrity": "sha512-cJpFVM768h6zkd8qJ1LNRrITfY4gwFt+tziPcIf71Ui8yFzY9wG3snZQqiWVq93PG4Sw6YOtcNiKJfVIs9qfGg=="
7141+ "version": "1.0.1",
7142+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz",
7143+ "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA=="
31667144 },
31677145 "micromark-util-html-tag-name": {
31687146 "version": "1.0.0",
@@ -3196,62 +7174,46 @@
31967174 }
31977175 },
31987176 "micromark-util-subtokenize": {
3199− "version": "1.0.1",
3200− "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.1.tgz",
3201− "integrity": "sha512-Zy7XuVepFWm8MqiqFywq4wFu4GXlksyC3e942GaQBXaaCWha3VbkZiTmOEBDCcvp1xKq/xZ2gGEIsCjU+SuEig==",
7177+ "version": "1.0.2",
7178+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz",
7179+ "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==",
32027180 "requires": {
32037181 "micromark-util-chunked": "^1.0.0",
32047182 "micromark-util-symbol": "^1.0.0",
32057183 "micromark-util-types": "^1.0.0",
3206− "power-assert": "^1.0.0"
7184+ "uvu": "^0.5.0"
32077185 }
32087186 },
32097187 "micromark-util-symbol": {
3210− "version": "1.0.0",
3211− "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.0.tgz",
3212− "integrity": "sha512-NZA01jHRNCt4KlOROn8/bGi6vvpEmlXld7EHcRH+aYWUfL3Wc8JLUNNlqUMKa0hhz6GrpUWsHtzPmKof57v0gQ=="
7188+ "version": "1.0.1",
7189+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz",
7190+ "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ=="
32137191 },
32147192 "micromark-util-types": {
3215− "version": "1.0.1",
3216− "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.1.tgz",
3217− "integrity": "sha512-UT0ylWEEy80RFYzK9pEaugTqaxoD/j0Y9WhHpSyitxd99zjoQz7JJ+iKuhPAgOW2MiPSUAx+c09dcqokeyaROA=="
7193+ "version": "1.0.2",
7194+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz",
7195+ "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w=="
32187196 },
32197197 "micromatch": {
3220− "version": "4.0.4",
3221− "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
3222− "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
3223− "requires": {
3224− "braces": "^3.0.1",
3225− "picomatch": "^2.2.3"
3226− }
3227− },
3228− "miller-rabin": {
3229− "version": "4.0.1",
3230− "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
3231− "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
7198+ "version": "4.0.5",
7199+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
7200+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
32327201 "requires": {
3233− "bn.js": "^4.0.0",
3234− "brorand": "^1.0.1"
3235− },
3236− "dependencies": {
3237− "bn.js": {
3238− "version": "4.12.0",
3239− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
3240− "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
3241− }
7202+ "braces": "^3.0.2",
7203+ "picomatch": "^2.3.1"
32427204 }
32437205 },
32447206 "mime-db": {
3245− "version": "1.49.0",
3246− "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
3247− "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
7207+ "version": "1.52.0",
7208+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
7209+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
32487210 },
32497211 "mime-types": {
3250− "version": "2.1.32",
3251− "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
3252− "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
7212+ "version": "2.1.35",
7213+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
7214+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
32537215 "requires": {
3254− "mime-db": "1.49.0"
7216+ "mime-db": "1.52.0"
32557217 }
32567218 },
32577219 "mimic-fn": {
@@ -3260,44 +7222,29 @@
32607222 "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
32617223 "dev": true
32627224 },
3263− "minimalistic-assert": {
3264− "version": "1.0.1",
3265− "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
3266− "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
3267− },
3268− "minimalistic-crypto-utils": {
3269− "version": "1.0.1",
3270− "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
3271− "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
3272− },
32737225 "minimatch": {
3274− "version": "3.0.4",
3275− "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
3276− "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
7226+ "version": "3.1.2",
7227+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
7228+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
7229+ "dev": true,
32777230 "requires": {
32787231 "brace-expansion": "^1.1.7"
32797232 }
32807233 },
32817234 "minimist": {
3282− "version": "1.2.5",
3283− "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
3284− "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
3285− },
3286− "modern-normalize": {
3287− "version": "1.1.0",
3288− "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
3289− "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA=="
7235+ "version": "1.2.6",
7236+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
7237+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
32907238 },
32917239 "mri": {
32927240 "version": "1.2.0",
32937241 "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
3294− "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
3295− "dev": true
7242+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="
32967243 },
32977244 "ms": {
3298− "version": "2.0.0",
3299− "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
3300− "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
7245+ "version": "2.1.2",
7246+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
7247+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
33017248 },
33027249 "multimatch": {
33037250 "version": "4.0.0",
@@ -3312,314 +7259,61 @@
33127259 "minimatch": "^3.0.4"
33137260 }
33147261 },
3315− "nanocolors": {
3316− "version": "0.1.12",
3317− "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz",
3318− "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ=="
3319− },
33207262 "nanoid": {
3321− "version": "3.1.25",
3322− "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
3323− "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q=="
3324− },
3325− "native-url": {
3326− "version": "0.3.4",
3327− "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz",
3328− "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==",
3329− "requires": {
3330− "querystring": "^0.2.0"
3331− }
7263+ "version": "3.3.3",
7264+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
7265+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w=="
33327266 },
33337267 "next": {
3334− "version": "10.2.3",
3335− "resolved": "https://registry.npmjs.org/next/-/next-10.2.3.tgz",
3336− "integrity": "sha512-dkM1mIfnORtGyzw/Yme8RdqNxlCMZyi4Lqj56F01/yHbe1ZtOaJ0cyqqRB4RGiPhjGGh0319f8ddjDyO1605Ow==",
3337− "requires": {
3338− "@babel/runtime": "7.12.5",
3339− "@hapi/accept": "5.0.2",
3340− "@next/env": "10.2.3",
3341− "@next/polyfill-module": "10.2.3",
3342− "@next/react-dev-overlay": "10.2.3",
3343− "@next/react-refresh-utils": "10.2.3",
3344− "@opentelemetry/api": "0.14.0",
3345− "assert": "2.0.0",
3346− "ast-types": "0.13.2",
3347− "browserify-zlib": "0.2.0",
3348− "browserslist": "4.16.6",
3349− "buffer": "5.6.0",
3350− "caniuse-lite": "^1.0.30001228",
3351− "chalk": "2.4.2",
3352− "chokidar": "3.5.1",
3353− "constants-browserify": "1.0.0",
3354− "crypto-browserify": "3.12.0",
3355− "cssnano-simple": "2.0.0",
3356− "domain-browser": "4.19.0",
3357− "encoding": "0.1.13",
3358− "etag": "1.8.1",
3359− "find-cache-dir": "3.3.1",
3360− "get-orientation": "1.1.2",
3361− "https-browserify": "1.0.0",
3362− "jest-worker": "27.0.0-next.5",
3363− "native-url": "0.3.4",
3364− "node-fetch": "2.6.1",
3365− "node-html-parser": "1.4.9",
3366− "node-libs-browser": "^2.2.1",
3367− "os-browserify": "0.3.0",
3368− "p-limit": "3.1.0",
3369− "path-browserify": "1.0.1",
3370− "pnp-webpack-plugin": "1.6.4",
3371− "postcss": "8.2.13",
3372− "process": "0.11.10",
3373− "prop-types": "15.7.2",
3374− "querystring-es3": "0.2.1",
3375− "raw-body": "2.4.1",
3376− "react-is": "16.13.1",
3377− "react-refresh": "0.8.3",
3378− "stream-browserify": "3.0.0",
3379− "stream-http": "3.1.1",
3380− "string_decoder": "1.3.0",
3381− "styled-jsx": "3.3.2",
3382− "timers-browserify": "2.0.12",
3383− "tty-browserify": "0.0.1",
3384− "use-subscription": "1.5.1",
3385− "util": "0.12.3",
3386− "vm-browserify": "1.1.2",
3387− "watchpack": "2.1.1"
3388− },
3389− "dependencies": {
3390− "@babel/runtime": {
3391− "version": "7.12.5",
3392− "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
3393− "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
3394− "requires": {
3395− "regenerator-runtime": "^0.13.4"
3396− }
3397− },
3398− "browserslist": {
3399− "version": "4.16.6",
3400− "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
3401− "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
3402− "requires": {
3403− "caniuse-lite": "^1.0.30001219",
3404− "colorette": "^1.2.2",
3405− "electron-to-chromium": "^1.3.723",
3406− "escalade": "^3.1.1",
3407− "node-releases": "^1.1.71"
3408− }
3409− },
7268+ "version": "12.1.5",
7269+ "resolved": "https://registry.npmjs.org/next/-/next-12.1.5.tgz",
7270+ "integrity": "sha512-YGHDpyfgCfnT5GZObsKepmRnne7Kzp7nGrac07dikhutWQug7hHg85/+sPJ4ZW5Q2pDkb+n0FnmLkmd44htIJQ==",
7271+ "requires": {
7272+ "@next/env": "12.1.5",
7273+ "@next/swc-android-arm-eabi": "12.1.5",
7274+ "@next/swc-android-arm64": "12.1.5",
7275+ "@next/swc-darwin-arm64": "12.1.5",
7276+ "@next/swc-darwin-x64": "12.1.5",
7277+ "@next/swc-linux-arm-gnueabihf": "12.1.5",
7278+ "@next/swc-linux-arm64-gnu": "12.1.5",
7279+ "@next/swc-linux-arm64-musl": "12.1.5",
7280+ "@next/swc-linux-x64-gnu": "12.1.5",
7281+ "@next/swc-linux-x64-musl": "12.1.5",
7282+ "@next/swc-win32-arm64-msvc": "12.1.5",
7283+ "@next/swc-win32-ia32-msvc": "12.1.5",
7284+ "@next/swc-win32-x64-msvc": "12.1.5",
7285+ "caniuse-lite": "^1.0.30001283",
7286+ "postcss": "8.4.5",
7287+ "styled-jsx": "5.0.1"
7288+ },
7289+ "dependencies": {
34107290 "postcss": {
3411− "version": "8.2.13",
3412− "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz",
3413− "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==",
7291+ "version": "8.4.5",
7292+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
7293+ "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
34147294 "requires": {
3415− "colorette": "^1.2.2",
3416− "nanoid": "^3.1.22",
3417− "source-map": "^0.6.1"
7295+ "nanoid": "^3.1.30",
7296+ "picocolors": "^1.0.0",
7297+ "source-map-js": "^1.0.1"
34187298 }
3419− },
3420− "react-is": {
3421− "version": "16.13.1",
3422− "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
3423− "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
3424− },
3425− "source-map": {
3426− "version": "0.6.1",
3427− "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3428− "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
34297299 }
34307300 }
34317301 },
34327302 "next-transpile-modules": {
3433− "version": "8.0.0",
3434− "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-8.0.0.tgz",
3435− "integrity": "sha512-Q2f2yB0zMJ8KJbIYAeZoIxG6cSfVk813zr6B5HzsLMBVcJ3FaF8lKr7WG66n0KlHCwjLSmf/6EkgI6QQVWHrDw==",
7303+ "version": "9.0.0",
7304+ "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-9.0.0.tgz",
7305+ "integrity": "sha512-VCNFOazIAnXn1hvgYYSTYMnoWgKgwlYh4lm1pKbSfiB3kj5ZYLcKVhfh3jkPOg1cnd9DP+pte9yCUocdPEUBTQ==",
34367306 "dev": true,
34377307 "requires": {
34387308 "enhanced-resolve": "^5.7.0",
34397309 "escalade": "^3.1.1"
34407310 }
34417311 },
3442− "node-emoji": {
3443− "version": "1.11.0",
3444− "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
3445− "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
3446− "requires": {
3447− "lodash": "^4.17.21"
3448− }
3449− },
3450− "node-fetch": {
3451− "version": "2.6.1",
3452− "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
3453− "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
3454− },
3455− "node-html-parser": {
3456− "version": "1.4.9",
3457− "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz",
3458− "integrity": "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==",
3459− "requires": {
3460− "he": "1.2.0"
3461− }
3462− },
3463− "node-libs-browser": {
3464− "version": "2.2.1",
3465− "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
3466− "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
3467− "requires": {
3468− "assert": "^1.1.1",
3469− "browserify-zlib": "^0.2.0",
3470− "buffer": "^4.3.0",
3471− "console-browserify": "^1.1.0",
3472− "constants-browserify": "^1.0.0",
3473− "crypto-browserify": "^3.11.0",
3474− "domain-browser": "^1.1.1",
3475− "events": "^3.0.0",
3476− "https-browserify": "^1.0.0",
3477− "os-browserify": "^0.3.0",
3478− "path-browserify": "0.0.1",
3479− "process": "^0.11.10",
3480− "punycode": "^1.2.4",
3481− "querystring-es3": "^0.2.0",
3482− "readable-stream": "^2.3.3",
3483− "stream-browserify": "^2.0.1",
3484− "stream-http": "^2.7.2",
3485− "string_decoder": "^1.0.0",
3486− "timers-browserify": "^2.0.4",
3487− "tty-browserify": "0.0.0",
3488− "url": "^0.11.0",
3489− "util": "^0.11.0",
3490− "vm-browserify": "^1.0.1"
3491− },
3492− "dependencies": {
3493− "assert": {
3494− "version": "1.5.0",
3495− "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
3496− "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
3497− "requires": {
3498− "object-assign": "^4.1.1",
3499− "util": "0.10.3"
3500− },
3501− "dependencies": {
3502− "util": {
3503− "version": "0.10.3",
3504− "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
3505− "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
3506− "requires": {
3507− "inherits": "2.0.1"
3508− }
3509− }
3510− }
3511− },
3512− "buffer": {
3513− "version": "4.9.2",
3514− "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
3515− "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
3516− "requires": {
3517− "base64-js": "^1.0.2",
3518− "ieee754": "^1.1.4",
3519− "isarray": "^1.0.0"
3520− }
3521− },
3522− "domain-browser": {
3523− "version": "1.2.0",
3524− "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
3525− "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
3526− },
3527− "inherits": {
3528− "version": "2.0.1",
3529− "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
3530− "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
3531− },
3532− "path-browserify": {
3533− "version": "0.0.1",
3534− "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
3535− "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
3536− },
3537− "punycode": {
3538− "version": "1.4.1",
3539− "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
3540− "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
3541− },
3542− "readable-stream": {
3543− "version": "2.3.7",
3544− "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
3545− "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
3546− "requires": {
3547− "core-util-is": "~1.0.0",
3548− "inherits": "~2.0.3",
3549− "isarray": "~1.0.0",
3550− "process-nextick-args": "~2.0.0",
3551− "safe-buffer": "~5.1.1",
3552− "string_decoder": "~1.1.1",
3553− "util-deprecate": "~1.0.1"
3554− },
3555− "dependencies": {
3556− "inherits": {
3557− "version": "2.0.4",
3558− "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
3559− "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
3560− },
3561− "string_decoder": {
3562− "version": "1.1.1",
3563− "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
3564− "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
3565− "requires": {
3566− "safe-buffer": "~5.1.0"
3567− }
3568− }
3569− }
3570− },
3571− "safe-buffer": {
3572− "version": "5.1.2",
3573− "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
3574− "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
3575− },
3576− "stream-browserify": {
3577− "version": "2.0.2",
3578− "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
3579− "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
3580− "requires": {
3581− "inherits": "~2.0.1",
3582− "readable-stream": "^2.0.2"
3583− }
3584− },
3585− "stream-http": {
3586− "version": "2.8.3",
3587− "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
3588− "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
3589− "requires": {
3590− "builtin-status-codes": "^3.0.0",
3591− "inherits": "^2.0.1",
3592− "readable-stream": "^2.3.6",
3593− "to-arraybuffer": "^1.0.0",
3594− "xtend": "^4.0.0"
3595− }
3596− },
3597− "tty-browserify": {
3598− "version": "0.0.0",
3599− "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
3600− "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
3601− },
3602− "util": {
3603− "version": "0.11.1",
3604− "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
3605− "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
3606− "requires": {
3607− "inherits": "2.0.3"
3608− },
3609− "dependencies": {
3610− "inherits": {
3611− "version": "2.0.3",
3612− "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
3613− "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
3614− }
3615− }
3616− }
3617− }
3618− },
36197312 "node-releases": {
3620− "version": "1.1.76",
3621− "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz",
3622− "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA=="
7313+ "version": "2.0.3",
7314+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
7315+ "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
7316+ "dev": true
36237317 },
36247318 "normalize-path": {
36257319 "version": "3.0.0",
@@ -3629,7 +7323,8 @@
36297323 "normalize-range": {
36307324 "version": "0.1.2",
36317325 "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
3632− "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
7326+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
7327+ "dev": true
36337328 },
36347329 "npm-run-path": {
36357330 "version": "4.0.1",
@@ -3638,14 +7333,6 @@
36387333 "dev": true,
36397334 "requires": {
36407335 "path-key": "^3.0.0"
3641− },
3642− "dependencies": {
3643− "path-key": {
3644− "version": "3.1.1",
3645− "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
3646− "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
3647− "dev": true
3648− }
36497336 }
36507337 },
36517338 "nwsapi": {
@@ -3659,44 +7346,24 @@
36597346 "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
36607347 },
36617348 "object-hash": {
3662− "version": "2.2.0",
3663− "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
3664− "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
3665− },
3666− "object-inspect": {
3667− "version": "1.11.0",
3668− "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
3669− "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
3670− },
3671− "object-is": {
3672− "version": "1.1.5",
3673− "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
3674− "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
3675− "requires": {
3676− "call-bind": "^1.0.2",
3677− "define-properties": "^1.1.3"
3678− }
3679− },
3680− "object-keys": {
3681− "version": "1.1.1",
3682− "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
3683− "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
7349+ "version": "3.0.0",
7350+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
7351+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
36847352 },
3685− "object.assign": {
3686− "version": "4.1.2",
3687− "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
3688− "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
7353+ "omit-deep": {
7354+ "version": "0.3.0",
7355+ "resolved": "https://registry.npmjs.org/omit-deep/-/omit-deep-0.3.0.tgz",
7356+ "integrity": "sha1-IcivNJm8rdKWUaIyy8rLxSRF6+w=",
36897357 "requires": {
3690− "call-bind": "^1.0.0",
3691− "define-properties": "^1.1.3",
3692− "has-symbols": "^1.0.1",
3693− "object-keys": "^1.1.1"
7358+ "is-plain-object": "^2.0.1",
7359+ "unset-value": "^0.1.1"
36947360 }
36957361 },
36967362 "once": {
36977363 "version": "1.4.0",
36987364 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
36997365 "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
7366+ "dev": true,
37007367 "requires": {
37017368 "wrappy": "1"
37027369 }
@@ -3723,66 +7390,29 @@
37237390 "word-wrap": "~1.2.3"
37247391 }
37257392 },
3726− "os-browserify": {
3727− "version": "0.3.0",
3728− "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
3729− "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
3730− },
37317393 "p-limit": {
3732− "version": "3.1.0",
3733− "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
3734− "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
7394+ "version": "2.3.0",
7395+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
7396+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
7397+ "dev": true,
37357398 "requires": {
3736− "yocto-queue": "^0.1.0"
7399+ "p-try": "^2.0.0"
37377400 }
37387401 },
37397402 "p-locate": {
37407403 "version": "4.1.0",
37417404 "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
37427405 "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
7406+ "dev": true,
37437407 "requires": {
37447408 "p-limit": "^2.2.0"
3745− },
3746− "dependencies": {
3747− "p-limit": {
3748− "version": "2.3.0",
3749− "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
3750− "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
3751− "requires": {
3752− "p-try": "^2.0.0"
3753− }
3754− }
37557409 }
37567410 },
37577411 "p-try": {
37587412 "version": "2.2.0",
37597413 "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
3760− "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
3761− },
3762− "pako": {
3763− "version": "1.0.11",
3764− "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
3765− "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
3766− },
3767− "parent-module": {
3768− "version": "1.0.1",
3769− "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3770− "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3771− "requires": {
3772− "callsites": "^3.0.0"
3773− }
3774− },
3775− "parse-asn1": {
3776− "version": "5.1.6",
3777− "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
3778− "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
3779− "requires": {
3780− "asn1.js": "^5.2.0",
3781− "browserify-aes": "^1.0.0",
3782− "evp_bytestokey": "^1.0.0",
3783− "pbkdf2": "^3.0.3",
3784− "safe-buffer": "^5.1.1"
3785− }
7414+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
7415+ "dev": true
37867416 },
37877417 "parse-entities": {
37887418 "version": "2.0.0",
@@ -3795,17 +7425,18 @@
37957425 "is-alphanumerical": "^1.0.0",
37967426 "is-decimal": "^1.0.0",
37977427 "is-hexadecimal": "^1.0.0"
3798− }
3799− },
3800− "parse-json": {
3801− "version": "5.2.0",
3802− "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
3803− "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
3804− "requires": {
3805− "@babel/code-frame": "^7.0.0",
3806− "error-ex": "^1.3.1",
3807− "json-parse-even-better-errors": "^2.3.0",
3808− "lines-and-columns": "^1.1.6"
7428+ },
7429+ "dependencies": {
7430+ "character-entities": {
7431+ "version": "1.2.4",
7432+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
7433+ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
7434+ },
7435+ "character-entities-legacy": {
7436+ "version": "1.1.4",
7437+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
7438+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
7439+ }
38097440 }
38107441 },
38117442 "parse-numeric-range": {
@@ -3834,87 +7465,54 @@
38347465 "path-exists": {
38357466 "version": "4.0.0",
38367467 "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
3837− "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
7468+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
7469+ "dev": true
38387470 },
3839− "path-is-absolute": {
3840− "version": "1.0.1",
3841− "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
3842− "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
7471+ "path-key": {
7472+ "version": "3.1.1",
7473+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
7474+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
7475+ "dev": true
38437476 },
38447477 "path-parse": {
38457478 "version": "1.0.7",
38467479 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
38477480 "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
38487481 },
3849− "path-type": {
3850− "version": "4.0.0",
3851− "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
3852− "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
3853− },
3854− "pbkdf2": {
3855− "version": "3.1.2",
3856− "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
3857− "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
3858− "requires": {
3859− "create-hash": "^1.1.2",
3860− "create-hmac": "^1.1.4",
3861− "ripemd160": "^2.0.1",
3862− "safe-buffer": "^5.0.1",
3863− "sha.js": "^2.4.8"
3864− }
7482+ "picocolors": {
7483+ "version": "1.0.0",
7484+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
7485+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
38657486 },
38667487 "picomatch": {
3867− "version": "2.3.0",
3868− "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
3869− "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
3870− },
3871− "pkg-dir": {
3872− "version": "4.2.0",
3873− "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
3874− "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
3875− "requires": {
3876− "find-up": "^4.0.0"
3877− }
3878− },
3879− "platform": {
3880− "version": "1.3.6",
3881− "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
3882− "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
3883− },
3884− "pnp-webpack-plugin": {
3885− "version": "1.6.4",
3886− "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
3887− "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
3888− "requires": {
3889− "ts-pnp": "^1.1.6"
3890− }
7488+ "version": "2.3.1",
7489+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
7490+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
38917491 },
38927492 "postcss": {
3893− "version": "8.3.7",
3894− "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.7.tgz",
3895− "integrity": "sha512-9SaY7nnyQ63/WittqZYAvkkYPyKxchMKH71UDzeTmWuLSvxTRpeEeABZAzlCi55cuGcoFyoV/amX2BdsafQidQ==",
7493+ "version": "8.4.12",
7494+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz",
7495+ "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==",
38967496 "requires": {
3897− "nanocolors": "^0.1.5",
3898− "nanoid": "^3.1.25",
3899− "source-map-js": "^0.6.2"
7497+ "nanoid": "^3.3.1",
7498+ "picocolors": "^1.0.0",
7499+ "source-map-js": "^1.0.2"
39007500 }
39017501 },
39027502 "postcss-js": {
3903− "version": "3.0.3",
3904− "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
3905− "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
7503+ "version": "4.0.0",
7504+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
7505+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
39067506 "requires": {
3907− "camelcase-css": "^2.0.1",
3908− "postcss": "^8.1.6"
7507+ "camelcase-css": "^2.0.1"
39097508 }
39107509 },
39117510 "postcss-load-config": {
3912− "version": "3.1.0",
3913− "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
3914− "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
7511+ "version": "3.1.4",
7512+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
7513+ "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
39157514 "requires": {
3916− "import-cwd": "^3.0.0",
3917− "lilconfig": "^2.0.3",
7515+ "lilconfig": "^2.0.5",
39187516 "yaml": "^1.10.2"
39197517 }
39207518 },
@@ -3927,146 +7525,18 @@
39277525 }
39287526 },
39297527 "postcss-selector-parser": {
3930− "version": "6.0.6",
3931− "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
3932− "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
7528+ "version": "6.0.10",
7529+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
7530+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
39337531 "requires": {
39347532 "cssesc": "^3.0.0",
39357533 "util-deprecate": "^1.0.2"
39367534 }
39377535 },
39387536 "postcss-value-parser": {
3939− "version": "4.1.0",
3940− "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
3941− "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
3942− },
3943− "power-assert": {
3944− "version": "1.6.1",
3945− "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.6.1.tgz",
3946− "integrity": "sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==",
3947− "requires": {
3948− "define-properties": "^1.1.2",
3949− "empower": "^1.3.1",
3950− "power-assert-formatter": "^1.4.1",
3951− "universal-deep-strict-equal": "^1.2.1",
3952− "xtend": "^4.0.0"
3953− }
3954− },
3955− "power-assert-context-formatter": {
3956− "version": "1.2.0",
3957− "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz",
3958− "integrity": "sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==",
3959− "requires": {
3960− "core-js": "^2.0.0",
3961− "power-assert-context-traversal": "^1.2.0"
3962− }
3963− },
3964− "power-assert-context-reducer-ast": {
3965− "version": "1.2.0",
3966− "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz",
3967− "integrity": "sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==",
3968− "requires": {
3969− "acorn": "^5.0.0",
3970− "acorn-es7-plugin": "^1.0.12",
3971− "core-js": "^2.0.0",
3972− "espurify": "^1.6.0",
3973− "estraverse": "^4.2.0"
3974− },
3975− "dependencies": {
3976− "acorn": {
3977− "version": "5.7.4",
3978− "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
3979− "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg=="
3980− },
3981− "estraverse": {
3982− "version": "4.3.0",
3983− "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
3984− "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
3985− }
3986− }
3987− },
3988− "power-assert-context-traversal": {
3989− "version": "1.2.0",
3990− "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz",
3991− "integrity": "sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==",
3992− "requires": {
3993− "core-js": "^2.0.0",
3994− "estraverse": "^4.1.0"
3995− },
3996− "dependencies": {
3997− "estraverse": {
3998− "version": "4.3.0",
3999− "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
4000− "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
4001− }
4002− }
4003− },
4004− "power-assert-formatter": {
4005− "version": "1.4.1",
4006− "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz",
4007− "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=",
4008− "requires": {
4009− "core-js": "^2.0.0",
4010− "power-assert-context-formatter": "^1.0.7",
4011− "power-assert-context-reducer-ast": "^1.0.7",
4012− "power-assert-renderer-assertion": "^1.0.7",
4013− "power-assert-renderer-comparison": "^1.0.7",
4014− "power-assert-renderer-diagram": "^1.0.7",
4015− "power-assert-renderer-file": "^1.0.7"
4016− }
4017− },
4018− "power-assert-renderer-assertion": {
4019− "version": "1.2.0",
4020− "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz",
4021− "integrity": "sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==",
4022− "requires": {
4023− "power-assert-renderer-base": "^1.1.1",
4024− "power-assert-util-string-width": "^1.2.0"
4025− }
4026− },
4027− "power-assert-renderer-base": {
4028− "version": "1.1.1",
4029− "resolved": "https://registry.npmjs.org/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz",
4030− "integrity": "sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s="
4031− },
4032− "power-assert-renderer-comparison": {
4033− "version": "1.2.0",
4034− "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz",
4035− "integrity": "sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==",
4036− "requires": {
4037− "core-js": "^2.0.0",
4038− "diff-match-patch": "^1.0.0",
4039− "power-assert-renderer-base": "^1.1.1",
4040− "stringifier": "^1.3.0",
4041− "type-name": "^2.0.1"
4042− }
4043− },
4044− "power-assert-renderer-diagram": {
4045− "version": "1.2.0",
4046− "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz",
4047− "integrity": "sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==",
4048− "requires": {
4049− "core-js": "^2.0.0",
4050− "power-assert-renderer-base": "^1.1.1",
4051− "power-assert-util-string-width": "^1.2.0",
4052− "stringifier": "^1.3.0"
4053− }
4054− },
4055− "power-assert-renderer-file": {
4056− "version": "1.2.0",
4057− "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz",
4058− "integrity": "sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==",
4059− "requires": {
4060− "power-assert-renderer-base": "^1.1.1"
4061− }
4062− },
4063− "power-assert-util-string-width": {
4064− "version": "1.2.0",
4065− "resolved": "https://registry.npmjs.org/power-assert-util-string-width/-/power-assert-util-string-width-1.2.0.tgz",
4066− "integrity": "sha512-lX90G0igAW0iyORTILZ/QjZWsa1MZ6VVY3L0K86e2eKun3S4LKPH4xZIl8fdeMYLfOjkaszbNSzf1uugLeAm2A==",
4067− "requires": {
4068− "eastasianwidth": "^0.2.0"
4069− }
7537+ "version": "4.2.0",
7538+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
7539+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
40707540 },
40717541 "prelude-ls": {
40727542 "version": "1.1.2",
@@ -4074,20 +7544,15 @@
40747544 "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
40757545 },
40767546 "prettier": {
4077− "version": "2.4.1",
4078− "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
4079− "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
7547+ "version": "2.6.2",
7548+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
7549+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
40807550 "dev": true
40817551 },
4082− "pretty-hrtime": {
4083− "version": "1.0.3",
4084− "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
4085− "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
4086− },
40877552 "pretty-quick": {
4088− "version": "3.1.1",
4089− "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.1.tgz",
4090− "integrity": "sha512-ZYLGiMoV2jcaas3vTJrLvKAYsxDoXQBUn8OSTxkl67Fyov9lyXivJTl0+2WVh+y6EovGcw7Lm5ThYpH+Sh3XxQ==",
7553+ "version": "3.1.3",
7554+ "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz",
7555+ "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==",
40917556 "dev": true,
40927557 "requires": {
40937558 "chalk": "^3.0.0",
@@ -4096,82 +7561,26 @@
40967561 "ignore": "^5.1.4",
40977562 "mri": "^1.1.5",
40987563 "multimatch": "^4.0.0"
4099− },
4100− "dependencies": {
4101− "ansi-styles": {
4102− "version": "4.3.0",
4103− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
4104− "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
4105− "dev": true,
4106− "requires": {
4107− "color-convert": "^2.0.1"
4108− }
4109− },
4110− "chalk": {
4111− "version": "3.0.0",
4112− "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
4113− "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
4114− "dev": true,
4115− "requires": {
4116− "ansi-styles": "^4.1.0",
4117− "supports-color": "^7.1.0"
4118− }
4119− },
4120− "color-convert": {
4121− "version": "2.0.1",
4122− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
4123− "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
4124− "dev": true,
4125− "requires": {
4126− "color-name": "~1.1.4"
4127− }
4128− },
4129− "color-name": {
4130− "version": "1.1.4",
4131− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
4132− "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
4133− "dev": true
4134− },
4135− "has-flag": {
4136− "version": "4.0.0",
4137− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4138− "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4139− "dev": true
4140− },
4141− "supports-color": {
4142− "version": "7.2.0",
4143− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
4144− "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
4145− "dev": true,
4146− "requires": {
4147− "has-flag": "^4.0.0"
4148− }
4149− }
41507564 }
41517565 },
41527566 "prismjs": {
4153− "version": "1.25.0",
4154− "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz",
4155− "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg=="
7567+ "version": "1.28.0",
7568+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz",
7569+ "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw=="
41567570 },
41577571 "process": {
41587572 "version": "0.11.10",
41597573 "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
41607574 "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
41617575 },
4162− "process-nextick-args": {
4163− "version": "2.0.1",
4164− "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
4165− "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
4166− },
41677576 "prop-types": {
4168− "version": "15.7.2",
4169− "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
4170− "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
7577+ "version": "15.8.1",
7578+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
7579+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
41717580 "requires": {
41727581 "loose-envify": "^1.4.0",
41737582 "object-assign": "^4.1.1",
4174− "react-is": "^16.8.1"
7583+ "react-is": "^16.13.1"
41757584 },
41767585 "dependencies": {
41777586 "react-is": {
@@ -4182,38 +7591,15 @@
41827591 }
41837592 },
41847593 "property-information": {
4185− "version": "5.6.0",
4186− "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
4187− "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
4188− "requires": {
4189− "xtend": "^4.0.0"
4190− }
7594+ "version": "6.1.1",
7595+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz",
7596+ "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w=="
41917597 },
41927598 "psl": {
41937599 "version": "1.8.0",
41947600 "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
41957601 "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
41967602 },
4197− "public-encrypt": {
4198− "version": "4.0.3",
4199− "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
4200− "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
4201− "requires": {
4202− "bn.js": "^4.1.0",
4203− "browserify-rsa": "^4.0.0",
4204− "create-hash": "^1.1.0",
4205− "parse-asn1": "^5.0.0",
4206− "randombytes": "^2.0.1",
4207− "safe-buffer": "^5.1.2"
4208− },
4209− "dependencies": {
4210− "bn.js": {
4211− "version": "4.12.0",
4212− "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
4213− "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
4214− }
4215− }
4216− },
42177603 "pump": {
42187604 "version": "3.0.0",
42197605 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -4229,27 +7615,6 @@
42297615 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
42307616 "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
42317617 },
4232− "purgecss": {
4233− "version": "4.0.3",
4234− "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz",
4235− "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==",
4236− "requires": {
4237− "commander": "^6.0.0",
4238− "glob": "^7.0.0",
4239− "postcss": "^8.2.1",
4240− "postcss-selector-parser": "^6.0.2"
4241− }
4242− },
4243− "querystring": {
4244− "version": "0.2.1",
4245− "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz",
4246− "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg=="
4247− },
4248− "querystring-es3": {
4249− "version": "0.2.1",
4250− "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
4251− "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
4252− },
42537618 "queue-microtask": {
42547619 "version": "1.2.3",
42557620 "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4260,44 +7625,6 @@
42607625 "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
42617626 "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
42627627 },
4263− "randombytes": {
4264− "version": "2.1.0",
4265− "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
4266− "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
4267− "requires": {
4268− "safe-buffer": "^5.1.0"
4269− }
4270− },
4271− "randomfill": {
4272− "version": "1.0.4",
4273− "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
4274− "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
4275− "requires": {
4276− "randombytes": "^2.0.5",
4277− "safe-buffer": "^5.1.0"
4278− }
4279− },
4280− "raw-body": {
4281− "version": "2.4.1",
4282− "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
4283− "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
4284− "requires": {
4285− "bytes": "3.1.0",
4286− "http-errors": "1.7.3",
4287− "iconv-lite": "0.4.24",
4288− "unpipe": "1.0.0"
4289− },
4290− "dependencies": {
4291− "iconv-lite": {
4292− "version": "0.4.24",
4293− "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
4294− "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
4295− "requires": {
4296− "safer-buffer": ">= 2.1.2 < 3"
4297− }
4298− }
4299− }
4300− },
43017628 "react": {
43027629 "version": "17.0.2",
43037630 "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
@@ -4330,20 +7657,17 @@
43307657 "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
43317658 "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
43327659 },
4333− "react-refresh": {
4334− "version": "0.8.3",
4335− "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
4336− "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg=="
4337− },
43387660 "react-swipeable": {
4339− "version": "6.2.0",
4340− "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.0.tgz",
4341− "integrity": "sha512-nWQ8dEM8e/uswZLSIkXUsAnQmnX4MTcryOHBQIQYRMJFDpgDBSiVbKsz/BZVCIScF4NtJh16oyxwaNOepR6xSw=="
7661+ "version": "6.2.1",
7662+ "resolved": "https://registry.npmjs.org/react-swipeable/-/react-swipeable-6.2.1.tgz",
7663+ "integrity": "sha512-JpTj+tjJTDcIWtoMkab6zfwWD1T1tBzUyEfXsXnohnNkwA2dTuNS0gtN7HoxU1Qa+e3GDnfNYk2z7vwzfO4SoQ==",
7664+ "requires": {}
43427665 },
43437666 "react-use-localstorage": {
43447667 "version": "3.5.3",
43457668 "resolved": "https://registry.npmjs.org/react-use-localstorage/-/react-use-localstorage-3.5.3.tgz",
4346− "integrity": "sha512-1oNvJmo72G4v5P9ytJZZTb6ywD3UzWBiainTtfbNlb+U08hc+SOD5HqgiLTKUF0MxGcIR9JSnZGmBttNLXaQYA=="
7669+ "integrity": "sha512-1oNvJmo72G4v5P9ytJZZTb6ywD3UzWBiainTtfbNlb+U08hc+SOD5HqgiLTKUF0MxGcIR9JSnZGmBttNLXaQYA==",
7670+ "requires": {}
43477671 },
43487672 "readable-stream": {
43497673 "version": "3.6.0",
@@ -4356,38 +7680,22 @@
43567680 }
43577681 },
43587682 "readdirp": {
4359− "version": "3.5.0",
4360− "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
4361− "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
7683+ "version": "3.6.0",
7684+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
7685+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
43627686 "requires": {
43637687 "picomatch": "^2.2.1"
43647688 }
43657689 },
4366− "reduce-css-calc": {
4367− "version": "2.1.8",
4368− "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
4369− "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
4370− "requires": {
4371− "css-unit-converter": "^1.1.1",
4372− "postcss-value-parser": "^3.3.0"
4373− },
4374− "dependencies": {
4375− "postcss-value-parser": {
4376− "version": "3.3.1",
4377− "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
4378− "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
4379− }
4380− }
4381− },
43827690 "regenerator-runtime": {
43837691 "version": "0.13.9",
43847692 "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
43857693 "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
43867694 },
43877695 "rehype-raw": {
4388− "version": "6.1.0",
4389− "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.0.tgz",
4390− "integrity": "sha512-12j2UiiYJgZFdjnHDny77NY5BF3eW4Jsl0vtgL1DWdTzcHjPpbhumU+GtPUdivEWwQc8x9OdEuO0oxaGz7Tvyg==",
7696+ "version": "6.1.1",
7697+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz",
7698+ "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==",
43917699 "requires": {
43927700 "@types/hast": "^2.0.0",
43937701 "hast-util-raw": "^7.2.0",
@@ -4395,9 +7703,9 @@
43957703 },
43967704 "dependencies": {
43977705 "bail": {
4398− "version": "2.0.1",
4399− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
4400− "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA=="
7706+ "version": "2.0.2",
7707+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
7708+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
44017709 },
44027710 "is-plain-obj": {
44037711 "version": "4.0.0",
@@ -4405,14 +7713,14 @@
44057713 "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
44067714 },
44077715 "trough": {
4408− "version": "2.0.2",
4409− "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
4410− "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
7716+ "version": "2.1.0",
7717+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
7718+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
44117719 },
44127720 "unified": {
4413− "version": "10.1.0",
4414− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz",
4415− "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==",
7721+ "version": "10.1.2",
7722+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
7723+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
44167724 "requires": {
44177725 "@types/unist": "^2.0.0",
44187726 "bail": "^2.0.0",
@@ -4422,41 +7730,13 @@
44227730 "trough": "^2.0.0",
44237731 "vfile": "^5.0.0"
44247732 }
4425− },
4426− "unist-util-stringify-position": {
4427− "version": "3.0.0",
4428− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
4429− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
4430− "requires": {
4431− "@types/unist": "^2.0.0"
4432− }
4433− },
4434− "vfile": {
4435− "version": "5.1.0",
4436− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
4437− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
4438− "requires": {
4439− "@types/unist": "^2.0.0",
4440− "is-buffer": "^2.0.0",
4441− "unist-util-stringify-position": "^3.0.0",
4442− "vfile-message": "^3.0.0"
4443− }
4444− },
4445− "vfile-message": {
4446− "version": "3.0.2",
4447− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
4448− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
4449− "requires": {
4450− "@types/unist": "^2.0.0",
4451− "unist-util-stringify-position": "^3.0.0"
4452− }
44537733 }
44547734 }
44557735 },
44567736 "rehype-stringify": {
4457− "version": "9.0.2",
4458− "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.2.tgz",
4459− "integrity": "sha512-BuVA6lAEYtOpXO2xuHLohAzz8UNoQAxAqYRqh4QEEtU39Co+P1JBZhw6wXA9hMWp+JLcmrxWH8+UKcNSr443Fw==",
7737+ "version": "9.0.3",
7738+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz",
7739+ "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==",
44607740 "requires": {
44617741 "@types/hast": "^2.0.0",
44627742 "hast-util-to-html": "^8.0.0",
@@ -4464,99 +7744,24 @@
44647744 },
44657745 "dependencies": {
44667746 "bail": {
4467− "version": "2.0.1",
4468− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
4469− "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA=="
4470− },
4471− "ccount": {
4472− "version": "2.0.0",
4473− "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.0.tgz",
4474− "integrity": "sha512-VOR0NWFYX65n9gELQdcpqsie5L5ihBXuZGAgaPEp/U7IOSjnPMEH6geE+2f6lcekaNEfWzAHS45mPvSo5bqsUA=="
4475− },
4476− "character-entities-html4": {
4477− "version": "2.0.0",
4478− "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.0.0.tgz",
4479− "integrity": "sha512-dwT2xh5ZhUAjyP96k57ilMKoTQyASaw9IAMR9U5c1lCu2RUni6O6jxfpUEdO2RcPT6TJFvr8pqsbami4Jk+2oA=="
4480− },
4481− "character-entities-legacy": {
4482− "version": "2.0.0",
4483− "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-2.0.0.tgz",
4484− "integrity": "sha512-YwaEtEvWLpFa6Wh3uVLrvirA/ahr9fki/NUd/Bd4OR6EdJ8D22hovYQEOUCBfQfcqnC4IAMGMsHXY1eXgL4ZZA=="
4485− },
4486− "comma-separated-tokens": {
44877747 "version": "2.0.2",
4488− "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz",
4489− "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg=="
4490− },
4491− "hast-util-is-element": {
4492− "version": "2.1.1",
4493− "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.1.tgz",
4494− "integrity": "sha512-ag0fiZfRWsPiR1udvnSbaazJLGv8qd8E+/e3rW8rUZhbKG4HNJmFL4QkEceN+22BgE+uozXY30z/s+2dL6Z++g==",
4495− "requires": {
4496− "@types/hast": "^2.0.0",
4497− "@types/unist": "^2.0.0"
4498− }
4499− },
4500− "hast-util-to-html": {
4501− "version": "8.0.2",
4502− "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.2.tgz",
4503− "integrity": "sha512-ipLhUTMyyJi9F/LXaNDG9BrRdshP6obCfmUZYbE/+T639IdzqAOkKN4DyrEyID0gbb+rsC3PKf0XlviZwzomhw==",
4504− "requires": {
4505− "@types/hast": "^2.0.0",
4506− "ccount": "^2.0.0",
4507− "comma-separated-tokens": "^2.0.0",
4508− "hast-util-is-element": "^2.0.0",
4509− "hast-util-whitespace": "^2.0.0",
4510− "html-void-elements": "^2.0.0",
4511− "property-information": "^6.0.0",
4512− "space-separated-tokens": "^2.0.0",
4513− "stringify-entities": "^4.0.0",
4514− "unist-util-is": "^5.0.0"
4515− }
4516− },
4517− "hast-util-whitespace": {
4518− "version": "2.0.0",
4519− "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz",
4520− "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg=="
4521− },
4522− "html-void-elements": {
4523− "version": "2.0.0",
4524− "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.0.tgz",
4525− "integrity": "sha512-4OYzQQsBt0G9bJ/nM9/DDsjm4+fVdzAaPJJcWk5QwA3GIAPxQEeOR0rsI8HbDHQz5Gta8pVvGnnTNSbZVEVvkQ=="
7748+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
7749+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
45267750 },
45277751 "is-plain-obj": {
45287752 "version": "4.0.0",
45297753 "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
45307754 "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
45317755 },
4532− "property-information": {
4533− "version": "6.0.1",
4534− "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.0.1.tgz",
4535− "integrity": "sha512-F4WUUAF7fMeF4/JUFHNBWDaKDXi2jbvqBW/y6o5wsf3j19wTZ7S60TmtB5HoBhtgw7NKQRMWuz5vk2PR0CygUg=="
4536− },
4537− "space-separated-tokens": {
4538− "version": "2.0.1",
4539− "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
4540− "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
4541− },
4542− "stringify-entities": {
4543− "version": "4.0.1",
4544− "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.1.tgz",
4545− "integrity": "sha512-gmMQxKXPWIO3NXNSPyWNhlYcBNGpPA/487D+9dLPnU4xBnIrnHdr8cv5rGJOS/1BRxEXRb7uKwg7BA36IWV7xg==",
4546− "requires": {
4547− "character-entities-html4": "^2.0.0",
4548− "character-entities-legacy": "^2.0.0"
4549− }
4550− },
45517756 "trough": {
4552− "version": "2.0.2",
4553− "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
4554− "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
7757+ "version": "2.1.0",
7758+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
7759+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
45557760 },
45567761 "unified": {
4557− "version": "10.1.0",
4558− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz",
4559− "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==",
7762+ "version": "10.1.2",
7763+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
7764+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
45607765 "requires": {
45617766 "@types/unist": "^2.0.0",
45627767 "bail": "^2.0.0",
@@ -4566,39 +7771,6 @@
45667771 "trough": "^2.0.0",
45677772 "vfile": "^5.0.0"
45687773 }
4569− },
4570− "unist-util-is": {
4571− "version": "5.1.1",
4572− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
4573− "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
4574− },
4575− "unist-util-stringify-position": {
4576− "version": "3.0.0",
4577− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
4578− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
4579− "requires": {
4580− "@types/unist": "^2.0.0"
4581− }
4582− },
4583− "vfile": {
4584− "version": "5.1.0",
4585− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
4586− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
4587− "requires": {
4588− "@types/unist": "^2.0.0",
4589− "is-buffer": "^2.0.0",
4590− "unist-util-stringify-position": "^3.0.0",
4591− "vfile-message": "^3.0.0"
4592− }
4593− },
4594− "vfile-message": {
4595− "version": "3.0.2",
4596− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
4597− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
4598− "requires": {
4599− "@types/unist": "^2.0.0",
4600− "unist-util-stringify-position": "^3.0.0"
4601− }
46027774 }
46037775 }
46047776 },
@@ -4624,6 +7796,20 @@
46247796 "unist-util-stringify-position": "^2.0.0"
46257797 }
46267798 },
7799+ "mdast-util-to-string": {
7800+ "version": "2.0.0",
7801+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
7802+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="
7803+ },
7804+ "micromark": {
7805+ "version": "2.11.4",
7806+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
7807+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
7808+ "requires": {
7809+ "debug": "^4.0.0",
7810+ "parse-entities": "^2.0.0"
7811+ }
7812+ },
46277813 "remark-parse": {
46287814 "version": "9.0.0",
46297815 "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
@@ -4631,16 +7817,57 @@
46317817 "requires": {
46327818 "mdast-util-from-markdown": "^0.8.0"
46337819 }
7820+ },
7821+ "unist-util-stringify-position": {
7822+ "version": "2.0.3",
7823+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
7824+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
7825+ "requires": {
7826+ "@types/unist": "^2.0.2"
7827+ }
46347828 }
46357829 }
46367830 },
46377831 "remark-gfm": {
4638− "version": "1.0.0",
4639− "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz",
4640− "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==",
7832+ "version": "3.0.1",
7833+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
7834+ "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
46417835 "requires": {
4642− "mdast-util-gfm": "^0.1.0",
4643− "micromark-extension-gfm": "^0.3.0"
7836+ "@types/mdast": "^3.0.0",
7837+ "mdast-util-gfm": "^2.0.0",
7838+ "micromark-extension-gfm": "^2.0.0",
7839+ "unified": "^10.0.0"
7840+ },
7841+ "dependencies": {
7842+ "bail": {
7843+ "version": "2.0.2",
7844+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
7845+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
7846+ },
7847+ "is-plain-obj": {
7848+ "version": "4.0.0",
7849+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
7850+ "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
7851+ },
7852+ "trough": {
7853+ "version": "2.1.0",
7854+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
7855+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
7856+ },
7857+ "unified": {
7858+ "version": "10.1.2",
7859+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
7860+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
7861+ "requires": {
7862+ "@types/unist": "^2.0.0",
7863+ "bail": "^2.0.0",
7864+ "extend": "^3.0.0",
7865+ "is-buffer": "^2.0.0",
7866+ "is-plain-obj": "^4.0.0",
7867+ "trough": "^2.0.0",
7868+ "vfile": "^5.0.0"
7869+ }
7870+ }
46447871 }
46457872 },
46467873 "remark-heading-id": {
@@ -4649,6 +7876,29 @@
46497876 "integrity": "sha512-86QaOiL+8jTV9P5Y0S25kSIcykCd/XmnqiFltWZRWKHmsVT4sevN7QJnkpUjkCJUpIeWte/LYH7pVlCTGz89fw==",
46507877 "requires": {
46517878 "unist-util-visit": "^1.4.0"
7879+ },
7880+ "dependencies": {
7881+ "unist-util-is": {
7882+ "version": "3.0.0",
7883+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
7884+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="
7885+ },
7886+ "unist-util-visit": {
7887+ "version": "1.4.1",
7888+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
7889+ "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
7890+ "requires": {
7891+ "unist-util-visit-parents": "^2.0.0"
7892+ }
7893+ },
7894+ "unist-util-visit-parents": {
7895+ "version": "2.1.2",
7896+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
7897+ "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
7898+ "requires": {
7899+ "unist-util-is": "^3.0.0"
7900+ }
7901+ }
46527902 }
46537903 },
46547904 "remark-html": {
@@ -4659,12 +7909,94 @@
46597909 "hast-util-sanitize": "^3.0.0",
46607910 "hast-util-to-html": "^7.0.0",
46617911 "mdast-util-to-hast": "^10.0.0"
7912+ },
7913+ "dependencies": {
7914+ "ccount": {
7915+ "version": "1.1.0",
7916+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
7917+ "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg=="
7918+ },
7919+ "character-entities-html4": {
7920+ "version": "1.1.4",
7921+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
7922+ "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g=="
7923+ },
7924+ "character-entities-legacy": {
7925+ "version": "1.1.4",
7926+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
7927+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
7928+ },
7929+ "comma-separated-tokens": {
7930+ "version": "1.0.8",
7931+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
7932+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw=="
7933+ },
7934+ "hast-util-is-element": {
7935+ "version": "1.1.0",
7936+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
7937+ "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ=="
7938+ },
7939+ "hast-util-to-html": {
7940+ "version": "7.1.3",
7941+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz",
7942+ "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==",
7943+ "requires": {
7944+ "ccount": "^1.0.0",
7945+ "comma-separated-tokens": "^1.0.0",
7946+ "hast-util-is-element": "^1.0.0",
7947+ "hast-util-whitespace": "^1.0.0",
7948+ "html-void-elements": "^1.0.0",
7949+ "property-information": "^5.0.0",
7950+ "space-separated-tokens": "^1.0.0",
7951+ "stringify-entities": "^3.0.1",
7952+ "unist-util-is": "^4.0.0",
7953+ "xtend": "^4.0.0"
7954+ }
7955+ },
7956+ "hast-util-whitespace": {
7957+ "version": "1.0.4",
7958+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
7959+ "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A=="
7960+ },
7961+ "html-void-elements": {
7962+ "version": "1.0.5",
7963+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
7964+ "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w=="
7965+ },
7966+ "property-information": {
7967+ "version": "5.6.0",
7968+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
7969+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
7970+ "requires": {
7971+ "xtend": "^4.0.0"
7972+ }
7973+ },
7974+ "space-separated-tokens": {
7975+ "version": "1.1.5",
7976+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
7977+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="
7978+ },
7979+ "stringify-entities": {
7980+ "version": "3.1.0",
7981+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz",
7982+ "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==",
7983+ "requires": {
7984+ "character-entities-html4": "^1.0.0",
7985+ "character-entities-legacy": "^1.0.0",
7986+ "xtend": "^4.0.0"
7987+ }
7988+ },
7989+ "unist-util-is": {
7990+ "version": "4.1.0",
7991+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
7992+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="
7993+ }
46627994 }
46637995 },
46647996 "remark-parse": {
4665− "version": "10.0.0",
4666− "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.0.tgz",
4667− "integrity": "sha512-07ei47p2Xl7Bqbn9H2VYQYirnAFJPwdMuypdozWsSbnmrkgA2e2sZLZdnDNrrsxR4onmIzH/J6KXqKxCuqHtPQ==",
7997+ "version": "10.0.1",
7998+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz",
7999+ "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==",
46688000 "requires": {
46698001 "@types/mdast": "^3.0.0",
46708002 "mdast-util-from-markdown": "^1.0.0",
@@ -4672,9 +8004,9 @@
46728004 },
46738005 "dependencies": {
46748006 "bail": {
4675− "version": "2.0.1",
4676− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
4677− "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA=="
8007+ "version": "2.0.2",
8008+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
8009+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
46788010 },
46798011 "is-plain-obj": {
46808012 "version": "4.0.0",
@@ -4682,14 +8014,14 @@
46828014 "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
46838015 },
46848016 "trough": {
4685− "version": "2.0.2",
4686− "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
4687− "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
8017+ "version": "2.1.0",
8018+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
8019+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
46888020 },
46898021 "unified": {
4690− "version": "10.1.0",
4691− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz",
4692− "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==",
8022+ "version": "10.1.2",
8023+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
8024+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
46938025 "requires": {
46948026 "@types/unist": "^2.0.0",
46958027 "bail": "^2.0.0",
@@ -4699,34 +8031,6 @@
46998031 "trough": "^2.0.0",
47008032 "vfile": "^5.0.0"
47018033 }
4702− },
4703− "unist-util-stringify-position": {
4704− "version": "3.0.0",
4705− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
4706− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
4707− "requires": {
4708− "@types/unist": "^2.0.0"
4709− }
4710− },
4711− "vfile": {
4712− "version": "5.1.0",
4713− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
4714− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
4715− "requires": {
4716− "@types/unist": "^2.0.0",
4717− "is-buffer": "^2.0.0",
4718− "unist-util-stringify-position": "^3.0.0",
4719− "vfile-message": "^3.0.0"
4720− }
4721− },
4722− "vfile-message": {
4723− "version": "3.0.2",
4724− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
4725− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
4726− "requires": {
4727− "@types/unist": "^2.0.0",
4728− "unist-util-stringify-position": "^3.0.0"
4729− }
47308034 }
47318035 }
47328036 },
@@ -4747,20 +8051,20 @@
47478051 }
47488052 },
47498053 "remark-rehype": {
4750− "version": "10.0.0",
4751− "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.0.0.tgz",
4752− "integrity": "sha512-WgvJFpfRLfnyHGvQaMgLXVfaXIXVA9FFo7tSky0omLLukZvDJdobZ2V/wYGd2xlScPVZNx6/99fb5kLFT2uFWQ==",
8054+ "version": "10.1.0",
8055+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
8056+ "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
47538057 "requires": {
47548058 "@types/hast": "^2.0.0",
47558059 "@types/mdast": "^3.0.0",
4756− "mdast-util-to-hast": "^12.0.0",
8060+ "mdast-util-to-hast": "^12.1.0",
47578061 "unified": "^10.0.0"
47588062 },
47598063 "dependencies": {
47608064 "bail": {
4761− "version": "2.0.1",
4762− "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.1.tgz",
4763− "integrity": "sha512-d5FoTAr2S5DSUPKl85WNm2yUwsINN8eidIdIwsOge2t33DaOfOdSmmsI11jMN3GmALCXaw+Y6HMVHDzePshFAA=="
8065+ "version": "2.0.2",
8066+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
8067+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
47648068 },
47658069 "is-plain-obj": {
47668070 "version": "4.0.0",
@@ -4790,9 +8094,9 @@
47908094 }
47918095 },
47928096 "mdast-util-to-hast": {
4793− "version": "12.0.0",
4794− "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.0.0.tgz",
4795− "integrity": "sha512-BCeq0Bz103NJvmhB7gN0TDmKRT7x3auJmEp7NcYX1xpqZsQeA3JNLazLhFx6VQPqw30e2zes/coKPAiEqxxUuQ==",
8097+ "version": "12.1.1",
8098+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz",
8099+ "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==",
47968100 "requires": {
47978101 "@types/hast": "^2.0.0",
47988102 "@types/mdast": "^3.0.0",
@@ -4807,14 +8111,14 @@
48078111 }
48088112 },
48098113 "trough": {
4810− "version": "2.0.2",
4811− "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz",
4812− "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w=="
8114+ "version": "2.1.0",
8115+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
8116+ "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
48138117 },
48148118 "unified": {
4815− "version": "10.1.0",
4816− "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz",
4817− "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==",
8119+ "version": "10.1.2",
8120+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
8121+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
48188122 "requires": {
48198123 "@types/unist": "^2.0.0",
48208124 "bail": "^2.0.0",
@@ -4837,74 +8141,6 @@
48378141 "version": "2.0.0",
48388142 "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz",
48398143 "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw=="
4840− },
4841− "unist-util-is": {
4842− "version": "5.1.1",
4843− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
4844− "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
4845− },
4846− "unist-util-position": {
4847− "version": "4.0.1",
4848− "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz",
4849− "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA=="
4850− },
4851− "unist-util-stringify-position": {
4852− "version": "3.0.0",
4853− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
4854− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
4855− "requires": {
4856− "@types/unist": "^2.0.0"
4857− }
4858− },
4859− "unist-util-visit": {
4860− "version": "4.1.0",
4861− "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
4862− "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
4863− "requires": {
4864− "@types/unist": "^2.0.0",
4865− "unist-util-is": "^5.0.0",
4866− "unist-util-visit-parents": "^5.0.0"
4867− },
4868− "dependencies": {
4869− "unist-util-visit-parents": {
4870− "version": "5.1.0",
4871− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
4872− "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
4873− "requires": {
4874− "@types/unist": "^2.0.0",
4875− "unist-util-is": "^5.0.0"
4876− }
4877− }
4878− }
4879− },
4880− "unist-util-visit-parents": {
4881− "version": "4.1.1",
4882− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
4883− "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
4884− "requires": {
4885− "@types/unist": "^2.0.0",
4886− "unist-util-is": "^5.0.0"
4887− }
4888− },
4889− "vfile": {
4890− "version": "5.1.0",
4891− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
4892− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
4893− "requires": {
4894− "@types/unist": "^2.0.0",
4895− "is-buffer": "^2.0.0",
4896− "unist-util-stringify-position": "^3.0.0",
4897− "vfile-message": "^3.0.0"
4898− }
4899− },
4900− "vfile-message": {
4901− "version": "3.0.2",
4902− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
4903− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
4904− "requires": {
4905− "@types/unist": "^2.0.0",
4906− "unist-util-stringify-position": "^3.0.0"
4907− }
49088144 }
49098145 }
49108146 },
@@ -4923,6 +8159,11 @@
49238159 "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz",
49248160 "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A=="
49258161 },
8162+ "unist-util-is": {
8163+ "version": "4.1.0",
8164+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
8165+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="
8166+ },
49268167 "unist-util-visit": {
49278168 "version": "2.0.3",
49288169 "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
@@ -4932,6 +8173,15 @@
49328173 "unist-util-is": "^4.0.0",
49338174 "unist-util-visit-parents": "^3.0.0"
49348175 }
8176+ },
8177+ "unist-util-visit-parents": {
8178+ "version": "3.1.1",
8179+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
8180+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
8181+ "requires": {
8182+ "@types/unist": "^2.0.0",
8183+ "unist-util-is": "^4.0.0"
8184+ }
49358185 }
49368186 }
49378187 },
@@ -4941,51 +8191,63 @@
49418191 "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==",
49428192 "requires": {
49438193 "mdast-util-to-markdown": "^0.6.0"
8194+ },
8195+ "dependencies": {
8196+ "longest-streak": {
8197+ "version": "2.0.4",
8198+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
8199+ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg=="
8200+ },
8201+ "mdast-util-to-markdown": {
8202+ "version": "0.6.5",
8203+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
8204+ "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
8205+ "requires": {
8206+ "@types/unist": "^2.0.0",
8207+ "longest-streak": "^2.0.0",
8208+ "mdast-util-to-string": "^2.0.0",
8209+ "parse-entities": "^2.0.0",
8210+ "repeat-string": "^1.0.0",
8211+ "zwitch": "^1.0.0"
8212+ }
8213+ },
8214+ "mdast-util-to-string": {
8215+ "version": "2.0.0",
8216+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
8217+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="
8218+ },
8219+ "zwitch": {
8220+ "version": "1.0.5",
8221+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
8222+ "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw=="
8223+ }
49448224 }
49458225 },
8226+ "rename-keys": {
8227+ "version": "1.2.0",
8228+ "resolved": "https://registry.npmjs.org/rename-keys/-/rename-keys-1.2.0.tgz",
8229+ "integrity": "sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg=="
8230+ },
49468231 "repeat-string": {
49478232 "version": "1.6.1",
49488233 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
49498234 "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
49508235 },
49518236 "resolve": {
4952− "version": "1.20.0",
4953− "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
4954− "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
8237+ "version": "1.22.0",
8238+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
8239+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
49558240 "requires": {
4956− "is-core-module": "^2.2.0",
4957− "path-parse": "^1.0.6"
8241+ "is-core-module": "^2.8.1",
8242+ "path-parse": "^1.0.7",
8243+ "supports-preserve-symlinks-flag": "^1.0.0"
49588244 }
49598245 },
4960− "resolve-from": {
4961− "version": "4.0.0",
4962− "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
4963− "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
4964− },
49658246 "reusify": {
49668247 "version": "1.0.4",
49678248 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
49688249 "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
49698250 },
4970− "rgb-regex": {
4971− "version": "1.0.1",
4972− "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
4973− "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE="
4974− },
4975− "rgba-regex": {
4976− "version": "1.0.0",
4977− "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
4978− "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
4979− },
4980− "ripemd160": {
4981− "version": "2.0.2",
4982− "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
4983− "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
4984− "requires": {
4985− "hash-base": "^3.0.0",
4986− "inherits": "^2.0.1"
4987− }
4988− },
49898251 "run-parallel": {
49908252 "version": "1.2.0",
49918253 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -4994,6 +8256,14 @@
49948256 "queue-microtask": "^1.2.2"
49958257 }
49968258 },
8259+ "sade": {
8260+ "version": "1.8.1",
8261+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
8262+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
8263+ "requires": {
8264+ "mri": "^1.1.0"
8265+ }
8266+ },
49978267 "safe-buffer": {
49988268 "version": "5.2.1",
49998269 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -5035,144 +8305,55 @@
50358305 "kind-of": "^6.0.0"
50368306 }
50378307 },
5038− "semver": {
5039− "version": "6.3.0",
5040− "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
5041− "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
5042− },
5043− "setimmediate": {
5044− "version": "1.0.5",
5045− "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
5046− "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
5047− },
5048− "setprototypeof": {
5049− "version": "1.1.1",
5050− "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
5051− "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
5052− },
5053− "sha.js": {
5054− "version": "2.4.11",
5055− "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
5056− "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
8308+ "shebang-command": {
8309+ "version": "2.0.0",
8310+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
8311+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
8312+ "dev": true,
50578313 "requires": {
5058− "inherits": "^2.0.1",
5059− "safe-buffer": "^5.0.1"
8314+ "shebang-regex": "^3.0.0"
50608315 }
50618316 },
5062− "shell-quote": {
5063− "version": "1.7.2",
5064− "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
5065− "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
5066− },
5067− "side-channel": {
5068− "version": "1.0.4",
5069− "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
5070− "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
5071− "requires": {
5072− "call-bind": "^1.0.0",
5073− "get-intrinsic": "^1.0.2",
5074− "object-inspect": "^1.9.0"
5075− }
8317+ "shebang-regex": {
8318+ "version": "3.0.0",
8319+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
8320+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
8321+ "dev": true
50768322 },
50778323 "signal-exit": {
5078− "version": "3.0.4",
5079− "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
5080− "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
8324+ "version": "3.0.7",
8325+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
8326+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
50818327 "dev": true
50828328 },
5083− "simple-swizzle": {
5084− "version": "0.2.2",
5085− "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
5086− "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
5087− "requires": {
5088− "is-arrayish": "^0.3.1"
5089− }
5090− },
50918329 "source-map": {
5092− "version": "0.8.0-beta.0",
5093− "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
5094− "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
5095− "requires": {
5096− "whatwg-url": "^7.0.0"
5097− }
8330+ "version": "0.6.1",
8331+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
8332+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
8333+ "optional": true
50988334 },
50998335 "source-map-js": {
5100− "version": "0.6.2",
5101− "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
5102− "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug=="
8336+ "version": "1.0.2",
8337+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
8338+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
51038339 },
51048340 "space-separated-tokens": {
5105− "version": "1.1.5",
5106− "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
5107− "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="
5108− },
5109− "sprintf-js": {
5110− "version": "1.0.3",
5111− "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
5112− "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
5113− },
5114− "stacktrace-parser": {
5115− "version": "0.1.10",
5116− "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
5117− "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
5118− "requires": {
5119− "type-fest": "^0.7.1"
5120− }
5121− },
5122− "statuses": {
5123− "version": "1.5.0",
5124− "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
5125− "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
5126− },
5127− "stream-browserify": {
5128− "version": "3.0.0",
5129− "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
5130− "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
5131− "requires": {
5132− "inherits": "~2.0.4",
5133− "readable-stream": "^3.5.0"
5134− }
5135− },
5136− "stream-http": {
5137− "version": "3.1.1",
5138− "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz",
5139− "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==",
5140− "requires": {
5141− "builtin-status-codes": "^3.0.0",
5142− "inherits": "^2.0.4",
5143− "readable-stream": "^3.6.0",
5144− "xtend": "^4.0.2"
5145− }
5146− },
5147− "stream-parser": {
5148− "version": "0.3.1",
5149− "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
5150− "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
5151− "requires": {
5152− "debug": "2"
5153− }
5154− },
5155− "string-hash": {
5156− "version": "1.1.3",
5157− "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
5158− "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs="
5159− },
5160− "string.prototype.trimend": {
5161− "version": "1.0.4",
5162− "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
5163− "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
5164− "requires": {
5165− "call-bind": "^1.0.2",
5166− "define-properties": "^1.1.3"
5167− }
8341+ "version": "2.0.1",
8342+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz",
8343+ "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw=="
51688344 },
5169− "string.prototype.trimstart": {
5170− "version": "1.0.4",
5171− "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
5172− "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
8345+ "sprintf-js": {
8346+ "version": "1.0.3",
8347+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
8348+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
8349+ },
8350+ "stream-browserify": {
8351+ "version": "3.0.0",
8352+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
8353+ "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
51738354 "requires": {
5174− "call-bind": "^1.0.2",
5175− "define-properties": "^1.1.3"
8355+ "inherits": "~2.0.4",
8356+ "readable-stream": "^3.5.0"
51768357 }
51778358 },
51788359 "string_decoder": {
@@ -5183,32 +8364,13 @@
51838364 "safe-buffer": "~5.2.0"
51848365 }
51858366 },
5186− "stringifier": {
5187− "version": "1.4.0",
5188− "resolved": "https://registry.npmjs.org/stringifier/-/stringifier-1.4.0.tgz",
5189− "integrity": "sha512-cNsMOqqrcbLcHTXEVmkw9y0fwDwkdgtZwlfyolzpQDoAE1xdNGhQhxBUfiDvvZIKl1hnUEgMv66nHwtMz3OjPw==",
5190− "requires": {
5191− "core-js": "^2.0.0",
5192− "traverse": "^0.6.6",
5193− "type-name": "^2.0.1"
5194− }
5195− },
51968367 "stringify-entities": {
5197− "version": "3.1.0",
5198− "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz",
5199− "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==",
5200− "requires": {
5201− "character-entities-html4": "^1.0.0",
5202− "character-entities-legacy": "^1.0.0",
5203− "xtend": "^4.0.0"
5204− }
5205− },
5206− "strip-ansi": {
5207− "version": "6.0.0",
5208− "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
5209− "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
8368+ "version": "4.0.2",
8369+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.2.tgz",
8370+ "integrity": "sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==",
52108371 "requires": {
5211− "ansi-regex": "^5.0.0"
8372+ "character-entities-html4": "^2.0.0",
8373+ "character-entities-legacy": "^3.0.0"
52128374 }
52138375 },
52148376 "strip-bom-string": {
@@ -5231,43 +8393,33 @@
52318393 }
52328394 },
52338395 "styled-jsx": {
5234− "version": "3.3.2",
5235− "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.3.2.tgz",
5236− "integrity": "sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==",
5237− "requires": {
5238− "@babel/types": "7.8.3",
5239− "babel-plugin-syntax-jsx": "6.18.0",
5240− "convert-source-map": "1.7.0",
5241− "loader-utils": "1.2.3",
5242− "source-map": "0.7.3",
5243− "string-hash": "1.1.3",
5244− "stylis": "3.5.4",
5245− "stylis-rule-sheet": "0.0.10"
5246− },
5247− "dependencies": {
5248− "source-map": {
5249− "version": "0.7.3",
5250− "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
5251− "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
5252− }
5253− }
8396+ "version": "5.0.1",
8397+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.1.tgz",
8398+ "integrity": "sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==",
8399+ "requires": {}
52548400 },
5255− "stylis": {
5256− "version": "3.5.4",
5257− "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
5258− "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="
8401+ "supports-color": {
8402+ "version": "7.2.0",
8403+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
8404+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
8405+ "dev": true,
8406+ "requires": {
8407+ "has-flag": "^4.0.0"
8408+ }
52598409 },
5260− "stylis-rule-sheet": {
5261− "version": "0.0.10",
5262− "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
5263− "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw=="
8410+ "supports-preserve-symlinks-flag": {
8411+ "version": "1.0.0",
8412+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
8413+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
52648414 },
5265− "supports-color": {
5266− "version": "5.5.0",
5267− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
5268− "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
8415+ "svgson": {
8416+ "version": "4.1.0",
8417+ "resolved": "https://registry.npmjs.org/svgson/-/svgson-4.1.0.tgz",
8418+ "integrity": "sha512-DodISxHtdLKUghDYA+PGK4Qq350+CbBAkdvGLkBFSmWd9WKSg4dijgjB1IiRPTmsUCd+a7KYe+ILHtklYgQyzQ==",
52698419 "requires": {
5270− "has-flag": "^3.0.0"
8420+ "deep-rename-keys": "^0.2.1",
8421+ "omit-deep": "0.3.0",
8422+ "xml-reader": "2.4.3"
52718423 }
52728424 },
52738425 "symbol-tree": {
@@ -5276,168 +8428,31 @@
52768428 "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
52778429 },
52788430 "tailwindcss": {
5279− "version": "2.2.15",
5280− "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.15.tgz",
5281− "integrity": "sha512-WgV41xTMbnSoTNMNnJvShQZ+8GmY86DmXTrCgnsveNZJdlybfwCItV8kAqjYmU49YiFr+ofzmT1JlAKajBZboQ==",
8431+ "version": "3.0.24",
8432+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz",
8433+ "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==",
52828434 "requires": {
52838435 "arg": "^5.0.1",
5284− "bytes": "^3.0.0",
5285− "chalk": "^4.1.2",
5286− "chokidar": "^3.5.2",
5287− "color": "^4.0.1",
5288− "cosmiconfig": "^7.0.1",
8436+ "chokidar": "^3.5.3",
8437+ "color-name": "^1.1.4",
52898438 "detective": "^5.2.0",
52908439 "didyoumean": "^1.2.2",
52918440 "dlv": "^1.1.3",
5292− "fast-glob": "^3.2.7",
5293− "fs-extra": "^10.0.0",
5294− "glob-parent": "^6.0.1",
5295− "html-tags": "^3.1.0",
5296− "is-color-stop": "^1.1.0",
5297− "is-glob": "^4.0.1",
5298− "lodash": "^4.17.21",
5299− "lodash.topath": "^4.5.2",
5300− "modern-normalize": "^1.1.0",
5301− "node-emoji": "^1.11.0",
8441+ "fast-glob": "^3.2.11",
8442+ "glob-parent": "^6.0.2",
8443+ "is-glob": "^4.0.3",
8444+ "lilconfig": "^2.0.5",
53028445 "normalize-path": "^3.0.0",
5303− "object-hash": "^2.2.0",
5304− "postcss-js": "^3.0.3",
5305− "postcss-load-config": "^3.1.0",
8446+ "object-hash": "^3.0.0",
8447+ "picocolors": "^1.0.0",
8448+ "postcss": "^8.4.12",
8449+ "postcss-js": "^4.0.0",
8450+ "postcss-load-config": "^3.1.4",
53068451 "postcss-nested": "5.0.6",
5307− "postcss-selector-parser": "^6.0.6",
5308− "postcss-value-parser": "^4.1.0",
5309− "pretty-hrtime": "^1.0.3",
5310− "purgecss": "^4.0.3",
8452+ "postcss-selector-parser": "^6.0.10",
8453+ "postcss-value-parser": "^4.2.0",
53118454 "quick-lru": "^5.1.1",
5312− "reduce-css-calc": "^2.1.8",
5313− "resolve": "^1.20.0",
5314− "tmp": "^0.2.1"
5315− },
5316− "dependencies": {
5317− "ansi-styles": {
5318− "version": "4.3.0",
5319− "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
5320− "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
5321− "requires": {
5322− "color-convert": "^2.0.1"
5323− }
5324− },
5325− "chalk": {
5326− "version": "4.1.2",
5327− "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
5328− "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
5329− "requires": {
5330− "ansi-styles": "^4.1.0",
5331− "supports-color": "^7.1.0"
5332− }
5333− },
5334− "chokidar": {
5335− "version": "3.5.2",
5336− "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
5337− "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
5338− "requires": {
5339− "anymatch": "~3.1.2",
5340− "braces": "~3.0.2",
5341− "fsevents": "~2.3.2",
5342− "glob-parent": "~5.1.2",
5343− "is-binary-path": "~2.1.0",
5344− "is-glob": "~4.0.1",
5345− "normalize-path": "~3.0.0",
5346− "readdirp": "~3.6.0"
5347− },
5348− "dependencies": {
5349− "glob-parent": {
5350− "version": "5.1.2",
5351− "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
5352− "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
5353− "requires": {
5354− "is-glob": "^4.0.1"
5355− }
5356− }
5357− }
5358− },
5359− "color-convert": {
5360− "version": "2.0.1",
5361− "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
5362− "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
5363− "requires": {
5364− "color-name": "~1.1.4"
5365− }
5366− },
5367− "color-name": {
5368− "version": "1.1.4",
5369− "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
5370− "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
5371− },
5372− "fs-extra": {
5373− "version": "10.0.0",
5374− "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
5375− "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
5376− "requires": {
5377− "graceful-fs": "^4.2.0",
5378− "jsonfile": "^6.0.1",
5379− "universalify": "^2.0.0"
5380− }
5381− },
5382− "glob-parent": {
5383− "version": "6.0.1",
5384− "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz",
5385− "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==",
5386− "requires": {
5387− "is-glob": "^4.0.1"
5388− }
5389− },
5390− "has-flag": {
5391− "version": "4.0.0",
5392− "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
5393− "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
5394− },
5395− "jsonfile": {
5396− "version": "6.1.0",
5397− "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
5398− "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
5399− "requires": {
5400− "graceful-fs": "^4.1.6",
5401− "universalify": "^2.0.0"
5402− }
5403− },
5404− "readdirp": {
5405− "version": "3.6.0",
5406− "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
5407− "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
5408− "requires": {
5409− "picomatch": "^2.2.1"
5410− }
5411− },
5412− "rimraf": {
5413− "version": "3.0.2",
5414− "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
5415− "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
5416− "requires": {
5417− "glob": "^7.1.3"
5418− }
5419− },
5420− "supports-color": {
5421− "version": "7.2.0",
5422− "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
5423− "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
5424− "requires": {
5425− "has-flag": "^4.0.0"
5426− }
5427− },
5428− "tmp": {
5429− "version": "0.2.1",
5430− "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
5431− "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
5432− "requires": {
5433− "rimraf": "^3.0.0"
5434− }
5435− },
5436− "universalify": {
5437− "version": "2.0.0",
5438− "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
5439− "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
5440− }
8455+ "resolve": "^1.22.0"
54418456 }
54428457 },
54438458 "tapable": {
@@ -5446,24 +8461,6 @@
54468461 "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
54478462 "dev": true
54488463 },
5449− "timers-browserify": {
5450− "version": "2.0.12",
5451− "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
5452− "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
5453− "requires": {
5454− "setimmediate": "^1.0.4"
5455− }
5456− },
5457− "to-arraybuffer": {
5458− "version": "1.0.1",
5459− "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
5460− "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
5461− },
5462− "to-fast-properties": {
5463− "version": "2.0.0",
5464− "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
5465− "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
5466− },
54678464 "to-regex-range": {
54688465 "version": "5.0.1",
54698466 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -5472,11 +8469,6 @@
54728469 "is-number": "^7.0.0"
54738470 }
54748471 },
5475− "toidentifier": {
5476− "version": "1.0.0",
5477− "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
5478− "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
5479− },
54808472 "tough-cookie": {
54818473 "version": "4.0.0",
54828474 "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
@@ -5488,37 +8480,27 @@
54888480 }
54898481 },
54908482 "tr46": {
5491− "version": "1.0.1",
5492− "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
5493− "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
8483+ "version": "2.1.0",
8484+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
8485+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
54948486 "requires": {
5495− "punycode": "^2.1.0"
8487+ "punycode": "^2.1.1"
54968488 }
54978489 },
5498− "traverse": {
5499− "version": "0.6.6",
5500− "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
5501− "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
8490+ "transformation-matrix": {
8491+ "version": "2.1.1",
8492+ "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.1.1.tgz",
8493+ "integrity": "sha512-74MoNHhwLVuzwaPDcAecFjSkOA9vwWqyOdkeB0Be8Jc/IWSS5SNZKapFllqzkTliqZptkvqX5CZnVeDvfhN8cw=="
55028494 },
55038495 "trough": {
55048496 "version": "1.0.5",
55058497 "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
55068498 "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA=="
55078499 },
5508− "ts-pnp": {
5509− "version": "1.2.0",
5510− "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
5511− "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw=="
5512− },
55138500 "tslib": {
5514− "version": "2.3.1",
5515− "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
5516− "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
5517− },
5518− "tty-browserify": {
5519− "version": "0.0.1",
5520− "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
5521− "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw=="
8501+ "version": "2.4.0",
8502+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
8503+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
55228504 },
55238505 "type-check": {
55248506 "version": "0.3.2",
@@ -5528,27 +8510,6 @@
55288510 "prelude-ls": "~1.1.2"
55298511 }
55308512 },
5531− "type-fest": {
5532− "version": "0.7.1",
5533− "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
5534− "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="
5535− },
5536− "type-name": {
5537− "version": "2.0.2",
5538− "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz",
5539− "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q="
5540− },
5541− "unbox-primitive": {
5542− "version": "1.0.1",
5543− "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
5544− "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
5545− "requires": {
5546− "function-bind": "^1.1.1",
5547− "has-bigints": "^1.0.1",
5548− "has-symbols": "^1.0.2",
5549− "which-boxed-primitive": "^1.0.2"
5550− }
5551− },
55528513 "unified": {
55538514 "version": "9.2.2",
55548515 "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
@@ -5560,6 +8521,36 @@
55608521 "is-plain-obj": "^2.0.0",
55618522 "trough": "^1.0.0",
55628523 "vfile": "^4.0.0"
8524+ },
8525+ "dependencies": {
8526+ "unist-util-stringify-position": {
8527+ "version": "2.0.3",
8528+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
8529+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
8530+ "requires": {
8531+ "@types/unist": "^2.0.2"
8532+ }
8533+ },
8534+ "vfile": {
8535+ "version": "4.2.1",
8536+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
8537+ "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
8538+ "requires": {
8539+ "@types/unist": "^2.0.0",
8540+ "is-buffer": "^2.0.0",
8541+ "unist-util-stringify-position": "^2.0.0",
8542+ "vfile-message": "^2.0.0"
8543+ }
8544+ },
8545+ "vfile-message": {
8546+ "version": "2.0.4",
8547+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
8548+ "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
8549+ "requires": {
8550+ "@types/unist": "^2.0.0",
8551+ "unist-util-stringify-position": "^2.0.0"
8552+ }
8553+ }
55638554 }
55648555 },
55658556 "unist-builder": {
@@ -5573,9 +8564,9 @@
55738564 "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg=="
55748565 },
55758566 "unist-util-is": {
5576− "version": "4.1.0",
5577− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
5578− "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="
8567+ "version": "5.1.1",
8568+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz",
8569+ "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ=="
55798570 },
55808571 "unist-util-map": {
55818572 "version": "2.0.1",
@@ -5587,58 +8578,49 @@
55878578 }
55888579 },
55898580 "unist-util-position": {
5590− "version": "3.1.0",
5591− "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
5592− "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA=="
8581+ "version": "4.0.3",
8582+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz",
8583+ "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==",
8584+ "requires": {
8585+ "@types/unist": "^2.0.0"
8586+ }
55938587 },
55948588 "unist-util-stringify-position": {
5595− "version": "2.0.3",
5596− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
5597− "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
8589+ "version": "3.0.2",
8590+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
8591+ "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
55988592 "requires": {
5599− "@types/unist": "^2.0.2"
8593+ "@types/unist": "^2.0.0"
56008594 }
56018595 },
56028596 "unist-util-visit": {
5603− "version": "1.4.1",
5604− "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
5605− "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
8597+ "version": "4.1.0",
8598+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz",
8599+ "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==",
56068600 "requires": {
5607− "unist-util-visit-parents": "^2.0.0"
8601+ "@types/unist": "^2.0.0",
8602+ "unist-util-is": "^5.0.0",
8603+ "unist-util-visit-parents": "^5.0.0"
56088604 },
56098605 "dependencies": {
5610− "unist-util-is": {
5611− "version": "3.0.0",
5612− "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
5613− "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A=="
5614− },
56158606 "unist-util-visit-parents": {
5616− "version": "2.1.2",
5617− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
5618− "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
8607+ "version": "5.1.0",
8608+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz",
8609+ "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==",
56198610 "requires": {
5620− "unist-util-is": "^3.0.0"
8611+ "@types/unist": "^2.0.0",
8612+ "unist-util-is": "^5.0.0"
56218613 }
56228614 }
56238615 }
56248616 },
56258617 "unist-util-visit-parents": {
5626− "version": "3.1.1",
5627− "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
5628− "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
8618+ "version": "4.1.1",
8619+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz",
8620+ "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==",
56298621 "requires": {
56308622 "@types/unist": "^2.0.0",
5631− "unist-util-is": "^4.0.0"
5632− }
5633− },
5634− "universal-deep-strict-equal": {
5635− "version": "1.2.2",
5636− "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz",
5637− "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=",
5638− "requires": {
5639− "array-filter": "^1.0.0",
5640− "indexof": "0.0.1",
5641− "object-keys": "^1.0.0"
8623+ "unist-util-is": "^5.0.0"
56428624 }
56438625 },
56448626 "universalify": {
@@ -5646,51 +8628,23 @@
56468628 "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
56478629 "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
56488630 },
5649− "unpipe": {
5650− "version": "1.0.0",
5651− "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
5652− "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
5653− },
5654− "url": {
5655− "version": "0.11.0",
5656− "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
5657− "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
5658− "requires": {
5659− "punycode": "1.3.2",
5660− "querystring": "0.2.0"
5661− },
5662− "dependencies": {
5663− "punycode": {
5664− "version": "1.3.2",
5665− "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
5666− "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
5667− },
5668− "querystring": {
5669− "version": "0.2.0",
5670− "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
5671− "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
5672− }
5673− }
5674− },
5675− "use-subscription": {
5676− "version": "1.5.1",
5677− "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz",
5678− "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==",
8631+ "unset-value": {
8632+ "version": "0.1.2",
8633+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz",
8634+ "integrity": "sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA=",
56798635 "requires": {
5680− "object-assign": "^4.1.1"
8636+ "has-value": "^0.3.1",
8637+ "isobject": "^3.0.0"
56818638 }
56828639 },
5683− "util": {
5684− "version": "0.12.3",
5685− "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz",
5686− "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==",
8640+ "urbit-ob": {
8641+ "version": "5.0.1",
8642+ "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz",
8643+ "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==",
56878644 "requires": {
5688− "inherits": "^2.0.3",
5689− "is-arguments": "^1.0.4",
5690− "is-generator-function": "^1.0.7",
5691− "is-typed-array": "^1.1.3",
5692− "safe-buffer": "^5.1.2",
5693− "which-typed-array": "^1.1.2"
8645+ "bn.js": "^4.11.8",
8646+ "lodash.chunk": "^4.2.0",
8647+ "lodash.isequal": "^4.5.0"
56948648 }
56958649 },
56968650 "util-deprecate": {
@@ -5698,15 +8652,26 @@
56988652 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
56998653 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
57008654 },
8655+ "uvu": {
8656+ "version": "0.5.3",
8657+ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz",
8658+ "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==",
8659+ "requires": {
8660+ "dequal": "^2.0.0",
8661+ "diff": "^5.0.0",
8662+ "kleur": "^4.0.3",
8663+ "sade": "^1.7.3"
8664+ }
8665+ },
57018666 "vfile": {
5702− "version": "4.2.1",
5703− "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
5704− "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
8667+ "version": "5.3.2",
8668+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
8669+ "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
57058670 "requires": {
57068671 "@types/unist": "^2.0.0",
57078672 "is-buffer": "^2.0.0",
5708− "unist-util-stringify-position": "^2.0.0",
5709− "vfile-message": "^2.0.0"
8673+ "unist-util-stringify-position": "^3.0.0",
8674+ "vfile-message": "^3.0.0"
57108675 }
57118676 },
57128677 "vfile-location": {
@@ -5716,52 +8681,17 @@
57168681 "requires": {
57178682 "@types/unist": "^2.0.0",
57188683 "vfile": "^5.0.0"
5719− },
5720− "dependencies": {
5721− "unist-util-stringify-position": {
5722− "version": "3.0.0",
5723− "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz",
5724− "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==",
5725− "requires": {
5726− "@types/unist": "^2.0.0"
5727− }
5728− },
5729− "vfile": {
5730− "version": "5.1.0",
5731− "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.1.0.tgz",
5732− "integrity": "sha512-4o7/DJjEaFPYSh0ckv5kcYkJTHQgCKdL8ozMM1jLAxO9ox95IzveDPXCZp08HamdWq8JXTkClDvfAKaeLQeKtg==",
5733− "requires": {
5734− "@types/unist": "^2.0.0",
5735− "is-buffer": "^2.0.0",
5736− "unist-util-stringify-position": "^3.0.0",
5737− "vfile-message": "^3.0.0"
5738− }
5739− },
5740− "vfile-message": {
5741− "version": "3.0.2",
5742− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz",
5743− "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==",
5744− "requires": {
5745− "@types/unist": "^2.0.0",
5746− "unist-util-stringify-position": "^3.0.0"
5747− }
5748− }
57498684 }
57508685 },
57518686 "vfile-message": {
5752− "version": "2.0.4",
5753− "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
5754− "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
8687+ "version": "3.1.2",
8688+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
8689+ "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
57558690 "requires": {
57568691 "@types/unist": "^2.0.0",
5757− "unist-util-stringify-position": "^2.0.0"
8692+ "unist-util-stringify-position": "^3.0.0"
57588693 }
57598694 },
5760− "vm-browserify": {
5761− "version": "1.1.2",
5762− "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
5763− "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
5764− },
57658695 "w3c-hr-time": {
57668696 "version": "1.0.2",
57678697 "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
@@ -5778,24 +8708,15 @@
57788708 "xml-name-validator": "^3.0.0"
57798709 }
57808710 },
5781− "watchpack": {
5782− "version": "2.1.1",
5783− "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
5784− "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
5785− "requires": {
5786− "glob-to-regexp": "^0.4.1",
5787− "graceful-fs": "^4.1.2"
5788− }
5789− },
57908711 "web-namespaces": {
5791− "version": "2.0.0",
5792− "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.0.tgz",
5793− "integrity": "sha512-dE7ELZRVWh0ceQsRgkjLgsAvwTuv3kcjSY/hLjqL0llleUlQBDjE9JkB9FCBY5F2mnFEwiyJoowl8+NVGHe8dw=="
8712+ "version": "2.0.1",
8713+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
8714+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="
57948715 },
57958716 "webidl-conversions": {
5796− "version": "4.0.2",
5797− "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
5798− "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
8717+ "version": "6.1.0",
8718+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
8719+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
57998720 },
58008721 "whatwg-encoding": {
58018722 "version": "1.0.5",
@@ -5803,16 +8724,6 @@
58038724 "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
58048725 "requires": {
58058726 "iconv-lite": "0.4.24"
5806− },
5807− "dependencies": {
5808− "iconv-lite": {
5809− "version": "0.4.24",
5810− "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
5811− "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
5812− "requires": {
5813− "safer-buffer": ">= 2.1.2 < 3"
5814− }
5815− }
58168727 }
58178728 },
58188729 "whatwg-mimetype": {
@@ -5821,38 +8732,22 @@
58218732 "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
58228733 },
58238734 "whatwg-url": {
5824− "version": "7.1.0",
5825− "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
5826− "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
5827− "requires": {
5828− "lodash.sortby": "^4.7.0",
5829− "tr46": "^1.0.1",
5830− "webidl-conversions": "^4.0.2"
5831− }
5832− },
5833− "which-boxed-primitive": {
5834− "version": "1.0.2",
5835− "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
5836− "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
8735+ "version": "8.7.0",
8736+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
8737+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
58378738 "requires": {
5838− "is-bigint": "^1.0.1",
5839− "is-boolean-object": "^1.1.0",
5840− "is-number-object": "^1.0.4",
5841− "is-string": "^1.0.5",
5842− "is-symbol": "^1.0.3"
8739+ "lodash": "^4.7.0",
8740+ "tr46": "^2.1.0",
8741+ "webidl-conversions": "^6.1.0"
58438742 }
58448743 },
5845− "which-typed-array": {
5846− "version": "1.1.7",
5847− "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz",
5848− "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==",
8744+ "which": {
8745+ "version": "2.0.2",
8746+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
8747+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
8748+ "dev": true,
58498749 "requires": {
5850− "available-typed-arrays": "^1.0.5",
5851− "call-bind": "^1.0.2",
5852− "es-abstract": "^1.18.5",
5853− "foreach": "^2.0.5",
5854− "has-tostringtag": "^1.0.0",
5855− "is-typed-array": "^1.1.7"
8750+ "isexe": "^2.0.0"
58568751 }
58578752 },
58588753 "word-wrap": {
@@ -5863,12 +8758,14 @@
58638758 "wrappy": {
58648759 "version": "1.0.2",
58658760 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5866− "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
8761+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
8762+ "dev": true
58678763 },
58688764 "ws": {
5869− "version": "7.5.5",
5870− "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
5871− "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w=="
8765+ "version": "7.5.7",
8766+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
8767+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
8768+ "requires": {}
58728769 },
58738770 "xml-js": {
58748771 "version": "1.6.11",
@@ -5878,11 +8775,28 @@
58788775 "sax": "^1.2.4"
58798776 }
58808777 },
8778+ "xml-lexer": {
8779+ "version": "0.2.2",
8780+ "resolved": "https://registry.npmjs.org/xml-lexer/-/xml-lexer-0.2.2.tgz",
8781+ "integrity": "sha1-UYGTpKozTVj8fSSLVJB5uJkH4EY=",
8782+ "requires": {
8783+ "eventemitter3": "^2.0.0"
8784+ }
8785+ },
58818786 "xml-name-validator": {
58828787 "version": "3.0.0",
58838788 "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
58848789 "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
58858790 },
8791+ "xml-reader": {
8792+ "version": "2.4.3",
8793+ "resolved": "https://registry.npmjs.org/xml-reader/-/xml-reader-2.4.3.tgz",
8794+ "integrity": "sha1-n4EMr3xCWlqvuEixxFEDyecddTA=",
8795+ "requires": {
8796+ "eventemitter3": "^2.0.0",
8797+ "xml-lexer": "^0.2.2"
8798+ }
8799+ },
58868800 "xmlchars": {
58878801 "version": "2.2.0",
58888802 "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
@@ -5898,15 +8812,10 @@
58988812 "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
58998813 "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
59008814 },
5901− "yocto-queue": {
5902− "version": "0.1.0",
5903− "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
5904− "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
5905− },
59068815 "zwitch": {
5907− "version": "1.0.5",
5908− "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
5909− "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw=="
8816+ "version": "2.0.2",
8817+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz",
8818+ "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA=="
59108819 }
59118820 }
59128821}
package.json+21−13
@@ -13,9 +13,11 @@
1313 },
1414 "dependencies": {
1515 "@iarna/toml": "^2.2.5",
16− "@socialgouv/matomo-next": "^1.2.2",
17− "@tailwindcss/aspect-ratio": "^0.2.1",
18− "autoprefixer": "^10.2.6",
16+ "@socialgouv/matomo-next": "^1.3.0",
17+ "@tailwindcss/aspect-ratio": "^0.4.0",
18+ "@tlon/sigil-js": "^1.4.5",
19+ "axios": "^0.26.1",
20+ "buffer": "^6.0.3",
1921 "classnames": "^2.3.1",
2022 "deepmerge": "^4.2.2",
2123 "downshift": "^6.1.5",
@@ -23,32 +25,38 @@
2325 "fuzzy-search": "^3.2.1",
2426 "gray-matter": "^4.0.3",
2527 "html-entities": "^2.3.2",
28+ "lodash.debounce": "^4.0.8",
2629 "luxon": "^2.0.2",
27− "next": "10.2.3",
28− "postcss": "^8.3.0",
30+ "next": "^12.1.5",
31+ "path-browserify": "^1.0.1",
2932 "prismjs": "^1.25.0",
30− "react": "17.0.2",
31− "react-dom": "17.0.2",
33+ "process": "^0.11.10",
34+ "react": "^17.0.0",
35+ "react-dom": "^17.0.0",
3236 "react-hotkeys": "^2.0.0",
33− "react-swipeable": "^6.1.2",
37+ "react-swipeable": "^6.2.1",
3438 "react-use-localstorage": "^3.5.3",
3539 "rehype-raw": "^6.1.0",
3640 "rehype-stringify": "^9.0.2",
3741 "remark": "^13.0.0",
38− "remark-gfm": "^1.0.0",
42+ "remark-gfm": "^3.0.0",
3943 "remark-heading-id": "^1.0.0",
4044 "remark-html": "^13.0.1",
4145 "remark-parse": "^10.0.0",
4246 "remark-prism": "^1.3.6",
4347 "remark-rehype": "^10.0.0",
4448 "remark-slug": "^6.0.0",
45− "tailwindcss": "^2.1.4",
46− "unified": "^9.2.1"
49+ "stream-browserify": "^3.0.0",
50+ "unified": "^9.2.1",
51+ "urbit-ob": "^5.0.1"
4752 },
4853 "devDependencies": {
54+ "autoprefixer": "^10.4.4",
4955 "husky": "^6.0.0",
50− "next-transpile-modules": "^8.0.0",
56+ "next-transpile-modules": "^9.0.0",
57+ "postcss": "^8.4.12",
5158 "prettier": "^2.3.1",
52− "pretty-quick": "^3.1.0"
59+ "pretty-quick": "^3.1.0",
60+ "tailwindcss": "^3.0.24"
5361 }
5462}
pages/_app.js+2−3
@@ -1,4 +1,3 @@
1−import "tailwindcss/tailwind.css";
21import { useState, useEffect } from "react";
32import { configure, GlobalHotKeys } from "react-hotkeys";
43import { init } from "@socialgouv/matomo-next";
@@ -7,8 +6,8 @@ import "../styles/globals.css";
76import "../styles/markdown.css";
87import "../styles/prism.css";
98
10−const MATOMO_URL = process.env.NEXT_PUBLIC_MATOMO_URL;
11−const MATOMO_SITE_ID = process.env.NEXT_PUBLIC_MATOMO_SITE_ID;
9+const MATOMO_URL = process?.env?.NEXT_PUBLIC_MATOMO_URL || "";
10+const MATOMO_SITE_ID = process?.env?.NEXT_PUBLIC_MATOMO_SITE_ID || "";
1211
1312function MyApp({ Component, pageProps }) {
1413 const [showSearch, setSearch] = useState(false);
pages/api/search.js+5−3
@@ -1,9 +1,11 @@
11import { index } from "../../cache/data";
2−import FuzzySearch from "fuzzy-search";
32
43export default (req, res) => {
5− const searcher = new FuzzySearch(index, ["title"], { sort: true });
6− const results = searcher.search(req.query.q);
4+ const results = index.filter(
5+ (e) =>
6+ e.title?.toLowerCase().includes(req.query.q.toLowerCase()) ||
7+ e?.slug.includes(req.query.q.toLowerCase())
8+ );
79 res.statusCode = 200;
810 res.setHeader("Content-Type", "application/json");
911 res.end(JSON.stringify({ results }));
pages/applications/[[...application]].jsnew file+167
@@ -0,0 +1,167 @@
1+import Head from "next/head";
2+import Link from "next/link";
3+import { getPage } from "../../lib/lib";
4+import { join } from "path";
5+import CopyLink from "../../components/CopyLink";
6+import Container from "../../components/Container";
7+import SingleColumn from "../../components/SingleColumn";
8+import Section from "../../components/Section";
9+import ob from "urbit-ob";
10+import Markdown from "../../components/Markdown";
11+import GatewayHeader from "../../components/gateway/GatewayHeader";
12+import Gateway404 from "../../components/gateway/Gateway404";
13+import MetadataBlock from "../../components/gateway/MetadataBlock";
14+import MetadataLink from "../../components/gateway/MetadataLink";
15+import Description from "../../components/gateway/Description";
16+
17+const ApplicationPage = ({ data, markdown, params }) => {
18+ const { application } = params;
19+ if (!ob.isValidPatp(application[0])) {
20+ return <Gateway404 type="application" />;
21+ }
22+ const reqParams = [
23+ data?.bgColor ? `color=${encodeURIComponent(data?.bgColor)}` : "",
24+ data?.image ? `images=${encodeURIComponent(data?.image)}` : "",
25+ ].filter((e) => e !== "");
26+ const image = `https://urbit-id-og-cards-78ieodof2-urbit.vercel.app/${
27+ data.title
28+ }.png?${reqParams.join("&")}`;
29+
30+ return (
31+ <Container>
32+ <Head>
33+ <title>{data.title} • Applications • urbit.org</title>
34+ <link rel="icon" type="image/png" href="/images/favicon.ico" />
35+ <meta
36+ name="twitter:card"
37+ content="summary_large_image"
38+ key="twitter-card"
39+ />
40+ <meta
41+ name="og:title"
42+ content={`${data.title} • Applications • urbit.org`}
43+ key="title"
44+ />
45+ <meta
46+ name="og:description"
47+ content={
48+ data?.description ||
49+ "View more about this application on urbit.org."
50+ }
51+ key="description"
52+ />
53+ <meta property="twitter:image" content={image} key="image" />
54+ </Head>
55+ <SingleColumn>
56+ <Section className="space-y-12" narrow>
57+ <GatewayHeader
58+ title={data.title}
59+ color={data?.bgColor}
60+ image={data?.image || data?.bgColor}
61+ item="Urbit Application"
62+ />
63+ <div className="flex flex-wrap md:flex-nowrap justify-between">
64+ <MetadataBlock
65+ title="License"
66+ content={data.license ? data.license : "Unknown"}
67+ />
68+ {data?.website && (
69+ <MetadataLink
70+ title="Website"
71+ href={data?.website}
72+ content={
73+ data?.website ? data.website.replace(/^https?:\/\//, "") : ""
74+ }
75+ />
76+ )}
77+ {ob.isValidPatp(data?.developer || "") &&
78+ data?.developer.length < 10 ? (
79+ <MetadataLink
80+ title="Developer"
81+ href={`/ids/${data.developer}`}
82+ content={data.developer}
83+ />
84+ ) : (
85+ <MetadataBlock
86+ title="Developer"
87+ content={data.developer ? data.developer : "Unknown"}
88+ />
89+ )}
90+ <CopyLink
91+ className="basis-1/2"
92+ content={data.shortcode ? data.shortcode : data.title}
93+ />
94+ </div>
95+ <Description
96+ description={data.description}
97+ fallback="An application on Urbit."
98+ markdown={markdown}
99+ />
100+ <hr className="text-wall-200" />
101+ <div className="flex flex-col space-y-6">
102+ <h3>
103+ Urbit is a clean-slate, peer-to-peer operating system and network.
104+ </h3>
105+ <div className="flex flex-col space-y-4">
106+ <p className="text-sm font-semibold text-wall-400">
107+ Learn how to install an Urbit application
108+ </p>
109+ <Link href="/guides/installing-applications">
110+ <button className="button-lg max-w-xs bg-green-400 text-white">
111+ Installing Urbit applications
112+ </button>
113+ </Link>
114+ </div>
115+ </div>
116+ <hr className="text-wall-200" />
117+ <div className="flex flex-col space-y-1">
118+ <p>
119+ Have an application you'd like to share publicly through
120+ urbit.org?
121+ </p>
122+ <Link href="/applications/submit">
123+ <a className="type-ui text-green-400">Submit your application</a>
124+ </Link>
125+ </div>
126+ <Link href="/">
127+ <a className="text-xl pt-8 block font-semibold">Urbit.org</a>
128+ </Link>
129+ </Section>
130+ </SingleColumn>
131+ </Container>
132+ );
133+};
134+
135+export const getServerSideProps = async ({ params, res }) => {
136+ res.setHeader(
137+ "Cache-Control",
138+ "public, s-maxage=3600, stale-while-revalidate=604800"
139+ );
140+
141+ let { data, content } = getPage(
142+ join(
143+ process.cwd(),
144+ "content/applications",
145+ params.application?.join("/") || "/"
146+ )
147+ ) || { data: {}, content: "" };
148+
149+ if (!data.title) {
150+ data = {
151+ title: params.application?.join("/"),
152+ description: "An application on Urbit.",
153+ };
154+ }
155+
156+ const markdown = await Markdown({ post: { content: content } }, true);
157+
158+ return {
159+ props: {
160+ data,
161+ markdown,
162+ params,
163+ },
164+ };
165+};
166+
167+export default ApplicationPage;
pages/applications/submit.jsnew file+141
@@ -0,0 +1,141 @@
1+import Link from "next/link";
2+import Container from "../../components/Container";
3+import Section from "../../components/Section";
4+import SingleColumn from "../../components/SingleColumn";
5+import { useInputChange } from "../../lib/hooks";
6+import Head from "next/head";
7+import Meta from "../../components/Meta";
8+
9+const SubmissionPage = () => {
10+ const [form, handleFormChange] = useInputChange();
11+
12+ const href = `https://github.com/urbit/urbit.org/new/master?filename=/content/applications/${
13+ form?.shortcode
14+ }.md&value=${encodeURIComponent(
15+ `+++
16+title = "${form?.appName}"
17+shortcode = "${form?.shortcode}"
18+license = "${form?.license || ""}"
19+image = "${form?.imageUrl || ""}"
20+bgColor = "${form?.bgColor || ""}"
21+developer = "${form?.developer || ""}"
22+website = "${form?.website || ""}"
23++++
24+
25+${form?.description || ""}`
26+ )}`;
27+
28+ return (
29+ <Container>
30+ <Head>
31+ <title>Submit an application • Urbit.org</title>
32+ {Meta}
33+ </Head>
34+ <SingleColumn>
35+ <Section narrow className="space-y-12">
36+ <div className="flex flex-col space-y-4">
37+ <h2>Submit your application</h2>
38+ <p>
39+ Application submissions are accomplished through a GitHub pull
40+ request.
41+ </p>
42+ <p>
43+ You’ll need <a href="https://github.com">a GitHub account</a>{" "}
44+ before you get started to submit your group.
45+ </p>
46+ <p>
47+ First, enter your information and then click “Submit with GitHub.”
48+ You’ll be directed to a GitHub pull request page with a
49+ pre-populated markdown file. Click “Propose new file,” and then
50+ “Create pull request” on the following page.
51+ </p>
52+ </div>
53+ <div className="flex flex-col space-y-4">
54+ <h3>Enter your application information</h3>
55+ <div className="flex flex-col">
56+ <p>Application name (required)</p>
57+ <input
58+ className="bg-wall-100 p-2"
59+ name="appName"
60+ placeholder="pals"
61+ onChange={handleFormChange}
62+ />
63+ </div>
64+ <div className="flex flex-col">
65+ <p>Shortcode (required)</p>
66+ <input
67+ className="bg-wall-100 p-2"
68+ name="shortcode"
69+ placeholder="~paldev/pals"
70+ onChange={handleFormChange}
71+ />
72+ </div>
73+ <div className="flex flex-col w-full">
74+ <p>App image URL and color</p>
75+ <div className="flex space-x-4">
76+ <input
77+ className="flex-1 bg-wall-100 p-2"
78+ name="imageUrl"
79+ placeholder="https://..."
80+ onChange={handleFormChange}
81+ />
82+ <input
83+ name="bgColor"
84+ className="bg-wall-100 p-2 flex-1"
85+ placeholder="#FFCED0"
86+ onChange={handleFormChange}
87+ />
88+ </div>
89+ </div>
90+ <div className="flex flex-col">
91+ <p>License</p>
92+ <input
93+ className="bg-wall-100 p-2"
94+ name="license"
95+ placeholder="MIT"
96+ onChange={handleFormChange}
97+ />
98+ </div>
99+ <div className="flex flex-col">
100+ <p>Developer</p>
101+ <input
102+ className="bg-wall-100 p-2"
103+ name="developer"
104+ placeholder="~paldev"
105+ onChange={handleFormChange}
106+ />
107+ </div>
108+ <div className="flex flex-col">
109+ <p>Website</p>
110+ <input
111+ className="bg-wall-100 p-2"
112+ name="website"
113+ placeholder="https://pal.dev"
114+ onChange={handleFormChange}
115+ />
116+ </div>
117+ <div className="flex flex-col">
118+ <p>Description</p>
119+ <textarea
120+ className="resize-none bg-wall-100 p-2 h-60"
121+ name="description"
122+ onChange={handleFormChange}
123+ />
124+ </div>
125+ </div>
126+ <button
127+ className="button-lg bg-wall-600 text-wall-100"
128+ onClick={() => window.open(href)}
129+ >
130+ Submit with GitHub
131+ </button>
132+ <Link href="/">
133+ <a className="text-xl pt-8 block font-semibold">Urbit.org</a>
134+ </Link>
135+ </Section>
136+ </SingleColumn>
137+ </Container>
138+ );
139+};
140+
141+export default SubmissionPage;
pages/blog.js+7−4
@@ -61,9 +61,11 @@ export default function Blog({ posts, search }) {
6161 </div>
6262 ) : null}
6363 {post.extra.ship ? (
64− <div className="type-sub-bold text-wall-500 font-mono">
65− {post.extra.ship}
66− </div>
64+ <Link href={`/ids/${post.extra.ship}`}>
65+ <a className="type-sub-bold text-wall-500 font-mono">
66+ {post.extra.ship}
67+ </a>
68+ </Link>
6769 ) : null}
6870 </div>
6971 <div className="text-wall-500 type-sub">
@@ -84,7 +86,8 @@ export default function Blog({ posts, search }) {
8486export async function getStaticProps() {
8587 const posts = getAllPosts(
8688 ["title", "slug", "date", "description", "extra"],
87− "blog"
89+ "blog",
90+ "date"
8891 );
8992
9093 return {
pages/blog/[slug].js+7−4
@@ -8,6 +8,7 @@ import {
88 generateDisplayDate,
99} from "../../lib/lib";
1010import Head from "next/head";
11+import Link from "next/link";
1112import Meta from "../../components/Meta";
1213import ErrorPage from "../404";
1314import Container from "../../components/Container";
@@ -49,9 +50,11 @@ export default function Post({
4950 <div className="type-sub-bold mr-2">{post.extra.author}</div>
5051 ) : null}
5152 {post.extra.ship ? (
52− <div className="type-sub-bold text-wall-500 font-mono">
53− {post.extra.ship}
54− </div>
53+ <Link href={`/ids/${post.extra.ship}`}>
54+ <a className="type-sub-bold text-wall-500 font-mono">
55+ {post.extra.ship}
56+ </a>
57+ </Link>
5558 ) : null}
5659 </div>
5760 <div className="text-wall-500 type-sub">{formatDate(date)}</div>
@@ -110,7 +113,7 @@ export async function getStaticProps({ params }) {
110113}
111114
112115export async function getStaticPaths() {
113− const posts = getAllPosts(["slug", "date"], "blog");
116+ const posts = getAllPosts(["slug", "date"], "blog", "date");
114117
115118 return {
116119 paths: posts.map((post) => {
pages/coinmarketcap.jsnew file+21
@@ -0,0 +1,21 @@
1+import { getPostBySlug } from "../lib/lib";
2+import PageWithIndex from "../components/PageWithIndex";
3+import Markdown from "../components/Markdown";
4+
5+export default function Post({ post, markdown, search }) {
6+ return <PageWithIndex post={post} markdown={markdown} search={search} />;
7+}
8+
9+export async function getStaticProps() {
10+ const post = getPostBySlug(
11+ "/coinmarketcap",
12+ ["title", "slug", "content"],
13+ "/"
14+ );
15+
16+ const markdown = await Markdown({ post });
17+
18+ return {
19+ props: { post, markdown },
20+ };
21+}
pages/community/[[...slug]].js+1−1
@@ -66,7 +66,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
6666 <title>{data.title} • Community • urbit.org</title>
6767 {Meta(data)}
6868 </Head>
69− <div className="flex w-screen h-screen min-h-screen w-screen sidebar">
69+ <div className="flex h-screen min-h-screen w-screen sidebar">
7070 <Sidebar search={search}>
7171 {childPages("/community", posts.pages)}
7272 </Sidebar>
pages/docs/[[...slug]].js+1−1
@@ -127,7 +127,7 @@ export default function DocsLayout({
127127 <title>{data.title} • Documentation • urbit.org</title>
128128 {Meta(data)}
129129 </Head>
130− <div className="flex w-screen h-screen min-h-screen w-screen sidebar">
130+ <div className="flex h-screen min-h-screen w-screen sidebar">
131131 <Sidebar search={search}>
132132 <ul>
133133 <li>
pages/events/[slug].js+1−1
@@ -169,7 +169,7 @@ export async function getStaticProps({ params }) {
169169}
170170
171171export async function getStaticPaths() {
172− const events = getAllPosts(["slug", "date"], "events");
172+ const events = getAllPosts(["slug", "date"], "events", "date");
173173
174174 return {
175175 paths: events.map((event) => {
pages/getting-started/[[...slug]].js+1−1
@@ -76,7 +76,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
7676 <title>{data.title} • Getting Started • urbit.org</title>
7777 {Meta(data)}
7878 </Head>
79− <div className="flex w-screen h-screen min-h-screen w-screen sidebar">
79+ <div className="flex h-screen min-h-screen w-screen sidebar">
8080 <Sidebar search={search}>
8181 <ul>
8282 <li>
pages/grants.js+2−6
@@ -463,12 +463,8 @@ export async function getStaticProps() {
463463 const types = getGrantsTypes();
464464 const posts = getAllPosts(
465465 ["title", "slug", "date", "description", "extra", "taxonomies"],
466− "grants"
467− );
468−
469− let updates = getAllPosts(
470− ["title", "slug", "date", "description", "extra", "taxonomies"],
471− "updates"
466+ "grants",
467+ "date"
472468 );
473469
474470 // The layout expects exactly 3
pages/grants/[slug].js+7−4
@@ -6,6 +6,7 @@ import {
66 getSimilarGrants,
77} from "../../lib/lib";
88import Head from "next/head";
9+import Link from "next/link";
910import Meta from "../../components/Meta";
1011import { decode } from "html-entities";
1112import classnames from "classnames";
@@ -43,9 +44,11 @@ export default function Grant({ post, markdown, search }) {
4344 </div>
4445 ) : null}
4546 {post.extra.ship ? (
46− <div className="type-ui text-wall-500 font-mono">
47− {post.extra.ship}
48− </div>
47+ <Link href={`/ids/${post.extra.ship}`}>
48+ <a className="type-sub-bold text-wall-500 font-mono">
49+ {post.extra.ship}
50+ </a>
51+ </Link>
4952 ) : null}
5053 <div className="type-ui text-wall-500 mt-4 md:mt-8 lg:mt-10">
5154 {formatDate(DateTime.fromISO(post.date))}
@@ -104,7 +107,7 @@ export async function getStaticProps({ params }) {
104107}
105108
106109export async function getStaticPaths() {
107− const posts = getAllPosts(["slug", "date"], "grants");
110+ const posts = getAllPosts(["slug", "date"], "grants", "date");
108111
109112 return {
110113 paths: posts.map((post) => {
pages/groups/[[...group]].jsnew file+152
@@ -0,0 +1,152 @@
1+import Head from "next/head";
2+import Link from "next/link";
3+import { getPage } from "../../lib/lib";
4+import { join } from "path";
5+import Meta from "../../components/Meta";
6+import CopyLink from "../../components/CopyLink";
7+import Container from "../../components/Container";
8+import SingleColumn from "../../components/SingleColumn";
9+import Section from "../../components/Section";
10+import ob from "urbit-ob";
11+import Markdown from "../../components/Markdown";
12+import GatewayHeader from "../../components/gateway/GatewayHeader";
13+import Gateway404 from "../../components/gateway/Gateway404";
14+import MetadataBlock from "../../components/gateway/MetadataBlock";
15+import MetadataLink from "../../components/gateway/MetadataLink";
16+import Description from "../../components/gateway/Description";
17+
18+const GroupPage = ({ data, markdown, params }) => {
19+ const { group } = params;
20+ if (!ob.isValidPatp(group?.[0] || "")) {
21+ return <Gateway404 type="group" />;
22+ }
23+
24+ const color = data?.tile && data?.tile.startsWith("#");
25+ const reqParams = [
26+ color ? `color=${encodeURIComponent(data.tile)}` : "",
27+ !color
28+ ? `images=${encodeURIComponent(
29+ data?.tile ||
30+ "https://media.urbit.org/public-links/placeholder-image.png"
31+ )}`
32+ : "",
33+ ].filter((e) => e !== "");
34+ const image = `https://urbit-id-og-cards-667veow91-urbit.vercel.app/${
35+ data.title
36+ }.png?${reqParams.join("&")}`;
37+
38+ return (
39+ <Container>
40+ <Head>
41+ <title>{data.title} • Groups • urbit.org</title>
42+ <link rel="icon" type="image/png" href="/images/favicon.ico" />
43+ <meta
44+ name="twitter:card"
45+ content="summary_large_image"
46+ key="twitter-card"
47+ />
48+ <meta
49+ name="og:title"
50+ content={`${data.title} • Groups • urbit.org`}
51+ key="title"
52+ />
53+ <meta
54+ name="og:description"
55+ content={
56+ data?.description || "View more about this group on urbit.org."
57+ }
58+ key="description"
59+ />
60+ <meta property="twitter:image" content={image} key="image" />
61+ </Head>
62+ <SingleColumn>
63+ <Section className="space-y-12" narrow>
64+ <GatewayHeader
65+ title={data.title}
66+ image={data?.tile}
67+ item="Urbit Group"
68+ />
69+ <div className="flex flex-wrap md:flex-nowrap justify-between">
70+ <MetadataBlock
71+ title="Group Type"
72+ content={data.type ? data.type : "Unknown"}
73+ />
74+ <MetadataBlock
75+ title="Members"
76+ content={
77+ data.participant_range ? data.participant_range : "Unknown"
78+ }
79+ />
80+ <MetadataLink
81+ title="Host"
82+ href={`/ids/${group[0]}`}
83+ content={group[0]}
84+ />
85+ <CopyLink
86+ className="basis-1/2"
87+ content={data.shortcode ? data.shortcode : data.title}
88+ />
89+ </div>
90+ <Description
91+ description={data.description}
92+ fallback="A group on Urbit."
93+ markdown={markdown}
94+ />
95+ <hr className="text-wall-200" />
96+ <div className="flex flex-col space-y-6">
97+ <h3>
98+ Urbit is a clean-slate, peer-to-peer operating system and network.
99+ </h3>
100+ <div className="flex flex-col space-y-4">
101+ <p className="text-sm font-semibold text-wall-400">
102+ Get on the network and join this group.
103+ </p>
104+ <Link href="/guides/joining-groups">
105+ <button className="button-lg max-w-xs bg-green-400 text-white">
106+ How to join a group
107+ </button>
108+ </Link>
109+ </div>
110+ </div>
111+ <hr className="text-wall-200" />
112+ <div className="flex flex-col space-y-1">
113+ <p>Have a group you'd like to share publicly through urbit.org?</p>
114+ <Link href="/groups/submit">
115+ <a className="type-ui text-green-400">Submit your group</a>
116+ </Link>
117+ </div>
118+ <Link href="/">
119+ <a className="text-xl pt-8 block font-semibold">Urbit.org</a>
120+ </Link>
121+ </Section>
122+ </SingleColumn>
123+ </Container>
124+ );
125+};
126+
127+export const getServerSideProps = async ({ params, res }) => {
128+ res.setHeader(
129+ "Cache-Control",
130+ "public, s-maxage=3600, stale-while-revalidate=604800"
131+ );
132+
133+ let { data, content } = getPage(
134+ join(process.cwd(), "content/groups", params.group?.join("/") || "/")
135+ ) || { data: {}, content: "" };
136+
137+ if (!data.title) {
138+ data = { title: params.group?.join("/"), description: "A group on Urbit." };
139+ }
140+
141+ const markdown = await Markdown({ post: { content: content } }, true);
142+
143+ return {
144+ props: {
145+ data,
146+ markdown,
147+ params,
148+ },
149+ };
150+};
151+
152+export default GroupPage;
pages/groups/submit.jsnew file+150
@@ -0,0 +1,150 @@
1+import Link from "next/link";
2+import { useState } from "react";
3+import Container from "../../components/Container";
4+import Section from "../../components/Section";
5+import SingleColumn from "../../components/SingleColumn";
6+import { useInputChange } from "../../lib/hooks";
7+import Head from "next/head";
8+import Meta from "../../components/Meta";
9+
10+const SubmissionPage = () => {
11+ const [form, handleFormChange] = useInputChange();
12+ const [publicGroup, setPublicGroup] = useState(true);
13+
14+ const href = `https://github.com/urbit/urbit.org/new/master?filename=/content/groups/${
15+ form?.shortcode
16+ }.md&value=${encodeURIComponent(
17+ `+++
18+title = "${form?.groupName}"
19+shortcode = "${form?.shortcode}"
20+type = "${publicGroup ? "Public" : "Private"}"
21+tile = "${form?.tile || ""}"
22+participant_range = "${form?.members || ""}"
23++++
24+
25+${form?.description || ""}`
26+ )}`;
27+
28+ return (
29+ <Container>
30+ <Head>
31+ <title>Submit a group • Urbit.org</title>
32+ {Meta}
33+ </Head>
34+ <SingleColumn>
35+ <Section narrow className="space-y-12">
36+ <div className="flex flex-col space-y-4">
37+ <h2>Submit your group</h2>
38+ <p>
39+ Groups submissions are accomplished through a GitHub pull request.
40+ </p>
41+ <p>
42+ You’ll need <a href="https://github.com">a GitHub account</a>{" "}
43+ before you get started to submit your group.
44+ </p>
45+ <p>
46+ First, enter your information and then click “Submit with GitHub.”
47+ You’ll be directed to a GitHub pull request page with a
48+ pre-populated markdown file. Click “Propose new file,” and then
49+ “Create pull request” on the following page.
50+ </p>
51+ <p>
52+ Then, to validate that you operate this group, send a DM to{" "}
53+ <Link href="/ids/~haddef-sigwen">
54+ <a>~haddef-sigwen</a>
55+ </Link>{" "}
56+ from your group host <code>@p</code> with a link to the pull
57+ request on GitHub. We’ll approve the pull request and your page
58+ will be online shortly.
59+ </p>
60+ </div>
61+ <div className="flex flex-col space-y-4">
62+ <h3>Enter your group information</h3>
63+ <div className="flex flex-col">
64+ <p>Group name (required)</p>
65+ <input
66+ className="bg-wall-100 p-2"
67+ name="groupName"
68+ placeholder="Urbit Community"
69+ onChange={handleFormChange}
70+ />
71+ </div>
72+ <div className="flex flex-col">
73+ <p>Group type</p>
74+ <div className="flex space-x-4">
75+ <div
76+ className="flex items-center space-x-2 cursor-pointer"
77+ onClick={() => setPublicGroup(true)}
78+ >
79+ <input
80+ type="radio"
81+ onChange={() => null}
82+ checked={publicGroup}
83+ />
84+ <p>Public</p>
85+ </div>
86+ <div
87+ className="flex items-center space-x-2 cursor-pointer"
88+ onClick={() => setPublicGroup(false)}
89+ >
90+ <input
91+ type="radio"
92+ onChange={() => null}
93+ checked={!publicGroup}
94+ />
95+ <p>Private</p>
96+ </div>
97+ </div>
98+ </div>
99+ <div className="flex flex-col">
100+ <p>Shortcode (required)</p>
101+ <input
102+ className="bg-wall-100 p-2"
103+ name="shortcode"
104+ placeholder="~bitbet-bolbel/urbit-community"
105+ onChange={handleFormChange}
106+ />
107+ </div>
108+ <div className="flex flex-col">
109+ <p>Group image URL or color</p>
110+ <input
111+ className="bg-wall-100 p-2"
112+ name="tile"
113+ placeholder="https://... or #FFCDE0"
114+ onChange={handleFormChange}
115+ />
116+ </div>
117+ <div className="flex flex-col">
118+ <p>Members</p>
119+ <input
120+ className="bg-wall-100 p-2"
121+ name="members"
122+ placeholder="1000+"
123+ onChange={handleFormChange}
124+ />
125+ </div>
126+ <div className="flex flex-col">
127+ <p>Description</p>
128+ <textarea
129+ className="resize-none bg-wall-100 p-2 h-60"
130+ name="description"
131+ onChange={handleFormChange}
132+ />
133+ </div>
134+ </div>
135+ <button
136+ className="button-lg bg-wall-600 text-wall-100"
137+ onClick={() => window.open(href)}
138+ >
139+ Submit with GitHub
140+ </button>
141+ <Link href="/">
142+ <a className="text-xl pt-8 block font-semibold">Urbit.org</a>
143+ </Link>
144+ </Section>
145+ </SingleColumn>
146+ </Container>
147+ );
148+};
149+
150+export default SubmissionPage;
pages/guides/[slug].jsnew file+75
@@ -0,0 +1,75 @@
1+import { useRouter } from "next/router";
2+import { getPostBySlug, getAllPosts } from "../../lib/lib";
3+import Head from "next/head";
4+import Link from "next/link";
5+import Meta from "../../components/Meta";
6+import ErrorPage from "../404";
7+import Container from "../../components/Container";
8+import Markdown from "../../components/Markdown";
9+import GuideColumn from "../../components/GuideColumn";
10+import Section from "../../components/Section";
11+
12+import { decode } from "html-entities";
13+
14+export default function GuidePage({ post, markdown }) {
15+ const router = useRouter();
16+ if (!router.isFallback && !post?.slug) {
17+ return <ErrorPage />;
18+ }
19+
20+ return (
21+ <Container>
22+ <Head>
23+ <title>Urbit • {post.title}</title>
24+ {Meta(post)}
25+ </Head>
26+ <GuideColumn>
27+ <Section narrow short>
28+ <h2>{post.title}</h2>
29+ </Section>
30+ <Section narrow short className="markdown">
31+ <article
32+ dangerouslySetInnerHTML={{ __html: decode(markdown) }}
33+ ></article>
34+ <Link href="/">
35+ <a className="text-xl pt-12 block font-semibold">Urbit.org</a>
36+ </Link>
37+ </Section>
38+ </GuideColumn>
39+ </Container>
40+ );
41+}
42+
43+//
44+export async function getStaticProps({ params }) {
45+ const post = getPostBySlug(
46+ params.slug,
47+ ["title", "slug", "date", "description", "content", "extra"],
48+ "guides"
49+ );
50+
51+ const markdown = await Markdown({ post });
52+
53+ return {
54+ props: { post, markdown },
55+ };
56+}
57+
58+export async function getStaticPaths() {
59+ const posts = getAllPosts(["slug", "date"], "guides", "date");
60+
61+ const noApplications = posts.filter(
62+ (e) => e.slug !== "installing-applications"
63+ );
64+
65+ return {
66+ paths: noApplications.map((post) => {
67+ return {
68+ params: {
69+ slug: post.slug,
70+ },
71+ };
72+ }),
73+ fallback: false,
74+ };
75+}
pages/guides/installing-applications.jsnew file+106
@@ -0,0 +1,106 @@
1+import Head from "next/head";
2+import Link from "next/link";
3+import { getPostBySlug } from "../../lib/lib";
4+import Meta from "../../components/Meta";
5+import Markdown from "../../components/Markdown";
6+import Container from "../../components/Container";
7+import GuideColumn from "../../components/GuideColumn";
8+import Section from "../../components/Section";
9+import { decode } from "html-entities";
10+
11+export default function GuidePage({ post, markdown }) {
12+ return (
13+ <Container>
14+ <Head>
15+ <title>Urbit • {post.title}</title>
16+ {Meta(post)}
17+ </Head>
18+ <GuideColumn>
19+ <Section narrow short>
20+ <h2>{post.title}</h2>
21+ </Section>
22+ <Section narrow short>
23+ <article
24+ className="markdown"
25+ dangerouslySetInnerHTML={{ __html: decode(markdown) }}
26+ ></article>
27+ <h2 className="text-3xl my-12">5. Add more applications</h2>
28+ <p className="my-2">Here's a few more applications to check out:</p>
29+ <Link href="/applications/~paldev/pals">
30+ <div class="bg-wall-100 rounded-xl p-3 flex flex-col space-y-4 my-6 cursor-pointer">
31+ <div class="flex space-x-4 items-center">
32+ <div
33+ class="rounded-xl"
34+ style={{
35+ height: 100,
36+ width: 100,
37+ backgroundColor: "#A6D2BE",
38+ }}
39+ ></div>
40+ <h3>pals</h3>
41+ </div>
42+ <p>add people you know on the network</p>
43+ </div>
44+ </Link>
45+
46+ <Link href="/applications/~dister-fabnev-hinmur/escape">
47+ <div class="bg-wall-100 rounded-xl p-3 flex flex-col space-y-4 my-6 cursor-pointer">
48+ <div class="flex space-x-4 items-center">
49+ <img
50+ class="rounded-xl"
51+ src="https://media.urbit.org/site/application/escape.png"
52+ style={{
53+ backgroundColor: "#ffffff",
54+ height: 100,
55+ width: 100,
56+ }}
57+ />
58+ <h3>EScape</h3>
59+ </div>
60+ <p>
61+ an alternative interface for the Groups application, with pals
62+ integration by{" "}
63+ <span className="text-green-400 font-mono">~fabnev-hinmur</span>
64+ </p>
65+ </div>
66+ </Link>
67+
68+ <Link href="/applications/~paldev/rumors">
69+ <div class="bg-wall-100 rounded-xl p-3 flex flex-col space-y-4 cursor-pointer">
70+ <div class="flex space-x-4 items-center">
71+ <div
72+ class="rounded-xl"
73+ style={{
74+ backgroundColor: "#B17AD7",
75+ height: 100,
76+ width: 100,
77+ }}
78+ ></div>
79+ <h3>rumors</h3>
80+ </div>
81+ <p>the more people you know, the more rumors you’ll hear</p>
82+ </div>
83+ </Link>
84+ <Link href="/">
85+ <a className="text-xl pt-12 block font-semibold">Urbit.org</a>
86+ </Link>
87+ </Section>
88+ </GuideColumn>
89+ </Container>
90+ );
91+}
92+
93+//
94+export async function getStaticProps({ params }) {
95+ const post = getPostBySlug(
96+ "installing-applications",
97+ ["title", "slug", "content"],
98+ "guides"
99+ );
100+
101+ const markdown = await Markdown({ post });
102+
103+ return {
104+ props: { post, markdown },
105+ };
106+}
pages/ids/[id].jsnew file+242
@@ -0,0 +1,242 @@
1+import Head from "next/head";
2+import Link from "next/link";
3+import { getPage, getAllPosts } from "../../lib/lib";
4+import { join } from "path";
5+import Container from "../../components/Container";
6+import SingleColumn from "../../components/SingleColumn";
7+import Section from "../../components/Section";
8+import ob from "urbit-ob";
9+import Markdown from "../../components/Markdown";
10+import ResourceCard from "../../components/ResourceCard";
11+import GatewayHeader from "../../components/gateway/GatewayHeader";
12+import Gateway404 from "../../components/gateway/Gateway404";
13+import MetadataBlock from "../../components/gateway/MetadataBlock";
14+import MetadataLink from "../../components/gateway/MetadataLink";
15+import Description from "../../components/gateway/Description";
16+import axios from "axios";
17+
18+const IdPage = ({ data, markdown, applications, groups, network, params }) => {
19+ let { id } = params;
20+ id = `~${deSig(id)}`;
21+ if (!ob.isValidPatp(id) || id.length > 14) {
22+ return <Gateway404 type="ID" />;
23+ }
24+
25+ const reqParams = [
26+ data?.bgColor ? `color=${encodeURIComponent(data?.bgColor)}` : "",
27+ data?.nickname ? `nickname=${encodeURIComponent(data?.nickname)}` : "",
28+ data?.image ? `images=${encodeURIComponent(data?.image)}` : "",
29+ ].filter((e) => e !== "");
30+ const image = `https://urbit-id-og-cards-kappa.vercel.app/${deSig(
31+ id
32+ )}.png?${reqParams.join("&")}`;
33+
34+ // Parent ID, grabbed from network or fallback to the default sponsor for that node
35+ const parent = network ? network.sponsor["urbit-id"] : ob.sein(id);
36+ // Galaxy name above that parent
37+ const galaxy =
38+ ob.clan(id) === "planet"
39+ ? network?.sponsor?.sponsor?.["urbit-id"] || ob.sein(parent)
40+ : null;
41+ // Galaxies shouldn't show parents, so store it as boolean here for reference.
42+ const isGalaxy = ob.clan(id) === "galaxy";
43+
44+ return (
45+ <Container>
46+ <Head>
47+ <title>{id} • Urbit ID • urbit.org</title>
48+ <link rel="icon" type="image/png" href="/images/favicon.ico" />
49+ <meta
50+ name="twitter:card"
51+ content="summary_large_image"
52+ key="twitter-card"
53+ />
54+ <meta
55+ name="og:title"
56+ content={`${id} • Urbit ID • urbit.org`}
57+ key="title"
58+ />
59+ <meta
60+ name="og:description"
61+ content="View more about this Urbit ID on urbit.org."
62+ key="description"
63+ />
64+ <meta property="twitter:image" content={image} key="image" />
65+ </Head>
66+ <SingleColumn>
67+ <Section className="space-y-12 w-full" narrow>
68+ <GatewayHeader
69+ title={data?.nickname ? data?.nickname : id}
70+ subtitle={data?.nickname ? id : false}
71+ subtitleMono
72+ color={data?.bgColor || "#24201E"}
73+ image={data?.image || false}
74+ patp={!data?.image ? id : false}
75+ item="Urbit ID"
76+ />
77+ <div className="flex flex-wrap md:flex-nowrap justify-between">
78+ <MetadataBlock
79+ title="ID Type"
80+ content={
81+ ob.clan(id).slice(0, 1).toUpperCase() + ob.clan(id).slice(1)
82+ }
83+ />
84+ <MetadataBlock
85+ title="Status"
86+ content={network ? "Spawned/Owned" : "Unspawned"}
87+ />
88+ {!isGalaxy && (
89+ <MetadataLink
90+ title="Parent"
91+ href={`/ids/${parent}`}
92+ content={parent}
93+ />
94+ )}
95+ {galaxy && (
96+ <MetadataLink
97+ title="Galaxy"
98+ href={`/ids/${galaxy}`}
99+ content={galaxy}
100+ />
101+ )}
102+ </div>
103+ <Creations
104+ title="Applications"
105+ id={id}
106+ type="application"
107+ data={applications}
108+ />
109+ <Creations title="Hosted Groups" id={id} type="group" data={groups} />
110+ <Description
111+ description={data.description}
112+ fallback="An Urbit ID."
113+ markdown={markdown}
114+ />
115+ <a
116+ className="flex items-center"
117+ target="_blank"
118+ href={`https://network.urbit.org/${id}`}
119+ >
120+ <div className="flex items-center">
121+ <svg
122+ width="32"
123+ height="32"
124+ viewBox="0 0 32 32"
125+ fill="none"
126+ xmlns="http://www.w3.org/2000/svg"
127+ >
128+ <path
129+ d="M14.56 6.39999C11.9487 6.40124 9.49503 7.65251 7.95999 9.76639C6.42623 11.8789 5.99624 14.6 6.80373 17.0838C7.61122 19.5676 9.55874 21.5139 12.0425 22.3213C14.5274 23.1275 17.2476 22.6963 19.3599 21.1613L23.4236 25.225C23.9236 25.7262 24.7348 25.7262 25.2348 25.225C25.7348 24.725 25.7348 23.9149 25.2348 23.415L21.1712 19.3513V19.35C22.3586 17.7188 22.8974 15.7049 22.6862 13.6988C22.4749 11.6926 21.5274 9.83516 20.0262 8.48764C18.5249 7.1389 16.5775 6.39513 14.5599 6.40015L14.56 6.39999ZM14.56 20.16C13.075 20.16 11.65 19.57 10.6 18.52C9.55 17.47 8.95999 16.045 8.95999 14.56C8.95999 13.075 9.55 11.65 10.6 10.6C11.65 9.55001 13.075 8.95999 14.56 8.95999C16.045 8.95999 17.47 9.55001 18.52 10.6C19.57 11.65 20.16 13.075 20.16 14.56C20.1587 16.045 19.5675 17.4675 18.5175 18.5174C17.4675 19.5674 16.045 20.1587 14.5601 20.1599L14.56 20.16Z"
130+ fill="#80D8B8"
131+ />
132+ </svg>
133+ <p className="text-green-400 font-semibold">
134+ View on Network Explorer
135+ </p>
136+ </div>
137+ </a>
138+ <hr className="text-wall-200" />
139+ <div className="flex flex-col space-y-6">
140+ <h3>
141+ Urbit is a clean-slate, peer-to-peer operating system and network.
142+ </h3>
143+ <div className="flex flex-col space-y-4">
144+ <p className="text-md font-semibold text-wall-400">
145+ Learn how get your own Urbit ID.
146+ </p>
147+ <Link href="/guides/getting-an-urbit-id">
148+ <button className="button-lg max-w-xs bg-green-400 text-white">
149+ Get an Urbit ID
150+ </button>
151+ </Link>
152+ </div>
153+ </div>
154+ <hr className="text-wall-200" />
155+ <div className="flex flex-col space-y-1">
156+ <p>Have an Urbit ID?</p>
157+ <Link href="/ids/submit">
158+ <a className="type-ui text-green-400">
159+ Claim and customize your Urbit ID page
160+ </a>
161+ </Link>
162+ </div>
163+ <Link href="/">
164+ <a className="text-xl pt-8 block font-semibold">Urbit.org</a>
165+ </Link>
166+ </Section>
167+ </SingleColumn>
168+ </Container>
169+ );
170+};
171+
172+const Creations = ({ id, title, data, type }) => {
173+ return (
174+ data?.length > 0 && (
175+ <div className="flex space-y-2 flex-col">
176+ <p className="text-wall-400 font-semibold">{title}</p>
177+ <div className="flex flex-wrap">
178+ {data.map((each) => (
179+ <ResourceCard
180+ type={type}
181+ shortcode={`${id}/${each.slug}`}
182+ title={each.title}
183+ color={each.bgColor}
184+ image={type === "group" ? each.tile : each.image}
185+ />
186+ ))}
187+ </div>
188+ </div>
189+ )
190+ );
191+};
192+
193+function deSig(string) {
194+ return string.startsWith("~") ? string.substring(1) : string;
195+}
196+
197+export const getServerSideProps = async ({ params, res }) => {
198+ res.setHeader(
199+ "Cache-Control",
200+ "public, s-maxage=3600, stale-while-revalidate=604800"
201+ );
202+
203+ let { id } = params;
204+ id = `~${deSig(id)}`;
205+
206+ let { data, content } = getPage(
207+ join(process.cwd(), "content/ids/", id.slice(1))
208+ ) || { data: {}, content: "" };
209+
210+ const applications = getAllPosts(
211+ ["title", "slug", "image", "bgColor"],
212+ `applications/${params.id}`
213+ );
214+ const groups = getAllPosts(["title", "slug", "tile"], `groups/${id}`);
215+
216+ if (!data.ship && ob.isValidPatp(id)) {
217+ data = { ship: id, description: "An Urbit ID." };
218+ }
219+
220+ let network = await axios
221+ .get(
222+ `https://mt2aga2c5l.execute-api.us-east-2.amazonaws.com/get-node?urbit-id=${
223+ ob.isValidPatp(id) ? id : "~zod"
224+ }`
225+ )
226+ .then((res) => res.data);
227+
228+ const markdown = await Markdown({ post: { content: content } }, true);
229+
230+ return {
231+ props: {
232+ data,
233+ applications,
234+ groups,
235+ markdown,
236+ network,
237+ params,
238+ },
239+ };
240+};
241+
242+export default IdPage;
pages/ids/submit.jsnew file+168
@@ -0,0 +1,168 @@
1+import Link from "next/link";
2+import Container from "../../components/Container";
3+import Section from "../../components/Section";
4+import SingleColumn from "../../components/SingleColumn";
5+import { useInputChange } from "../../lib/hooks";
6+import ob from "urbit-ob";
7+import Sigil from "../../components/Sigil";
8+import Head from "next/head";
9+import Meta from "../../components/Meta";
10+
11+const SubmissionPage = () => {
12+ const [form, handleFormChange] = useInputChange();
13+
14+ const href = `https://github.com/urbit/urbit.org/new/master?filename=/content/ids/${form?.ship?.substring(
15+ 1
16+ )}.md&value=${encodeURIComponent(
17+ `+++
18+ship = "${form?.ship}"
19+nickname = "${form?.nickname || ""}"
20+bgColor = "${form?.bgColor || "#000000"}"
21+image = "${form?.image || ""}"
22++++
23+
24+${form?.description || ""}`
25+ )}`;
26+
27+ let validColor = /^#[0-9A-F]{6}$/i.test(form?.bgColor)
28+ ? form?.bgColor
29+ : "#24201E";
30+
31+ return (
32+ <Container>
33+ <Head>
34+ <title>Claim an Urbit ID page • Urbit.org</title>
35+ {Meta}
36+ </Head>
37+ <SingleColumn>
38+ <Section narrow className="space-y-12">
39+ <div className="flex flex-col space-y-4">
40+ <h2>Claim your page</h2>
41+ <p>
42+ Urbit ID page claims are accomplished through a GitHub pull
43+ request.
44+ </p>
45+ <p>
46+ You’ll need <a href="https://github.com">a GitHub account</a>{" "}
47+ before you get started.
48+ </p>
49+ <p>
50+ First, enter your information and then click “Submit with GitHub.”
51+ You’ll be directed to a GitHub pull request page with a
52+ pre-populated markdown file. Click “Propose new file,” and then
53+ “Create pull request” on the following page.
54+ </p>
55+ <p>
56+ Then, to validate that you operate this group, send a DM to{" "}
57+ <Link href="/ids/~haddef-sigwen">
58+ <a>~haddef-sigwen</a>
59+ </Link>{" "}
60+ from your group host <code>@p</code> with a link to the pull
61+ request on GitHub. We’ll approve the pull request and your page
62+ will be online shortly.
63+ </p>
64+ </div>
65+ <div className="flex flex-col space-y-4">
66+ <h3>Enter your Urbit ID information</h3>
67+ <div className="flex flex-col">
68+ <p>Urbit ID (required)</p>
69+ <div className="flex items-center">
70+ {form?.image ? (
71+ <img
72+ className="mr-2 rounded-lg"
73+ src={form?.image}
74+ style={{ height: 32, width: 32 }}
75+ />
76+ ) : (
77+ <div
78+ className="flex p-2 rounded-lg mr-2"
79+ style={{
80+ backgroundColor: validColor,
81+ display: form?.ship?.length > 14 ? "none" : "block",
82+ }}
83+ >
84+ <Sigil
85+ icon
86+ color={validColor}
87+ size="25"
88+ patp={
89+ ob.isValidPatp(form?.ship || "") ? form?.ship : "~zod"
90+ }
91+ />
92+ </div>
93+ )}
94+ <input
95+ className="bg-wall-100 p-2 flex-1"
96+ name="ship"
97+ placeholder="~bitbet-bolbel"
98+ onChange={handleFormChange}
99+ />
100+ </div>
101+ </div>
102+ <div className="flex flex-col">
103+ <p>Nickname (optional)</p>
104+ <input
105+ placeholder="Bitbet"
106+ name="nickname"
107+ onChange={handleFormChange}
108+ className="bg-wall-100 p-2"
109+ />
110+ </div>
111+ <div>
112+ <p>Sigil color (or avatar image)</p>
113+ <div className="flex space-x-2">
114+ <input
115+ placeholder="#24201E"
116+ name="bgColor"
117+ className="bg-wall-100 p-2 flex-1"
118+ onChange={handleFormChange}
119+ />
120+ <input
121+ placeholder="https://..."
122+ name="image"
123+ className="bg-wall-100 p-2 flex-1"
124+ onChange={handleFormChange}
125+ />
126+ </div>
127+ </div>
128+ <div className="flex flex-col">
129+ <p>Hosted groups</p>
130+ <input
131+ className="bg-wall-100 p-2 text-wall-400"
132+ readOnly
133+ value="Submitted groups associated with this ID will automatically appear"
134+ />
135+ </div>
136+ <div className="flex flex-col">
137+ <p>Applications</p>
138+ <input
139+ className="bg-wall-100 p-2 text-wall-400"
140+ readOnly
141+ value="Submitted applications associated with this ID will automatically appear"
142+ />
143+ </div>
144+ <div className="flex flex-col">
145+ <p>Description</p>
146+ <textarea
147+ className="resize-none bg-wall-100 p-2 h-60"
148+ name="description"
149+ onChange={handleFormChange}
150+ />
151+ </div>
152+ </div>
153+ <button
154+ className="button-lg bg-wall-600 text-wall-100"
155+ onClick={() => window.open(href)}
156+ >
157+ Submit with GitHub
158+ </button>
159+ <Link href="/">
160+ <a className="text-xl pt-8 block font-semibold">Urbit.org</a>
161+ </Link>
162+ </Section>
163+ </SingleColumn>
164+ </Container>
165+ );
166+};
167+
168+export default SubmissionPage;
pages/index.js+43−79
@@ -51,62 +51,6 @@ const Banner = ({ children, isOpen, href, dismiss }) => {
5151};
5252
5353export default function Home({ posts, events, openGrantsCount, search }) {
54− const [heroButton, setHeroButton] = useState(<div />);
55− const [bannerElement, setBannerElement] = useState(null);
56− const [isBannerOpen, setBanner] = useLocalStorage(
57− "urbit-banner-softdist",
58− true
59− );
60−
61− const selectDownloadButton = () => {
62− const agent = window.navigator.appVersion;
63− if (agent.includes("Win")) {
64− return (
65− <span className="button-lg type-ui mb-5 bg-wall-600 text-white">
66− Coming soon for Windows
67− </span>
68− );
69− } else if (agent.includes("Mac")) {
70− return (
71− <a href="https://github.com/urbit/port/releases/latest/download/Port.dmg">
72− <button className="button-lg type-ui mb-5 bg-green-400 text-white">
73− Download For macOS
74− </button>
75− </a>
76− );
77− } else if (agent.includes("Linux")) {
78− return (
79− <code className="button-lg type-ui mb-5 bg-wall-600 text-white">
80− sudo snap install port
81− </code>
82− );
83− }
84− };
85−
86− useEffect(() => {
87− setHeroButton(selectDownloadButton());
88− }, []);
89−
90− // Use this pattern when depending on client-side state or conditions like localStorage, user OS or geolocation.
91− const selectBanner = (isBannerOpen) => {
92− if (isBannerOpen) {
93− return (
94− <Banner
95− href="https://assembly.urbit.org"
96− dismiss={() => setBanner(false)}
97− >
98− <p className="text-green-400 font-semibold hover:opacity-70">{`-> Network update is live. Learn more at Assembly 2021.`}</p>
99− </Banner>
100− );
101− } else {
102− return null;
103− }
104− };
105−
106− useEffect(() => {
107− setBannerElement(selectBanner(isBannerOpen));
108− }, [isBannerOpen]);
109−
11054 return (
11155 <Container>
11256 <Head>
@@ -127,22 +71,21 @@ export default function Home({ posts, events, openGrantsCount, search }) {
12771 </Section>
12872
12973 {
130− // Introducing Port
74+ // Hero
13175 }
13276 <Section>
13377 <div className="bg-wall-100 w-full p-8 md:p-12 rounded-3xl flex flex-col md:flex-row">
13478 <div className="md:w-6/12 w-full md:mr-6">
135− <h2 className="pb-4">New at Urbit</h2>
136− <h4 className="pb-4">
137− Get on Urbit with these guides or swap a star for WSTR.
138− </h4>
13979 <p>
14080 Urbit is for everyone, but sometimes it is easy to get lost in
141− this universe. Follow these links to contribute to the network
142− through developing, operating, exploring, or exchanging.
81+ this universe.
82+ </p>
83+ <p className="pt-8">
84+ Follow these links to contribute to the network through
85+ developing, operating, and exploring.
14386 </p>
14487 </div>
145− <div className="pt-8 md:pt-20 md:w-6/12 w-full md:ml-6">
88+ <div className="pt-8 md:pt-0 md:w-6/12 w-full md:ml-6">
14689 <BubbleLink
14790 href="https://developers.urbit.org"
14891 title="Developers"
@@ -182,19 +125,6 @@ export default function Home({ posts, events, openGrantsCount, search }) {
182125 src="/images/network-explorer-logo.png"
183126 />
184127 </BubbleLink>
185− <BubbleLink
186− href="https://star.market/"
187− className="mt-4 md:h-16"
188− target="_blank"
189− title="Star Market"
190− caption="Exchange Stars and WSTR."
191− >
192− <img
193− alt="Marketplace logo"
194− className="max-w-none w-12 h-12 rounded-full"
195− src="/images/star-market-logo.png"
196− />
197− </BubbleLink>
198128 </div>
199129 </div>
200130 </Section>
@@ -354,12 +284,46 @@ export async function getStaticProps() {
354284
355285 const posts = getAllPosts(
356286 ["title", "slug", "date", "description", "extra"],
357− "blog"
287+ "blog",
288+ "date"
358289 );
359290
360291 const events = getAllEvents(eventKeys, "events");
361292
293+ const now = DateTime.now();
294+
295+ const pastEvents = events.filter((event) => {
296+ const ends = generateRealtimeDate(event.ends);
297+ return ends < now;
298+ });
299+
300+ const futureEvents = events
301+ .filter((event) => {
302+ const starts = generateRealtimeDate(event.starts);
303+ return starts > now;
304+ })
305+ .sort((a, b) => {
306+ const aStarts = generateRealtimeDate(a.starts).ts;
307+ const bStarts = generateRealtimeDate(b.starts).ts;
308+ if (aStarts > bStarts) {
309+ return 1;
310+ } else if (aStarts === bStarts) {
311+ return 0;
312+ }
313+ return -1;
314+ });
315+
316+ const happeningNow = events.filter((event) => {
317+ const starts = generateRealtimeDate(event.starts);
318+ const ends = generateRealtimeDate(event.ends);
319+ return starts > DateTime.now() && ends < now;
320+ });
321+
362322 return {
363− props: { posts, events, openGrantsCount },
323+ props: {
324+ posts,
325+ openGrantsCount,
326+ events: happeningNow.concat(futureEvents).concat(pastEvents),
327+ },
364328 };
365329}
pages/media.js+3−2
@@ -28,7 +28,7 @@ export function MediaPreview({ event, dir, className }) {
2828 >
2929 <Link href={`${dir ? dir : "/events/"}${event.slug}`}>
3030 <div className="flex flex-col p-8 justify-between items-between h-full relative">
31− <div className="flex-grow-1 flex flex-col justify-center h-full">
31+ <div className="grow-1 flex flex-col justify-center h-full">
3232 <h3 className={`mb-4 ${blackText}`}>{event.title}</h3>
3333 <h4 className={grayText}>{event?.type}</h4>
3434 </div>
@@ -100,7 +100,8 @@ export default function Media({ posts, search }) {
100100export async function getStaticProps() {
101101 const posts = getAllPosts(
102102 ["title", "slug", "date", "description", "extra"],
103− "media"
103+ "media",
104+ "date"
104105 );
105106
106107 return {
pages/media/[slug].js+7−4
@@ -6,6 +6,7 @@ import {
66 generateDisplayDate,
77} from "../../lib/lib";
88import Head from "next/head";
9+import Link from "next/link";
910import Meta from "../../components/Meta";
1011import ErrorPage from "../404";
1112import Container from "../../components/Container";
@@ -40,9 +41,11 @@ export default function MediaPage({ post, markdown, search }) {
4041 </div>
4142 ) : null}
4243 {post.extra.ship ? (
43− <div className="type-ui text-wall-500 font-mono">
44− {post.extra.ship}
45− </div>
44+ <Link href={`/ids/${post.extra.ship}`}>
45+ <a className="type-sub-bold text-wall-500 font-mono">
46+ {post.extra.ship}
47+ </a>
48+ </Link>
4649 ) : null}
4750 <div className="type-ui text-wall-500 mt-16">{formatDate(date)}</div>
4851 </Section>
@@ -100,7 +103,7 @@ export async function getStaticProps({ params }) {
100103}
101104
102105export async function getStaticPaths() {
103− const posts = getAllPosts(["slug", "date"], "media");
106+ const posts = getAllPosts(["slug", "date"], "media", "date");
104107
105108 return {
106109 paths: posts.map((post) => {
pages/understanding-urbit/[[...slug]].js+1−1
@@ -88,7 +88,7 @@ export default function UnderstandingLayout({
8888 <title>{data.title} • Understanding Urbit • urbit.org</title>
8989 {Meta(data)}
9090 </Head>
91− <div className="flex w-screen h-screen min-h-screen w-screen sidebar">
91+ <div className="flex h-screen min-h-screen w-screen sidebar">
9292 <Sidebar search={search}>
9393 <ul>
9494 <li>
pages/updates.js+7−4
@@ -47,9 +47,11 @@ export default function Updates({ posts, search }) {
4747 <div className="mx-1 text-wall-500">•</div>
4848 ) : null}
4949 {post?.extra.ship ? (
50− <div className="type-ui text-wall-500 font-mono">
51− {post.extra.ship}
52− </div>
50+ <Link href={`/ids/${post.extra.ship}`}>
51+ <a className="type-sub-bold text-wall-500 font-mono">
52+ {post.extra.ship}
53+ </a>
54+ </Link>
5355 ) : null}
5456 </div>
5557
@@ -71,7 +73,8 @@ export default function Updates({ posts, search }) {
7173export async function getStaticProps() {
7274 const posts = getAllPosts(
7375 ["title", "slug", "date", "description", "extra"],
74− "updates"
76+ "updates",
77+ "date"
7578 );
7679
7780 return {
pages/updates/[slug].js+7−3
@@ -47,8 +47,12 @@ export default function Post({
4747 {post.author}
4848 </div>
4949 ) : null}
50− {post.ship ? (
51− <div className="type-ui text-wall-500 font-mono">{post.ship}</div>
50+ {post?.extra?.ship ? (
51+ <Link href={`/ids/${post.extra.ship}`}>
52+ <a className="type-sub-bold text-wall-500 font-mono">
53+ {post?.extra?.ship}
54+ </a>
55+ </Link>
5256 ) : null}
5357 <div className="type-ui text-wall-500 mt-4 md:mt-8 lg:mt-10">
5458 {formatDate(date)}
@@ -120,7 +124,7 @@ export async function getStaticProps({ params }) {
120124}
121125
122126export async function getStaticPaths() {
123− const posts = getAllPosts(["slug", "date"], "updates");
127+ const posts = getAllPosts(["slug", "date"], "updates", "date");
124128
125129 return {
126130 paths: posts.map((post) => {
pages/using/[[...slug]].js+1−1
@@ -105,7 +105,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
105105 <title>{data.title} • User's Manual • urbit.org</title>
106106 {Meta(data)}
107107 </Head>
108− <div className="flex w-screen h-screen min-h-screen w-screen sidebar">
108+ <div className="flex h-screen min-h-screen w-screen sidebar">
109109 <Sidebar search={search}>
110110 {childPages("/using", posts.children)}
111111 </Sidebar>
images/favicon.ico → public/images/favicon.icorenamed

Binary file not shown.

styles/globals.css+7
@@ -1,5 +1,9 @@
11@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Source+Code+Pro:wght@400;500;600;700;800&display=swap");
22
3+@tailwind base;
4+@tailwind components;
5+@tailwind utilities;
6+
37:root {
48 --tray-time: 0ms;
59}
@@ -79,6 +83,9 @@ code .type-code {
7983 @apply bg-wall-100 p-4 font-mono;
8084}
8185
86+.font-bold {
87+ @apply antialiased;
88+}
8289/* Utils */
8390
8491.layout-narrow {
tailwind.config.js+4−2
@@ -1,6 +1,8 @@
11module.exports = {
2− purge: ["./pages/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
3− darkMode: false, // or 'media' or 'class'
2+ content: [
3+ "./pages/**/*.{js,ts,jsx,tsx}",
4+ "./components/**/*.{js,ts,jsx,tsx}",
5+ ],
46 theme: {
57 colors: {
68 // Wall
vercel.json+5
@@ -3,6 +3,11 @@
33 "silent": true
44 },
55 "redirects": [
6+ {
7+ "source": "/groups/~ladtem-filmyr/urbit-ny-takeover",
8+ "destination": "/groups/~ladtem-filmyr/urbit-ny-week",
9+ "permanent": true
10+ },
611 {
712 "source": "/grants/grant-submission-guide",
813 "destination": "/grants/proposals",