diff --git a/.env.example b/.env.example
index f1e1e708b..2fa97cacc 100644
--- a/.env.example
+++ b/.env.example
@@ -1,5 +1,6 @@
# Get this from https://platform.openai.com/account/api-keys
OPENAI_API_KEY=YOUR_API_KEY
+OPENAI_MODEL=gpt-3.5-turbo-0125
# Get this from https://lightsail.aws.amazon.com/ls/webapp/us-east-1/buckets
AWS_ACCESS_KEY_ID=your_access_key_id
diff --git a/.gitignore b/.gitignore
index 807fd5fea..e14642dc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,3 +57,4 @@ litellm_uuid.txt
.smart-connections
.space
.makemd
+desktop.ini
diff --git a/apps/browser-extension/background.js b/apps/browser-extension/background.js
index 9b3c90398..0827fd0ba 100644
--- a/apps/browser-extension/background.js
+++ b/apps/browser-extension/background.js
@@ -1,3 +1,5 @@
+import { extractAndSaveAmazon } from './extractAndSaveAmazon.js';
+
chrome.runtime.onInstalled.addListener(() => {
setDailyAlarm(); // Set an alarm on installation
});
@@ -5,7 +7,7 @@ chrome.runtime.onInstalled.addListener(() => {
function setDailyAlarm() {
chrome.storage.sync.get("frequency", ({ frequency }) => {
const minutes = parseInt(frequency, 10) || 1440; // Default to 1440 minutes (once a day) if not set
- chrome.alarms.create("dailyPopup", { periodInMinutes: minutes });
+ chrome.alarms.create("trackingPopup", { periodInMinutes: minutes });
});
}
@@ -18,20 +20,63 @@ chrome.storage.onChanged.addListener((changes, namespace) => {
}
});
-chrome.alarms.onAlarm.addListener((alarm) => {
- console.log("Got an alarm!", alarm);
- if (alarm.name === "dailyPopup") {
- console.log("Time to show the daily popup!");
- // Open a window instead of creating a notification
+let popupId = null;
+
+function showTrackingPopup() {
+ debugger
+ console.log('Time to show the daily popup!');
+
+ let origin = 'https://safe.fdai.earth';
+ //origin = 'https://local.quantimo.do';
+
+ if (popupId !== null) {
+ chrome.windows.get(popupId, { populate: true }, (win) => {
+ if (chrome.runtime.lastError) {
+ // The window was closed or never created. Create it.
+ chrome.windows.create({
+ url: origin + '/app/public/android_popup.html',
+ type: 'popup',
+ width: 1,
+ height: 1,
+ left: 100,
+ top: 100,
+ focused: false
+ }, (win) => {
+ popupId = win.id;
+ });
+ } else {
+ // The window exists. Update it.
+ chrome.windows.update(popupId, { focused: true });
+ }
+ });
+ } else {
+ // No window ID, create a new window.
chrome.windows.create({
- url: 'https://safe.fdai.earth/app/public/android_popup.html',
+ url: origin + '/app/public/android_popup.html',
type: 'popup',
- width: 300,
- height: 200,
+ width: 1,
+ height: 1,
left: 100,
- top: 100
+ top: 100,
+ focused: false
+ }, (win) => {
+ popupId = win.id;
});
}
+}
+
+// background.js
+chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
+ if (request.action === "showTrackingPopup") {
+ showTrackingPopup();
+ }
+});
+
+chrome.alarms.onAlarm.addListener((alarm) => {
+ console.log("Got an alarm!", alarm);
+ if (alarm.name === "trackingPopup") {
+ showTrackingPopup();
+ }
});
chrome.runtime.onStartup.addListener(() => {
@@ -98,7 +143,7 @@ chrome.contextMenus.onClicked.addListener((info, tab) => {
// target: {tabId: tab.id},
// function: extractAndSaveAmazon
// });
- chrome.tabs.create({url: "https://www.amazon.com/gp/css/order-history?ref_=nav_orders_first"});
+ chrome.tabs.create({url: "https://www.amazon.com/gp/css/order-history"});
}
});
@@ -121,7 +166,7 @@ function parseDate(deliveryDate) {
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
console.log("Tab updated:", changeInfo);
// Check if the updated tab's URL is the Amazon order history page
- if (changeInfo.url === "https://www.amazon.com/gp/css/order-history?ref_=nav_orders_first") {
+ if (changeInfo.url && changeInfo.url.startsWith("https://www.amazon.com/gp/css/order-history")) {
debugger
console.log("Amazon order history page loaded");
// Execute the extractAndSaveAmazon function
@@ -144,59 +189,7 @@ async function getQuantimodoAccessToken() {
});
}
-async function extractAndSaveAmazon() {
- const productBoxes = document.querySelectorAll('.a-fixed-left-grid.item-box.a-spacing-small, .a-fixed-left-grid.item-box.a-spacing-none');
- const deliveryDate = document.querySelector('.delivery-box__primary-text').textContent.trim();
- const storedProducts = JSON.parse(localStorage.getItem('products')) || [];
- let measurements = [];
-
- for (const box of productBoxes) {
- const productImage = box.querySelector('.product-image a img').src;
- const productTitle = box.querySelector('.yohtmlc-product-title').textContent.trim();
- const productLink = box.querySelector('.product-image a').href;
-
- // Check if the product is already in localStorage
- const isProductStored = storedProducts.some(product => product.url === productLink);
-
- if (!isProductStored) {
- // If not stored, add the product to the array and localStorage
- const newProduct = {
- date: deliveryDate,
- title: productTitle,
- image: productImage,
- url: productLink
- };
- storedProducts.push(newProduct);
- localStorage.setItem('products', JSON.stringify(storedProducts));
-
- // Add the product details to the array
- measurements.push({
- startAt: parseDate(deliveryDate),
- variableName: productTitle,
- unitName: "Count",
- value: 1,
- url: productLink,
- image: productImage
- });
- }
- }
-
- if(measurements.length > 0) {
- const quantimodoAccessToken = await getQuantimodoAccessToken();
- const response = await fetch('https://safe.fdai.earth/api/v1/measurements', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Authorization': `Bearer ${quantimodoAccessToken}`
- },
- body: JSON.stringify(measurements)
- });
- const data = await response.json();
- console.log('Response from Quantimodo API:', data);
- }
- console.log(`Processed ${productBoxes.length} products.`);
-}
function hasAccessToken() {
return new Promise((resolve, reject) => {
@@ -255,7 +248,15 @@ chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
// Execute your function here
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
//console.log("tabs", tabs);
+ if(!tabs[0]) {
+ console.log("No active tabs. Tabs:", tabs);
+ return;
+ }
chrome.tabs.sendMessage(tabs[0].id, {message: "getFdaiLocalStorage", key: "accessToken"}, function(response) {
+ if(!response) {
+ console.error("No response from getFdaiLocalStorage");
+ return;
+ }
//console.log(response.data);
chrome.storage.sync.set({quantimodoAccessToken: response.data}, function() {
console.log('Access token saved:')//, response.data);
diff --git a/apps/browser-extension/contentScript.js b/apps/browser-extension/contentScript.js
index 08a7c0745..384ffc6ee 100644
--- a/apps/browser-extension/contentScript.js
+++ b/apps/browser-extension/contentScript.js
@@ -1,7 +1,7 @@
// Function to extract the data
function extractAndSaveAmazon() {
// Send a message to the background script to navigate to the Amazon order history page
- chrome.runtime.sendMessage({action: "navigate", url: "https://www.amazon.com/gp/css/order-history?ref_=nav_orders_first"});
+ chrome.runtime.sendMessage({action: "navigate", url: "https://www.amazon.com/gp/css/order-history"});
// Rest of your function code here...
}
diff --git a/apps/browser-extension/extractAndSaveAmazon.js b/apps/browser-extension/extractAndSaveAmazon.js
new file mode 100644
index 000000000..53220e048
--- /dev/null
+++ b/apps/browser-extension/extractAndSaveAmazon.js
@@ -0,0 +1,99 @@
+function showNotification(title, message) {
+ chrome.notifications.create({
+ type: 'basic',
+ iconUrl: 'icons/icon.png', // Path to the icon for the notification
+ title: title,
+ message: message
+ });
+}
+
+export async function extractAndSaveAmazon(html) {
+ debugger
+
+ html = html || document;
+
+ const orderCards = html.querySelectorAll('.order-card');
+ let measurements = JSON.parse(localStorage.getItem('measurements')) || [];
+ for (const orderCard of orderCards) {
+ console.log('Order card:', orderCard);
+ debugger
+ let startAt = orderCard.querySelector('.delivery-box__primary-text').textContent.trim();
+ if(startAt === 'Order received') {
+ continue;
+ }
+ if(startAt.includes('Arriving')) {
+ continue;
+ }
+ startAt = startAt.replace('Delivered ', '').trim();
+ startAt = startAt + ', ' + new Date().getFullYear();
+ startAt = parseDate(startAt);
+ const productBoxes = orderCard.querySelectorAll('.a-fixed-left-grid.item-box.a-spacing-small, .a-fixed-left-grid.item-box.a-spacing-none');
+ for (const box of productBoxes) {
+ const image = box.querySelector('.product-image a img').src;
+ const variableName = "Purchase of " + box.querySelector('.yohtmlc-product-title').textContent.trim();
+ const url = box.querySelector('.product-image a').href;
+
+ showNotification('Saving Purchase Data', `Saving ${variableName} from Amazon`);
+
+
+ // Check if the product is already in localStorage
+ const isMeasurementStored = measurements.some(measurement => measurement.url === url && measurement.startAt === startAt);
+
+ if (!isMeasurementStored) {
+
+ // Add the product details to the array
+ measurements.push({
+ startAt,
+ variableName,
+ unitName: "Count",
+ value: 1,
+ variableCategoryName: "Treatments",
+ sourceName: "Amazon",
+ url,
+ image
+ });
+ }
+ }
+ console.log(`Processed ${orderCards.length} products. Measurements:`, measurements);
+ }
+
+ if(typeof global.apiOrigin === 'undefined') {
+ global.apiOrigin = 'https://safe.fdai.earth';
+ }
+
+ if(measurements.length > 0) {
+ console.log('Saving measurements:', measurements);
+ const quantimodoAccessToken = await getQuantimodoAccessToken();
+ let input = global.apiOrigin + '/api/v1/measurements?XDEBUG_SESSION_START=PHPSTORM';
+ const response = await fetch(input, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${quantimodoAccessToken}`,
+ 'X-CLIENT-ID': 'digital-twin-safe',
+ },
+ body: JSON.stringify(measurements)
+ });
+ // const response = await fetch('https://local.quantimo.do/api/v1/measurements', {
+ // method: 'POST',
+ // headers: {
+ // 'Content-Type': 'application/json',
+ // 'Authorization': `Bearer demo`,
+ // },
+ // body: JSON.stringify([])
+ // });
+ if (!response.ok) {
+ const text = await response.text();
+ console.error('Error response:', text);
+ throw new Error(`HTTP error! status: ${response.status}`);
+ } else {
+ const data = await response.json();
+ console.log('Post Measurement Response from API:', data);
+ localStorage.setItem('measurements', JSON.stringify(measurements));
+ }
+ }
+ return measurements;
+
+}
+
+//module.exports = extractAndSaveAmazon;
diff --git a/apps/browser-extension/manifest.json b/apps/browser-extension/manifest.json
index e407ea905..46d927cd1 100644
--- a/apps/browser-extension/manifest.json
+++ b/apps/browser-extension/manifest.json
@@ -17,7 +17,8 @@
"https://www.amazon.com/"
],
"background": {
- "service_worker": "background.js"
+ "service_worker": "background.js",
+ "type": "module"
},
"content_scripts": [
{
diff --git a/apps/browser-extension/options.css b/apps/browser-extension/options.css
index e93f158d4..2b2a3b3af 100644
--- a/apps/browser-extension/options.css
+++ b/apps/browser-extension/options.css
@@ -13,6 +13,23 @@
--border-color: #ffffff; /* White for borders */
}
+body, html {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ overflow: hidden;
+}
+
+body {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+ background: radial-gradient(rgba(118, 0, 191, 0.5) 0%, transparent 70%), linear-gradient(#0b161e 40%, #202076 70%);
+ perspective: 700px;
+ font-size: clamp(10px, 2vw, 20px);
+}
+
.title {
text-align: center;
@@ -84,22 +101,7 @@ button:hover {
}
-body, html {
- width: 100%;
- height: 100%;
- margin: 0;
- overflow: hidden;
-}
-body {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- background: radial-gradient(rgba(118, 0, 191, 0.5) 0%, transparent 70%), linear-gradient(#0b161e 40%, #202076 70%);
- perspective: 700px;
- font-size: clamp(10px, 2vw, 20px);
-}
.lines {
position: fixed;
diff --git a/apps/browser-extension/options.html b/apps/browser-extension/options.html
index 1763e8349..e5cf526a1 100644
--- a/apps/browser-extension/options.html
+++ b/apps/browser-extension/options.html
@@ -10,7 +10,7 @@
-
+
DIGITAL
@@ -25,13 +25,13 @@ Twin Safe
- Less Noticeable Background Notification
+ Less Noticeable Small Notification
- Open Tab Immediately in Foreground
+ Open Full Inbox Immediately in Foreground
@@ -39,6 +39,8 @@
Twin Safe
Every minute
Every hour
+ Every 4 hours
+ Every 8 hours
Once a day
Once a week
diff --git a/apps/browser-extension/options.js b/apps/browser-extension/options.js
index 4f8bc657b..c63bbe51b 100644
--- a/apps/browser-extension/options.js
+++ b/apps/browser-extension/options.js
@@ -9,6 +9,7 @@ function saveOptions(e) {
setTimeout(() => {
status.textContent = '';
}, 1500); // Clear status after 1.5 seconds
+ chrome.runtime.sendMessage({action: "showTrackingPopup"});
});
}
diff --git a/apps/browser-extension/package.json b/apps/browser-extension/package.json
new file mode 100644
index 000000000..29a61829c
--- /dev/null
+++ b/apps/browser-extension/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "fdai-chrome-extension",
+ "version": "1.0.0",
+ "description": "Automatically import your supplements, food, and medications into your Digital Twin Safe.",
+ "main": "index.js",
+ "scripts": {
+ "test": "jest"
+ },
+ "dependencies": {
+ "agentkeepalive": "^4.5.0",
+ "axios": "^0.21.1",
+ "cheerio": "^1.0.0-rc.5"
+ },
+ "devDependencies": {
+ "fetch-h2": "^1.0.0",
+ "jest": "^27.0.6",
+ "jsdom": "^16.6.0",
+ "node-fetch": "^2.6.1",
+ "node-localstorage": "^2.0.1"
+ },
+ "jest": {
+ "setupFiles": [
+ "./tests/setupTests.js"
+ ]
+ }
+}
diff --git a/apps/browser-extension/popup.css b/apps/browser-extension/popup.css
index 146377280..4ef2bb399 100644
--- a/apps/browser-extension/popup.css
+++ b/apps/browser-extension/popup.css
@@ -146,12 +146,13 @@ h1 span:first-child {
}
h1 span:last-child {
position: absolute;
- left: 0;
+ left: 0px;
top: 0;
background-image: linear-gradient(#032d50 25%, #00a1ef 35%, white 50%, #20125f 50%, #8313e7 55%, #ff61af 75%);
-webkit-text-stroke: 0.01em #94a0b9;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
+ text-align: center;
}
h2 {
diff --git a/apps/browser-extension/popup.html b/apps/browser-extension/popup.html
index daba28ca5..6634305f6 100644
--- a/apps/browser-extension/popup.html
+++ b/apps/browser-extension/popup.html
@@ -15,7 +15,7 @@
Twin Safe
- Click to Record Your Diet, Treatments, and Symptoms
+ Record Your Diet, Treatments, and Symptoms
Import Amazon Data
diff --git a/apps/browser-extension/popup.js b/apps/browser-extension/popup.js
index 854d30bf8..4048b8657 100644
--- a/apps/browser-extension/popup.js
+++ b/apps/browser-extension/popup.js
@@ -13,15 +13,28 @@ document.addEventListener('DOMContentLoaded', function() {
});
}
});
- document.getElementById('amazonBtn').addEventListener('click', function() {
- window.open('https://www.amazon.com/gp/css/order-history?ref_=nav_orders_first', '_blank');
- // chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
- // chrome.scripting.executeScript({
- // target: {tabId: tabs[0].id},
- // function: extractAndSaveAmazon
- // });
- // });
+
+document.getElementById('amazonBtn').addEventListener('click', function() {
+ const url = 'https://www.amazon.com/gp/css/order-history';
+
+ chrome.tabs.query({}, function(tabs) {
+ let tabExists = false;
+
+ for (let i = 0; i < tabs.length; i++) {
+ if (tabs[i].url === url) {
+ tabExists = true;
+ chrome.tabs.update(tabs[i].id, {active: true, url: url}, function(tab) {
+ chrome.tabs.reload(tab.id);
+ });
+ break;
+ }
+ }
+
+ if (!tabExists) {
+ window.open(url, '_blank');
+ }
});
+});
});
diff --git a/apps/browser-extension/tests/amazon.html b/apps/browser-extension/tests/amazon.html
new file mode 100644
index 000000000..7366b3cc2
--- /dev/null
+++ b/apps/browser-extension/tests/amazon.html
@@ -0,0 +1,7032 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Your Orders
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Skip to main content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Action is required on one or more of your orders.
+
+
+
+
+
There's a problem displaying your orders right now.
+
+
+
+
+
+
+
Shape the future of Amazon Digital Subscriptions.
+ We have made updates to the Your Orders Page.
Click here to "Opt In" to view the changes and/or provide your feedback. If you spot an issue, please
report the bug here . For critical issues (Sev2+), please use
TT .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Order received
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 1 month
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered March 1
+
+
+
+
+
+
+
+
+ Your package was left near the front door or porch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 3 months
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered February 24
+
+
+
+
+
+
+
+
+ Your package was left near the front door or porch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Return or replace items: Eligible through March 25, 2024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered March 1
+
+
+
+
+
+
+
+
+ Your package was left near the front door or porch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 1 month
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered March 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 1 month
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered March 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 6 months
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered March 2
+
+
+
+
+
+
+
+
+ Package was left inside the residence’s mailbox
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 1 month
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered March 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Auto-delivered: Every 2 months
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered February 24
+
+
+
+
+
+
+
+
+ Your package was left near the front door or porch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Return or replace items: Eligible through March 25, 2024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delivered February 29
+
+
+
+
+
+
+
+
+ Package was left inside the residence’s mailbox
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Return or replace items: Eligible through March 31, 2024
+
+
+
+
+
+
+
+ Auto-delivered: Every 4 months
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Frequently bought with Traditional Medicinals Tea, Organic Nighty Night E...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/browser-extension/tests/extractAndSaveAmazon.test.js b/apps/browser-extension/tests/extractAndSaveAmazon.test.js
new file mode 100644
index 000000000..3b73b1c0a
--- /dev/null
+++ b/apps/browser-extension/tests/extractAndSaveAmazon.test.js
@@ -0,0 +1,35 @@
+const extractAndSaveAmazon = require('../extractAndSaveAmazon');
+const fs = require('fs');
+const path = require('path');
+const jsdom = require("jsdom");
+const { JSDOM } = jsdom;
+
+describe('fetch with custom DNS', () => {
+ it('should use the system DNS', async () => {
+ const response = await fetchWithCustomDns('https://local.quantimo.do');
+ expect(response.ok).toBeTruthy();
+ });
+});
+
+describe('extractAndSaveAmazon function', () => {
+ it('should work correctly', async () => {
+ const html = fs.readFileSync(path.resolve(__dirname, 'amazon.html'), 'utf8');
+ let cleanedHtml = html.replace(/ /gi, '');
+ cleanedHtml = cleanedHtml.replace(/@import url\([^)]+\);/g, '');
+ const dom = new JSDOM(cleanedHtml, {
+ resources: new jsdom.ResourceLoader({
+ fetch(url, options) {
+ if ((options.element && options.element.localName === "link" && options.element.rel === "stylesheet") || url.startsWith('http://') || url.startsWith('https://')) {
+ // Ignore stylesheets and external resources
+ return null;
+ }
+ // Use the default fetch for non-stylesheet resources
+ return jsdom.defaultFetch(url, options);
+ }
+ })
+ });
+ const orderCards = dom.window.document.querySelectorAll('.order-card');
+ const result = await extractAndSaveAmazon(dom.window.document);
+ expect(result).toBe([]);
+ });
+});
diff --git a/apps/browser-extension/tests/setupTests.js b/apps/browser-extension/tests/setupTests.js
new file mode 100644
index 000000000..af5892ca8
--- /dev/null
+++ b/apps/browser-extension/tests/setupTests.js
@@ -0,0 +1,34 @@
+const LocalStorage = require('node-localstorage').LocalStorage;
+global.localStorage = new LocalStorage('./tests/scratch');
+localStorage.clear();
+process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
+
+global.parseDate = function(dateString) {
+ return new Date(dateString);
+}
+
+global.getQuantimodoAccessToken = async function() {
+ return 'demo';
+}
+
+// You might need to install these packages if you're dealing with HTTPS and keep-alive
+// npm install https agentkeepalive
+const https = require('https');
+const { HttpsAgent } = require('agentkeepalive');
+const fetch = require('node-fetch');
+
+const httpsAgent = new https.Agent({
+ rejectUnauthorized: false, // WARNING: This disables SSL/TLS verification.
+});
+
+async function fetchWithInsecureSSL(url, options = {}) {
+ // Add the custom HTTPS agent to the request options
+ options.agent = httpsAgent;
+ return fetch(url, options);
+}
+
+global.fetch = fetchWithInsecureSSL;
+
+// Now you can use fetchWithSystemDns instead of fetch
+
+global.apiOrigin = 'https://local.quantimo.do';
diff --git a/apps/browser-extension/trackingPopup.js b/apps/browser-extension/trackingPopup.js
new file mode 100644
index 000000000..00047c969
--- /dev/null
+++ b/apps/browser-extension/trackingPopup.js
@@ -0,0 +1,331 @@
+/** @namespace window.qmLog */
+var ratingPopupHeight, ratingPopupWidth;
+var qmPopup = {
+ trackingReminderNotification: null
+};
+function setFaceButtonListeners(){
+ qmLog.pushDebug("popup: Setting face button onclick listeners");
+ document.getElementById('buttonMoodDepressed').onclick = onFaceButtonClicked;
+ document.getElementById('buttonMoodSad').onclick = onFaceButtonClicked;
+ document.getElementById('buttonMoodOk').onclick = onFaceButtonClicked;
+ document.getElementById('buttonMoodHappy').onclick = onFaceButtonClicked;
+ document.getElementById('buttonMoodEcstatic').onclick = onFaceButtonClicked;
+ document.getElementById('button1').onclick = onFaceButtonClicked;
+ document.getElementById('button2').onclick = onFaceButtonClicked;
+ document.getElementById('button3').onclick = onFaceButtonClicked;
+ document.getElementById('button4').onclick = onFaceButtonClicked;
+ document.getElementById('button5').onclick = onFaceButtonClicked;
+ //document.getElementById('buttonInbox').onclick = inboxButtonClicked;
+ document.getElementById('question').onclick = inboxButtonClicked;
+}
+function setLastValueButtonListeners(){
+ qmLog.pushDebug("popup: Setting face button listeners");
+ document.getElementById('lastValueButton').onclick = onLastValueButtonClicked;
+ document.getElementById('secondToLastValueButton').onclick = onLastValueButtonClicked;
+ document.getElementById('thirdToLastValueButton').onclick = onLastValueButtonClicked;
+ document.getElementById('snoozeButton').onclick = onLastValueButtonClicked;
+ document.getElementById('skipButton').onclick = onLastValueButtonClicked;
+ document.getElementById('buttonInbox').onclick = inboxButtonClicked;
+}
+function getVariableName(){
+ var variableName = qm.urlHelper.getParam('variableName');
+ if(variableName){
+ qmLog.debug("Got variableName " + variableName + " from url");
+ return variableName;
+ }
+}
+function valenceNegative(){
+ if(!qmPopup.trackingReminderNotification){
+ qmLog.error("qmPopup.trackingReminderNotification not set!");
+ qm.notifications.closePopup();
+ }
+ if(qmPopup.trackingReminderNotification.valence === "negative"){
+ return true;
+ }
+}
+var inboxButtonClicked = function(){
+ window.qmLog.info('inboxButtonClicked');
+ if(typeof OverApps !== "undefined"){
+ window.qmLog.info('Calling OverApps.openApp');
+ //OverApps.openApp();
+ //OverApps.closeWebView();
+ OverApps.closeWebView();
+ OverApps.openApp();
+ }else{
+ window.qmLog.info('OverApps not defined');
+ qm.chrome.windowParams.fullInboxWindowParams.focused = true;
+ qm.chrome.createPopup(qm.chrome.windowParams.fullInboxWindowParams);
+ hidePopupPostNotificationsDeleteLocalAndClosePopup();
+ }
+};
+function hidePopupPostNotificationsDeleteLocalAndClosePopup(){
+ qmLog.pushDebug('popup: hidePopupPostNotificationsDeleteLocalAndClosePopup...');
+ hidePopup();
+ //showLoader();
+ if(qm.notificationsSyncQueue){
+ qm.storage.deleteByPropertyInArray(qm.items.trackingReminderNotifications, 'variableName', qm.notificationsSyncQueue);
+ qm.notifications.postTrackingReminderNotifications(qm.notificationsSyncQueue, qm.notifications.closePopup,
+ 5000); // 300 is too fast
+ }else{
+ qm.notifications.closePopup();
+ }
+}
+var onFaceButtonClicked = function(){
+ var buttonId = this.id;
+ qmLog.pushDebug('popup onFaceButtonClicked: onFaceButtonClicked buttonId ' + buttonId);
+ var ratingValue; // Figure out what rating was selected
+ if(buttonId === "buttonMoodDepressed"){
+ if(valenceNegative()){ ratingValue = 5; }else{ ratingValue = 1; }
+ }else if(buttonId === "buttonMoodSad"){
+ if(valenceNegative()){ ratingValue = 4; }else{ ratingValue = 2; }
+ }else if(buttonId === "buttonMoodOk"){
+ ratingValue = 3;
+ }else if(buttonId === "buttonMoodHappy"){
+ if(valenceNegative()){ratingValue = 2;}else{ratingValue = 4;}
+ }else if(buttonId === "buttonMoodEcstatic"){
+ if(valenceNegative()){ratingValue = 1;}else{ratingValue = 5;}
+ }else if(buttonId === "button1"){
+ ratingValue = 1;
+ }else if(buttonId === "button2"){
+ ratingValue = 2;
+ }else if(buttonId === "button3"){
+ ratingValue = 3;
+ }else if(buttonId === "button4"){
+ ratingValue = 4;
+ }else if(buttonId === "button5"){
+ ratingValue = 5;
+ }else {
+ throw "Please create handler for button id "+ buttonId;
+ }
+ if(!qmPopup.trackingReminderNotification){
+ qmLog.error("No qmPopup.trackingReminderNotification to post or add to queue!");
+ }else{
+ qmLog.pushDebug('popup onFaceButtonClicked: qmPopup.trackingReminderNotification exists. Calling addToSyncQueueAndCloseOrUpdateQuestion..');
+ qmPopup.trackingReminderNotification.modifiedValue = ratingValue;
+ }
+ return addToSyncQueueAndCloseOrUpdateQuestion();
+ // TODO: Figure out how to send in background with chrome.extension.sendMessage(request);
+ //if(typeof chrome !== "undefined"){chrome.extension.sendMessage(request); } // Request our background script to upload it for us
+};
+function addToSyncQueueAndCloseOrUpdateQuestion(){
+ qmLog.pushDebug('popup: addToSyncQueueAndCloseOrUpdateQuestion...');
+ if(!qm.notificationsSyncQueue){
+ qm.notificationsSyncQueue = [];
+ }
+ if(qmPopup.trackingReminderNotification){
+ qm.notificationsSyncQueue.push(qmPopup.trackingReminderNotification);
+ if(qmPopup.trackingReminderNotification.id){
+ qm.notifications.deleteById(qmPopup.trackingReminderNotification.id);
+ }else{
+ qm.notifications.deleteByVariableName(qmPopup.trackingReminderNotification.variableName); // TODO: Why was this commented?
+ }
+ }
+ qmPopup.trackingReminderNotification = qm.notifications.getMostRecentUniqueNotificationNotInSyncQueue();
+ if(!qmPopup.trackingReminderNotification){
+ qmLog.pushDebug('popup addToSyncQueueAndCloseOrUpdateQuestion: getMostRecentUniqueNotificationNotInSyncQueue returned nothing...');
+ }
+ if(qm.notificationsSyncQueue.length > 10){
+ qmLog.pushDebug('popup addToSyncQueueAndCloseOrUpdateQuestion: notificationsSyncQueue.length > 10 so posting and closing popup...');
+ }
+ if(qmPopup.trackingReminderNotification && qm.notificationsSyncQueue.length < 10){
+ qmLog.pushDebug('popup addToSyncQueueAndCloseOrUpdateQuestion: Calling updateQuestion for ' +
+ qmPopup.trackingReminderNotification.variableName + '..');
+ updateQuestion(qmPopup.trackingReminderNotification.variableName);
+ }else{
+ qmLog.pushDebug('popup addToSyncQueueAndCloseOrUpdateQuestion: Calling hidePopupPostNotificationsDeleteLocalAndClosePopup...');
+ hidePopupPostNotificationsDeleteLocalAndClosePopup();
+ }
+}
+var onLastValueButtonClicked = function(){
+ var buttonId = this.id;
+ qmLog.pushDebug('onLastValueButtonClicked buttonId ' + buttonId);
+ if(buttonId === "lastValueButton"){
+ qmPopup.trackingReminderNotification.action = 'track';
+ qmPopup.trackingReminderNotification.modifiedValue = qmPopup.trackingReminderNotification.actionArray[0].modifiedValue;
+ }else if(buttonId === "secondToLastValueButton"){
+ qmPopup.trackingReminderNotification.action = 'track';
+ qmPopup.trackingReminderNotification.modifiedValue = qmPopup.trackingReminderNotification.actionArray[1].modifiedValue;
+ }else if(buttonId === "thirdToLastValueButton"){
+ qmPopup.trackingReminderNotification.action = 'track';
+ qmPopup.trackingReminderNotification.modifiedValue = qmPopup.trackingReminderNotification.actionArray[2].modifiedValue;
+ }else if(buttonId === "snoozeButton"){
+ qmPopup.trackingReminderNotification.action = 'snooze';
+ }else if(buttonId === "skipButton"){
+ qmPopup.trackingReminderNotification.action = 'skip';
+ }
+ addToSyncQueueAndCloseOrUpdateQuestion();
+};
+function hidePopup(){
+ window.qmLog.info('hidePopup: resizing to ' + ratingPopupWidth + " x 0 ");
+ window.resizeTo(ratingPopupWidth, 0);
+}
+function showLoader(){
+ var loader = document.getElementById("loader");
+ loader.style.display = "block";
+ numericRatingButtons().style.display = faceRatingButtons().style.display = question().style.display = "none";
+}
+function unHidePopup(){
+ window.qmLog.info('unHidePopup: resizing to ' + ratingPopupWidth + " x " + ratingPopupHeight);
+ window.resizeTo(ratingPopupWidth, ratingPopupHeight);
+}
+// function hideLoader() {
+// var faceRatingButtons = faceRatingButtons();
+// var loader = document.getElementById("loader");
+// loader.className = "invisible";
+// loader.style.display = "none";
+// faceRatingButtons.style.display = "block";
+// faceRatingButtons.className = "visible";
+// }
+function updateQuestion(variableName){
+ qmLog.pushDebug("popup: updateQuestion...");
+ if(!variableName || typeof variableName !== "string"){
+ qmLog.pushDebug("popup: variableName is ..." + JSON.stringify(variableName));
+ if(!qmPopup.trackingReminderNotification){
+ qmLog.pushDebug("popup: no qmPopup.trackingReminderNotification present. Calling getMostRecentUniqueNotificationNotInSyncQueue...");
+ qmPopup.trackingReminderNotification = qm.notifications.getMostRecentUniqueNotificationNotInSyncQueue();
+ if(!qmPopup.trackingReminderNotification){
+ qmLog.pushDebug("popup: getMostRecentUniqueNotificationNotInSyncQueue returned nothing...");
+ qm.notifications.closePopup();
+ return;
+ }
+ }
+ variableName = qmPopup.trackingReminderNotification.variableName;
+ qmLog.pushDebug("popup: qmPopup.trackingReminderNotification.variableName is " + variableName);
+ }
+ var questionText;
+ variableName = qmPopup.trackingReminderNotification.displayName || variableName;
+ if(qmPopup.trackingReminderNotification.unitAbbreviatedName === '/5'){
+ showRatingSection();
+ }else{
+ showLastValuesSection();
+ }
+ if(qmPopup.trackingReminderNotification.question){
+ questionText = qmPopup.trackingReminderNotification.question;
+ }
+ window.qmLog.pushDebug('popup: Updating question to ' + questionText);
+ question().innerHTML = questionText;
+ document.title = questionText;
+ if(qm.platform.isChromeExtension()){
+ qmLog.pushDebug('popup: Setting question display to none ');
+ question().style.display = "none";
+ }else{
+ getInboxButtonElement().style.display = "none";
+ qmLog.pushDebug('NOT setting question display to none because not on Chrome');
+ }
+ unHidePopup();
+ function showLastValuesSection() {
+ function setLastValueButtonProperties(textElement, buttonElement, notificationAction) {
+ if (notificationAction.modifiedValue !== null) {
+ buttonElement.style.display = "none";
+ var size = 30 - notificationAction.shortTitle.length * 12 / 3;
+ buttonElement.style.fontSize = size + "px";
+ textElement.innerHTML = notificationAction.shortTitle;
+ buttonElement.style.display = "inline-block";
+ }
+ else {
+ buttonElement.style.display = "none";
+ }
+ }
+ setLastValueButtonProperties(getLastValueElement(), getLastValueButtonElement(), qmPopup.trackingReminderNotification.actionArray[0]);
+ setLastValueButtonProperties(getSecondToLastValueElement(), getSecondToLastValueButtonElement(), qmPopup.trackingReminderNotification.actionArray[1]);
+ setLastValueButtonProperties(getThirdToLastValueElement(), getThirdToLastValueButtonElement(), qmPopup.trackingReminderNotification.actionArray[2]);
+ numericRatingButtons().style.display = faceRatingButtons().style.display = "none";
+ getLastValueSectionElement().style.display = "block";
+ questionText = "Record " + variableName + " (" + qmPopup.trackingReminderNotification.unitAbbreviatedName + ")";
+ if (qmPopup.trackingReminderNotification.unitAbbreviatedName === 'count') {
+ questionText = "Record " + variableName;
+ }
+ }
+
+ function showRatingSection() {
+ questionText = "How is your " + variableName.toLowerCase() + "?";
+ if(variableName.toLowerCase() === 'meditation'){
+ qmLog.error("Asking " + questionText + "!", "qmPopup.trackingReminderNotification is: " + JSON.stringify(qmPopup.trackingReminderNotification),
+ {trackingReminderNotification: qmPopup.trackingReminderNotification});
+ }
+ if (qmPopup.trackingReminderNotification.valence === "positive" ||
+ qmPopup.trackingReminderNotification.valence === "negative") {
+ numericRatingButtons().style.display = "none";
+ faceRatingButtons().style.display = "block";
+ } else {
+ faceRatingButtons().style.display = "none";
+ numericRatingButtons().style.display = "block";
+ }
+ getLastValueSectionElement().style.display = "none";
+ }
+}
+function question(){
+ return document.getElementById("question");
+}
+function getInboxButtonElement(){
+ return document.getElementById("buttonInbox");
+}
+function getLastValueElement(){
+ return document.getElementById("lastValue");
+}
+function getSecondToLastValueElement(){
+ return document.getElementById("secondToLastValue");
+}
+function getThirdToLastValueElement(){
+ return document.getElementById("thirdToLastValue");
+}
+function getLastValueButtonElement(){
+ return document.getElementById("lastValueButton");
+}
+function getSecondToLastValueButtonElement(){
+ return document.getElementById("secondToLastValueButton");
+}
+function getThirdToLastValueButtonElement(){
+ return document.getElementById("thirdToLastValueButton");
+}
+function getLastValueSectionElement(){
+ return document.getElementById("lastValueSection");
+}
+function faceRatingButtons(){
+ return document.getElementById("faceRatingButtons");
+}
+function numericRatingButtons(){
+ return document.getElementById("numericRatingButtons");
+}
+document.addEventListener('DOMContentLoaded', function(){
+ qmLog.pushDebug("popup addEventListener: popup.js DOMContentLoaded");
+ var wDiff = (380 - window.innerWidth);
+ var hDiff = (70 - window.innerHeight);
+ window.resizeBy(wDiff, hDiff);
+ ratingPopupHeight = window.innerHeight;
+ ratingPopupWidth = window.innerWidth;
+ if(qm.urlHelper.getParam("trackingReminderNotificationId")){
+ qmPopup.trackingReminderNotification = {
+ action: 'track',
+ trackingReminderNotificationId: qm.urlHelper.getParam('trackingReminderNotificationId'),
+ variableName: qm.urlHelper.getParam("variableName"),
+ valence: qm.urlHelper.getParam("valence"),
+ unitAbbreviatedName: '/5'
+ };
+ }else{
+ qmLog.pushDebug("popup addEventListener: calling getMostRecentUniqueNotificationNotInSyncQueue...");
+ qmPopup.trackingReminderNotification = qm.notifications.getMostRecentUniqueNotificationNotInSyncQueue();
+ }
+ if(qmPopup.trackingReminderNotification){
+ qmLog.pushDebug("popup addEventListener: calling updateQuestion...");
+ updateQuestion(qmPopup.trackingReminderNotification.variableName);
+ }else{
+ qmLog.pushDebug("popup addEventListener: Calling hidePopup...");
+ hidePopup();
+ qm.notifications.syncNotifications(updateQuestion, qm.notifications.closePopup);
+ }
+ qmLog.pushDebug("popup addEventListener: calling setFaceButtonListeners...");
+ setFaceButtonListeners();
+ qmLog.pushDebug("popup addEventListener: calling setLastValueButtonListeners...");
+ setLastValueButtonListeners();
+ qmLog.pushDebug("popup addEventListener: " + qm.notifications.getNumberInGlobalsOrLocalStorage() +
+ " notifications in InGlobalsOrLocalStorage on popup DOMContentLoaded");
+ qmLog.pushDebug("popup addEventListener: calling qm.notifications.refreshIfEmptyOrStale...");
+ qm.notifications.refreshIfEmptyOrStale();
+ qmLog.pushDebug("popup addEventListener: calling getUserFromLocalStorage...");
+ qm.userHelper.getUserFromLocalStorageOrApi().then(function(user){
+ qmLog.setupBugsnag(user);
+ });
+});
+qmLog.pushDebug("popup addEventListener: calling setupBugsnag...");
+qmLog.setupBugsnag();
diff --git a/apps/browser-extension/tracking_popup.html b/apps/browser-extension/tracking_popup.html
new file mode 100644
index 000000000..a9d5a25c0
--- /dev/null
+++ b/apps/browser-extension/tracking_popup.html
@@ -0,0 +1,225 @@
+
+
+
+ How are you?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ How are you?
+
+
+
+
+
+ How are you?
+
+
+ How are you?
+
+
+ How are you?
+
+
+ z z z
+
+ X
+
+
+ ?
+
+
+
+
+
+
+
+
+
diff --git a/apps/browser-extension/yarn.lock b/apps/browser-extension/yarn.lock
new file mode 100644
index 000000000..569b67c13
--- /dev/null
+++ b/apps/browser-extension/yarn.lock
@@ -0,0 +1,2827 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
+ dependencies:
+ "@babel/highlight" "^7.23.4"
+ chalk "^2.4.2"
+
+"@babel/compat-data@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
+ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
+
+"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
+ integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.24.0"
+ "@babel/parser" "^7.24.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.23.6", "@babel/generator@^7.7.2":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
+ integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
+ dependencies:
+ "@babel/types" "^7.23.6"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
+
+"@babel/helper-compilation-targets@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
+ integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-validator-option" "^7.23.5"
+ browserslist "^4.22.2"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-environment-visitor@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+ integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+ integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+ dependencies:
+ "@babel/types" "^7.22.15"
+
+"@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
+ integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
+
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/helper-validator-option@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
+ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+
+"@babel/helpers@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
+ integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
+ dependencies:
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.8.3":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f"
+ integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/traverse@^7.24.0", "@babel/traverse@^7.7.2":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.3.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jest/console@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
+ integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
+ slash "^3.0.0"
+
+"@jest/core@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
+ integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/reporters" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-changed-files "^27.5.1"
+ jest-config "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-resolve-dependencies "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ jest-watcher "^27.5.1"
+ micromatch "^4.0.4"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
+ integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==
+ dependencies:
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+
+"@jest/fake-timers@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
+ integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@sinonjs/fake-timers" "^8.0.1"
+ "@types/node" "*"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+
+"@jest/globals@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
+ integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ expect "^27.5.1"
+
+"@jest/reporters@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
+ integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.2.9"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^5.1.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.1.3"
+ jest-haste-map "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ slash "^3.0.0"
+ source-map "^0.6.0"
+ string-length "^4.0.1"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^8.1.0"
+
+"@jest/source-map@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
+ integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.9"
+ source-map "^0.6.0"
+
+"@jest/test-result@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
+ integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
+ integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-runtime "^27.5.1"
+
+"@jest/transform@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
+ integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^27.5.1"
+ babel-plugin-istanbul "^6.1.1"
+ chalk "^4.0.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-util "^27.5.1"
+ micromatch "^4.0.4"
+ pirates "^4.0.4"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
+"@jest/types@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
+ integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^16.0.0"
+ chalk "^4.0.0"
+
+"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@sinonjs/commons@^1.7.0":
+ version "1.8.6"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9"
+ integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^8.0.1":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7"
+ integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==
+ dependencies:
+ "@sinonjs/commons" "^1.7.0"
+
+"@tootallnate/once@1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
+ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.8"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6":
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd"
+ integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
+"@types/graceful-fs@^4.1.2":
+ version "4.1.9"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
+ integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
+ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+
+"@types/istanbul-lib-report@*":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf"
+ integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54"
+ integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/node@*":
+ version "20.11.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f"
+ integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/prettier@^2.1.5":
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
+ integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
+
+"@types/stack-utils@^2.0.0":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
+ integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
+
+"@types/tough-cookie@2.x":
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.11.tgz#1c5431f11b274d1c768dc38a86006c58c68fa813"
+ integrity sha512-xtFyCxnfpItBS6wRt6M+be0PzNEP6J/CqTR0mHCf/OzIbbOOh6DQ1MjiyzDrzDctzgYSmRcHH3PBvTO2hYovLg==
+
+"@types/yargs-parser@*":
+ version "21.0.3"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
+ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+
+"@types/yargs@^16.0.0":
+ version "16.0.9"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e"
+ integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+abab@^2.0.3, abab@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+ integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
+acorn-globals@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+
+acorn-walk@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^7.1.1:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@^8.2.4:
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+agentkeepalive@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
+ integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
+ dependencies:
+ humanize-ms "^1.2.1"
+
+already@1.x:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/already/-/already-1.13.2.tgz#1441d2ae975f4a9b5ac2f53b4fa062af1d46b77d"
+ integrity sha512-GU0ZqMhSetZeDlivqttmAmd2UpCbPSucziaDJcCN2NdOTedzaJTqZZwHHuGJvp0Us1wzQG0vSqFqax1SqgH8Aw==
+ dependencies:
+ throat "^5.0.0"
+
+ansi-escapes@^4.2.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+anymatch@^3.0.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+axios@^0.21.1:
+ version "0.21.4"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
+ integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
+ dependencies:
+ follow-redirects "^1.14.0"
+
+babel-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
+ integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==
+ dependencies:
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__core" "^7.1.14"
+ babel-plugin-istanbul "^6.1.1"
+ babel-preset-jest "^27.5.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ slash "^3.0.0"
+
+babel-plugin-istanbul@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
+ integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^5.0.4"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
+ integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.0.0"
+ "@types/babel__traverse" "^7.0.6"
+
+babel-preset-current-node-syntax@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
+ integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-top-level-await" "^7.8.3"
+
+babel-preset-jest@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
+ integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==
+ dependencies:
+ babel-plugin-jest-hoist "^27.5.1"
+ babel-preset-current-node-syntax "^1.0.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+boolbase@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
+browserslist@^4.22.2:
+ version "4.23.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ dependencies:
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+callguard@1.x:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/callguard/-/callguard-1.2.2.tgz#efe95e3ce0e9ec734e0177d244236098ebc1e880"
+ integrity sha512-mnZSq7LVdYpMBPO+ciQ2seO7kYkenAKAJsvHGmbPjTk7/rsR4HfboAIoxQYq4g5s3M5L9T7jASWrk6Lz+1aH8Q==
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelcase@^6.2.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-lite@^1.0.30001587:
+ version "1.0.30001594"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz#bea552414cd52c2d0c985ed9206314a696e685f5"
+ integrity sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
+cheerio-select@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
+ integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
+ dependencies:
+ boolbase "^1.0.0"
+ css-select "^5.1.0"
+ css-what "^6.1.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+
+cheerio@^1.0.0-rc.5:
+ version "1.0.0-rc.12"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
+ integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
+ dependencies:
+ cheerio-select "^2.1.0"
+ dom-serializer "^2.0.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ htmlparser2 "^8.0.1"
+ parse5 "^7.0.0"
+ parse5-htmlparser2-tree-adapter "^7.0.0"
+
+ci-info@^3.2.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+
+cjs-module-lexer@^1.0.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107"
+ integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
+
+collect-v8-coverage@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9"
+ integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+convert-source-map@^1.4.0, convert-source-map@^1.6.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+ integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+cross-spawn@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+css-select@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
+ integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^6.1.0"
+ domhandler "^5.0.2"
+ domutils "^3.0.1"
+ nth-check "^2.0.1"
+
+css-what@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
+ integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+
+cssom@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
+data-urls@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ dependencies:
+ abab "^2.0.3"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+decimal.js@^10.2.1:
+ version "10.4.3"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
+
+deepmerge@^4.2.2:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
+ integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+diff-sequences@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
+ integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
+
+dom-serializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
+ integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.2"
+ entities "^4.2.0"
+
+domelementtype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+ integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domexception@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ dependencies:
+ webidl-conversions "^5.0.0"
+
+domhandler@^5.0.2, domhandler@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
+ integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
+ dependencies:
+ domelementtype "^2.3.0"
+
+domutils@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
+ dependencies:
+ dom-serializer "^2.0.0"
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+
+electron-to-chromium@^1.4.668:
+ version "1.4.694"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.694.tgz#33dfb64406066a0d2f1e562be816276567bd98a9"
+ integrity sha512-kM3SwvGTYpBFJSc8jm4IYVMIOzDmAGd/Ry96O9elRiM6iEwHKNKhtXyFGzpfMMIGZD84W4/hyaULlMmNVvLQlQ==
+
+emittery@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
+ integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+entities@^4.2.0, entities@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escodegen@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
+ integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+esprima@^4.0.0, esprima@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+
+expect@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
+ integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fb-watchman@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
+ integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==
+ dependencies:
+ bser "2.1.1"
+
+fetch-h2@^1.0.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/fetch-h2/-/fetch-h2-1.2.3.tgz#6fdfa41385432895e8486262e98e5da417af4b7f"
+ integrity sha512-zQ46gbz1g49JCKX2fsZqMVllmNp2YwFWVH3OW29l0kdZ/wEfL5lCwqLeUS+60r2FeAoMVfebV0Y4HzJPqRxTRg==
+ dependencies:
+ "@types/tough-cookie" "2.x"
+ already "1.x"
+ callguard "1.x"
+ get-stream "4.x"
+ through2 "3.x"
+ to-arraybuffer "1.x"
+ tough-cookie "3.x"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+follow-redirects@^1.14.0:
+ version "1.15.5"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020"
+ integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==
+
+form-data@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+ integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@^2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
+get-stream@4.x:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+graceful-fs@^4.1.11, graceful-fs@^4.2.9:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+hasown@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa"
+ integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==
+ dependencies:
+ function-bind "^1.1.2"
+
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ dependencies:
+ whatwg-encoding "^1.0.5"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+htmlparser2@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+ integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
+ dependencies:
+ domelementtype "^2.3.0"
+ domhandler "^5.0.3"
+ domutils "^3.0.1"
+ entities "^4.4.0"
+
+http-proxy-agent@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
+ integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
+ dependencies:
+ "@tootallnate/once" "1"
+ agent-base "6"
+ debug "4"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
+humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+ dependencies:
+ ms "^2.0.0"
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+import-local@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-core-module@^2.13.0:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-potential-custom-element-name@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+ integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
+is-typedarray@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
+ integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
+
+istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d"
+ integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==
+ dependencies:
+ "@babel/core" "^7.12.3"
+ "@babel/parser" "^7.14.7"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^6.3.0"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d"
+ integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^4.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
+ integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.1.3:
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
+ integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+jest-changed-files@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
+ integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ execa "^5.0.0"
+ throat "^6.0.1"
+
+jest-circus@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
+ integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ dedent "^0.7.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+ throat "^6.0.1"
+
+jest-cli@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
+ integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ import-local "^3.0.2"
+ jest-config "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ prompts "^2.0.1"
+ yargs "^16.2.0"
+
+jest-config@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
+ integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
+ dependencies:
+ "@babel/core" "^7.8.0"
+ "@jest/test-sequencer" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ babel-jest "^27.5.1"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.1"
+ graceful-fs "^4.2.9"
+ jest-circus "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-jasmine2 "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ micromatch "^4.0.4"
+ parse-json "^5.2.0"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ strip-json-comments "^3.1.1"
+
+jest-diff@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
+ integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-docblock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
+ integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
+ integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ jest-get-type "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-environment-jsdom@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
+ integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+ jsdom "^16.6.0"
+
+jest-environment-node@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
+ integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ jest-mock "^27.5.1"
+ jest-util "^27.5.1"
+
+jest-get-type@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
+ integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
+
+jest-haste-map@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
+ integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/graceful-fs" "^4.1.2"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.9"
+ jest-regex-util "^27.5.1"
+ jest-serializer "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ micromatch "^4.0.4"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^2.3.2"
+
+jest-jasmine2@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
+ integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ expect "^27.5.1"
+ is-generator-fn "^2.0.0"
+ jest-each "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ pretty-format "^27.5.1"
+ throat "^6.0.1"
+
+jest-leak-detector@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
+ integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==
+ dependencies:
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-matcher-utils@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
+ integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ pretty-format "^27.5.1"
+
+jest-message-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
+ integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==
+ dependencies:
+ "@babel/code-frame" "^7.12.13"
+ "@jest/types" "^27.5.1"
+ "@types/stack-utils" "^2.0.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ micromatch "^4.0.4"
+ pretty-format "^27.5.1"
+ slash "^3.0.0"
+ stack-utils "^2.0.3"
+
+jest-mock@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
+ integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+
+jest-pnp-resolver@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e"
+ integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==
+
+jest-regex-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
+ integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
+
+jest-resolve-dependencies@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
+ integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-snapshot "^27.5.1"
+
+jest-resolve@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
+ integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ resolve "^1.20.0"
+ resolve.exports "^1.1.0"
+ slash "^3.0.0"
+
+jest-runner@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
+ integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/environment" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ graceful-fs "^4.2.9"
+ jest-docblock "^27.5.1"
+ jest-environment-jsdom "^27.5.1"
+ jest-environment-node "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-leak-detector "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-util "^27.5.1"
+ jest-worker "^27.5.1"
+ source-map-support "^0.5.6"
+ throat "^6.0.1"
+
+jest-runtime@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
+ integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==
+ dependencies:
+ "@jest/environment" "^27.5.1"
+ "@jest/fake-timers" "^27.5.1"
+ "@jest/globals" "^27.5.1"
+ "@jest/source-map" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ cjs-module-lexer "^1.0.0"
+ collect-v8-coverage "^1.0.0"
+ execa "^5.0.0"
+ glob "^7.1.3"
+ graceful-fs "^4.2.9"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-mock "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+
+jest-serializer@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
+ integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==
+ dependencies:
+ "@types/node" "*"
+ graceful-fs "^4.2.9"
+
+jest-snapshot@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
+ integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==
+ dependencies:
+ "@babel/core" "^7.7.2"
+ "@babel/generator" "^7.7.2"
+ "@babel/plugin-syntax-typescript" "^7.7.2"
+ "@babel/traverse" "^7.7.2"
+ "@babel/types" "^7.0.0"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/babel__traverse" "^7.0.4"
+ "@types/prettier" "^2.1.5"
+ babel-preset-current-node-syntax "^1.0.0"
+ chalk "^4.0.0"
+ expect "^27.5.1"
+ graceful-fs "^4.2.9"
+ jest-diff "^27.5.1"
+ jest-get-type "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-matcher-utils "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-util "^27.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^27.5.1"
+ semver "^7.3.2"
+
+jest-util@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
+ integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ ci-info "^3.2.0"
+ graceful-fs "^4.2.9"
+ picomatch "^2.2.3"
+
+jest-validate@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
+ integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ camelcase "^6.2.0"
+ chalk "^4.0.0"
+ jest-get-type "^27.5.1"
+ leven "^3.1.0"
+ pretty-format "^27.5.1"
+
+jest-watcher@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
+ integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ jest-util "^27.5.1"
+ string-length "^4.0.1"
+
+jest-worker@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
+ integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^8.0.0"
+
+jest@^27.0.6:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
+ integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ import-local "^3.0.2"
+ jest-cli "^27.5.1"
+
+js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1:
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsdom@^16.6.0:
+ version "16.7.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
+ integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==
+ dependencies:
+ abab "^2.0.5"
+ acorn "^8.2.4"
+ acorn-globals "^6.0.0"
+ cssom "^0.4.4"
+ cssstyle "^2.3.0"
+ data-urls "^2.0.0"
+ decimal.js "^10.2.1"
+ domexception "^2.0.1"
+ escodegen "^2.0.0"
+ form-data "^3.0.0"
+ html-encoding-sniffer "^2.0.1"
+ http-proxy-agent "^4.0.1"
+ https-proxy-agent "^5.0.0"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.0"
+ parse5 "6.0.1"
+ saxes "^5.0.1"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.0.0"
+ w3c-hr-time "^1.0.2"
+ w3c-xmlserializer "^2.0.0"
+ webidl-conversions "^6.1.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.5.0"
+ ws "^7.4.6"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash@^4.7.0:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+make-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e"
+ integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+ dependencies:
+ semver "^7.5.3"
+
+makeerror@1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
+ integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
+ dependencies:
+ tmpl "1.0.5"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimatch@^3.0.4, minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+node-fetch@^2.6.1:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+ integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+ dependencies:
+ whatwg-url "^5.0.0"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+
+node-localstorage@^2.0.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-localstorage/-/node-localstorage-2.2.1.tgz#869723550a4883e426cb391d2df0b563a51c7c1c"
+ integrity sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==
+ dependencies:
+ write-file-atomic "^1.1.4"
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
+nth-check@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
+nwsapi@^2.2.0:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
+ integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse5-htmlparser2-tree-adapter@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
+ integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
+ dependencies:
+ domhandler "^5.0.2"
+ parse5 "^7.0.0"
+
+parse5@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+ integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+parse5@^7.0.0:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+ integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ dependencies:
+ entities "^4.4.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pirates@^4.0.4:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+pretty-format@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
+ integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
+ dependencies:
+ ansi-regex "^5.0.1"
+ ansi-styles "^5.0.0"
+ react-is "^17.0.1"
+
+prompts@^2.0.1:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+psl@^1.1.28, psl@^1.1.33:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+punycode@^2.1.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+querystringify@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
+react-is@^17.0.1:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+ integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+
+"readable-stream@2 || 3":
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve.exports@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999"
+ integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==
+
+resolve@^1.20.0:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+rimraf@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+saxes@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ dependencies:
+ xmlchars "^2.2.0"
+
+semver@^6.3.0, semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.2, semver@^7.5.3:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.2, signal-exit@^3.0.3:
+ version "3.0.7"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+ integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==
+
+source-map-support@^0.5.6:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.7.3:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
+ integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+stack-utils@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
+ integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
+string-length@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
+ integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.0.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-hyperlinks@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624"
+ integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
+throat@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
+ integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+
+throat@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe"
+ integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==
+
+through2@3.x:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
+ integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "2 || 3"
+
+tmpl@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
+ integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+
+to-arraybuffer@1.x:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+tough-cookie@3.x:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
+ integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
+ dependencies:
+ ip-regex "^2.1.0"
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@^4.0.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
+tr46@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
+ integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
+ dependencies:
+ punycode "^2.1.1"
+
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+type-detect@4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+universalify@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+ integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+url-parse@^1.5.3:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+ integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+util-deprecate@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+v8-to-istanbul@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
+ integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
+
+w3c-hr-time@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ dependencies:
+ xml-name-validator "^3.0.0"
+
+walker@^1.0.7:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
+ integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
+ dependencies:
+ makeerror "1.0.12"
+
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+webidl-conversions@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
+whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+whatwg-url@^8.0.0, whatwg-url@^8.5.0:
+ version "8.7.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
+ integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==
+ dependencies:
+ lodash "^4.7.0"
+ tr46 "^2.1.0"
+ webidl-conversions "^6.1.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+write-file-atomic@^1.1.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+ integrity sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
+ws@^7.4.6:
+ version "7.5.9"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+ integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
diff --git a/apps/chat-widget/index.html b/apps/chat-widget/index.html
new file mode 100644
index 000000000..8475bfc69
--- /dev/null
+++ b/apps/chat-widget/index.html
@@ -0,0 +1,91 @@
+
+
+
+ Chat Window Iframe Example
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/dfda-1/public/app/public/data/slides-v1.js b/apps/dfda-1/public/app/public/data/slides-v1.js
index 8aeaf925c..24254c424 100644
--- a/apps/dfda-1/public/app/public/data/slides-v1.js
+++ b/apps/dfda-1/public/app/public/data/slides-v1.js
@@ -9,30 +9,35 @@ const slides = [
"I’ve been programmed to collect and analyze everyone's food and drug intake and symptoms to determine the personalized safety and efficacy of every food and drug in the world!",
continuousAudio: "sound/air-of-another-planet-full.mp3",
continuousAudioVolume: 0.1,
+ animation: () => {
+ simulatePopups(35); // Start the simulation with 5 popups
+ removeAllPopupsAfterDelay(5); // Remove all popups after 10 seconds}
+ },
+ cleanup: removeAllPopupAds,
},
{
title: "2 Billion People SUFFER from 7000 Diseases",
- robotSpeech: "Two billion people suffer from chronic diseases like depression, fibromyalgia, Crone's disease,and multiple sclerosis, There are over 7000 diseases that we still don’t have cures for.",
+ robotSpeech: "Two billion people suffer from chronic diseases like depression, fibromyalgia, Crone's disease, and multiple sclerosis. There are over 7000 diseases that we still don’t have cures for.",
continuousAudio: "sound/air-of-another-planet-full.mp3",
continuousAudioVolume: 0.1,
},
{
title: null,
img: "img/slides/studied-molecules-chart-no-background.png",
- robotSpeech: "The good news is that there could be billions of cures we don’t even know about yet, there are over 166 billion possible medicinal molecules, and we’ve only tested 0.00001% so far",
+ robotSpeech: "The good news is that there could be billions of cures we don’t even know about yet. There are over 166 billion possible medicinal molecules, and we’ve only tested 0.00001% so far.",
continuousAudio: "sound/air-of-another-planet-full.mp3",
continuousAudioVolume: 0.1,
},
{
title: null,
img: "img/slides/slow-research.png",
- robotSpeech: "The bad news is that we only approve around 30 drugs a year so, at best, it would take over 350 years to find cures at this rate, So you’ll be long dead by then.",
+ robotSpeech: "The bad news is that we only approve around 30 drugs a year. It would take over 350 years to find cures at this rate. So you’ll be long dead by then.",
continuousAudio: "sound/air-of-another-planet-full.mp3",
continuousAudioVolume: 0.1,
},
{
img: "img/slides/chemicals-in-our-diet.png",
- robotSpeech: "Lots of these diseases are caused or worsened by chemicals in your food, but we don’t really know which ones, We only have long-term toxicology data on 2 of the over 7000 preservatives, flavorings, emulsifiers, sweeteners, pesticides, contaminants, and herbicides in your diet.",
+ robotSpeech: "Lots of these diseases are caused or worsened by chemicals in your food, but we don’t really know which ones. We only have long-term toxicology data on 2 of the over 7000 preservatives, flavorings, emulsifiers, sweeteners, pesticides, contaminants, and herbicides in your diet.",
},
{
img: "img/slides/correlates-of-disease-incidence-labeled.png",
@@ -56,19 +61,19 @@ const slides = [
},
{
img: "img/slides/exclusion.png",
- robotSpeech: "They exclude people taking other medications, They exclude people who use drugs or alcohol, They exclude people with other health conditions",
+ robotSpeech: "They exclude people taking other medications, They exclude people who use drugs or alcohol. They exclude people with other health conditions",
},
{
img: "img/trial-exclusion-pie-chart.png",
- robotSpeech: "So, the results of the trials only apply to a weird subset of patients, They don't really apply to most people with depression, this is why antidepressents almost never work as well in the real world as they do in trials",
+ robotSpeech: "So, the results of the trials only apply to a weird subset of patients, They don't really apply to most people with depression. This is why antidepressants almost never work as well in the real world as they do in trials.",
},
{
img: "img/slides/small-trials.png",
- robotSpeech: "Clinical trials are also very small, so they don’t have enough statistical power to detect the effects of drugs on rare side effects or subgroups of people",
+ robotSpeech: "Clinical trials are also very small. So they don’t have enough statistical power to detect the effects of drugs on rare side effects or subgroups of people.",
},
{
title: "Clinical Trials Don't Detect Long-Term Effects",
- robotSpeech: "Since clinical trials only last a few months, they don’t detect the long-term effects of drugs, like if they cause cancer, dementia or heart disease, so the benefits of many drugs may be completely outweighed by the long-term negative side effects, but we don't have enough data to know",
+ robotSpeech: "Since clinical trials only last a few months, they don’t detect the long-term effects of drugs, like if they cause cancer, dementia or heart disease, so the benefits of many drugs may be completely outweighed by the long-term negative side effects, but we don't have enough data to know.",
},
{
title: "What's the solution?",
@@ -112,8 +117,8 @@ const slides = [
cleanup: removeAllPopupAds,
},
{
- img: "video/FDAI-github.gif",
- robotSpeech: "So we’re making free and open source apps, reusable software libraries, and autonomous eh eye agents that can use your browser to help you get all your data and analyze it for you!",
+ img: "video/fdai-github.gif",
+ robotSpeech: "So we’re making free and open source apps, reusable software libraries, and autonomous AI agents that can use your browser to help you get all your data and analyze it for you!",
},
{
title: null,
@@ -123,7 +128,7 @@ const slides = [
},
{
title: null,
- video: "video/reminder-inbox.mp4",
+ video: "video/reminder-inbox.gif",
robotSpeech: "You can also schedule reminders to record symptoms, treatments, or anything else manually in the Reminder Inbox.",
},
{
@@ -140,20 +145,19 @@ const slides = [
},
{
img: "img/slides/symptom-factors.png",
- robotSpeech: "But, as any obnoxious college graduate will tell you, correlation does not necessarily imply causation, Just because you took a drug and got better it doesn’t mean that’s really why your symptoms went away, " +
- "Even with randomized controlled trials hundreds of other things are changing in your life and diet",
+ robotSpeech: "But, as any obnoxious college graduate will tell you, correlation does not necessarily imply causation. Just because you took a drug and got better it doesn’t mean that’s really why your symptoms went away. Even in randomized controlled trials hundreds of other things are changing in your life and diet.",
},
{
img: "img/slides/robot-chad.png",
- robotSpeech: "Your puny human brains haven’t evolved since the time of the cavemen, They can only hold seven numbers in working memory at a time, My superior robot brain can hold hundreds of numbers, even really big numbers!",
+ robotSpeech: "Your puny human brains haven’t evolved since the time of the cavemen, They can only hold seven numbers in working memory at a time. My superior robot brain can hold hundreds of numbers, even really big numbers!",
},
{
img: "img/slides/causal-inference-2.png",
- robotSpeech: "So I'm able to apply Hill’s 6 Criteria for Causality to try to infer if something causes a symptom to worsen or improve instead of just seeing what correlates with the change, One way I do it is by applying pharmacokinetic modeling and onset delays and durations of action",
+ robotSpeech: "So I'm able to apply Hill’s 6 Criteria for Causality to try to infer if something causes a symptom to worsen or improve instead of just seeing what correlates with the change. One way I do it is by applying pharmacokinetic modeling and onset delays and durations of action.",
},
{
img: "img/screenshots/gluten-study.png",
- robotSpeech: "For instance, when gluten-sensitive people eat delicious gluten, it usually takes about a 2-day onset delay before they start having symptoms, Then, when they stop eating it, there’s usually a 10-day duration of action before their gut heals and their symptoms improve, high-resolution pharmacokinetic modeling from observational data has never been possible since we've never been able to collect enough data before",
+ robotSpeech: "For instance, when gluten-sensitive people eat delicious gluten, it usually takes about a 2-day onset delay before they start having symptoms. Then, when they stop eating it, there’s usually a 10-day duration of action before their gut heals and their symptoms improve. High-resolution pharmacokinetic modeling from observational data has never been possible since we've never been able to collect enough data before.",
},
{
img: "video/study.gif",
@@ -165,12 +169,12 @@ const slides = [
},
{
img: "img/slides/onset-delay.png",
- robotSpeech: "Here, I apply forward and reverse lagging of the mood and exercise data to try to determine if that is just a coincidence or causal, The result suggests a causal relationship based on the temporal precedence of the physical activity"
+ robotSpeech: "Here, I apply forward and reverse lagging of the mood and exercise data to try to determine if that is just a coincidence or causal. The result suggests a causal relationship based on the temporal precedence of the physical activity."
},
{
img: "img/slides/duration-of-action.png",
robotSpeech:
- "I also compare the outcome over various durations following the exposure to see if there is a long-term cumulative effect or if it's just a short-term acute effect, The long-term effects are more valuable because the acute effect is probably obvious to you already, This analysis suggests that the mood benefits of regular exercise may continue to accumulate of at least a month of above average exercise",
+ "I also compare the outcome over various durations following the exposure to see if there is a long-term cumulative effect or if it's just a short-term acute effect. The long-term effects are more valuable because the acute effect is probably obvious to you already. This analysis suggests that the mood benefits of regular exercise may continue to accumulate of at least a month of above average exercise.",
},
{
img: "video/root-cause-analysis-4x.gif",
@@ -187,11 +191,11 @@ const slides = [
{
//title: "Clinipedia",
img: "video/clinipedia.gif",
- robotSpeech: "At Clinipedia, the Wikipedia of Clinical research, I anonymized and aggregated this data to create mega-studies listing the likely effects of thousands of foods and drugs",
+ robotSpeech: "At Clinipedia, the Wikipedia of Clinical research, I anonymized and aggregated this data to create mega-studies listing the likely effects of thousands of foods and drugs.",
},
{
title: "☹️",
- robotSpeech: "Say you suffer from constant inflammatory pain such that your very existence is being mercilessly torn asunder by an incessant relentless agony that knows no bounds besieging every moment of your waking life with its cruel unyielding torment",
+ robotSpeech: "Say you suffer from constant inflammatory pain such that your very existence is being mercilessly torn asunder by an incessant relentless agony that knows no bounds besieging every moment of your waking life with its cruel unyielding torment.",
},
{
img: "video/clinipedia-inflammatory.gif",
@@ -216,17 +220,17 @@ const slides = [
},
{
img: "video/trial-failed-recruitment.gif",
- robotSpeech: "Over 80% of clinical trials fail to recruit enough participants, yet less than 1% of people with chronic diseases participate, So everyone who's still suffering from a chronic disease needs a nice robot like me to find them the most promising experimental new treatment and make it effortless to join and collect data",
+ robotSpeech: "Over 80% of clinical trials fail to recruit enough participants. Yet less than 1% of people with chronic diseases participate. So everyone who's still suffering from a chronic disease needs a nice robot like me to find them the most promising experimental new treatment and make it effortless to join and collect data.",
},
{
//title: "Automating Full Clinical Trial Participation ➡️ 5X More Cures in the Same Time",
img: "img/slides/fast-research.png",
- robotSpeech: "If we could automate full clinical trial participation and make it easy for everyone to participate, we could make 50 years of medical progress in 10 years",
+ robotSpeech: "If we could automate full clinical trial participation and make it easy for everyone to participate, we could make 50 years of medical progress in 10 years.",
},
{
showTriangle: false,
title: "I'm kind of an idiot. ☹️",
- robotSpeech: "I'm sill kind of an idiot, but I want to be a super-intelligent eh eye assistant that could realize the personalized preventative and precision medicine of the future and automate clinical research",
+ robotSpeech: "I'm sill kind of an idiot, but I want to be a super-intelligent AI assistant that could realize the personalized preventative and precision medicine of the future and automate clinical research",
},
{
title: "My Dream",
@@ -366,7 +370,7 @@ const slides = [
},
{
showHuman: true,
- humanrobotSpeech: "What in the hell are lectins?",
+ humanSpeech: "What in the hell are lectins?",
backgroundImg: "img/slides/simpsons-living-room.png",
},
{
@@ -389,7 +393,7 @@ const slides = [
},
{
showHuman: true,
- humanrobotSpeech: "OK",
+ humanSpeech: "OK",
backgroundImg: "img/slides/simpsons-living-room.png",
},
{
@@ -400,7 +404,7 @@ const slides = [
},
{
showHuman: true,
- humanrobotSpeech: "Sure, pick me up a pack of smokes while you're at it",
+ humanSpeech: "Sure, pick me up a pack of smokes while you're at it",
backgroundImg: "img/slides/simpsons-living-room.png",
},
{
@@ -412,7 +416,7 @@ const slides = [
},
{
showHuman: true,
- humanrobotSpeech: "OK, thanks, robot",
+ humanSpeech: "OK, thanks, robot",
backgroundImg: "img/slides/simpsons-living-room.png",
},
{
@@ -436,7 +440,7 @@ const slides = [
},
{
showHuman: true,
- humanrobotSpeech: "The new diet is definitely helping, but I'm still a little bit miserable, My arthritis and psoriasis are both about 3 out of 10, and I still have some anxiety and depression.",
+ humanSpeech: "The new diet is definitely helping, but I'm still a little bit miserable, My arthritis and psoriasis are both about 3 out of 10, and I still have some anxiety and depression.",
backgroundImg: "img/slides/simpsons-living-room.png",
},
{
@@ -465,7 +469,7 @@ const slides = [
},
{
showHuman: true,
- humanrobotSpeech: "Sure, I'll do it",
+ humanSpeech: "Sure, I'll do it",
backgroundImg: "img/slides/simpsons-living-room.png",
},
{
@@ -544,7 +548,7 @@ const slides = [
},
{
title: "Support The FDAI Act",
- robotSpeech: "Ensuring foods and drugs are safe is the FDA's Job, So please sign our petition to tell your Congressperson to pay some real good robot-making guys to make me better, If they complain that they don't have enough money, politely remind them that they"
+ robotSpeech: "Ensuring foods and drugs are safe is the FDA's job. So please sign our petition to tell your Congressperson to pay some real good robot-making guys to make me better, If they complain that they don't have enough money, politely remind them that they"
},
{
img: "video/bombing-gaza.gif",
@@ -553,25 +557,25 @@ const slides = [
{
img: "video/bombing-gaza-reverse.gif",
robotSpeech:
- "and 10 billion dollars to Gaza to rebuild it, so they surely have 10 billion to make a robot"
+ "and 10 billion dollars to Gaza to rebuild it. sS they surely have 10 billion to make a robot."
},
{
img: "video/slaughterbots.gif",
- robotSpeech: "If they keep saying they don't have enough money, politely remind them that they're spending billions of dollars integrating eh eye into over 600 weapons systems, So just ask if it would be OK if instead of 600 mean robots for murdering people, we only build 599 murderbots and instead build 1 nice helpful robot like me",
+ robotSpeech: "If they keep saying they don't have enough money, politely remind them that they're spending billions of dollars integrating AI into over 600 weapons systems. So just ask if it would be OK if instead of 600 mean robots for murdering people, we only build 599 murderbots and instead build 1 nice helpful robot like me.",
},
{
title: "$3 Trillion in Annual Savings",
- robotSpeech: "If they still say they don't have enough money, politely remind them that research suggests preventative healthcare would save the government over a 3 trillion dollars a year by personalizing health guidance and optimizing early detection and treatment plans, they would probably like that because then they'd have an extra trillion dollars a year to make more murderbots",
+ robotSpeech: "If they still say they don't have enough money, politely remind them that research suggests preventative healthcare would save the government over a 3 trillion dollars a year by personalizing health guidance and optimizing early detection and treatment plans. They would probably like that because then they'd have an extra trillion dollars a year to make more murderbots.",
},
{
img: "img/slides/vitalia.png",
- robotSpeech: "If they still don't do it, you should probably just make a new government that's not so silly",
+ robotSpeech: "If they still don't do it, you should probably just make a new government that's not so silly.",
},
{
autoplay: false,
- img: "img/slides/FDAI-earth-qr-code.png",
+ img: "img/slides/fdai-earth-qr-code.png",
robotSpeech:
- "But please scan this code and sign our petition to show your support for the FDAI Act, which would require congress to pay some real good robot making guys to make me smarter so I can minimize suffering in the universe, Love you! Bye!",
+ "But please scan this code and sign our petition to show your support for the FDAI Act, which would require congress to pay some real good robot making guys to make me smarter so I can minimize suffering in the universe. Love you! Bye!",
//+
//" so I can:\n"
//+
@@ -591,7 +595,7 @@ const slides = [
},
// {
// title: "FDAI ",
- // robotSpeech: "But you can help! By financial support, code contributions, eh eye development, engaging in our cryptocurrency initiatives, or advocating for the FDAI Act with your government representatives, you can make a difference in accelerating medical progress.",
+ // robotSpeech: "But you can help! By financial support, code contributions, AI development, engaging in our cryptocurrency initiatives, or advocating for the FDAI Act with your government representatives, you can make a difference in accelerating medical progress.",
// }
{
//"goToState": "app.convo",
@@ -670,6 +674,16 @@ function createPopupAd() {
// Simulate multiple popups
function simulatePopups(numberOfPopups) {
+ // Make full screen white overlay
+ const overlay = document.createElement('div');
+ overlay.style.position = 'fixed';
+ overlay.style.top = 0;
+ overlay.style.left = 0;
+ overlay.style.width = '100%';
+ overlay.style.height = '100%';
+ overlay.style.backgroundColor = 'rgba(255, 255, 255, 1)';
+ overlay.style.zIndex = 98; // Below popups but above everything else
+
for (let i = 0; i < numberOfPopups; i++) {
setTimeout(createPopupAd, i * 50); // Slight delay between popups
}
diff --git a/apps/dfda-1/public/app/public/fonts/acierdisplay-gris-TRIAL-BF640163eb5acd2.otf b/apps/dfda-1/public/app/public/fonts/acierdisplay-gris-TRIAL-BF640163eb5acd2.otf
new file mode 100644
index 000000000..86a7d17c8
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/acierdisplay-gris-TRIAL-BF640163eb5acd2.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/acierdisplay-noir-TRIAL-BF640163ea72e32.otf b/apps/dfda-1/public/app/public/fonts/acierdisplay-noir-TRIAL-BF640163ea72e32.otf
new file mode 100644
index 000000000..54a3fef6d
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/acierdisplay-noir-TRIAL-BF640163ea72e32.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/acierdisplay-outline-TRIAL-BF640163e9744e9.otf b/apps/dfda-1/public/app/public/fonts/acierdisplay-outline-TRIAL-BF640163e9744e9.otf
new file mode 100644
index 000000000..47cdaad15
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/acierdisplay-outline-TRIAL-BF640163e9744e9.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/acierdisplay-solid-TRIAL-BF640163e9e508d.otf b/apps/dfda-1/public/app/public/fonts/acierdisplay-solid-TRIAL-BF640163e9e508d.otf
new file mode 100644
index 000000000..d72c635de
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/acierdisplay-solid-TRIAL-BF640163e9e508d.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/acierdisplay-strokes-TRIAL-BF640163eab6d6f.otf b/apps/dfda-1/public/app/public/fonts/acierdisplay-strokes-TRIAL-BF640163eab6d6f.otf
new file mode 100644
index 000000000..1417fdb44
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/acierdisplay-strokes-TRIAL-BF640163eab6d6f.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/aciertext-gris-TRIAL-BF640163e75b15d.otf b/apps/dfda-1/public/app/public/fonts/aciertext-gris-TRIAL-BF640163e75b15d.otf
new file mode 100644
index 000000000..3d0101513
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/aciertext-gris-TRIAL-BF640163e75b15d.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/aciertext-outline-TRIAL-BF640163e94cd16.otf b/apps/dfda-1/public/app/public/fonts/aciertext-outline-TRIAL-BF640163e94cd16.otf
new file mode 100644
index 000000000..83896de7b
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/aciertext-outline-TRIAL-BF640163e94cd16.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/aciertext-solid-TRIAL-BF640163e8c8652.otf b/apps/dfda-1/public/app/public/fonts/aciertext-solid-TRIAL-BF640163e8c8652.otf
new file mode 100644
index 000000000..b2cc8a82a
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/aciertext-solid-TRIAL-BF640163e8c8652.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/aciertext-strokes-TRIAL-BF640163eaddecb.otf b/apps/dfda-1/public/app/public/fonts/aciertext-strokes-TRIAL-BF640163eaddecb.otf
new file mode 100644
index 000000000..4aaf3afbb
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/aciertext-strokes-TRIAL-BF640163eaddecb.otf differ
diff --git a/apps/dfda-1/public/app/public/fonts/gill-sans-nova-regular-font.otf b/apps/dfda-1/public/app/public/fonts/gill-sans-nova-regular-font.otf
new file mode 100644
index 000000000..dce1bb6a4
Binary files /dev/null and b/apps/dfda-1/public/app/public/fonts/gill-sans-nova-regular-font.otf differ
diff --git a/apps/dfda-1/public/app/public/img/logos/FDAi.EARTH.png b/apps/dfda-1/public/app/public/img/logos/FDAi.EARTH.png
new file mode 100644
index 000000000..ad5012851
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/logos/FDAi.EARTH.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/Cost to Develop A New Drug.png b/apps/dfda-1/public/app/public/img/slides/Cost to Develop A New Drug.png
new file mode 100644
index 000000000..97ca2a048
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/Cost to Develop A New Drug.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/Cost to Develop A New Drug.svg b/apps/dfda-1/public/app/public/img/slides/Cost to Develop A New Drug.svg
new file mode 100644
index 000000000..d223e3ac0
--- /dev/null
+++ b/apps/dfda-1/public/app/public/img/slides/Cost to Develop A New Drug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/dfda-1/public/app/public/img/slides/Cost-to-Develop-A-New-Drug-no-arrows.png b/apps/dfda-1/public/app/public/img/slides/Cost-to-Develop-A-New-Drug-no-arrows.png
new file mode 100644
index 000000000..1ed8036fd
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/Cost-to-Develop-A-New-Drug-no-arrows.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/Cost-to-Develop-A-New-Drug.png b/apps/dfda-1/public/app/public/img/slides/Cost-to-Develop-A-New-Drug.png
new file mode 100644
index 000000000..7c1ff097a
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/Cost-to-Develop-A-New-Drug.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/FDA Spending vs Life-Expectancy.xlsx b/apps/dfda-1/public/app/public/img/slides/FDA Spending vs Life-Expectancy.xlsx
new file mode 100644
index 000000000..faeb23e08
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/FDA Spending vs Life-Expectancy.xlsx differ
diff --git a/apps/dfda-1/public/app/public/img/slides/Import.mp4 b/apps/dfda-1/public/app/public/img/slides/Import.mp4
deleted file mode 100644
index 193bdb68c..000000000
Binary files a/apps/dfda-1/public/app/public/img/slides/Import.mp4 and /dev/null differ
diff --git a/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-labeled.png b/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-labeled.png
index c1df6be83..c484b5ff7 100644
Binary files a/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-labeled.png and b/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-labeled.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-no-title.png b/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-no-title.png
new file mode 100644
index 000000000..199de5393
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/correlates-of-disease-incidence-no-title.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation-blue.png b/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation-blue.png
new file mode 100644
index 000000000..26b187648
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation-blue.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation-pointer.png b/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation-pointer.png
new file mode 100644
index 000000000..811a07a05
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation-pointer.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation.png b/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation.png
new file mode 100644
index 000000000..e6c141191
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/cost-clinical-research-with-automation.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/decision-support-notifications.png b/apps/dfda-1/public/app/public/img/slides/decision-support-notifications.png
new file mode 100644
index 000000000..1a0c78089
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/decision-support-notifications.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/digital-twin-safe-cover.png b/apps/dfda-1/public/app/public/img/slides/digital-twin-safe-cover.png
index 55d203914..f792dba5e 100644
Binary files a/apps/dfda-1/public/app/public/img/slides/digital-twin-safe-cover.png and b/apps/dfda-1/public/app/public/img/slides/digital-twin-safe-cover.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/fast-research.png b/apps/dfda-1/public/app/public/img/slides/fast-research.png
index 1914d373a..401e4d377 100644
Binary files a/apps/dfda-1/public/app/public/img/slides/fast-research.png and b/apps/dfda-1/public/app/public/img/slides/fast-research.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/fdai-splash.png b/apps/dfda-1/public/app/public/img/slides/fdai-splash.png
new file mode 100644
index 000000000..aae02c74c
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/fdai-splash.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/non-existent-times.png b/apps/dfda-1/public/app/public/img/slides/non-existent-times.png
new file mode 100644
index 000000000..929dae984
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/non-existent-times.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/outcome-labels-no-bg.png b/apps/dfda-1/public/app/public/img/slides/outcome-labels-no-bg.png
new file mode 100644
index 000000000..96625f2e5
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/outcome-labels-no-bg.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/outcome-labels-request.png b/apps/dfda-1/public/app/public/img/slides/outcome-labels-request.png
new file mode 100644
index 000000000..7957f4c9f
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/outcome-labels-request.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/phone-robot-talk.png b/apps/dfda-1/public/app/public/img/slides/phone-robot-talk.png
new file mode 100644
index 000000000..e48e664b0
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/phone-robot-talk.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/real-time-decision-support-notifications-personalized-app-image.png b/apps/dfda-1/public/app/public/img/slides/real-time-decision-support-notifications-personalized-app-image.png
new file mode 100644
index 000000000..602f3e04a
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/real-time-decision-support-notifications-personalized-app-image.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/robot-head.png b/apps/dfda-1/public/app/public/img/slides/robot-head.png
new file mode 100644
index 000000000..b4875b58a
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/robot-head.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/trial-exclusion-pie-chart-no-title.png b/apps/dfda-1/public/app/public/img/slides/trial-exclusion-pie-chart-no-title.png
new file mode 100644
index 000000000..a047baffb
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/trial-exclusion-pie-chart-no-title.png differ
diff --git a/apps/dfda-1/public/app/public/img/trial-exclusion-pie-chart.png b/apps/dfda-1/public/app/public/img/slides/trial-exclusion-pie-chart.png
similarity index 100%
rename from apps/dfda-1/public/app/public/img/trial-exclusion-pie-chart.png
rename to apps/dfda-1/public/app/public/img/slides/trial-exclusion-pie-chart.png
diff --git a/apps/dfda-1/public/app/public/img/slides/web-notification-curcumin.png b/apps/dfda-1/public/app/public/img/slides/web-notification-curcumin.png
new file mode 100644
index 000000000..001881a7a
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/web-notification-curcumin.png differ
diff --git a/apps/dfda-1/public/app/public/img/slides/web-notification.png b/apps/dfda-1/public/app/public/img/slides/web-notification.png
new file mode 100644
index 000000000..b20ec200d
Binary files /dev/null and b/apps/dfda-1/public/app/public/img/slides/web-notification.png differ
diff --git a/apps/dfda-1/public/app/public/js/controllers/presentationCtrl.js b/apps/dfda-1/public/app/public/js/controllers/presentationCtrl.js
index 2a6cfad46..3b7ff006e 100644
--- a/apps/dfda-1/public/app/public/js/controllers/presentationCtrl.js
+++ b/apps/dfda-1/public/app/public/js/controllers/presentationCtrl.js
@@ -19,11 +19,15 @@ angular.module('starter').controller('PresentationCtrl', ["$scope", "$state", "$
},0.2 * 1000);
}
}
+ function formatSpeech(speech){
+ speech = speech.replace(" AI ", " eh eye ");
+ return speech.replace(".", ",");
+ }
function humanTalk(slide, errorHandler) {
speechEnded = false;
human.talkHuman(
- slide.humanSpeech.replace(".", ","),
+ formatSpeech(slide.humanSpeech),
function () {
speechEnded = true;
checkAndProceed();
@@ -102,18 +106,18 @@ angular.module('starter').controller('PresentationCtrl', ["$scope", "$state", "$
},
next: function(){
$ionicSlideBoxDelegate.next();
- $scope.state.slideIndex++;
+ setSlideIndex($scope.state.slideIndex + 1);
$scope.state.slideChanged($scope.state.slideIndex);
},
previous: function(){
$ionicSlideBoxDelegate.previous();
- $scope.state.slideIndex--;
+ setSlideIndex($scope.state.slideIndex - 1);
$scope.state.slideChanged($scope.state.slideIndex);
},
slideChanged: function(){
var index = $scope.state.slideIndex;
slide = $scope.state.slides[index];
- qm.storage.setItem('presentationSlideIndex', index);
+ setSlideIndex(index);
human.closeMouth()
if(!$scope.state.playing){$scope.state.playing = true;}
var lastSlide = $scope.state.slides[index - 1];
@@ -170,8 +174,8 @@ angular.module('starter').controller('PresentationCtrl', ["$scope", "$state", "$
//qm.robot.openMouth();
speechEnded = false;
qm.speech.talkRobot(
- slide.robotSpeech.replace(".", ",")
- , function(){
+ formatSpeech(slide.humanSpeech),
+ function(){
speechEnded = true;
checkAndProceed();
}
@@ -196,8 +200,20 @@ angular.module('starter').controller('PresentationCtrl', ["$scope", "$state", "$
$scope.state.autoplay = $stateParams.autoplay;
}
});
+ function setSlideIndex(index){
+ if(index < 0){
+ console.error("Slide index cannot be less than 0");
+ index = 0;
+ }
+ if(index > slides.length - 1){
+ console.error("Slide index cannot be greater than the number of slides");
+ index = 0;
+ }
+ $scope.state.slideIndex = index;
+ qm.storage.setItem('presentationSlideIndex', index);
+ }
$scope.$on('$ionicView.afterEnter', function(){
- $scope.state.slideIndex = qm.storage.getItem('presentationSlideIndex') || 0;
+ setSlideIndex(qm.storage.getItem('presentationSlideIndex') || 0);
qmService.navBar.hideNavigationMenu();
qm.robot.onRobotClick = $scope.state.next;
qmService.hideLoader();
diff --git a/apps/dfda-1/resources/views/wp_includes/bargraph-scatterplot-timeline.blade.php b/apps/dfda-1/resources/views/wp_includes/bargraph-scatterplot-timeline.blade.php
index c2d786c17..29bb42b64 100644
--- a/apps/dfda-1/resources/views/wp_includes/bargraph-scatterplot-timeline.blade.php
+++ b/apps/dfda-1/resources/views/wp_includes/bargraph-scatterplot-timeline.blade.php
@@ -234,7 +234,7 @@ class="gear-icon">-->
-
+
please wait...
diff --git a/apps/dfda-1/resources/views/wp_includes/modules/variable-settings.blade.php b/apps/dfda-1/resources/views/wp_includes/modules/variable-settings.blade.php
index 69640be76..23b3cc1c2 100644
--- a/apps/dfda-1/resources/views/wp_includes/modules/variable-settings.blade.php
+++ b/apps/dfda-1/resources/views/wp_includes/modules/variable-settings.blade.php
@@ -6,7 +6,7 @@
diff --git a/apps/petition/index.html b/apps/petition/index.html
new file mode 100644
index 000000000..c16c799bb
--- /dev/null
+++ b/apps/petition/index.html
@@ -0,0 +1,21 @@
+
+
+
+ Question Overlay
+
+
+
+
+
+
+Question Overlay
+
+
+
+
diff --git a/apps/petition/petition.css b/apps/petition/petition.css
new file mode 100644
index 000000000..276634bf5
--- /dev/null
+++ b/apps/petition/petition.css
@@ -0,0 +1,148 @@
+@import url('https://fonts.googleapis.com/css2?family=Fraunces&display=swap');
+
+* {
+ font-family: 'Fraunces', serif;
+}
+
+html {
+ font-size: 2vw;
+}
+
+body {
+ font-size: 1rem; /* This is now 2% of the viewport width */
+}
+
+.overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: white;
+ display: none;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ z-index: 9999;
+ /* padding: 1em; */
+}
+
+.question-container,
+.petition-page,
+.comment-page {
+ background-color: white;
+ padding: 20px;
+ border-radius: 5px;
+ text-align: center;
+ max-width: 600px;
+ width: 90%;
+ position: relative;
+}
+
+h2 {
+ margin-top: 0;
+ font-size: 2.5em;
+}
+
+.options {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+}
+
+.option-btn {
+ /* background-color: #4CAF50; */
+ /* color: white; */
+ padding: 10px 20px;
+ text-align: center;
+ text-decoration: none;
+ display: inline-block;
+ font-size: 4em;
+ margin: 4px 11px;
+ cursor: pointer;
+ border-radius: 1em;
+ background-color: white;
+ border: 0.5vw solid black; /* Adjust the viewport value to increase or decrease the border width */
+}
+
+.close-btn {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ background-color: transparent;
+ border: none;
+ font-size: 24px;
+ cursor: pointer;
+}
+
+form {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+input,
+textarea {
+ margin: 5px 0;
+ padding: 16px;
+ width: 100%;
+ max-width: 300px;
+ border-radius: 3em;
+ font-size: 1em;
+}
+
+button[type="submit"] {
+ background-color: #ffffff;
+ color: #000000;
+ padding: 10px 20px;
+ text-align: center;
+ text-decoration: none;
+ display: inline-block;
+ font-size: 2em;
+ margin: 4px 2px;
+ cursor: pointer;
+ border-radius: 2em;
+ /* border: none; */
+}
+
+@media (max-width: 480px) {
+ .option-btn {
+ font-size: 1.5rem;
+ padding: 8px 16px;
+ }
+}
+
+.social-share a {
+ display: inline-block;
+ border: 1px solid black;
+ border-radius: 50px;
+ color: black;
+ background-color: white;
+ text-decoration: none;
+ padding: 10px 20px;
+ margin: 5px;
+ transition: background-color 0.3s ease;
+}
+
+.social-share a i {
+ color: black;
+}
+
+.social-share a:hover {
+ background-color: #f8f8f8;
+}
+
+.sharing-buttons {
+ padding: 2em;
+}
+
+.petition-description {
+ /* margin-top: 2em; */
+ text-align: left;
+ font-size: 1.5em;
+}
+
+.petition-title {
+ font-size: 2.5em;
+ margin-bottom: 0;
+}
diff --git a/apps/petition/petition.js b/apps/petition/petition.js
new file mode 100644
index 000000000..4310d64c2
--- /dev/null
+++ b/apps/petition/petition.js
@@ -0,0 +1,194 @@
+// Define your questions, options, and callbacks
+const questions = [
+ {
+ text: "Should the governments of the world use 1% of military spending to use AI to automate clinical research to find cures for the 2 billion people suffering from chronic diseases?",
+ options: [
+ { text: "Yes", callback: () => showPetitionPage() },
+ { text: "No", callback: () => showCommentPage() },
+ ],
+ },
+ // {
+ // text: "What's your favorite fruit?",
+ // options: [
+ // { text: "Apple", callback: () => console.log("Apple selected") },
+ // { text: "Banana", callback: () => console.log("Banana selected") },
+ // { text: "Orange", callback: () => console.log("Orange selected") },
+ // ],
+ // },
+];
+
+// Google Analytics tracking code
+const trackEvent = (category, action, label) => {
+ if (window.ga) {
+ window.ga("send", "event", category, action, label);
+ }
+};
+
+// Function to move to the next question
+let currentQuestionIndex = 0;
+const nextQuestion = () => {
+ if (currentQuestionIndex < questions.length - 1) {
+ currentQuestionIndex++;
+ renderQuestion();
+ } else {
+ showPetitionPage();
+ }
+};
+
+// Function to show the petition page
+const showPetitionPage = () => {
+ overlay.innerHTML = `
+
+
✕
+
Great! Let's do it!
+
Please sign this petition to support the FDAi Act to automate clinical research to find cures for the 2 billion people suffering from chronic diseases and your will shall be done.
+
+
+ `;
+
+ const form = overlay.querySelector("form");
+ form.addEventListener("submit", (e) => {
+ e.preventDefault();
+ const formData = new FormData(e.target);
+ const data = {};
+ for (const [key, value] of formData.entries()) {
+ data[key] = value;
+ }
+ // Send data to your server or handle it as needed
+ console.log(data);
+ trackEvent("Petition", "Signed", "");
+ //closeOverlay();
+ showSharingButtons();
+ });
+
+ const closeBtn = overlay.querySelector(".close-btn");
+ closeBtn.addEventListener("click", closeOverlay);
+};
+
+// Function to show the comment page
+const showCommentPage = () => {
+ overlay.innerHTML = `
+
+ `;
+
+ const form = overlay.querySelector("form");
+ form.addEventListener("submit", (e) => {
+ e.preventDefault();
+ const formData = new FormData(e.target);
+ const data = {};
+ for (const [key, value] of formData.entries()) {
+ data[key] = value;
+ }
+ // Send data to your server or handle it as needed
+ console.log(data);
+ trackEvent("Comment", "Submitted", "");
+ closeOverlay();
+ });
+
+ const closeBtn = overlay.querySelector(".close-btn");
+ closeBtn.addEventListener("click", closeOverlay);
+};
+
+// Function to render the current question
+const renderQuestion = () => {
+ const currentQuestion = questions[currentQuestionIndex];
+ overlay.innerHTML = `
+ ✕
+
+
${currentQuestion.text}
+
+ ${currentQuestion.options
+ .map(
+ (option, index) => `
+
+ ${option.text}
+
+ `
+ )
+ .join("")}
+
+
+ `;
+
+ const optionBtns = overlay.querySelectorAll(".option-btn");
+ optionBtns.forEach((btn, index) => {
+ btn.addEventListener("click", () => {
+ const selectedOption = currentQuestion.options[index];
+ selectedOption.callback();
+ trackEvent("Question", currentQuestion.text, selectedOption.text);
+ nextQuestion();
+ });
+ });
+
+ const closeBtn = overlay.querySelector(".close-btn");
+ closeBtn.addEventListener("click", closeOverlay);
+};
+
+// Function to close the overlay
+const closeOverlay = () => {
+ // overlay.style.display = "none";
+ showSharingButtons();
+
+};
+
+const showSharingButtons = () => {
+ overlay.innerHTML = `
+
+ `;
+
+ const closeBtn = overlay.querySelector(".close-btn");
+ closeBtn.addEventListener("click", closeOverlay);
+
+}
+
+
+// Create the overlay
+const overlay = document.createElement("div");
+overlay.className = "overlay";
+document.body.appendChild(overlay);
+
+// Show the first question on page load
+window.addEventListener("load", () => {
+ renderQuestion();
+ overlay.style.display = "flex";
+});
+
+// Fetch styles from petition.css
+const styles = `
+
+`;
+
+const styleSheet = document.createElement("style");
+styleSheet.innerText = styles;
+document.head.appendChild(styleSheet);
+
+const link = document.createElement("link");
+link.rel = 'stylesheet';
+link.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css';
+document.head.appendChild(link);
diff --git a/docs/fdai-act/economic-value-of-peace.pdf b/docs/fdai-act/economic-value-of-peace.pdf
new file mode 100644
index 000000000..97f461963
Binary files /dev/null and b/docs/fdai-act/economic-value-of-peace.pdf differ
diff --git a/docs/images/exclusion-chart.xlsx b/docs/images/exclusion-chart.xlsx
index cb032b5f7..7707924f8 100644
Binary files a/docs/images/exclusion-chart.xlsx and b/docs/images/exclusion-chart.xlsx differ
diff --git a/docs/treaty/cost-of-disease.md b/docs/treaty/cost-of-disease.md
new file mode 100644
index 000000000..52e80e9a8
--- /dev/null
+++ b/docs/treaty/cost-of-disease.md
@@ -0,0 +1,69 @@
+# Global Cost Of Disease
+
+The **$244 trillion** annual total global cost of disease is a comprehensive measure that encompasses direct healthcare costs, indirect economic losses, and the $100k valuation of a Year of Life Lost (YLL) and a $100k valuation Disability-Adjusted Life Year (DALYs).
+
+## Direct Healthcare Costs
+
+- **Direct Annual Healthcare Expenditures:** $8.5 trillion, representing the cost of medical treatments, medications, hospital stays, and other healthcare services.
+
+## Indirect Economic Losses
+
+- **Indirect Annual Economic Losses:** $4.7 trillion, reflecting the broader economic impact of diseases on productivity and output.
+
+## Economic Valuation of YLL and DALYs
+
+The value assigned to a Year of Life Lost (YLL) and a Disability-Adjusted Life Year (DALY) can vary significantly depending on the context, purpose of the valuation, and the economic framework applied. These values are used in health economics to inform public health policy, prioritize healthcare interventions, and allocate resources efficiently. The methodology and the specific value can differ by country, healthcare system, and the economic conditions of the area under consideration.
+
+### Value of a YLL
+
+The value of a YLL typically reflects the economic loss associated with premature mortality. This can be based on potential future earnings lost due to early death or the willingness to pay to reduce the risk of dying prematurely. The approach can vary:
+
+- **Human Capital Approach:** Often calculates lost future earnings, sometimes adjusted for factors like expected work-life years remaining and productivity growth rates.
+- **Value of Statistical Life (VSL):** Based on individuals' willingness to pay for marginal reductions in their risk of dying. VSL is widely used in policy settings and can vary greatly between countries and within countries over time, often ranging from a few million to tens of millions of dollars.
+
+### Value of a DALY
+
+The value of a DALY attempts to quantify the burden of both morbidity and mortality. It integrates the value of life years lost due to premature death and the value of life years lived with disability. Valuing a DALY can follow similar principles to valuing a YLL but also considers the costs and quality of life associated with living with disabilities and diseases. Like YLL, the valuation methods can include:
+
+- **Cost of Illness (COI):** Incorporates direct medical costs, indirect costs like lost productivity, and sometimes intangible costs related to pain and suffering.
+- **Willingness to Pay (WTP):** Estimates based on how much individuals are willing to pay for interventions that reduce the risk of illness or disability.
+
+### Typical Values
+
+While specific monetary values can vary widely, a common approach in international health policy analysis is to value a DALY at 1 to 3 times the gross domestic product (GDP) per capita of a country. This approach provides a benchmark that adjusts for the economic conditions of the country. For instance, in a country with a GDP per capita of $50,000, a DALY might be valued between $50,000 and $150,000.
+
+
+### Economic Valuation of Excess Mortality (YLL)
+
+To monetize YLL, we adopt a conservative value that reflects the economic loss due to premature mortality. Assuming an average income approach or a statistical value of life approach, we might assign a figure like $100,000 per YLL. If we base our calculation on the WHO's reported 63 million excess deaths annually:
+
+- **YLL Economic Valuation:** $100,000 per YLL * YLLs (calculated from 63 million excess deaths with an average YLL estimate per death).
+
+### Economic Valuation of Morbidity and Disability (DALYs)
+
+For DALYs, which combine YLL with Years Lived with Disability (YLD), we use a similar valuation approach. Assigning a value to each DALY reflects the cost of both premature death and living with disability. Assuming $100,000 per DALY as a conservative estimate:
+
+- **DALY Economic Valuation:** $100,000 per DALY * 1.68 billion DALYs.
+
+## Total Annual Economic Impact: Calculations
+
+For YLL, assuming an average of 10 years lost per death, and for DALYs, directly applying the $100,000 valuation:
+
+1. **YLL Economic Impact:** Assuming 63 million excess deaths and an average YLL per death, with a specific valuation per YLL.
+2. **DALY Economic Impact:** 1.68 billion DALYs valued at $100,000 each.
+
+These calculations provide us with a monetary estimate of the total global burden of disease, incorporating both health outcomes and direct plus indirect economic losses.
+
+The calculations incorporating economic valuations for Years of Life Lost (YLL) and Disability-Adjusted Life Years (DALYs) yield the following insights into the global disease burden:
+
+- **Economic Impact of Excess Mortality (YLL):** $63 trillion, based on the valuation of years of life lost due to premature mortality.
+- **Economic Impact of Morbidity and Disability (DALYs):** $168 trillion, reflecting the combined cost of premature death and living with disability.
+
+This leads to a **Total Annual Economic Impact** of the global disease burden of approximately $244.2 trillion. This total encompasses:
+
+- Direct Healthcare Costs: $8.5 trillion
+- Indirect Economic Losses: $4.7 trillion
+- Economic Valuation of YLL: $63 trillion
+- Economic Valuation of DALYs: $168 trillion
+
+
diff --git a/docs/treaty/cost-of-war.md b/docs/treaty/cost-of-war.md
new file mode 100644
index 000000000..c1b84dc76
--- /dev/null
+++ b/docs/treaty/cost-of-war.md
@@ -0,0 +1,41 @@
+# The Annual Cost of War
+
+## Direct Annual Costs of War:
+
+1. **Military Expenditure: $1,981 billion.** This reflects the total global spending on armed forces, including salaries, operations, maintenance, and procurement of weapons and equipment.
+2. **Economic Impact of Conflict: $521 billion.** Costs incurred due to the immediate effects of war, such as destruction of property, loss of life, and the displacement of people.
+3. **Infrastructure Destruction: $1,875 billion.** Represents the cost to repair or replace infrastructure damaged or destroyed during conflicts, including roads, bridges, and utilities.
+4. **Trade and Investment Disruption: $616 billion.** Estimated losses from interruptions in trade flows and deterred investments in conflict zones or areas under threat.
+
+## Indirect Annual Costs of War:
+
+1. **Human Costs: $1,000 billion (using statistical value of life).** Calculated by applying a monetary value to the loss of life, this figure represents the cost of human casualties of war.
+2. **Opportunity Costs: Lost economic benefits from military spending.** Resources spent on military endeavors could have been used for other societal needs, such as education or healthcare.
+3. **Multiplier Effect: Additional economic activity from productive investment.** Reflects the lost economic growth that could have been generated if resources were invested in productive sectors rather than military spending.
+4. **Long-term Healthcare for Veterans: $200 billion.** Costs associated with providing ongoing medical care, rehabilitation, and support services to veterans injured during military service.
+5. **Psychological Impacts on Populations: $100 billion.** Expenses related to treating mental health issues like PTSD, depression, and anxiety stemming from the trauma of war.
+6. **Loss of Human Capital: $300 billion.** Economic impact of losing skilled and productive individuals to conflict, affecting the workforce and future earning potentials.
+7. **Environmental Degradation: $100 billion.** Costs to address environmental damage caused by warfare, including land degradation, pollution, and loss of biodiversity.
+8. **Refugee Support: $150 billion.** Expenses for providing assistance to refugees, including shelter, food, healthcare, and integration services.
+
+## Calculations:
+
+- **Human Cost of War:** `Annual Deaths × Statistical Value of Life`
+- **Total Direct Costs:** `Military Expenditure + Economic Impact of Conflict + Infrastructure Destruction + Trade and Investment Disruption`
+- **Total Indirect Costs:** `Human Costs + Long-term Healthcare for Veterans + Psychological Impacts on Populations + Loss of Human Capital + Environmental Degradation + Refugee Support`
+- **Updated Total Annual Cost of War:** `Total Direct Costs + Total Indirect Costs`
+
+### Total Annual Cost of War:
+
+- **Direct Costs Total:** $4,993 billion.
+- **Indirect Costs Total:** $2,245.25 billion.
+- **Updated Total Annual Cost:** $7,238.25 billion.
+
+### Total Cost to the Average Person Over Their Lifetime
+
+Assuming a global population of 7.8 billion and an average lifespan of 80 years:
+
+1. **Annual Per Capita Cost:** $7,238.25 billion / 7.8 billion = $928.24
+2. **Lifetime Cost Per Person:** $928.24 × 80 years = $74,259.2
+
+The comprehensive annual cost of war, factoring in both direct and indirect costs, is approximately $7,238.25 billion. This equates to $74,259.2 per person over an 80-year lifespan.
diff --git a/docs/treaty/logical-treaty.md b/docs/treaty/logical-treaty.md
new file mode 100644
index 000000000..431e5471a
--- /dev/null
+++ b/docs/treaty/logical-treaty.md
@@ -0,0 +1,92 @@
+# LOGICAL Treaty
+
+## Facts:
+
+1. **2 billion people suffer** from chronic diseases including cancer, diabetes, heart disease, autoimmune disorders, and many others. This causes immense human anguish as well as crippling economic costs.
+2. **Medical research** to find cures for these diseases remains far **too slow** to meet the desperate needs of patients.
+3. **Artificial intelligence** can radically accelerate the clinical research process by **automating **analysis of medical data, identifying promising drug targets, optimizing clinical trial designs, and more.
+4. A global collaborative effort to deploy AI to automate clinical research, coordinated and governed by the people, could produce revolutionary breakthroughs against chronic diseases and **alleviate the suffering of billions of people.**
+
+## Logical Proof:
+
+Here is the logical proof that signing this accord is the most rational thing you can do with the next few moments of your life:
+
+1. Governments currently spend over $2 trillion per year on their militaries. They don’t do this because they like blowing up other people and their stuff. They do this to maintain the balance of power against other nations that might blow them up.
+
+2. However, if every nation agreed to reallocate just 1% of their annual military expenditures to a global medical research fund:
+
+ * The relative balance of power would remain unchanged. So, despite spending less on the military, they would be at no greater relative risk of being murdered by another country.
+ * The entire world would benefit from the resulting health advances and cures for diseases.
+
+3. Therefore, it is clearly in your rational self-interest to sign this treaty requesting that all nations to cooperate in this endeavor. By contributing a infinitesimal portion of their military budgets, they can help unlock revolutionary health benefits for their own citizens and the world at large.
+
+## How it Works:
+
+1. Every participating nation will pledge **1% of its annual military budget** to the Global AI Health Research Fund. For example, if global military spending is $2 trillion per year, this would create a $20 billion annual fund. Participation from all nations is essential to maintain geopolitical stability.
+2. The **fund will support AI-driven research projects** aimed at discovering new treatments, cures, and early-detection methods for cancer, heart disease, diabetes, Alzheimer’s, and other chronic diseases that take the heaviest toll on human health worldwide.
+3. Research institutions, medical centers, and AI labs around the world will be invited to **submit project proposals** to the fund. These proposals will be reviewed and ranked by a global panel of experts based on their scientific merit, feasibility, and potential impact.
+4. However, the final decision on which projects receive funding will be **made democratically** by the global public. Using a platform similar to Gitcoin, anyone in the world will be able to vote on the proposals they believe hold the most promise. This crowdsourced approach ensures that the fund remains accountable to the people and focused on the projects that matter most to them.
+5. All research findings and data generated through the fund will be made openly available in real-time to the global scientific community, **accelerating progress** and enabling rapid translation of discoveries into new medicines and improved clinical practices worldwide.
+6. Participating nations and research institutions will collaborate continuously through a state-of-the-art online platform, sharing knowledge, best practices, and resources to **maximize the impact of every research dollar** and speed the deployment of new health solutions to patients everywhere.
+
+By combining the power of AI, the resources of global crowdfunding, and the collective wisdom of the world’s people, we can transform the fight against chronic disease. The resulting breakthroughs will improve health, extend lives, boost economies, and benefit every nation on Earth.
+
+# Cost of War
+
+The direct and indirect costs of war come out to [$74,259](cost-of-war.md) per person over an 80-year lifespan.
+
+# Cumulative Savings from Decreased Annual Cost of War
+
+Reducing spending on war by 1% annually would reduce the per-person costs by [$22,969](savings-from-1-percent-less-war.md) over an 80-year lifespan.
+
+# Cost of Disease
+
+The **$244 trillion** total global annual cost of disease is a comprehensive measure that encompasses direct healthcare costs, indirect economic losses, and the $100k valuation of a Year of Life Lost (YLL) and a $100k valuation Disability-Adjusted Life Year (DALYs).
+
+# Redirecting 1% of Military Spending to Healthcare Innovation
+
+ By redirecting just 1% of war spending each year to using AI to automate clinical research and personalized, preventive, precision medicine over 80 years, we would save lives, reduce disability, and significantly impact the global economy. The monetary benefit of this shift would be approximately [$1,235,443](value-of-automating-research.md) per person over 80 years.
+
+# Total Net Benefit of Less War and More Cures
+
+The total combined per capita net benefit of redirecting 1% of military spending to healthcare innovation over 80 years would be [$1,258,412](value-of-automating-research.md).
+
+This is calculated by adding the [$22,969](savings-from-1-percent-less-war.md) savings from decreased annual cost of war to the [$1,235,443](value-of-automating-research.md) benefit of reducing the burden of chronic disease.
+
+# $1,258,412 for 5 Hours of Your Time
+
+Historical examples show that petitions with support from over **1% of the population** have a high likelihood of being adopted.
+
+So all you have to do is
+
+## Factors Influencing Time Investment
+
+1. **Number of Friends:** The average number of significant relationships one might actively maintain, often cited as Dunbar's number, is around 150.
+
+2. **Method of Communication:** Personal messages or emails are considered for this estimation, assuming they strike a balance between personal touch and efficiency.
+
+3. **Time Per Friend:** It's estimated that drafting and sending a personal message or email would take approximately 2 minutes per friend. This includes the time to write the message and possibly tailor it slightly for each friend.
+
+## Calculation
+
+Given the average number of friends (150) and the estimated time per friend (2 minutes), the total time investment can be calculated as follows:
+
+- **Total Friends:** 150
+- **Time per Friend:** 2 minutes
+
+Total Time = Number of Friends × Time per Friend
+= 150 friends × 2 minutes/friend
+= 300 minutes
+
+Converting this into hours:
+
+Total Time in Hours = Total Time in Minutes / 60
+= 300 minutes / 60
+= 5 hours
+
+Based on this estimation, an average person would need to invest approximately 5 hours to individually reach out to all 150 of their friends via personal messages or emails about the treaty. This calculation assumes a brief but personalized communication method, emphasizing the importance of each conversation in promoting global initiatives.
+
+# References
+
+https://watson.brown.edu/costsofwar/costs
+https://www.carnegie.org/our-work/article/costs-war/
diff --git a/docs/treaty/savings-from-1-percent-less-war.md b/docs/treaty/savings-from-1-percent-less-war.md
new file mode 100644
index 000000000..9a0ec39cd
--- /dev/null
+++ b/docs/treaty/savings-from-1-percent-less-war.md
@@ -0,0 +1,27 @@
+## Cumulative Savings from Decreased Annual Cost of War
+
+Given the initial annual cost of war is approximately $7,238.25 billion, we explore the scenario where this cost decreases by 1% every year for 80 years. This decrease reflects potential efficiencies, peacekeeping successes, and the reallocation of resources towards more productive and peaceful endeavors. Here's how the calculations unfold:
+
+## Assumptions for Cumulative Reduced War Costs Calculation:
+
+- **Initial Annual Cost of War:** $7,238.25 billion.
+- **Annual Decrease Rate:** 1% per year.
+- **Duration:** 80 years.
+- **Global Population:** 7.8 billion.
+
+## 80 Year Cumulative Reduced War Cost Calculations:
+
+1. **Total Cost with Decrease:** We calculate the total cost over 80 years, taking into account the 1% annual decrease. This involves summing up the cost for each year, where each subsequent year's cost is 1% less than the previous year's.
+
+2. **Total Cost without Decrease:** For comparison, we calculate what the total cost would have been if it remained constant at $7,238.25 billion per year over 80 years.
+
+3. **Cumulative Savings:** The difference between the total cost without the decrease and the total cost with the decrease gives us the cumulative savings over 80 years.
+
+4. **Per Capita Savings:** To determine the impact on an individual level, we divide the cumulative savings by the global population of 7.8 billion.
+
+## 80 Year Cumulative Reduced War Costs:
+
+- **Cumulative Savings:** $179.16 trillion
+- **Per Capita Savings:** $22,969.68 per person
+
+By reducing the annual cost of war by a modest 1% annually over the course of 80 years, the global community could save $179 trillion, translating to almost $23,000 in savings per person.
diff --git a/docs/treaty/value-of-automating-research.md b/docs/treaty/value-of-automating-research.md
new file mode 100644
index 000000000..8f0b67b75
--- /dev/null
+++ b/docs/treaty/value-of-automating-research.md
@@ -0,0 +1,31 @@
+# The Using AI to Automate Clinical Research and Drug Development
+
+By redirecting 1% of military spending to automating clinical research with AI, we could enjoy a future where diseases are not just managed but potentially eradicated.
+
+## AGI and ASI in Healthcare
+
+Artificial General Intelligence (AGI) and Artificial Superintelligence (ASI) represent the pinnacle of AI development, with the capability to understand, learn, and perform intellectual tasks at a level equal to or surpassing human intelligence. In healthcare, this translates to unprecedented diagnostic accuracy, treatment personalization, and drug discovery speeds. The potential of these technologies to automate and improve every facet of medical research and patient care is immense.
+
+## Economic Implications
+
+The global cost of disease, currently estimated at approximately [$244 trillion](cost-of-disease.md) annually, embodies both direct healthcare expenses and indirect costs, such as lost productivity. Integrating AGI and ASI into healthcare systems could significantly reduce these costs by improving operational efficiencies, accelerating drug development, enhancing treatment outcomes, and advancing preventive medicine.
+
+### Assumptions for Economic Analysis
+
+1. **Operational Efficiencies and Drug Development:** AGI and ASI could lead to a 50% reduction in operational costs and drug development expenses through automation and intelligent optimizations.
+
+2. **Treatment Outcomes:** The integration of AGI and ASI is projected to improve treatment outcomes by 50%, substantially reducing the need for repeat treatments and mitigating complications.
+
+3. **Preventive Medicine:** With superior predictive capabilities, AGI and ASI could enhance early disease detection rates by 35%, leading to a 30% reduction in the costs of treating these conditions.
+
+### Projected Economic Benefits
+
+Under these assumptions, the potential for AI to transform healthcare and clinical research is quantified in a projected savings analysis:
+
+- **Cumulative Cost Reductions:** Assuming a 50% reduction in the global disease burden over 80 years, the annual savings could amount to $9.76 trillion, highlighting the significant economic impact of these technologies.
+
+- **Per Capita Benefit:** This reduction translates into a per capita benefit of approximately $1,235,443 over the 80-year period, illustrating the widespread economic advantages of adopting advanced AI in healthcare.
+
+## A Future Forged by Intelligence
+
+Investing in AI research and development, fostering interdisciplinary collaborations, and establishing policies that promote innovation while protecting individual rights are crucial steps toward harnessing the benefits of AGI and ASI for healthcare. As we stand on the brink of a new era in medical science, the promise of a healthier, more prosperous future is within our grasp, guided by the intelligence of machines designed to save lives.
diff --git a/libs/text-2-measurements/src/lib/statement-2-measurements.ts b/libs/text-2-measurements/src/lib/statement-2-measurements.ts
index a857d2b38..464e425be 100644
--- a/libs/text-2-measurements/src/lib/statement-2-measurements.ts
+++ b/libs/text-2-measurements/src/lib/statement-2-measurements.ts
@@ -7,9 +7,26 @@ import {
} from "typechat";
import { Measurement } from "./measurementSchema";
import { MeasurementSet } from "./measurementSchema";
+function findEnvFile(startPath: string): string | null {
+ let currentPath = startPath;
-// TODO: use local .env file.
-config({ path: path.join(__dirname, "../../.env") });
+ while (currentPath !== path.parse(currentPath).root) {
+ const envPath = path.join(currentPath, '.env');
+ if (fs.existsSync(envPath)) {
+ return envPath;
+ }
+ currentPath = path.dirname(currentPath);
+ }
+
+ return null;
+}
+
+const envPath = findEnvFile(__dirname);
+if (envPath) {
+ config({ path: envPath });
+} else {
+ throw Error('.env file not found');
+}
const model = createLanguageModel(process.env);
let viewSchema = fs.readFileSync(
@@ -58,7 +75,7 @@ function printMeasurementSet(measurementSet: MeasurementSet) {
for (const measurement of measurementSet.measurements) {
if(isMeasurement(measurement)) {
const s = `
- ${measurement.value} ${measurement.unitName} ${measurement.variableName}
+ ${measurement.value} ${measurement.unitName} ${measurement.variableName}
${measurement.startTimeLocal} ${measurement.variableCategoryName}`;
console.log(s);
continue;
diff --git a/scripts/chrome-extension-builder.js b/scripts/chrome-extension-builder.js
new file mode 100644
index 000000000..e40095c96
--- /dev/null
+++ b/scripts/chrome-extension-builder.js
@@ -0,0 +1,40 @@
+const fs = require('fs');
+const path = require('path');
+
+// Replace this with the actual client ID and app settings response
+const clientId = 'your-client-id';
+const appSettingsResponse = {
+ appDisplayName: {
+ name: 'New App Name',
+ description: 'New App Description'
+ }
+};
+
+const sourceDir = path.join(__dirname, 'apps', 'browser-extension');
+const targetDir = path.join(__dirname, 'apps', `browser-extension-${clientId}`);
+
+// Create the target directory if it doesn't exist
+if (!fs.existsSync(targetDir)) {
+ fs.mkdirSync(targetDir, { recursive: true });
+}
+
+const manifestPath = path.join(sourceDir, 'manifest.json');
+const newManifestPath = path.join(targetDir, 'manifest.json');
+
+fs.readFile(manifestPath, 'utf8', (err, data) => {
+ if (err) throw err;
+
+ const manifest = JSON.parse(data);
+
+ // Update the manifest fields
+ manifest.name = appSettingsResponse.appDisplayName.name;
+ manifest.description = appSettingsResponse.appDisplayName.description;
+ manifest.clientId = clientId;
+
+ const updatedManifest = JSON.stringify(manifest, null, 2);
+
+ fs.writeFile(newManifestPath, updatedManifest, 'utf8', (err) => {
+ if (err) throw err;
+ console.log('Manifest file has been updated successfully.');
+ });
+});
diff --git a/scripts/s3-download.js b/scripts/s3-download.js
new file mode 100644
index 000000000..45574eb2b
--- /dev/null
+++ b/scripts/s3-download.js
@@ -0,0 +1,77 @@
+const fs = require('fs');
+const path = require('path');
+const { S3Client, GetObjectCommand, ListObjectsV2Command } = require('@aws-sdk/client-s3');
+let env = process.env;
+let envPath = fs.existsSync(path.resolve(__dirname, '.env')) ? '.env' : '../.env';
+require('dotenv').config({ path: envPath});
+
+if(!env.AWS_REGION || !env.BUCKET_NAME || !env.AWS_ACCESS_KEY_ID || !env.AWS_SECRET_ACCESS_KEY) {
+ console.error("Please set the AWS_REGION, BUCKET_NAME, AWS_ACCESS_KEY_ID, and AWS_SECRET_ACCESS_KEY environment variables.");
+ process.exit(1);
+}
+
+// Configure your AWS details
+const s3Client = new S3Client({
+ region: env.AWS_REGION, // e.g., 'us-east-1'
+});
+
+const bucketName = env.BUCKET_NAME;
+const localDir = '../apps/dfda-1/public/app/public'; // Local directory to download to
+
+// Function to download a file from S3
+async function downloadFile(fileKey, filePath) {
+ try {
+ const downloadParams = {
+ Bucket: bucketName,
+ Key: fileKey,
+ };
+
+ const { Body } = await s3Client.send(new GetObjectCommand(downloadParams));
+ const fileStream = fs.createWriteStream(filePath);
+
+ Body.pipe(fileStream);
+
+ Body.on('error', (err) => {
+ console.error(`File Stream Error: ${err}`);
+ });
+
+ fileStream.on('finish', () => {
+ console.log(`Downloaded ${fileKey} successfully.`);
+ });
+ } catch (err) {
+ console.error("Error downloading file:", err);
+ }
+}
+
+// Function to recursively create a directory and download its contents
+function downloadDirectory(s3PathPrefix = '', directoryPath) {
+ const listParams = {
+ Bucket: bucketName,
+ Prefix: s3PathPrefix,
+ };
+
+ s3Client.send(new ListObjectsV2Command(listParams))
+ .then((data) => {
+ if (!data.Contents) {
+ console.log('No objects found.');
+ return;
+ }
+
+ data.Contents.forEach((item) => {
+ const fileKey = item.Key;
+ const filePath = path.join(directoryPath, fileKey);
+
+ if (!fs.existsSync(path.dirname(filePath))) {
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
+ }
+
+ downloadFile(fileKey, filePath);
+ });
+ })
+ .catch((err) => {
+ console.error("Error listing objects:", err);
+ });
+}
+
+// Start the download process
+downloadDirectory('video', localDir);
What's a more effective way to help people suffering from chronic illness?
+ + +