diff --git a/package-lock.json b/package-lock.json index b958b1b96..7cf36f760 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,9 +23,12 @@ "@types/w3c-web-usb": "^1.0.6", "bowser": "^2.11.0", "chart.js": "^4.2.1", + "fake-indexeddb": "^6.2.5", "framer-motion": "^10.2.4", + "idb": "^8.0.3", "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", + "lodash.orderby": "^4.6.0", "lodash.upperfirst": "^4.3.1", "ml4f": "git://github.com/microsoft/ml4f#v1.10.1", "react": "^18.3.1", @@ -35,6 +38,7 @@ "react-intl": "^6.6.8", "react-router": "^6.24.0", "react-router-dom": "^6.24.0", + "uuid": "^13.0.0", "zustand": "^4.5.5" }, "devDependencies": { @@ -48,6 +52,7 @@ "@types/ejs": "^3.1.5", "@types/lodash.camelcase": "^4.3.9", "@types/lodash.debounce": "^4.0.9", + "@types/lodash.orderby": "^4.6.9", "@types/lodash.upperfirst": "^4.3.9", "@types/node": "^18.16.0", "@types/react": "^18.3.3", @@ -4703,6 +4708,16 @@ "@types/lodash": "*" } }, + "node_modules/@types/lodash.orderby": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/@types/lodash.orderby/-/lodash.orderby-4.6.9.tgz", + "integrity": "sha512-T9o2wkIJOmxXwVTPTmwJ59W6eTi2FseiLR369fxszG649Po/xe9vqFNhf/MtnvT5jrbDiyWKxPFPZbpSVK0SVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/lodash.upperfirst": { "version": "4.3.9", "resolved": "https://registry.npmjs.org/@types/lodash.upperfirst/-/lodash.upperfirst-4.3.9.tgz", @@ -7312,6 +7327,15 @@ "node": ">=12.0.0" } }, + "node_modules/fake-indexeddb": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.2.5.tgz", + "integrity": "sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7941,6 +7965,12 @@ "node": ">=0.10.0" } }, + "node_modules/idb": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/idb/-/idb-8.0.3.tgz", + "integrity": "sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==", + "license": "ISC" + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -9276,6 +9306,12 @@ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" }, + "node_modules/lodash.orderby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz", + "integrity": "sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==", + "license": "MIT" + }, "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", @@ -11429,6 +11465,19 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, "node_modules/vega": { "version": "5.20.0", "resolved": "https://registry.npmjs.org/vega/-/vega-5.20.0.tgz", diff --git a/package.json b/package.json index acfc2076d..191d6ca13 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@types/ejs": "^3.1.5", "@types/lodash.camelcase": "^4.3.9", "@types/lodash.debounce": "^4.0.9", + "@types/lodash.orderby": "^4.6.9", "@types/lodash.upperfirst": "^4.3.9", "@types/node": "^18.16.0", "@types/react": "^18.3.3", @@ -69,9 +70,12 @@ "@types/w3c-web-usb": "^1.0.6", "bowser": "^2.11.0", "chart.js": "^4.2.1", + "fake-indexeddb": "^6.2.5", "framer-motion": "^10.2.4", + "idb": "^8.0.3", "lodash.camelcase": "^4.3.0", "lodash.debounce": "^4.0.8", + "lodash.orderby": "^4.6.0", "lodash.upperfirst": "^4.3.1", "ml4f": "git://github.com/microsoft/ml4f#v1.10.1", "react": "^18.3.1", @@ -81,6 +85,7 @@ "react-intl": "^6.6.8", "react-router": "^6.24.0", "react-router-dom": "^6.24.0", + "uuid": "^13.0.0", "zustand": "^4.5.5" } } diff --git a/src/App.tsx b/src/App.tsx index 28b46d453..a2569fbbf 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,13 +12,16 @@ import { createWebBluetoothConnection, createWebUSBConnection, } from "@microbit/microbit-connection"; -import React, { ReactNode, useEffect, useMemo, useRef } from "react"; +import React, { ReactNode, Suspense, useEffect, useMemo, useRef } from "react"; import { useIntl } from "react-intl"; import { + Await, createBrowserRouter, + defer, Outlet, RouterProvider, ScrollRestoration, + useLoaderData, useNavigate, } from "react-router-dom"; import "theme-package/fonts/fonts.css"; @@ -47,7 +50,7 @@ import ImportPage from "./pages/ImportPage"; import NewPage from "./pages/NewPage"; import TestingModelPage from "./pages/TestingModelPage"; import OpenSharedProjectPage from "./pages/OpenSharedProjectPage"; -import { useStore } from "./store"; +import { loadProjectFromStorage, useStore } from "./store"; import { createCodePageUrl, createDataSamplesPageUrl, @@ -57,6 +60,7 @@ import { createNewPageUrl, createTestingModelPageUrl, } from "./urls"; +import LoadingPage from "./components/LoadingPage"; export interface ProviderLayoutProps { children: ReactNode; @@ -112,6 +116,7 @@ const Layout = () => { const navigate = useNavigate(); const toast = useToast(); const intl = useIntl(); + const { projectLoaded } = useLoaderData() as { projectLoaded: boolean }; useEffect(() => { return useStore.subscribe( @@ -138,23 +143,36 @@ const Layout = () => { }, [intl, navigate, setPostImportDialogState, toast]); return ( - // We use this even though we have errorElement as this does logging. - - - - - - - + }> + + {/* We use this even though we have errorElement as this does logging. */} + + + + + + + + + ); }; const createRouter = () => { + let loaderFuncCalled = false; return createBrowserRouter([ { id: "root", path: "", element: , + loader: () => { + if (!loaderFuncCalled) { + loaderFuncCalled = true; + const projectLoaded = loadProjectFromStorage(); + return defer({ projectLoaded }); + } + return { projectLoaded: true }; + }, // This one gets used for loader errors (typically offline) // We set an error boundary inside the routes too that logs render-time errors. // ErrorBoundary doesn't work properly in the loader case at least. diff --git a/src/components/ActionCertaintyCard.tsx b/src/components/ActionCertaintyCard.tsx index 0ecb11376..510bc047e 100644 --- a/src/components/ActionCertaintyCard.tsx +++ b/src/components/ActionCertaintyCard.tsx @@ -28,7 +28,7 @@ interface ActionCertaintyCardProps { requiredConfidence?: number; onThresholdChange: (val: number) => void; actionName: string; - actionId: number; + actionId: string; disabled?: boolean; } @@ -42,7 +42,7 @@ const ActionCertaintyCard = ({ const intl = useIntl(); const barWidth = 240; const predictionResult = useStore((s) => s.predictionResult); - const isTriggered = predictionResult?.detected?.ID === actionId; + const isTriggered = predictionResult?.detected?.id === actionId; const colorScheme = useMemo( () => (isTriggered ? "brand2.500" : undefined), [isTriggered] diff --git a/src/components/ActionDataSamplesCard.tsx b/src/components/ActionDataSamplesCard.tsx index b578c1194..789d2db74 100644 --- a/src/components/ActionDataSamplesCard.tsx +++ b/src/components/ActionDataSamplesCard.tsx @@ -46,7 +46,7 @@ interface ActionDataSamplesCardProps { selected: boolean; onSelectRow?: () => void; onRecord?: (recordingOptions: RecordingOptions) => void; - newRecordingId?: number; + newRecordingId?: string; clearNewRecordingId?: () => void; } @@ -84,7 +84,7 @@ const ActionDataSamplesCard = ({ deleteActionRecording(value.ID, idx)} + onClick={() => deleteActionRecording(value.id, recording.id)} /> ( - `record-button-${action.ID}`; + `record-button-${action.id}`; const RecordingArea = ({ action, @@ -319,12 +319,12 @@ const DataSample = ({ }: { recording: RecordingData; numRecordings: number; - actionId: number; + actionId: string; actionName: string; recordingIndex: number; isNew: boolean; onNewAnimationEnd?: () => void; - onDelete: (actionId: ActionData["ID"], recordingIdx: number) => void; + onDelete: (actionId: string, recordingId: string) => void; view: DataSamplesView; hasClose?: boolean; }) => { @@ -336,10 +336,10 @@ const DataSample = ({ view === DataSamplesView.GraphAndDataFeatures; const intl = useIntl(); const handleDelete = useCallback(() => { - onDelete(actionId, recordingIndex); - }, [actionId, onDelete, recordingIndex]); + onDelete(actionId, recording.id); + }, [actionId, onDelete, recording.id]); return ( - + {hasClose && ( - `action-name-input-${action.ID}`; + `action-name-input-${action.id}`; const ActionNameCard = ({ value, @@ -55,19 +55,23 @@ const ActionNameCard = ({ const toastId = "name-too-long-toast"; const setActionName = useStore((s) => s.setActionName); const setActionIcon = useStore((s) => s.setActionIcon); - const { icon, ID: id } = value; + const { icon, id } = value; const [localName, setLocalName] = useState(value.name); + useEffect(() => { + // Occurs when the name is updated in another tab. + setLocalName(value.name); + }, [value.name]); const predictionResult = useStore((s) => s.predictionResult); const isTriggered = viewMode === ActionCardNameViewMode.ReadOnly - ? predictionResult?.detected?.ID === value.ID + ? predictionResult?.detected?.id === value.id : undefined; const debouncedSetActionName = useMemo( () => debounce( - (id: ActionData["ID"], name: string) => { - setActionName(id, name); + async (id: string, name: string) => { + await setActionName(id, name); }, 400, { leading: true } @@ -76,7 +80,7 @@ const ActionNameCard = ({ ); const onChange: React.ChangeEventHandler = useCallback( - (e) => { + async (e) => { const name = e.target.value; // Validate action name length if (name.length >= actionNameMaxLength && !toast.isActive(toastId)) { @@ -94,14 +98,14 @@ const ActionNameCard = ({ return; } setLocalName(name); - debouncedSetActionName(id, name); + await debouncedSetActionName(id, name); }, [debouncedSetActionName, id, intl, toast] ); const handleIconSelected = useCallback( - (icon: MakeCodeIcon) => { - setActionIcon(id, icon); + async (icon: MakeCodeIcon) => { + await setActionIcon(id, icon); }, [id, setActionIcon] ); diff --git a/src/components/DataSamplesMenu.tsx b/src/components/DataSamplesMenu.tsx index 92a1a5d74..8081b72d9 100644 --- a/src/components/DataSamplesMenu.tsx +++ b/src/components/DataSamplesMenu.tsx @@ -59,18 +59,18 @@ const DataSamplesMenu = () => { downloadDataset(); }, [downloadDataset, actions, logging]); const deleteAllActions = useStore((s) => s.deleteAllActions); - const handleDeleteAllActions = useCallback(() => { + const handleDeleteAllActions = useCallback(async () => { logging.event({ type: "dataset-delete", }); - deleteAllActions(); + await deleteAllActions(); closeDialog(); }, [closeDialog, deleteAllActions, logging]); const handleSave = useCallback( - (newName?: string) => { + async (newName?: string) => { if (newName) { - setProjectName(newName); + await setProjectName(newName); } download(); closeDialog(); diff --git a/src/components/DataSamplesTable.tsx b/src/components/DataSamplesTable.tsx index 1f6d7ffcf..e2bc25510 100644 --- a/src/components/DataSamplesTable.tsx +++ b/src/components/DataSamplesTable.tsx @@ -104,7 +104,7 @@ const DataSamplesTable = ({ const loadProjectInputRef = useRef(null); // For adding flashing animation for new recording. - const [newRecordingId, setNewRecordingId] = useState( + const [newRecordingId, setNewRecordingId] = useState( undefined ); @@ -138,13 +138,21 @@ const DataSamplesTable = ({ const tourStart = useStore((s) => s.tourStart); const handleRecordingComplete = useCallback( - ({ mostRecentRecordingId, recordingCount }: RecordingCompleteDetail) => { + async ({ + mostRecentRecordingId, + recordingCount, + }: RecordingCompleteDetail) => { setNewRecordingId(mostRecentRecordingId); - tourStart({ name: "DataSamplesRecorded", recordingCount }); + await tourStart({ name: "DataSamplesRecorded", recordingCount }); }, [tourStart] ); + const handleConfirm = useCallback(async () => { + await deleteAction(selectedAction); + closeDialog(); + }, [closeDialog, deleteAction, selectedAction]); + const actionNameInputEl = useCallback( (idx: number) => document.getElementById(actionNameInputId(actions[idx])), [actions] @@ -205,14 +213,11 @@ const DataSamplesTable = ({ /> } - onConfirm={() => { - deleteAction(selectedAction.ID); - closeDialog(); - }} + onConfirm={handleConfirm} onCancel={closeDialog} /> {actions.map((action, idx) => ( setNewRecordingId(undefined)} - selected={selectedAction.ID === action.ID} + selected={selectedAction.id === action.id} onSelectRow={() => setSelectedActionIdx(idx)} onRecord={handleRecord} showHints={showHints} diff --git a/src/components/DataSamplesTableRow.tsx b/src/components/DataSamplesTableRow.tsx index dee9446a5..398287014 100644 --- a/src/components/DataSamplesTableRow.tsx +++ b/src/components/DataSamplesTableRow.tsx @@ -20,7 +20,7 @@ interface DataSamplesTableRowProps { onSelectRow?: () => void; onRecord?: (recordingOptions: RecordingOptions) => void; showHints: boolean; - newRecordingId?: number; + newRecordingId?: string; clearNewRecordingId?: () => void; onDeleteAction?: () => void; renameShortcutScopeRef?: (instance: RefType) => void; @@ -41,51 +41,49 @@ const DataSamplesTableRow = ({ const intl = useIntl(); return ( - <> - + + + + + {showHints ? ( + + ) : ( - + {(action.name.length > 0 || action.recordings.length > 0) && ( + + )} - {showHints ? ( - - ) : ( - - {(action.name.length > 0 || action.recordings.length > 0) && ( - - )} - - )} - - + )} + ); }; diff --git a/src/components/EditCodeDialog.tsx b/src/components/EditCodeDialog.tsx index 8b501e9ed..79bbf1393 100644 --- a/src/components/EditCodeDialog.tsx +++ b/src/components/EditCodeDialog.tsx @@ -17,7 +17,7 @@ const EditCodeDialog = forwardRef( const tourStart = useStore((s) => s.tourStart); useEffect(() => { if (isOpen) { - tourStart({ name: "MakeCode" }); + void tourStart({ name: "MakeCode" }); } }, [isOpen, tourStart]); return ( diff --git a/src/components/HelpMenuItems.tsx b/src/components/HelpMenuItems.tsx index 6ebbb60a4..eb3c96708 100644 --- a/src/components/HelpMenuItems.tsx +++ b/src/components/HelpMenuItems.tsx @@ -19,6 +19,7 @@ import { TourTrigger } from "../model"; import { useStore } from "../store"; import { userGuideUrl } from "../utils/external-links"; import { createDataSamplesPageUrl, createTestingModelPageUrl } from "../urls"; +import { useCallback } from "react"; interface HelpMenuItemsProps { onAboutDialogOpen: () => void; @@ -130,18 +131,16 @@ const TourMenuItem = ({ }: TourMenuItemProps) => { const tourStart = useStore((s) => s.tourStart); const { isConnected } = useConnectionStage(); + const handleClick = useCallback(async () => { + if (!isConnected) { + onConnectFirstDialogOpen(); + } else { + await tourStart(tourTrigger!, true); + } + }, [isConnected, onConnectFirstDialogOpen, tourStart, tourTrigger]); if (tourTrigger) { return ( - { - if (!isConnected) { - onConnectFirstDialogOpen(); - } else { - tourStart(tourTrigger, true); - } - }} - icon={} - > + }> ); diff --git a/src/components/LanguageDialog.tsx b/src/components/LanguageDialog.tsx index 68a207eef..efe171f56 100644 --- a/src/components/LanguageDialog.tsx +++ b/src/components/LanguageDialog.tsx @@ -55,8 +55,8 @@ export const LanguageDialog = ({ }: LanguageDialogProps) => { const setLanguage = useStore((s) => s.setLanguage); const handleChooseLanguage = useCallback( - (languageId: string) => { - setLanguage(languageId); + async (languageId: string) => { + await setLanguage(languageId); onClose(); }, [onClose, setLanguage] diff --git a/src/components/LiveGraphLabels.tsx b/src/components/LiveGraphLabels.tsx index d5678e8e3..1761076de 100644 --- a/src/components/LiveGraphLabels.tsx +++ b/src/components/LiveGraphLabels.tsx @@ -84,8 +84,8 @@ const LiveGraphLabels = () => { return ( - {labelConfig.map((config, idx) => ( - + {labelConfig.map((config) => ( + { + return ( + + + + } + itemsLeftProps={{ width: 0 }} + /> + + + + + + ); +}; + +export default LoadingPage; diff --git a/src/components/NameProjectDialog.tsx b/src/components/NameProjectDialog.tsx index b5e14640e..4bebb953d 100644 --- a/src/components/NameProjectDialog.tsx +++ b/src/components/NameProjectDialog.tsx @@ -24,7 +24,7 @@ import { import { useCallback, useState } from "react"; import { FormattedMessage } from "react-intl"; import { useProjectName } from "../hooks/project-hooks"; -import { validateProjectName } from "../project-name"; +import { validateProjectName } from "../project-utils"; interface NameProjectDialogProps { onClose: () => void; diff --git a/src/components/RecordingDialog.tsx b/src/components/RecordingDialog.tsx index 42b6db7c3..c2009e338 100644 --- a/src/components/RecordingDialog.tsx +++ b/src/components/RecordingDialog.tsx @@ -20,9 +20,10 @@ import { } from "@chakra-ui/react"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { FormattedMessage, useIntl } from "react-intl"; +import { v4 as uuid } from "uuid"; import { TimedXYZ } from "../buffered-data"; import { useBufferedData } from "../buffered-data-hooks"; -import { ActionData, XYZData } from "../model"; +import { XYZData } from "../model"; import { useStore } from "../store"; interface CountdownStage { @@ -37,7 +38,7 @@ export interface RecordingOptions { } export interface RecordingCompleteDetail { - mostRecentRecordingId: number; + mostRecentRecordingId: string | undefined; recordingCount: number; } @@ -45,7 +46,7 @@ export interface RecordingDialogProps { isOpen: boolean; onClose: () => void; actionName: string; - actionId: ActionData["ID"]; + actionId: string; onRecordingComplete: (detail: RecordingCompleteDetail) => void; recordingOptions: RecordingOptions; } @@ -68,10 +69,10 @@ const RecordingDialog = ({ const intl = useIntl(); const toast = useToast(); const recordingCountRef = useRef(0); - const mostRecentRecordingIdRef = useRef(-1); + const mostRecentRecordingIdRef = useRef(); const recordingStarted = useStore((s) => s.recordingStarted); const recordingStopped = useStore((s) => s.recordingStopped); - const addActionRecordings = useStore((s) => s.addActionRecordings); + const addActionRecording = useStore((s) => s.addActionRecording); const recordingDataSource = useRecordingDataSource(); const [recordingStatus, setRecordingStatus] = useState( RecordingStatus.None @@ -103,7 +104,7 @@ const RecordingDialog = ({ const mostRecentRecordingId = mostRecentRecordingIdRef.current; recordingCountRef.current = 0; - mostRecentRecordingIdRef.current = -1; + mostRecentRecordingIdRef.current = undefined; recordingStopped(); setRecordingStatus(RecordingStatus.None); setCountdownStageIndex(0); @@ -156,11 +157,15 @@ const RecordingDialog = ({ const startRecordingInternal = useCallback(() => { recordingDataSource.startRecording({ - onDone(data) { - const recordingId = Date.now(); + async onDone(data) { + const recordingId = uuid(); mostRecentRecordingIdRef.current = recordingId; recordingCountRef.current++; - addActionRecordings(actionId, [{ ID: recordingId, data }]); + await addActionRecording(actionId, { + id: recordingId, + data, + createdAt: Date.now(), + }); if (continuousRecording && recordingsRemaining) { continueRecording(); } else if (!continuousRecording && recordingsRemaining) { @@ -193,7 +198,7 @@ const RecordingDialog = ({ onProgress: setProgress, }); }, [ - addActionRecordings, + addActionRecording, continueRecording, continuousRecording, decrementRecordingsRemaining, diff --git a/src/components/RecordingFingerprint.tsx b/src/components/RecordingFingerprint.tsx index f15cfc2b4..9f54be3fe 100644 --- a/src/components/RecordingFingerprint.tsx +++ b/src/components/RecordingFingerprint.tsx @@ -37,10 +37,10 @@ const RecordingFingerprint = ({ templateColumns={`repeat(${Object.keys(dataFeatures).length}, 1fr)`} {...rest} > - {Object.keys(dataFeatures).map((k, idx) => ( + {Object.keys(dataFeatures).map((k) => ( diff --git a/src/components/SaveDialogs.tsx b/src/components/SaveDialogs.tsx index 5d764705f..0734c3301 100644 --- a/src/components/SaveDialogs.tsx +++ b/src/components/SaveDialogs.tsx @@ -29,7 +29,7 @@ const SaveDialogs = () => { const handleSave = useCallback( async (newName?: string) => { if (newName) { - setProjectName(newName); + await setProjectName(newName); } await saveHex(hex); }, diff --git a/src/components/ShowGraphsCheckbox.tsx b/src/components/ShowGraphsCheckbox.tsx index 7d2d5aa92..8daaf1e3b 100644 --- a/src/components/ShowGraphsCheckbox.tsx +++ b/src/components/ShowGraphsCheckbox.tsx @@ -15,10 +15,10 @@ const ShowGraphsCheckbox = () => { const setShowGraphs = useStore((s) => s.setShowGraphs); const handleShowGraphOnChange = useCallback( - (e: React.ChangeEvent) => { + async (e: React.ChangeEvent) => { const isChecked = e.target.checked; - setShowGraphs(isChecked); - setDataSamplesView( + await setShowGraphs(isChecked); + await setDataSamplesView( isChecked ? DataSamplesView.GraphAndDataFeatures : DataSamplesView.DataFeatures diff --git a/src/components/TestingModelTable.tsx b/src/components/TestingModelTable.tsx index a6c77a459..ae8c15c21 100644 --- a/src/components/TestingModelTable.tsx +++ b/src/components/TestingModelTable.tsx @@ -83,11 +83,11 @@ const TestingModelTable = () => { h="fit-content" alignSelf="start" > - {actions.map((action, idx) => { + {actions.map((action) => { const { requiredConfidence: threshold } = action; return ( { - setRequiredConfidence(action.ID, val) + setRequiredConfidence(action.id, val) } requiredConfidence={ threshold ?? mlSettings.defaultRequiredConfidence diff --git a/src/components/ViewDataFeaturesMenuItem.tsx b/src/components/ViewDataFeaturesMenuItem.tsx index e85924847..8003e4b99 100644 --- a/src/components/ViewDataFeaturesMenuItem.tsx +++ b/src/components/ViewDataFeaturesMenuItem.tsx @@ -15,16 +15,16 @@ const ViewDataFeaturesMenuItem = () => { const showGraphs = useStore((s) => s.settings.showGraphs); const setDataSamplesView = useStore((s) => s.setDataSamplesView); - const handleShowDataFeatures = useCallback(() => { - setDataSamplesView( + const handleShowDataFeatures = useCallback(async () => { + await setDataSamplesView( showGraphs ? DataSamplesView.GraphAndDataFeatures : DataSamplesView.DataFeatures ); }, [setDataSamplesView, showGraphs]); - const handleHideDataFeatures = useCallback(() => { - setDataSamplesView(DataSamplesView.Graph); + const handleHideDataFeatures = useCallback(async () => { + await setDataSamplesView(DataSamplesView.Graph); }, [setDataSamplesView]); return ( diff --git a/src/e2e/app/data-samples.ts b/src/e2e/app/data-samples.ts index 0ac48c3db..fcc3a775f 100644 --- a/src/e2e/app/data-samples.ts +++ b/src/e2e/app/data-samples.ts @@ -32,8 +32,8 @@ export class DataSamplesPage { return response; } - expectUrl() { - expect(this.page.url()).toEqual(this.url); + async expectUrl() { + return this.page.waitForURL(this.url, { timeout: 3_000 }); } async closeDialog() { @@ -55,11 +55,11 @@ export class DataSamplesPage { async expectOnPage() { await expect(this.heading).toBeVisible(); - this.expectUrl(); + await this.expectUrl(); } async expectCorrectInitialState() { - this.expectUrl(); + await this.expectUrl(); await expect(this.heading).toBeVisible({ timeout: 10000 }); } diff --git a/src/e2e/open-shared-project-page.spec.ts b/src/e2e/open-shared-project-page.spec.ts index 62440f81d..3c2b7e30c 100644 --- a/src/e2e/open-shared-project-page.spec.ts +++ b/src/e2e/open-shared-project-page.spec.ts @@ -35,7 +35,7 @@ test.describe("import shared page", () => { // try import await openSharedProjectPage.clickOpenProjectBtn(); // importing the loaded project - dataSamplesPage.expectUrl(); + await dataSamplesPage.expectUrl(); }); test("error", async ({ openSharedProjectPage }) => { diff --git a/src/hooks/project-hooks.tsx b/src/hooks/project-hooks.tsx index 1108951d8..5b0dc6e46 100644 --- a/src/hooks/project-hooks.tsx +++ b/src/hooks/project-hooks.tsx @@ -28,7 +28,7 @@ import { PostImportDialogState, SaveStep, } from "../model"; -import { untitledProjectName as untitled } from "../project-name"; +import { untitledProjectName as untitled } from "../project-utils"; import { useStore } from "../store"; import { createCodePageUrl, @@ -315,7 +315,7 @@ export const ProjectProvider = ({ const actionsString = await readFileAsText(file); const actions = JSON.parse(actionsString) as unknown; if (isDatasetUserFileFormat(actions)) { - loadDataset(actions); + await loadDataset(actions); navigate(createDataSamplesPageUrl()); } else { setPostImportDialogState(PostImportDialogState.Error); @@ -428,12 +428,12 @@ export const ProjectProvider = ({ const editorChange = useStore((s) => s.editorChange); const onWorkspaceSave = useCallback( - (event: EditorWorkspaceSaveRequest) => { + async (event: EditorWorkspaceSaveRequest) => { if (!checkIfLangChanged()) { // We don't want to handle these events until MakeCode has been // reinitialised after a language change. // We should reinitialise with the latest project. - editorChange(event.project); + await editorChange(event.project); } }, [checkIfLangChanged, editorChange] diff --git a/src/makecode/__snapshots__/utils.test.ts.snap b/src/makecode/__snapshots__/utils.test.ts.snap index 431acf673..bd1dc82bf 100644 --- a/src/makecode/__snapshots__/utils.test.ts.snap +++ b/src/makecode/__snapshots__/utils.test.ts.snap @@ -7,16 +7,20 @@ exports[`test project generation > generates a project 1`] = ` "autogenerated.ts": "// Auto-generated. Do not edit. namespace ml { export namespace event { - //% fixedInstance block="still" - export const Still = new MlEvent(2, "still"); - //% fixedInstance block="wave" - export const Wave = new MlEvent(3, "wave"); - //% fixedInstance block="clap" - export const Clap = new MlEvent(4, "clap"); + //% fixedInstance block="Not a spell" + export const NotASpell = new MlEvent(2, "Not a spell"); + //% fixedInstance block="poke" + export const Poke = new MlEvent(3, "poke"); + //% fixedInstance block="waggle" + export const Waggle = new MlEvent(4, "waggle"); + //% fixedInstance block="flick" + export const Flick = new MlEvent(5, "flick"); + //% fixedInstance block="circle" + export const Circle = new MlEvent(6, "circle"); } - events = [event.Unknown,event.Still,event.Wave,event.Clap]; + events = [event.Unknown,event.NotASpell,event.Poke,event.Waggle,event.Flick,event.Circle]; control.onEvent(MlRunnerIds.MlRunnerInference, 1, () => { if (!event.Unknown.onStartHandler) { @@ -24,23 +28,33 @@ namespace ml { } }); control.onEvent(MlRunnerIds.MlRunnerInference, 2, () => { - if (!event.Still.onStartHandler) { - maybeUpdateEventStats(event.Still); + if (!event.NotASpell.onStartHandler) { + maybeUpdateEventStats(event.NotASpell); } }); control.onEvent(MlRunnerIds.MlRunnerInference, 3, () => { - if (!event.Wave.onStartHandler) { - maybeUpdateEventStats(event.Wave); + if (!event.Poke.onStartHandler) { + maybeUpdateEventStats(event.Poke); } }); control.onEvent(MlRunnerIds.MlRunnerInference, 4, () => { - if (!event.Clap.onStartHandler) { - maybeUpdateEventStats(event.Clap); + if (!event.Waggle.onStartHandler) { + maybeUpdateEventStats(event.Waggle); + } + }); + control.onEvent(MlRunnerIds.MlRunnerInference, 5, () => { + if (!event.Flick.onStartHandler) { + maybeUpdateEventStats(event.Flick); + } + }); + control.onEvent(MlRunnerIds.MlRunnerInference, 6, () => { + if (!event.Circle.onStartHandler) { + maybeUpdateEventStats(event.Circle); } }); getModelBlob = (): Buffer => { - const result = hex\`4C444F4D38001400320003000000000000000003CDCC4C3F067374696C6C0000CDCC4C3F0577617665000000CDCC4C3F05636C6170000000620F47304D4C344650000000700D0000A40500000000000000000000A80000000800000001000000080000000100000000000000000000000000000000000000180000000000000003000000000000002DE9F05F0F460169091839600021796038680346B3EC1E1A07F2080292EC010A20EE010A30EE210AA2EC010A92EC010A20EE020A30EE220AA2EC010A92EC010A20EE030A30EE230AA2EC010A92EC010A20EE040A30EE240AA2EC010A92EC010A20EE050A30EE250AA2EC010A92EC010A20EE060A30EE260AA2EC010A92EC010A20EE070A30EE270AA2EC010A92EC010A20EE080A30EE280AA2EC010A92EC010A20EE090A30EE290AA2EC010A92EC010A20EE0A0A30EE2A0AA2EC010A92EC010A20EE0B0A30EE2B0AA2EC010A92EC010A20EE0C0A30EE2C0AA2EC010A92EC010A20EE0D0A30EE2D0AA2EC010A92EC010A20EE0E0A30EE2E0AA2EC010A92EC010A20EE0F0A30EE2F0AA2EC010A02F22402B3EC121A07F2440292EC010A20EE010A30EE210AA2EC010A92EC010A20EE020A30EE220AA2EC010A92EC010A20EE030A30EE230AA2EC010A92EC010A20EE040A30EE240AA2EC010A92EC010A20EE050A30EE250AA2EC010A92EC010A20EE060A30EE260AA2EC010A92EC010A20EE070A30EE270AA2EC010A92EC010A20EE080A30EE280AA2EC010A92EC010A20EE090A30EE290AA2EC010A02F23C02386800F2C00307F268021024B3EC010A07F20801F1EC0E0AF3EC0E7A60EEA70A21EE081A30EE200A61EEA81A30EE010A22EE092A30EE210A62EEA92A30EE020A23EE0A3A30EE220A63EEAA3A30EE030A24EE0B4A30EE230A64EEAB4A30EE040A25EE0C5A30EE240A65EEAC5A30EE050A26EE0D6A30EE250A66EEAD6A30EE060A27EE0E7A30EE260A30EE070AF1EC0A0AF3EC0A7A60EEA70A21EE081A30EE200A61EEA81A30EE010A22EE092A30EE210A62EEA92A30EE020A23EE0A3A30EE220A63EEAA3A30EE030A24EE0B4A30EE230A64EEAB4A30EE040A25EE0C5A30EE240A30EE050AA2EC010A013C8FD107F2680210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C2386800F2007307F208020324B3EC010A07F26801F1EC0E0AF3EC0E7A60EEA70A21EE081A30EE200A61EEA81A30EE010A22EE092A30EE210A62EEA92A30EE020A23EE0A3A30EE220A63EEAA3A30EE030A24EE0B4A30EE230A64EEAB4A30EE040A25EE0C5A30EE240A65EEAC5A30EE050A26EE0D6A30EE250A66EEAD6A30EE060A27EE0E7A30EE260A30EE070AF1EC020AF3EC027A60EEA70A21EE081A30EE200A30EE010AA2EC010A013CAFD107F208021046032100F002F8BDE8F09F012938B5D0ED002A29D9031D00EB8102F3EC017AF4EE627AF1EE10FAC8BFF0EE672A9A42F4D1002402EE104A054695ED000A30EE620A00F015F80134A14232EE002AA5EC010AF2D8002390ED007AC7EE027A01339942E0EC017AF6D838BD0029E1D138BDDFED297AB4EEE70AF1EE10FA48D4DFED277AB4EEE70AF1EE10FA3ADCDFED247ADFED244A9FED243ADFED243A9FED245A9FED244ADFED245A9FED246ADFED246A60EE277AB7EE007A77EEA47A77EEE47AA7EE830AFDEEE74AA7EEA30AF0EE457AE4EE007A14EE903AE7EE805AA5EE806AE6EE006AF0EE667AF0EE476AE7EE806AA6EE807A17EE102A02EBC35300EE103A7047DFED107AB7EE007A87EE270A70479FED0C0A704700000000AAC20000AE423BAAB83F0000404B007231BF8EBEBFB56E2F093C00A0B43AADAD2A3D28AA2A3EFBFFFF3E00000000DB2F3040CC83473E7918C73F9929C0BFD5D4943FA2BF6BBF76642F4024A45D3FD679634058370E3D232CF43FC629CDBDA4DAE03F45CFC73F6B82F63FF62E04408B6ED73FAFB6D53F17AB8A408DC75ABF8F3643409379BFBFDBC52840FB4F93BF73B80A3F0042C8BFB7D1E93E4AF4A8BF6B97F23E8039A7BF2390C03D68C612C006C4BD3D77910EC06B978E3DC81105C0489F9940212B0DBD3E0DB340C4538FBE2150BE40258886BE8CB767405710F1BFB5CE3C408672E0BF81F045402A780AC0C05A11BD441C45BD76938BBE7168D03EF11E1B3E84C5A03CD831ADBE2EBAA33D5A31F63D8C8E11BD09914ABD6DE2273CDB2A293D39918ABE31D96B3E760E74BD650DDB3C4EDA6F3D71C208BE01B3A63E3C42673E9659E5BDADE0683E5A85C0BE0D0189BD48D45DBC52D349BC26158B3E4F86573D81D6FD3DD6B396BE6B99ECBD60A162BD4DE8FD3DCED8BD3EC279C2BE048A823D181734BE2A7F16BDF32050BE3503463E4B11E23EAB5A6DBD26DEF83EE8792A3E068FA23C00BF143EBE6F6E3EB2DCDCBCE6065C3D6D71083EC3371EBE4A819B3EACF053BE42F9D6BC4A8D953DBDEE14BE0554AF3E8CF14ABF4D3F953EA6D645BEFD98163F502D1F3CD134773E87357B3E3134143E57116FBEEE640F3F2D78823D350FEE3BF67DDCBEAA1E19BD461E1FBEE425963E38C703BF246FCEBCA4C03C3D4F7581BD4B7ADC3DBBE3C13C7291F43D3F8AE6BD3283AE3D39336FBEA89739BE8DE6B43E0FE83BBEA0CB963D3796EE3D9703DF3EF3CB7B3E6BA3B7BE82DE053ED860DF3C40B4B3BE96376C3E24DAEDBE074C8BBC8713B43DBF2799BE2E1DFFBC6630E63D7EA182BE0AE6DBBEBF75EA3E401D96BBC6F8B73ED2DB2CBE1167AA3ED81019BE47BF7E3D46CA9EBE26D9293EA7CE83BEDCD661BDDEEDDC3D9C76E1BDC5A2623E4C6B933E253695BE48459D3E779B4D3EF053E03D5413B43C86D03B3ECB7AB6BC01FF5A3D16E39DBE76B107BEC54E943E59177A3EBBC05C3E106ACF3EC2AFC7BD6F31363E16E09C3E97AD38BE7DF0393EC9318C3DD8C790BEB8A2F0BD1A0CAC3E6AAC19BF279FBABB0927FABA207CBFBEBCA0233D95A190BDA2B9073EC3B02CBACFEC623C8FEB1CBE06D779BE8A5EB5BCF93158BE8B90B83E24601BBEF8C07E3E4BD9AF3E2AF0D9BE18B4E53E3A91013D92D2023DEB698CBB7707FE3D2914B0BE0C5451BDAD7E7FBEEA2D05BEB1A19DBE6DD648BEAB781CBE9F22313E651AC63ED9121FBDF0DCDB3C26EE89BC5BDBE7BD6604B6BE4D8921BE291B52BD09FC16BEFDE191BE583A653E0DE13C3BCC762FBD0F5F253EA4FB34BE33539CBE017830BED3429C3DAC7F64BDE3F4293DE95048BCA26CBE3E9F45A3BD88D59ABECB82363DCEDF813E8F23D23EA6F346BC8569A63E322B2D3D1BF7F13DC44BAD3E0DBC7E3E2C66773EF28215BEB376F73DE79A75BC8A4764BE210F52BEE482123EBAE925BD3F38B53D40AE6E3C2E28BBBC9AA9ADBE3A60DEBE63F94EBD33199F3E7240FCBE518E843EC12877BD0956733E0CE295BCDC81D6BDE1753DBD30F8943E7A3A123D74DBAD3D6BDEC1BDB8EAE0BBA0825DBCA0CF6A3ECD02C23E0484013EFB5DB43ED6289C3E383931BECA429DBEE2CFC63E785D57BD202BCC3AAE7921BE1919A13CC1C5433ED21EF83EF4EA3ABE0C4DC53E27A4873DDD0FE6BDE0BBB5BE653E923EB0DA5E3E09B931BFB8F10E3DD0E1AA3DAFB3403FA3CA58BEF7052FBE981CE7BD680DBA3DDE1D703E59FD19BECAC7403EAC8A7EBEA413553CF489C5BDF7BC15BEC284BE3E96D6043F603ECCBD943691BE1ED1F1BDE69B2ABDD82FBF3D5ECB71BECC36213E055AA63E0E5D00BC3C9351BBCC0A0F3E1FD3E8BC0131CEBE4CACB33D42654EBE9782A53C17EB9F3C558772BD5906DEBD32A93C3D7F52BD3DB8F2D33EA05E1BBE0DF67CBE48FF303D60309D3D4E73BDBE88FEB63DF622CA3BFCAB443DDAB5AD3B79CA3DBD0DCDF3BD23271FBEF4C1EA3C8725113ECCC27EBE7850B83E2BC850BE96CA0A3F1988053E7D45B5BDAEEA9E3CD281DDBDC1A583BE8DAA373EC07D213EC2DCE83DF75FA7BE764FB73E020907BDFA0D673E490B253D38FD8A3D0FBDBDBEC3DCAE3E5082F33E994CA93DA303563D77FC4DBC38EA82BEBBE24EBDDC78EBBD584C5B3B20098EBE54D1243EBDDE4A3E8CE0EF3C752CE33D94F2253EDB27CEBE4FE0133E309A1BBC1E9EC9BD6E9FE33DE7D0193F3A6DBDBDBA5DF03EAFD034BDB5D7793DF99D8DBE5D3597BE527D50BC218DBB3EB59C0DBE64C9093F50FD9F3DEEE7953E247509BF5CE09DBDAD1B8DBE54E4603D3654D9BEC1D262BDF8717D3E216302BFB6E6A73E930365BD1092853E231E72BEFADB453DB9493CBE04BDD03DFC2CBFBD155BBA3E40E29CBEC3F850BB9E16F43E435F07BEC210C93DFBBDD73E2F71613B9F45B33EF1FFB23BD2850FBFD369A9BE56CB73BED885963C40A96BBE86FE633E2A31BFBD305B45BD75A6C7BCEABD773D406DA0BD161EFF3DE91235BEFF1F27BDE22B1BBE060103BDFB14103D202214BF3B4388BE3EB72F3EB8A02C3F0F117C3E6A1D5E3EAD933ABDEA9299BE1B09BEBE2527B73DA2F81DBF7BF828BF99D50D3FB80D603F3224CF3ED515743DB713A13E41F86B3FEA854C3E7857E4BE39D914BFAF328EBEA14C11BFD0E2903E2013B63C1AF106BE068673BE7AFD4F3E1A98CD3EEC9DB73EE70F1BBF408E81BE6836B5BED0C760BEC3D81BBEFC2155BE7194FB3D66BDA03E0E6F38BDF2416FBE11D6CBBED3521D3F34624E3FC5BC8F3EF54744BE3970103F8D3E19BF65AE083D\`; + const result = hex\`4C444F4D58001400320003000000000000000005CDCC4C3F0C4E6F742061207370656C6C00000000CDCC4C3F05706F6B65000000CDCC4C3F07776167676C6500CDCC4C3F06666C69636B0000CDCC4C3F07636972636C6500620F47304D4C344650000000F80D0000A40500000000000000000000A80000000800000001000000080000000100000000000000000000000000000000000000180000000000000005000000000000002DE9F05F0F460169091839600021796038680346B3EC1E1A07F2080292EC010A20EE010A30EE210AA2EC010A92EC010A20EE020A30EE220AA2EC010A92EC010A20EE030A30EE230AA2EC010A92EC010A20EE040A30EE240AA2EC010A92EC010A20EE050A30EE250AA2EC010A92EC010A20EE060A30EE260AA2EC010A92EC010A20EE070A30EE270AA2EC010A92EC010A20EE080A30EE280AA2EC010A92EC010A20EE090A30EE290AA2EC010A92EC010A20EE0A0A30EE2A0AA2EC010A92EC010A20EE0B0A30EE2B0AA2EC010A92EC010A20EE0C0A30EE2C0AA2EC010A92EC010A20EE0D0A30EE2D0AA2EC010A92EC010A20EE0E0A30EE2E0AA2EC010A92EC010A20EE0F0A30EE2F0AA2EC010A02F22402B3EC121A07F2440292EC010A20EE010A30EE210AA2EC010A92EC010A20EE020A30EE220AA2EC010A92EC010A20EE030A30EE230AA2EC010A92EC010A20EE040A30EE240AA2EC010A92EC010A20EE050A30EE250AA2EC010A92EC010A20EE060A30EE260AA2EC010A92EC010A20EE070A30EE270AA2EC010A92EC010A20EE080A30EE280AA2EC010A92EC010A20EE090A30EE290AA2EC010A02F23C02386800F2C00307F268021024B3EC010A07F20801F1EC0E0AF3EC0E7A60EEA70A21EE081A30EE200A61EEA81A30EE010A22EE092A30EE210A62EEA92A30EE020A23EE0A3A30EE220A63EEAA3A30EE030A24EE0B4A30EE230A64EEAB4A30EE040A25EE0C5A30EE240A65EEAC5A30EE050A26EE0D6A30EE250A66EEAD6A30EE060A27EE0E7A30EE260A30EE070AF1EC0A0AF3EC0A7A60EEA70A21EE081A30EE200A61EEA81A30EE010A22EE092A30EE210A62EEA92A30EE020A23EE0A3A30EE220A63EEAA3A30EE030A24EE0B4A30EE230A64EEAB4A30EE040A25EE0C5A30EE240A30EE050AA2EC010A013C8FD107F2680210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C210680028B8BF40F2000001C2386800F2007307F208020524B3EC010A07F26801F1EC0E0AF3EC0E7A60EEA70A21EE081A30EE200A61EEA81A30EE010A22EE092A30EE210A62EEA92A30EE020A23EE0A3A30EE220A63EEAA3A30EE030A24EE0B4A30EE230A64EEAB4A30EE040A25EE0C5A30EE240A65EEAC5A30EE050A26EE0D6A30EE250A66EEAD6A30EE060A27EE0E7A30EE260A30EE070AF1EC020AF3EC027A60EEA70A21EE081A30EE200A30EE010AA2EC010A013CAFD107F208021046052100F002F8BDE8F09F012938B5D0ED002A29D9031D00EB8102F3EC017AF4EE627AF1EE10FAC8BFF0EE672A9A42F4D1002402EE104A054695ED000A30EE620A00F015F80134A14232EE002AA5EC010AF2D8002390ED007AC7EE027A01339942E0EC017AF6D838BD0029E1D138BDDFED297AB4EEE70AF1EE10FA48D4DFED277AB4EEE70AF1EE10FA3ADCDFED247ADFED244A9FED243ADFED243A9FED245A9FED244ADFED245A9FED246ADFED246A60EE277AB7EE007A77EEA47A77EEE47AA7EE830AFDEEE74AA7EEA30AF0EE457AE4EE007A14EE903AE7EE805AA5EE806AE6EE006AF0EE667AF0EE476AE7EE806AA6EE807A17EE102A02EBC35300EE103A7047DFED107AB7EE007A87EE270A70479FED0C0A704700000000AAC20000AE423BAAB83F0000404B007231BF8EBEBFB56E2F093C00A0B43AADAD2A3D28AA2A3EFBFFFF3E00000000B3340140407DE7BF7B34E63FB7A606C0408CA83F933404BF8A39AE40693553BE91C59B40013F913EF68AEF40620FC5407D7FC53F8C23E13FFD650140A6BB2A40E8FA0E40A85E6D40055D39401C5194BF699F8C4076C333C089482E40B2B99CBF94069B3FD0FDC2BF0F7C323F6E08B3BF3B10683FBCC5E5BFE07DD13D403BF7BF6721053E5A2B69C09FF0DF3DAD13A1C07BA228417C76C6BFD1523F411693C4BF6A8C5841539D45BF96A17140B66AFEBFD1768240EB2733C0460C9240122A91C037638E3CFC1659BEAF64CBBE3BF0C43E08E9F63DE0C086BD4EF2A6BEC1D7CA3DB4B8713E043D8FBDA4EB4FBCC5CEE23C7918913D4412AEBE7881323E5F9448BEAA746D3DA77A493E4874EBBD0880DB3E360DAA3E44A2F83D5F80393E0EFA9EBE3A7A7C3DFE2CD33C005400BD9432693E46CB0E3E44ECB33D1E3FC0BE8C402B3E8869013DA5403C3E4A29673E9C7BAEBE20DB373E622E07BD5BE131BEF38B4CBEEF34F73DF7BDF83ED45E823E5192023F5860963E9ECF8D3E18D3F63E1A7DF73DF221DA3D9264863EB079223ED83881BA6C59443EFFB83BBE68AC973E5D0CA5BEE7C50EBD365BBA3E7720BDBEAE81963EB2F89EBEEB50D13E43BE50BD2B76D63E80DDA53E18702E3E7359413DEDDB8A3EA8B57C3C7A3287BBE9D6A7BE55EBCDBDCAB1EA3C668294BDA5B617BE163BCE3AC039503DCCD26EBE21D78A3B802CAD3D84A3D63E79C31CBEEF1C163E1F99803E024EA5BE8618D53E6E39AFBE622A643EB2723C3E0603E73E4A79B03EDB6AAEBE34E7EB3D1A74A83E6D5ECEBE24D16F3EAC6573BEA07688BD08A1B2BD8F98783B7A3446BD1D87D8BDF1F82EBD651DE2BE65A3973EB49B383E6F29EC3E445605BEF28AFBBBDC145CBE34AED13DC230D13D20D3853E894208BE5C08D23D7743963E12781D3DE515103F51A7323E3ACA50BE3919FA3E227CFC3E3A248DBC9FC8893E3308923D17DAF23E4248083E9F6F3DBE9300B8BEC7AC563F5E44F7BD1606D03DC7E52D3F6C12C23CE271723E6E497D3EB43871BDC0EF333DC270053F839730BDE2EC843E93ECC43E64BB06BF3A3487BD003FCEBC8EE5CBBE6852C6BD418427BEC74CBA3D6298DBBD64FAA03C5FAAFFBDE6C883BEB02CFA3D3F8E1FBE9DCD8E3E63D8C43DCDBEB53EA7A4933E437DEABE2856EE3EC1FF663E13398A3E76D3D4BCBCEA533EAA0DA1BE2C392A3EA84FCEBA52A557BDA1C823BEEF37263E0489A53E65CC6C3EA0A2EC3EB270963D7E21B3BD07D7743E9CB134BE80B25EBD349E583BCCE3B0BDD78FBD3D05B053BE279ED83D18F6603E059DCCBC81940F3E128D55BDB47E6DBE07973FBD51E7173E51E5A03DD09B89BD1143E9BDEE1F633E67B31BBE190393BE7E95673EC442A43D1F75A13EEF15903D3E8B983EC6E9A13DBFC5903E261BAB3E4D488E3E51DE213EB942B3BEFE77B6BD99F4B9BC7E4ED4BDC676B4BDFED7813ED978433EBB16DE3D9AE3A7BC5A4799BE4952F2BEB0055DBE2C3638BE9FFD8F3DEE790DBF9BCA893EB6B731BD6E0D003F0DA5AEBBEA7BEABD9B2470BE093F4C3EAAD722BEF39EA63EE04E8E3DEE2BA73E678EDB3E181CB73E1DE1C43DC675B3BE9056023E20BEE8BE1D6D4EBE024DA4BEAEA4CC3CCB17983ECAC51DBE8BE0B2BE949457BEA718C6BDA847023DC493A0BD75BE8EBD45B84E3D822C123CD1C937BE53928E3E2855CA3D76428C3CA32A0B3E5C9ADA3D867FBB3EF7B6B6BEE14DBCBDE219193E3E748C3E0F7EC6BD331784BDA90FB03E5FBE57BEC02A633E258C273E0FE63C3E9544C33E2743403FD7B2AFBECF5118BEDE27DABDD032623D11FF0CBFFD07B33E5E8AA0BD07AF22BE4725343EC7D79ABEDB55493C28580DBF7636F6BE061805BEF100543E179E94BE3C73263C7481233E593C563E401CC3BD6D77D13C980D163E70FE0ABEB1EA52BD859F38BE63902DBEAC5694BC95679CBD100E583EBBE71C3E67F6EB3EA39FC0BC68E289BEC6B8883D5F6113BFA3B968BE988218BF2125813DB1D241BE0C7F013FF94C04BD197099BDFB36F33C057F29BE3DA3E6BE75A4F4BE6A43943E745D6B3D2B37DCBE2DCD31BE5E19843D79750F3EA90ADC3DFFFAEE3D4E80923D3A4B8D3E978A473FF64A953EBC42F13DE74E373E19133FBD62D79DBD279C8CBDBC818BBCDFA5C3BE86148D3E6B89DDBC7547E0BD90E3043D1C7185BEE5CB2EBE6265BA3EE2AAEEBDC203D9BDCF492C3E1319B83EFF12B9BD1EEF143F4B62BFBD72ECC43E65654ABEB7C083BE295B38BDC1792E3F877697BE656FC03EC910AB3EC27413BDCD824FBEA0C2983C1BBD10BD6B689FBC001BAFBDDED32A3EFF1CDD3E93AF1BBF9200E73E8F4F84BDC7DF833DEE5427BEFFA4543E142293BEE2A6B53EA62A413EE20B2C3F8B637B3D9951A43EC681CA3E8B29D53C382F1E3E3628F2BCC8BDA9BEEACE0C3EE1C0593EDCCFE7BEBFEB3C3DFB099FBDE425803E84A80CBE14B194BCDA199EBD056D8C3E17688CBEBA92C3BD36721FBD9CA1103ECD07C3BD00FEA63E01E0DEBDF6969BBE03E435BE062D6BBE92A62D3F4C2D60BE1448903E15C082BE51951A3E38988D3E4AAC8C3FFA42953D4F55D7BDEB7489BEC63C45BFE9B2873FF03A0F3EB905C73EEDD8E5BCE6B98ABEAACB0EBEF995E0BE371A2BBE430FFCBE7AC404BE42CCE3BE4C202B3EDCE7F2BE1FB9ADBD39C3813F04D97A3F206ECFBE76A61EBEAF860FBF968D49BE1BBEB53E858C3F3F2697553D806E8A3E8CFB0A3F239DFABE16F23B3FEBF700BEA62E8FBEBCAF223E1453803F80C4BA3CDC6D0CBF0002503E93886E3EE598EA3D82A473BEF4E2DCBEEEE513BEFAB332BF6A9DBE3D66A118BF2DE2C2BE81A5B0BCD83D573C7FBF3B3F52D9493D2BEA44BCE5E153BE667C033FE745403FB1CF84BDCE094E3FB6961E3E1D0C553EFC1A29BD9FF5303F896281BEB5391ABE7F7C9F3F8BD5FCBDCBD349BEFA1C8FBDC38BAFBD62459BBEC0739A3C164B57BE70715B3ECEB3B3BED2A676BE0000000000000000\`; return result; }; @@ -53,5230 +67,8588 @@ namespace ml { "dataset.json": "{ "data": [ { - "ID": 1717765478850, - "name": "still", - "matrix": [ - false, - false, - false, - false, - false, - true, - true, - false, - true, - true, - false, - false, - false, - false, - false, - false, - true, - true, - true, - false, - false, - false, - false, - false, - false - ], + "id": "a847ac69-2c80-49cd-bee2-f7fe430b7c4c", + "name": "Not a spell", + "icon": "No", + "createdAt": 1730110768152, "recordings": [ { - "ID": 1727951926382, + "id": "a7045ed7-4629-4d46-9e34-843919413bd9", "data": { "x": [ - -0.016, - -0.02, - -0.012, - -0.02, - -0.016, - -0.02, - -0.024, - -0.02, - -0.016, - -0.02, - -0.02, - -0.024, - -0.016, - -0.024, - -0.024, - -0.028, - -0.024, - -0.016, - -0.02, - -0.024, - -0.016, - -0.02, - -0.024, - -0.008, - -0.016, - -0.016, - -0.02, - -0.016, - -0.02, - -0.02, - -0.028, - -0.016, - -0.024, - -0.02, - -0.016, - -0.016, - -0.024, - -0.016, - -0.016, - -0.02, - -0.024, - -0.02, - -0.024, - -0.016, - -0.016, - -0.016, - -0.016, - -0.02, - -0.012, - -0.024, - -0.024, - -0.012, - -0.02, - -0.016, - -0.012, - -0.02, - -0.016, - -0.024, - -0.02, - -0.02, - -0.012, - -0.02, - -0.02, - -0.02, - -0.024, - -0.02, - -0.016, - -0.012, - -0.016, - -0.02, - -0.02, - -0.012, - -0.012, - -0.024, - -0.024, - -0.016, - -0.016, - -0.016, - -0.016, - -0.024, - -0.02, - -0.02, - -0.02, - -0.016, - -0.016, - -0.016, - -0.028, - -0.016, - -0.02, - -0.016 - ], - "y": [ - 0.112, - 0.112, - 0.112, - 0.108, - 0.108, - 0.112, - 0.116, - 0.108, - 0.116, - 0.116, - 0.112, - 0.112, - 0.112, - 0.116, - 0.112, - 0.116, - 0.112, - 0.108, - 0.112, - 0.112, - 0.116, - 0.108, - 0.108, - 0.112, - 0.104, - 0.12, - 0.108, - 0.112, - 0.116, - 0.108, - 0.112, - 0.108, - 0.112, - 0.112, - 0.12, - 0.12, - 0.112, - 0.112, - 0.116, - 0.112, - 0.104, - 0.104, - 0.112, - 0.108, - 0.108, - 0.108, - 0.116, - 0.108, - 0.112, - 0.116, - 0.108, - 0.116, - 0.112, - 0.112, - 0.112, - 0.112, - 0.108, - 0.108, - 0.108, - 0.112, - 0.112, - 0.108, - 0.116, - 0.112, - 0.12, - 0.116, - 0.116, - 0.112, - 0.116, - 0.112, - 0.112, - 0.116, - 0.12, - 0.108, - 0.116, - 0.116, - 0.116, - 0.112, - 0.112, - 0.112, - 0.112, - 0.116, - 0.108, - 0.116, - 0.112, - 0.108, - 0.112, + 0.788, + 0.76, + 0.828, + 0.928, + 0.948, + 0.932, + 0.956, + 1.012, + 0.968, + 1.032, + 1.208, + 1.1, + 1.016, + 0.968, + 0.884, + 0.748, + 0.596, + 0.48, + 0.248, + 0.204, 0.108, - 0.112, - 0.112 + -0.176, + -0.132, + -0.08, + -0.148, + -0.1, + -0.096, + -0.304, + -0.332, + -0.24, + -0.248, + -0.268, + -0.332, + -0.344, + -0.424, + -0.544, + -0.572, + -0.54, + -0.568, + -0.668, + -0.748, + -0.672, + -0.616, + -0.768, + -0.892, + -0.824, + -0.74, + -0.896 ], - "z": [ - -1.06, - -1.052, - -1.056, - -1.052, - -1.052, - -1.056, - -1.056, - -1.048, - -1.048, - -1.052, - -1.052, - -1.048, - -1.052, - -1.052, - -1.052, - -1.048, - -1.052, - -1.048, - -1.052, - -1.044, - -1.056, - -1.052, - -1.052, - -1.048, - -1.052, - -1.052, - -1.048, - -1.052, - -1.048, - -1.052, - -1.052, - -1.052, - -1.052, - -1.06, - -1.056, - -1.048, - -1.044, - -1.052, - -1.048, - -1.048, - -1.048, - -1.052, - -1.048, - -1.044, - -1.052, - -1.056, - -1.048, - -1.048, - -1.048, - -1.052, - -1.052, - -1.052, - -1.052, - -1.056, - -1.052, - -1.052, - -1.044, - -1.056, - -1.052, - -1.056, - -1.056, - -1.052, - -1.048, - -1.048, - -1.056, - -1.056, - -1.052, - -1.052, - -1.056, - -1.052, - -1.056, - -1.044, - -1.044, - -1.048, - -1.048, - -1.06, - -1.052, - -1.048, - -1.056, - -1.048, - -1.048, - -1.048, - -1.052, - -1.048, - -1.052, - -1.052, - -1.052, - -1.048, - -1.044, - -1.048 + "y": [ + 0.152, + 0.084, + 0.068, + 0.06, + 0.012, + -0.064, + -0.076, + -0.044, + -0.04, + -0.036, + 0.024, + 0.096, + 0.044, + -0.032, + 0.008, + 0.076, + 0.268, + 0.312, + 0.356, + 0.4, + 0.42, + 0.484, + 0.488, + 0.532, + 0.544, + 0.592, + 0.584, + 0.588, + 0.648, + 0.66, + 0.66, + 0.652, + 0.64, + 0.612, + 0.56, + 0.54, + 0.52, + 0.496, + 0.46, + 0.424, + 0.444, + 0.404, + 0.36, + 0.328, + 0.316, + 0.268, + 0.248, + 0.204 + ], + "z": [ + -0.52, + -0.548, + -0.656, + -0.748, + -0.752, + -0.744, + -0.752, + -0.796, + -0.684, + -0.656, + -0.804, + -0.896, + -0.976, + -0.972, + -0.908, + -0.88, + -0.744, + -0.656, + -0.816, + -0.956, + -0.576, + -0.692, + -0.788, + -0.828, + -0.78, + -0.804, + -0.8, + -0.548, + -0.536, + -0.68, + -0.672, + -0.652, + -0.572, + -0.608, + -0.628, + -0.604, + -0.616, + -0.656, + -0.644, + -0.568, + -0.516, + -0.652, + -0.816, + -0.648, + -0.452, + -0.48, + -0.624, + -0.488 ] - } + }, + "createdAt": 1730110843600 }, { - "ID": 1717765566215, + "id": "08ca8fa0-86f2-4980-916f-6a3c80373828", "data": { "x": [ - 0.02, - 0, - 0.004, - 0, - 0, - 0, - 0.008, - 0.012, - 0.004, - 0.008, - 0.004, - 0, - 0.004, - 0.008, - 0, - -0.004, - 0.008, - 0.02, - 0.004, - -0.004, - 0.004, - 0.008, - 0.02, - 0.008, - 0.008, - 0.008, - 0.012, - 0.016, - 0.012, - 0.012, - 0.008, - 0.012, - -0.004, - 0, - 0.016, - 0.02, - 0.02, - 0.004, - -0.012, - 0, - 0.024, - 0.016, - 0.012, - 0.004, - 0, - 0.004, - 0.012, - 0.012, - 0.008, - 0.024, - 0.02, - 0.012, - 0.004, - 0.004, - 0, - 0.016, - 0.016, - 0.012, - 0.008, - 0.012, - 0.004, - -0.004, - 0.008, - 0.012, - 0.004, - 0.004, - -0.004, - 0.012, - 0.016, - 0.004, - 0.008, - 0.016, - 0.032, - 0.012, - -0.012, - -0.008, - 0.004, - 0.028, - 0.02, - 0.008, - -0.004, - 0, - 0.024, - 0.024, - 0.008, - 0.008, - -0.004, - 0.004, - 0.016, - 0.02 - ], - "y": [ - -0.168, - -0.16, - -0.144, - -0.116, + -0.104, + -0.124, -0.128, - -0.136, - -0.148, - -0.176, - -0.184, - -0.18, - -0.152, - -0.136, + -0.112, + -0.096, + -0.108, + -0.104, + -0.108, + -0.084, + -0.108, + -0.128, + -0.116, + -0.108, + -0.096, + -0.096, + -0.104, + -0.084, + -0.092, + -0.108, + -0.104, + -0.088, + -0.108, + -0.116, + -0.14, -0.156, - -0.168, - -0.168, - -0.16, - -0.148, - -0.144, - -0.12, + -0.132, + -0.132, -0.14, - -0.172, - -0.172, - -0.168, -0.132, - -0.124, - -0.152, - -0.16, -0.136, - -0.124, + -0.12, + -0.068, + -0.052, + -0.052, + -0.08, -0.132, + -0.192, + -0.204, -0.176, - -0.172, - -0.14, - -0.124, - -0.136, - -0.172, - -0.172, - -0.14, - -0.104, - -0.136, - -0.168, - -0.164, - -0.152, - -0.144, - -0.136, - -0.14, - -0.116, - -0.128, - -0.16, -0.164, -0.164, - -0.128, - -0.124, - -0.14, - -0.16, - -0.156, - -0.148, - -0.152, - -0.168, - -0.156, - -0.128, - -0.136, - -0.144, -0.16, - -0.148, - -0.124, - -0.128, - -0.148, - -0.136, - -0.14, -0.152, - -0.16, - -0.164, - -0.136, - -0.116, - -0.132, - -0.16, - -0.156, - -0.14, - -0.112, - -0.112, - -0.136, - -0.156, - -0.16, - -0.128, - -0.116, - -0.112, -0.124, - -0.14, - -0.148 + -0.088, + -0.076, + -0.1, + -0.104, + -0.128 ], - "z": [ - -1.048, - -1.052, - -1.036, - -1.036, - -1.056, - -1.072, - -1.056, - -1.048, - -1.06, - -1.048, - -1.048, - -1.044, - -1.04, - -1.048, - -1.056, - -1.048, - -1.028, - -1.028, - -1.052, - -1.076, - -1.068, - -1.04, - -1.052, - -1.068, - -1.048, - -1.06, - -1.056, - -1.084, - -1.088, - -1.068, - -1.04, - -1.028, - -1.048, - -1.068, - -1.044, - -1.008, - -1.016, - -1.048, - -1.072, - -1.056, - -1.044, - -1.068, - -1.064, - -1.056, - -1.044, - -1.056, - -1.068, - -1.084, - -1.092, - -1.076, - -1.064, - -1.048, - -1.044, - -1.044, - -1.056, - -1.064, - -1.056, - -1.068, - -1.028, - -1.004, - -1.032, - -1.04, - -1.048, - -1.064, - -1.06, - -1.06, - -1.064, - -1.052, - -1.06, - -1.072, - -1.072, - -1.048, - -1.028, - -1.056, - -1.084, - -1.084, - -1.06, - -1.028, - -1.028, - -1.056, - -1.08, - -1.068, - -1.044, - -1.028, - -1.04, - -1.048, - -1.056, - -1.064, - -1.044, - -1.036 - ] - } - }, - { - "ID": 1717765560761, - "data": { - "x": [ - 0.976, - 0.968, - 0.96, - 0.968, - 0.956, - 0.96, - 0.956, - 0.968, - 0.972, + "y": [ + 0.936, + 0.936, + 0.932, + 0.936, + 0.924, + 0.932, + 0.928, + 0.928, + 0.936, + 0.932, + 0.932, + 0.924, + 0.932, + 0.936, + 0.932, + 0.94, + 0.94, + 0.932, + 0.936, + 0.948, + 0.948, + 0.932, + 0.932, + 0.92, + 0.916, + 0.908, + 0.916, + 0.884, + 0.892, + 0.88, + 0.896, + 0.924, 0.972, + 1, + 0.976, + 0.928, + 0.884, + 0.832, + 0.812, + 0.82, + 0.816, + 0.848, + 0.9, + 0.98, + 1.032, + 1.032, + 1.012, 0.964, - 0.956, - 0.96, - 0.964, - 0.964, - 0.968, - 0.988, - 0.956, - 0.952, - 0.952, - 0.964, - 0.972, + 0.904 + ], + "z": [ + -0.5, + -0.488, + -0.484, + -0.496, + -0.5, + -0.508, + -0.504, + -0.492, + -0.504, + -0.504, + -0.492, + -0.488, + -0.488, + -0.492, + -0.492, + -0.48, + -0.5, + -0.5, + -0.484, + -0.48, + -0.48, + -0.496, + -0.504, + -0.512, + -0.528, + -0.54, + -0.544, + -0.504, + -0.544, + -0.532, + -0.504, + -0.504, + -0.496, + -0.504, + -0.532, + -0.532, + -0.536, + -0.56, + -0.6, + -0.612, + -0.616, + -0.628, + -0.568, + -0.488, + -0.416, + -0.396, + -0.412, + -0.456, + -0.464 + ] + }, + "createdAt": 1730110838090 + }, + { + "id": "62d25bc6-ffe7-4188-9488-0038f1fcfb4b", + "data": { + "x": [ + -0.012, + -0.02, + -0.016, + -0.036, + -0.052, + -0.036, + -0.032, + -0.04, + -0.044, + -0.036, + -0.04, + -0.028, + -0.008, + -0.004, + -0.008, + -0.012, + -0.028, + -0.032, + -0.036, + -0.04, + -0.016, + -0.024, + -0.052, + -0.048, + -0.032, + -0.068, + -0.056, + -0.036, + -0.024, + -0.036, + -0.052, + -0.032, + -0.028, + -0.02, + -0.012, + -0.036, + -0.028, + -0.032, + -0.06, + -0.036, + -0.04, + -0.056, + -0.032, + -0.02, + -0.024, + -0.024, + -0.024, + -0.044, + -0.032 + ], + "y": [ + -0.952, + -0.952, + -0.948, + -0.976, + -0.972, + -0.98, + -0.992, + -0.992, + -0.976, + -0.968, + -0.968, + -0.964, + -0.96, + -0.968, + -0.968, + -0.964, + -0.976, + -0.968, + -0.988, + -0.992, + -0.976, + -0.976, + -0.992, + -0.976, + -0.964, + -0.98, + -0.992, + -0.98, + -0.972, + -0.98, + -0.984, + -0.98, + -0.98, + -0.98, + -0.984, + -0.988, + -0.98, + -0.98, + -0.984, + -0.98, + -0.972, + -0.972, + -0.968, + -0.968, + -0.968, + -0.964, + -0.984, + -0.976, + -0.98 + ], + "z": [ + -0.368, + -0.368, + -0.364, + -0.34, + -0.348, + -0.384, + -0.376, + -0.364, + -0.372, + -0.364, + -0.352, + -0.348, + -0.36, + -0.348, + -0.352, + -0.352, + -0.352, + -0.352, + -0.348, + -0.356, + -0.384, + -0.356, + -0.32, + -0.348, + -0.364, + -0.348, + -0.352, + -0.36, + -0.38, + -0.36, + -0.344, + -0.348, + -0.34, + -0.348, + -0.364, + -0.356, + -0.356, + -0.356, + -0.344, + -0.36, + -0.38, + -0.356, + -0.368, + -0.36, + -0.364, + -0.364, + -0.356, + -0.36, + -0.36 + ] + }, + "createdAt": 1730110833013 + }, + { + "id": "3db7f567-460a-478f-803d-b823bf6a4582", + "data": { + "x": [ + 0.66, + 0.64, + 0.648, + 0.668, + 0.676, + 0.656, + 0.632, + 0.648, + 0.656, + 0.636, + 0.624, + 0.648, + 0.652, + 0.648, + 0.636, + 0.648, + 0.672, + 0.668, + 0.656, + 0.668, + 0.668, + 0.64, + 0.636, + 0.64, + 0.64, + 0.66, + 0.66, + 0.66, + 0.664, + 0.668, + 0.652, + 0.648, + 0.652, + 0.64, + 0.64, + 0.632, + 0.648, + 0.684, + 0.716, + 0.708, + 0.7, + 0.684, + 0.688, + 0.696, + 0.692, + 0.708, + 0.692 + ], + "y": [ + 0.18, + 0.164, + 0.156, + 0.164, + 0.16, + 0.156, + 0.16, + 0.156, + 0.176, + 0.176, + 0.18, + 0.184, + 0.192, + 0.18, + 0.168, + 0.168, + 0.172, + 0.172, + 0.172, + 0.168, + 0.172, + 0.176, + 0.184, + 0.176, + 0.172, + 0.168, + 0.16, + 0.16, + 0.152, + 0.152, + 0.144, + 0.16, + 0.176, + 0.168, + 0.176, + 0.18, + 0.16, + 0.16, + 0.172, + 0.168, + 0.144, + 0.164, + 0.172, + 0.164, + 0.168, + 0.164, + 0.176 + ], + "z": [ + -0.772, + -0.784, + -0.784, + -0.808, + -0.796, + -0.784, + -0.784, + -0.8, + -0.8, + -0.788, + -0.772, + -0.772, + -0.768, + -0.772, + -0.776, + -0.78, + -0.772, + -0.764, + -0.76, + -0.788, + -0.788, + -0.772, + -0.768, + -0.776, + -0.784, + -0.784, + -0.772, + -0.764, + -0.772, + -0.792, + -0.792, + -0.78, + -0.776, + -0.756, + -0.764, + -0.764, + -0.756, + -0.76, + -0.772, + -0.74, + -0.752, + -0.752, + -0.744, + -0.728, + -0.724, + -0.74, + -0.74 + ] + }, + "createdAt": 1730110828469 + }, + { + "id": "99ca2691-cd53-4eac-b32a-dcb291fcb74b", + "data": { + "x": [ 0.972, - 0.96, - 0.968, - 0.96, 0.964, - 0.968, - 0.968, - 0.968, + 0.988, + 0.976, + 0.952, + 0.944, 0.964, + 0.976, 0.956, - 0.956, - 0.968, - 0.968, - 0.964, - 0.964, - 0.964, + 0.952, + 0.96, + 0.972, + 0.984, + 0.984, + 0.972, 0.968, 0.956, 0.964, - 0.984, + 0.972, 0.976, 0.964, + 0.976, + 0.984, 0.968, - 0.952, - 0.956, - 0.956, - 0.972, - 0.968, - 0.964, - 0.964, - 0.96, 0.968, - 0.964, - 0.964, + 0.952, 0.96, - 0.968, - 0.968, 0.972, - 0.968, - 0.96, - 0.968, 0.976, 0.956, - 0.96, 0.964, - 0.964, - 0.968, 0.968, - 0.968, - 0.96, 0.96, + 0.98, + 0.984, 0.964, + 0.948, + 0.952, + 0.976, + 0.98, 0.972, - 0.956, - 0.96, - 0.956, - 0.96, + 0.98, 0.972, 0.968, - 0.964, - 0.96, - 0.956, - 0.964, - 0.98, - 0.98, - 0.96, - 0.964, + 0.968, 0.96, - 0.956 + 0.984, + 0.976 + ], + "y": [ + 0.112, + 0.112, + 0.116, + 0.116, + 0.12, + 0.112, + 0.128, + 0.124, + 0.12, + 0.124, + 0.12, + 0.124, + 0.124, + 0.128, + 0.124, + 0.12, + 0.12, + 0.12, + 0.112, + 0.1, + 0.104, + 0.108, + 0.116, + 0.124, + 0.128, + 0.132, + 0.136, + 0.136, + 0.136, + 0.128, + 0.124, + 0.116, + 0.108, + 0.108, + 0.12, + 0.116, + 0.112, + 0.108, + 0.112, + 0.112, + 0.116, + 0.116, + 0.116, + 0.116, + 0.116, + 0.116, + 0.124, + 0.108 + ], + "z": [ + -0.344, + -0.324, + -0.328, + -0.316, + -0.312, + -0.32, + -0.312, + -0.328, + -0.332, + -0.328, + -0.324, + -0.328, + -0.308, + -0.308, + -0.304, + -0.324, + -0.32, + -0.312, + -0.328, + -0.336, + -0.336, + -0.34, + -0.34, + -0.332, + -0.34, + -0.324, + -0.308, + -0.296, + -0.292, + -0.3, + -0.312, + -0.32, + -0.32, + -0.328, + -0.316, + -0.336, + -0.344, + -0.332, + -0.344, + -0.332, + -0.324, + -0.308, + -0.316, + -0.324, + -0.316, + -0.288, + -0.316, + -0.328 + ] + }, + "createdAt": 1730110823337 + }, + { + "id": "2ae996d3-b806-468b-b60a-529dadc24877", + "data": { + "x": [ + -0.512, + -0.504, + -0.492, + -0.468, + -0.468, + -0.484, + -0.5, + -0.496, + -0.484, + -0.484, + -0.496, + -0.492, + -0.472, + -0.48, + -0.476, + -0.448, + -0.448, + -0.464, + -0.468, + -0.484, + -0.476, + -0.472, + -0.464, + -0.472, + -0.484, + -0.48, + -0.48, + -0.48, + -0.468, + -0.48, + -0.484, + -0.492, + -0.476, + -0.468, + -0.496, + -0.468, + -0.46, + -0.456, + -0.476, + -0.492, + -0.5, + -0.492, + -0.488, + -0.492, + -0.488, + -0.496, + -0.5, + -0.464 + ], + "y": [ + 0.116, + 0.12, + 0.128, + 0.128, + 0.128, + 0.116, + 0.132, + 0.144, + 0.136, + 0.14, + 0.136, + 0.16, + 0.14, + 0.144, + 0.14, + 0.136, + 0.128, + 0.132, + 0.132, + 0.132, + 0.136, + 0.136, + 0.132, + 0.128, + 0.14, + 0.152, + 0.14, + 0.124, + 0.112, + 0.104, + 0.136, + 0.144, + 0.14, + 0.128, + 0.128, + 0.144, + 0.136, + 0.128, + 0.116, + 0.108, + 0.108, + 0.124, + 0.128, + 0.128, + 0.124, + 0.136, + 0.132, + 0.128 ], - "y": [ - -0.224, - -0.204, - -0.2, - -0.208, - -0.212, - -0.204, - -0.184, - -0.192, - -0.22, - -0.228, - -0.2, - -0.204, - -0.216, - -0.22, - -0.192, - -0.196, - -0.208, - -0.236, + "z": [ + -0.936, + -0.932, + -0.928, + -0.936, + -0.928, + -0.92, + -0.92, + -0.92, + -0.916, + -0.916, + -0.912, + -0.912, + -0.92, + -0.908, + -0.932, + -0.936, + -0.924, + -0.932, + -0.948, + -0.928, + -0.928, + -0.912, + -0.936, + -0.924, + -0.92, + -0.924, + -0.916, + -0.904, + -0.94, + -0.936, + -0.916, + -0.896, + -0.936, + -0.936, + -0.928, + -0.932, + -0.9, + -0.916, + -0.936, + -0.94, + -0.928, + -0.924, + -0.94, + -0.924, + -0.92, + -0.916, + -0.9, + -0.908 + ] + }, + "createdAt": 1730110818555 + }, + { + "id": "a435a2c9-c26d-4436-b405-d0e659a7f677", + "data": { + "x": [ + 0.292, + 0.228, + -0.012, + -0.12, + -0.172, + -0.252, + -0.356, + -0.404, + -0.384, + -0.352, + -0.308, + -0.332, + -0.364, + -0.38, + -0.42, + -0.388, -0.244, - -0.22, - -0.208, - -0.192, - -0.224, - -0.224, - -0.22, - -0.228, - -0.22, - -0.204, - -0.216, - -0.204, - -0.2, - -0.204, - -0.224, - -0.22, - -0.224, - -0.22, - -0.2, - -0.204, - -0.228, - -0.22, - -0.212, - -0.228, - -0.192, + -0.172, + -0.176, + -0.176, + -0.172, -0.196, - -0.216, - -0.212, - -0.212, - -0.22, - -0.228, - -0.22, - -0.216, - -0.22, - -0.236, - -0.236, - -0.208, - -0.216, - -0.216, - -0.216, - -0.228, - -0.228, - -0.208, -0.2, + -0.156, + -0.08, + -0.068, + -0.052, + -0.008, + 0, + 0.068, + -0.048, + -0.148, + -0.128, + -0.132, + -0.176, -0.208, - -0.212, - -0.216, - -0.22, - -0.204, - -0.216, - -0.228, - -0.212, - -0.204, - -0.2, + -0.244, + -0.224, + -0.136, + -0.128, + -0.152, + -0.132, + -0.132, + -0.176, + -0.188, + -0.176, + -0.152, + -0.108 + ], + "y": [ + 0.188, + 0.088, + 0.072, + 0.168, + 0.184, + 0.18, + 0.108, + 0.1, + 0.096, + 0.124, + 0.164, + 0.212, + 0.212, + 0.18, + 0.136, + 0.168, + 0.196, + 0.224, + 0.212, + 0.188, + 0.188, + 0.196, + 0.192, + 0.164, + 0.164, + 0.148, + 0.132, + 0.164, + 0.168, + 0.12, + 0.152, + 0.124, + 0.06, + 0.04, + 0.016, + 0, + 0.008, + 0.004, + 0.004, + -0.004, + -0.028, + -0.02, + -0.004, + 0.024, + 0.02, + 0.04, + 0.044, + 0.04 + ], + "z": [ + -0.944, + -1.032, + -1.056, + -1.024, + -1.1, + -1.088, + -1.036, + -1.012, + -0.976, + -0.94, + -0.96, + -0.984, + -1.012, + -1.028, + -0.988, + -0.952, + -0.988, + -0.98, + -1.016, + -1.032, + -1, + -0.988, + -1.024, + -1.084, + -1.088, + -1.008, + -0.948, + -0.964, + -0.996, + -0.944, + -0.924, + -0.94, + -1.032, + -1.088, + -1.064, + -1.056, + -1.028, + -1.032, + -1.068, + -1.044, + -1.052, + -1.084, + -1.096, + -1.024, + -1.024, + -1.032, + -1.024, + -1.076 + ] + }, + "createdAt": 1730110814258 + }, + { + "id": "146782de-b559-462a-b122-098afb637033", + "data": { + "x": [ + -0.052, + 0.084, + 0.104, + 0.048, + 0.012, + -0.016, + -0.068, + -0.092, + -0.084, + 0, + 0.044, -0.204, - -0.196, - -0.208, - -0.236, - -0.236, - -0.216, - -0.208, - -0.208, - -0.22, - -0.24, - -0.24, - -0.216, - -0.212, + -0.336, + -0.308, + -0.428, + -0.544, + -0.552, + -0.504, + -0.512, + -0.532, + -0.492, + -0.452, + -0.456, + -0.404, + -0.4, + -0.42, + -0.368, + -0.344, + -0.312, -0.224, - -0.22, - -0.216, - -0.212, - -0.236, - -0.216 + -0.184, + -0.148, + -0.104, + -0.116, + -0.188, + -0.18, + -0.144, + -0.152, + 0.008, + 0.136, + 0.152, + 0.176, + 0.184, + 0.212, + 0.244, + 0.276, + 0.324, + 0.332, + 0.352 + ], + "y": [ + 0.336, + 0.316, + 0.24, + 0.132, + 0.028, + -0.016, + -0.064, + -0.14, + -0.144, + -0.132, + -0.156, + -0.164, + -0.172, + -0.168, + -0.124, + -0.072, + -0.032, + -0.008, + 0.064, + 0.116, + 0.172, + 0.232, + 0.268, + 0.356, + 0.412, + 0.428, + 0.492, + 0.556, + 0.56, + 0.552, + 0.524, + 0.524, + 0.508, + 0.48, + 0.456, + 0.444, + 0.46, + 0.46, + 0.464, + 0.492, + 0.484, + 0.46, + 0.44, + 0.4, + 0.368, + 0.372, + 0.38, + 0.332, + 0.256 + ], + "z": [ + -0.84, + -0.904, + -0.964, + -1.004, + -1.064, + -1.116, + -1.156, + -1.224, + -1.252, + -1.256, + -1.348, + -1.24, + -1.188, + -1.252, + -1.22, + -1.14, + -1.096, + -1.108, + -1.056, + -1.02, + -0.988, + -0.96, + -0.9, + -0.876, + -0.828, + -0.76, + -0.8, + -0.752, + -0.72, + -0.74, + -0.796, + -0.824, + -0.864, + -0.9, + -0.908, + -0.916, + -0.928, + -0.836, + -0.86, + -0.864, + -0.824, + -0.828, + -0.82, + -0.852, + -0.888, + -0.888, + -0.864, + -0.852, + -0.892 + ] + }, + "createdAt": 1730110809909 + }, + { + "id": "4fe7a9df-3232-4ac5-9a28-71dedbab518c", + "data": { + "x": [ + 0.184, + 0.172, + 0.156, + 0.168, + 0.16, + 0.18, + 0.128, + 0.168, + 0.212, + 0.128, + 0.096, + 0.108, + 0.112, + 0.044, + 0.036, + 0.084, + 0.14, + 0.068, + 0.056, + 0.144, + 0.204, + 0.16, + 0.152, + 0.16, + 0.136, + 0.136, + 0.156, + 0.192, + 0.208, + 0.156, + 0.124, + 0.104, + 0.088, + 0.06, + 0.068, + 0.104, + 0.056, + 0.032, + 0.076, + 0.04, + 0.024, + 0.016, + -0.004, + -0.012, + -0.016, + 0.012, + 0.036, + 0.024, + 0.004 ], - "z": [ - -0.188, - -0.184, + "y": [ + 0.376, + 0.296, + 0.248, + 0.212, + 0.212, + 0.204, + 0.188, + 0.172, + 0.132, + 0.124, + 0.1, + 0.084, + -0.008, + -0.112, -0.172, - -0.176, - -0.184, - -0.188, - -0.184, - -0.18, - -0.164, - -0.156, - -0.168, - -0.176, - -0.184, - -0.164, - -0.18, - -0.176, - -0.184, - -0.176, - -0.168, - -0.176, - -0.192, - -0.156, -0.16, - -0.18, - -0.168, - -0.172, - -0.176, - -0.172, - -0.172, - -0.188, - -0.188, - -0.196, - -0.184, - -0.172, - -0.172, - -0.172, - -0.172, - -0.18, - -0.172, - -0.172, - -0.176, - -0.18, - -0.156, - -0.156, - -0.18, -0.184, + -0.292, + -0.392, + -0.42, + -0.424, + -0.424, + -0.408, + -0.412, + -0.46, + -0.472, + -0.448, + -0.42, + -0.416, + -0.408, + -0.384, + -0.36, + -0.324, + -0.296, + -0.256, + -0.2, -0.196, - -0.176, - -0.18, - -0.18, - -0.188, - -0.188, - -0.172, - -0.172, - -0.188, - -0.18, - -0.176, - -0.176, - -0.164, - -0.172, - -0.164, - -0.176, - -0.18, - -0.164, - -0.164, - -0.176, - -0.188, - -0.204, - -0.192, - -0.176, - -0.188, - -0.192, + -0.144, + -0.096, + -0.02, + 0.02, + 0.104, + 0.172, + 0.248, + 0.304, + 0.372, + 0.448, + 0.5, + 0.52 + ], + "z": [ + -0.912, + -0.948, + -0.956, + -0.976, + -0.92, + -0.984, + -0.936, + -0.896, + -0.94, + -0.924, + -0.888, + -0.864, + -0.92, + -0.996, + -1.064, + -1.072, + -1.08, + -1.06, + -1.068, + -1.112, + -1.12, + -1.124, + -1.124, + -1.196, + -1.196, + -1.168, + -1.132, + -1.116, + -1.12, + -1.092, + -1.092, + -1.096, + -1.108, + -1.116, + -1.1, + -1.104, + -1.08, + -1.048, + -1.068, + -1.024, + -1.016, + -0.984, + -0.956, + -0.948, + -0.924, + -0.876, + -0.832, + -0.796, + -0.756 + ] + }, + "createdAt": 1730110805536 + }, + { + "id": "140b3468-1bfa-4868-9ce8-e68bda104eab", + "data": { + "x": [ + 0.016, + -0.06, + -0.096, + -0.096, + -0.052, + 0.052, + 0.148, + 0.256, + 0.38, + 0.452, + 0.524, + 0.476, + 0.44, + 0.412, + 0.356, + 0.34, + 0.332, + 0.256, + 0.256, + 0.28, + 0.244, + 0.204, + 0.196, + 0.196, + 0.156, + 0.136, + 0.164, + 0.188, + 0.244, + 0.176, + 0.072, + -0.024, + 0.012, + 0.1, + 0.168, + 0.104, + 0.076, + 0.108, + 0, + -0.112, + -0.092, + 0, + 0.004, + -0.096, + -0.06, + 0.008, + -0.052, -0.196, - -0.18, - -0.172, - -0.184, - -0.172, - -0.176, - -0.176, - -0.176, - -0.156, - -0.16, - -0.168, - -0.18, - -0.164, - -0.164, - -0.152, - -0.156, - -0.168, - -0.192, - -0.208 + -0.192 + ], + "y": [ + 0.18, + 0.092, + 0.028, + -0.076, + -0.212, + -0.264, + -0.32, + -0.376, + -0.444, + -0.48, + -0.436, + -0.4, + -0.372, + -0.308, + -0.212, + -0.088, + -0.032, + 0.064, + 0.18, + 0.212, + 0.264, + 0.356, + 0.42, + 0.464, + 0.516, + 0.572, + 0.584, + 0.656, + 0.668, + 0.712, + 0.708, + 0.708, + 0.74, + 0.792, + 0.812, + 0.844, + 0.9, + 0.852, + 0.756, + 0.692, + 0.648, + 0.636, + 0.604, + 0.588, + 0.496, + 0.504, + 0.476, + 0.404, + 0.36 + ], + "z": [ + -0.868, + -0.94, + -0.996, + -1.004, + -1.012, + -1.108, + -1.26, + -1.384, + -1.544, + -1.636, + -1.688, + -1.468, + -1.276, + -1.116, + -0.948, + -0.872, + -0.88, + -0.86, + -0.86, + -0.9, + -0.892, + -0.856, + -0.836, + -0.844, + -0.8, + -0.724, + -0.68, + -0.6, + -0.652, + -0.64, + -0.7, + -0.64, + -0.648, + -0.556, + -0.556, + -0.492, + -0.388, + -0.456, + -0.548, + -0.604, + -0.676, + -0.768, + -0.848, + -0.744, + -0.764, + -0.872, + -0.904, + -0.816, + -0.832 ] - } + }, + "createdAt": 1730110801292 }, { - "ID": 1717765554773, + "id": "deda7d69-97dc-43b4-84bd-55afb661c7db", "data": { "x": [ - -0.944, - -0.96, - -0.96, - -0.972, - -0.968, - -0.976, - -0.976, - -0.968, - -0.972, - -0.968, - -0.96, - -0.948, - -0.956, - -0.956, - -0.964, - -0.96, - -0.976, - -0.964, - -0.964, - -0.964, - -0.964, - -0.972, - -0.968, - -0.96, - -0.96, - -0.976, - -0.976, - -0.976, - -0.972, + -0.62, + -0.552, + -0.42, + -0.316, + -0.284, + -0.212, + -0.104, + 0, + 0.172, + 0.392, + 0.536, + 0.58, + 0.572, + 0.532, + 0.456, + 0.36, + 0.408, + 0.528, + 0.54, + 0.548, + 0.616, + 0.624, + 0.632, + 0.652, + 0.7, + 0.7, + 0.644, + 0.528, + 0.4, + 0.332, + 0.396, + 0.396, + 0.348, + 0.34, + 0.308, + 0.208, + 0.1, + 0.068, + 0.104, + 0.1, + 0.024, + -0.028, + -0.024, + -0.068, + -0.244, + -0.424, + -0.392 + ], + "y": [ + -0.268, + -0.144, + -0.12, + -0.048, + 0.044, + 0.124, + 0.192, + 0.236, + 0.272, + 0.28, + 0.3, + 0.312, + 0.304, + 0.264, + 0.168, + 0.092, + 0.052, + 0.004, + -0.052, + -0.084, + -0.116, + -0.188, + -0.264, + -0.384, + -0.436, + -0.408, + -0.408, + -0.408, + -0.416, + -0.356, + -0.296, + -0.236, + -0.16, + -0.076, + 0, + 0.064, + 0.136, + 0.228, + 0.324, + 0.388, + 0.4, + 0.396, + 0.388, + 0.38, + 0.3, + 0.236, + 0.188 + ], + "z": [ -0.972, - -0.968, - -0.968, - -0.964, - -0.964, - -0.968, - -0.968, - -0.964, - -0.968, - -0.964, - -0.968, - -0.96, - -0.956, - -0.952, - -0.952, -0.956, - -0.96, -0.964, + -0.94, + -0.856, + -0.752, + -0.704, + -0.668, + -0.664, + -0.76, + -0.784, + -0.756, + -0.712, + -0.724, + -0.756, + -0.772, + -0.812, + -0.896, + -0.908, + -0.896, + -0.932, + -0.94, + -0.996, + -1.064, + -1.148, + -1.24, + -1.276, + -1.248, + -1.168, + -1.088, + -1.072, + -1.044, + -1.008, + -1.024, + -1.052, + -0.996, + -0.9, + -0.8, + -0.704, + -0.672, + -0.664, + -0.66, + -0.72, + -0.76, + -0.78, + -0.672, + -0.716 + ] + }, + "createdAt": 1730110797072 + }, + { + "id": "a23ad509-a7af-4140-aa42-dba9a936bd0e", + "data": { + "x": [ + -0.536, + -0.568, + -0.628, + -0.78, + -0.856, + -0.792, + -0.7, + -0.636, + -0.54, + -0.456, + -0.444, + -0.396, + -0.296, + -0.288, + -0.256, + -0.056, + -0.18, + -0.328, + -0.252, + -0.128, + -0.112, + -0.02, + 0.008, + -0.076, + -0.06, + -0.036, + 0.008, + 0.172, + 0.284, + 0.34, + 0.412, + 0.444, + 0.508, + 0.576, + 0.56, + 0.66, + 0.66, + 0.356, + 0.168, + 0.28, + 0.46, + 0.512, + 0.524, + 0.424, + 0.288, + 0.248, + 0.08, + -0.08, + -0.036 + ], + "y": [ + 0.028, + 0.06, + 0.036, + -0.02, + 0.044, + 0.148, + 0.18, + 0.236, + 0.26, + 0.292, + 0.268, + 0.26, + 0.244, + 0.244, + 0.264, + 0.18, + 0.244, + 0.252, + 0.252, + 0.228, + 0.168, + 0.196, + 0.264, + 0.264, + 0.26, + 0.288, + 0.256, + 0.184, + 0.184, + 0.236, + 0.144, + 0.04, + 0.092, + 0.136, + 0.124, + 0.056, + -0.012, + -0.084, + -0.088, + -0.112, + -0.216, + -0.316, + -0.424, + -0.52, + -0.54, + -0.528, + -0.492, + -0.384, + -0.284 + ], + "z": [ -0.968, + -0.928, -0.96, + -0.908, + -0.892, + -0.92, + -0.932, + -0.92, + -0.932, + -0.904, + -0.852, + -0.892, -0.968, - -0.968, - -0.972, - -0.968, - -0.964, - -0.964, -0.96, + -0.94, + -1.096, + -1.088, + -0.988, + -1.032, + -1.044, + -1.012, + -1.016, + -1.012, + -0.9, + -0.844, + -0.86, + -0.884, + -0.996, + -0.988, + -0.908, + -0.904, + -0.884, + -0.896, + -0.924, + -0.844, + -0.884, + -1.052, + -0.908, + -0.848, -0.96, - -0.984, - -0.964, - -0.968, - -0.952, - -0.952, - -0.964, - -0.968, - -0.968, - -0.956, + -1.092, + -1.16, + -1.196, + -1.172, + -1.176, + -1.304, + -1.296, + -1.156, + -1.08 + ] + }, + "createdAt": 1730110792926 + } + ] + }, + { + "id": "931f1732-5bdc-4baf-b560-beecf1333439", + "name": "poke", + "icon": "Sword", + "createdAt": 1730110845881, + "recordings": [ + { + "id": "adef518e-1296-4f10-a412-44e8c02b50a4", + "data": { + "x": [ + -0.024, + -0.02, + -0.052, + -0.04, + -0.036, + -0.048, + -0.016, + -0.012, + -0.056, + -0.052, + -0.072, + -0.056, + -0.056, + -0.084, + -0.096, + -0.048, + -0.02, + -0.008, + -0.104, + -0.072, + 0.084, + 0.332, + 0.46, + -0.584, + -1.532, -0.956, + -1.552, + -0.62, + 0.392, + -0.08, + -0.36, + -0.28, + -0.156, + 0.016, + -0.184, + -0.28, + -0.38, + -0.412, + -0.252, + -0.164, + -0.112, + -0.088, + -0.168, + -0.144, + -0.112, + -0.092, + -0.14, + -0.16 + ], + "y": [ + 0.1, + 0.1, + 0.108, + 0.088, + 0.1, + 0.112, + 0.128, + 0.112, + 0.088, + 0.072, + 0.056, + 0.08, + 0.128, + 0.2, + 0.288, + 0.412, + 0.672, + 1.068, + 1.572, + 2.04, + 2.04, + 2.04, + 0.356, + -2.04, + -2.04, + -2.04, + -1.544, + -1.164, + -0.436, + -0.104, + 0.18, + 0.3, + 0.3, + 0.212, + 0.092, + -0.028, + -0.076, + -0.04, + 0.04, + 0.128, + 0.196, + 0.212, + 0.204, + 0.156, + 0.168, + 0.156, + 0.092, + 0.052 + ], + "z": [ + -1.064, + -1.024, + -1.008, + -1.032, + -1.032, + -1.02, + -1.004, + -1.004, + -1.012, + -1.056, + -1.048, + -1.072, + -1.06, + -1.012, -0.96, -0.956, - -0.948, - -0.968, - -0.968, - -0.968, - -0.968, - -0.964, - -0.972, - -0.964, - -0.964, - -0.956, - -0.964, - -0.956, - -0.96, - -0.96, - -0.972, - -0.96, - -0.96, - -0.968, - -0.972, + -0.888, + -0.832, + -0.72, + -0.816, + -0.72, + -0.352, + -0.624, + -0.152, + -1.94, + -1.412, + -1.24, + -1.896, + -2.04, + -1.38, + -0.78, + -0.544, + -0.544, + -0.928, + -0.98, + -1.108, + -1.188, + -1.188, + -1.212, + -1.1, + -0.996, -0.964, - -0.964 + -0.94, + -0.98, + -1.012, + -1.052, + -1.036, + -1.04 + ] + }, + "createdAt": 1730110894817 + }, + { + "id": "fcfbd9e4-9f40-4a4a-9361-b7035d767446", + "data": { + "x": [ + -0.068, + -0.056, + -0.032, + -0.036, + -0.068, + -0.048, + -0.028, + -0.032, + -0.028, + -0.056, + -0.108, + -0.096, + -0.084, + -0.1, + -0.056, + -0.032, + -0.02, + -0.02, + 0.004, + -0.004, + 0.2, + 0, + -0.328, + -0.068, + 0.276, + -0.52, + -0.812, + -1.22, + -1.088, + 0.184, + -0.032, + -0.34, + -0.34, + -0.3, + -0.044, + -0.108, + -0.256, + -0.3, + -0.316, + -0.252, + -0.164, + -0.12, + -0.116, + -0.116, + -0.076, + -0.028, + -0.048, + -0.036, + -0.004 ], "y": [ - 0.344, - 0.336, - 0.336, - 0.336, - 0.328, - 0.328, - 0.324, - 0.336, - 0.336, - 0.336, - 0.324, - 0.332, - 0.332, - 0.34, - 0.344, - 0.324, - 0.324, - 0.328, - 0.332, - 0.336, - 0.336, - 0.336, - 0.332, - 0.34, - 0.336, - 0.336, - 0.324, - 0.32, - 0.32, - 0.324, - 0.32, - 0.324, - 0.336, - 0.324, - 0.336, - 0.336, - 0.344, - 0.328, - 0.344, - 0.336, - 0.348, - 0.332, - 0.328, - 0.332, - 0.348, - 0.344, - 0.332, - 0.332, - 0.344, - 0.336, - 0.332, - 0.324, - 0.32, - 0.328, - 0.332, - 0.348, - 0.336, - 0.328, - 0.328, - 0.336, - 0.34, - 0.344, - 0.328, - 0.332, - 0.332, - 0.34, - 0.344, - 0.344, - 0.352, - 0.34, - 0.332, - 0.324, - 0.328, - 0.324, - 0.34, - 0.34, - 0.348, - 0.356, - 0.344, - 0.344, - 0.34, - 0.336, - 0.336, - 0.336, - 0.34, - 0.336, - 0.34, - 0.34, - 0.34, - 0.34 - ], - "z": [ - -0.052, + -0.012, + -0.04, + -0.024, + -0.02, + -0.02, + -0.012, + -0.004, + 0.04, + 0.096, + 0.116, + 0.108, + 0.1, + 0.048, + -0.012, + -0.008, + -0.004, + 0.068, + 0.196, + 0.472, + 0.98, + 1.824, + 2.04, + 2.04, + 2.04, + -0.368, + -2.04, + -2.04, + -2.04, + -2.04, + -1.196, + -0.504, -0.056, - -0.06, - -0.06, + 0.168, + 0.22, + 0.14, + 0.064, + 0.036, + -0.028, -0.064, - -0.08, -0.06, - -0.052, - -0.036, - -0.044, + 0.024, + 0.044, + 0.068, + 0.088, + 0.08, + 0.076, + 0.092, + 0.096, + 0.08 + ], + "z": [ + -1.048, + -1.056, + -1.064, + -1.056, + -1.036, + -1.052, + -1.064, + -1.044, + -1.024, + -0.988, + -0.992, + -1.036, + -1.048, + -1.024, + -1.06, + -1.056, + -1.04, + -1.004, + -0.944, + -0.832, + -0.972, + -0.744, + -0.176, + -0.132, + -0.592, + -0.576, + -1.284, + -1.46, + -1.492, + -2.04, + -1.612, + -0.908, + -0.608, + -0.488, + -0.828, + -0.984, + -1.016, + -1.088, + -1.14, + -1.092, + -1.08, + -1.008, + -0.988, + -0.996, + -1.004, + -1.044, + -1.024, + -1.004, + -1.012 + ] + }, + "createdAt": 1730110890482 + }, + { + "id": "39081e43-edbe-4878-b92d-f9f10873eb60", + "data": { + "x": [ + -0.068, + -0.072, + -0.072, + -0.084, + -0.06, + -0.084, + -0.068, -0.048, - -0.056, - -0.056, - -0.06, - -0.052, - -0.056, - -0.064, - -0.052, -0.06, + -0.04, + -0.012, + -0.024, -0.064, + -0.068, + -0.084, + -0.096, + -0.08, -0.056, - -0.056, - -0.048, - -0.048, - -0.048, - -0.052, - -0.056, - -0.064, -0.048, -0.056, - -0.04, - -0.056, - -0.044, -0.044, -0.048, - -0.052, - -0.068, - -0.068, - -0.06, - -0.06, - -0.048, - -0.052, - -0.06, -0.036, - -0.052, - -0.06, - -0.068, + -0.084, + -0.212, + -0.152, -0.064, - -0.052, - -0.048, + 0.152, + 0.16, + 0.328, + 0.652, + 0.56, + -0.504, + -1.552, + -1.284, + -1.016, + 0.228, + 0.132, + -0.528, + -0.364, + -0.124, + 0.128, + 0.132, + -0.14, + -0.244, + -0.252, + -0.196, + -0.116, + -0.076, + -0.092 + ], + "y": [ + 0.08, + 0.084, + 0.08, + 0.1, + 0.088, + 0.076, + 0.064, + 0.052, + 0.076, + 0.096, + 0.1, + 0.092, + 0.072, + 0.068, + 0.064, + 0.064, + 0.072, + 0.08, + 0.076, + 0.068, + 0.076, + 0.136, + 0.204, + 0.312, + 0.448, + 0.804, + 1.42, + 2.04, + 2.04, + 2.04, + 1.156, + -0.52, + -2.04, + -2.04, + -2.04, + -2.04, + -1.288, + -0.556, + -0.152, + 0.108, + 0.228, + 0.2, + 0.148, + 0.1, + 0.048, + 0, + 0.004, + -0.004, + 0.016, + 0.02 + ], + "z": [ + -1.056, + -1.032, + -1.04, + -1.02, + -1.032, + -1.016, + -1.028, + -1.052, + -1.032, + -1.016, + -1.016, + -1.024, + -1.032, + -1.068, + -1.06, + -1.06, + -1.044, + -1.036, + -1.032, + -1.032, + -1.036, + -1.036, + -1, + -0.944, + -0.796, + -0.812, + -0.856, + -0.92, + -0.504, + -0.316, + -0.68, + -1.008, + -0.52, + -0.176, + -1.304, + -1.704, + -2.04, + -1.968, + -0.92, + -0.632, + -0.556, + -0.792, + -0.98, + -0.912, + -0.972, + -1.024, + -1.072, + -1.132, + -1.1, + -1.06 + ] + }, + "createdAt": 1730110885869 + }, + { + "id": "098069b5-7da6-4008-8421-a63b5112a03a", + "data": { + "x": [ + -0.14, + -0.12, + -0.116, + -0.16, + -0.132, + -0.092, + -0.088, + -0.08, + -0.092, + -0.08, + -0.08, + -0.08, + -0.032, + -0.02, -0.052, -0.064, - -0.064, - -0.048, - -0.044, - -0.036, + -0.092, + -0.072, + -0.08, + -0.04, + 0.02, + 0.052, + 0.136, + 0.096, + -0.08, + 0.148, + 0.352, + -1.196, + -0.96, + -1.156, + -0.864, + 0.556, + 0.052, + -0.284, + -0.38, + -0.216, + 0.184, + 0.136, + -0.204, + -0.268, + -0.28, + -0.216, + -0.06, + -0.004, + 0.044, + 0.068, + 0.024, + 0.02, + 0.02 + ], + "y": [ + 0.084, + 0.112, + 0.112, + 0.116, + 0.152, + 0.148, + 0.14, + 0.152, + 0.128, + 0.1, + 0.072, + 0.068, + 0.096, + 0.088, + 0.068, + 0.092, + 0.14, + 0.196, + 0.268, + 0.384, + 0.648, + 1.076, + 1.668, + 2.04, + 2.04, + 2.04, + -0.184, + -2.04, + -2.04, + -2.04, + -2.04, + -1.272, + -0.564, -0.044, - -0.072, - -0.052, - -0.052, - -0.04, - -0.052, - -0.072, + 0.208, + 0.28, + 0.256, + 0.124, -0.064, - -0.076, + -0.192, + -0.164, + -0.108, -0.048, + 0.028, + 0.1, + 0.148, + 0.136, + 0.136, + 0.124 + ], + "z": [ + -1.02, + -0.996, + -0.98, + -0.972, + -0.992, + -0.992, + -0.988, + -1, + -1.024, + -1.032, + -1.044, + -1.056, + -1.076, + -1.06, + -1.04, + -1.048, + -1.008, + -1.008, + -0.92, + -0.884, + -0.84, + -0.74, + -0.788, + -0.896, + -0.72, + -0.472, + -0.208, + 0.768, + -0.756, + -1.86, + -2.04, + -2.04, + -2.04, + -1.144, + -0.388, + -0.152, + -0.56, + -0.888, + -0.964, + -1.196, + -1.284, + -1.24, + -1.208, + -1.076, + -1.02, + -0.988, + -0.964, + -1.012, + -1.06 + ] + }, + "createdAt": 1730110881733 + }, + { + "id": "37992398-b615-466e-ac1c-be4d4a685d14", + "data": { + "x": [ + 0.004, + -0.024, + -0.016, + 0, + 0.008, + 0.04, + 0.032, + 0.024, + 0.016, + -0.004, + -0.02, + 0.016, + 0.068, + 0.044, + -0.012, + -0.124, -0.044, - -0.044, + 0.02, + 0.124, + 0.268, + 0.324, + 0.568, + 0.26, + -1.384, + -1.488, + -1.232, + -0.288, + 0.484, + -0.392, + -0.516, + -0.344, + -0.132, + 0.224, + 0.06, + -0.136, + -0.084, + -0.1, -0.056, + -0.008, + -0.072, + -0.012, + -0.02, -0.052, -0.064, - -0.056, - -0.052, - -0.052, - -0.048, + -0.072, + -0.116, + -0.164, + -0.212, + -0.148 + ], + "y": [ + -0.004, + -0.028, + -0.02, + -0.004, + 0.016, + 0.044, + 0.036, + 0.032, + 0.02, + 0.008, + 0.016, + 0.108, + 0.252, + 0.492, + 0.76, + 0.876, + 0.916, + 0.976, + 1.304, + 2.04, + 2.04, + 1.752, + -2.032, + -2.04, + -2.04, + -2.04, + -2.04, + -1.184, + -0.548, + -0.188, + 0.056, + 0.012, + -0.084, + -0.168, + -0.252, + -0.276, + -0.28, + -0.192, + -0.152, + -0.144, + -0.116, + -0.084, + -0.024, + -0.032, -0.04, - -0.052, - -0.052, - -0.056, - -0.056, - -0.056, - -0.06, - -0.064, - -0.056, - -0.044, - -0.048, - -0.056, - -0.064, - -0.06, - -0.06 + -0.096, + -0.02, + 0.056, + 0.164 + ], + "z": [ + -1.056, + -1.06, + -1.068, + -1.068, + -1.036, + -1.02, + -1.016, + -1.032, + -1.012, + -1.016, + -1, + -0.98, + -0.932, + -0.94, + -1, + -0.872, + -0.768, + -0.716, + -0.812, + -1.176, + -1.296, + -1.096, + -0.188, + 1.08, + -0.38, + -1.516, + -2.04, + -2.04, + -1.452, + -0.856, + -0.524, + -0.48, + -0.92, + -1.036, + -1.076, + -1.208, + -1.168, + -1.096, + -1, + -0.9, + -0.904, + -0.888, + -0.88, + -0.872, + -0.9, + -0.912, + -0.916, + -0.98, + -1.076 ] - } + }, + "createdAt": 1730110877571 }, { - "ID": 1717765549053, + "id": "e2b2d824-4b57-4f1a-9ddf-7c689f02d912", "data": { "x": [ - -0.276, - -0.276, - -0.264, - -0.276, - -0.276, - -0.276, - -0.276, - -0.284, - -0.276, - -0.272, - -0.272, - -0.268, - -0.284, - -0.276, - -0.28, - -0.276, - -0.272, - -0.276, - -0.28, - -0.28, - -0.272, - -0.272, - -0.268, - -0.272, - -0.288, - -0.276, - -0.284, - -0.28, - -0.276, - -0.272, - -0.272, - -0.272, - -0.272, - -0.288, - -0.292, - -0.276, - -0.268, - -0.268, - -0.276, - -0.28, - -0.272, - -0.272, - -0.276, - -0.268, - -0.268, - -0.26, - -0.26, - -0.272, - -0.276, - -0.272, - -0.284, - -0.276, - -0.272, - -0.272, - -0.276, - -0.268, - -0.268, - -0.268, - -0.26, - -0.256, - -0.26, - -0.272, - -0.276, - -0.268, - -0.268, - -0.28, - -0.292, - -0.28, - -0.268, - -0.276, - -0.268, - -0.268, - -0.256, - -0.272, - -0.272, - -0.28, - -0.276, - -0.268, - -0.268, - -0.28, - -0.28, - -0.28, - -0.272, - -0.268, - -0.272, - -0.272, - -0.272, - -0.276, - -0.272, - -0.276, - -0.276 - ], - "y": [ - -0.052, -0.056, - -0.064, - -0.076, - -0.076, - -0.068, - -0.064, - -0.06, - -0.076, - -0.076, - -0.064, - -0.06, - -0.06, - -0.064, - -0.068, - -0.068, - -0.06, - -0.068, - -0.072, - -0.06, + -0.036, + 0, + 0.008, + 0.016, + 0, -0.06, - -0.056, - -0.068, - -0.064, -0.072, - -0.068, - -0.068, - -0.072, - -0.076, + 0.08, + 0.204, + 0.184, + 0.408, + 0.58, + 0.592, + 0.604, + 0.528, + 0.356, + 0.208, + -1.8, + -0.908, + -1.808, + -1.252, + 0.58, + -0.26, + -0.356, + -0.136, -0.072, - -0.068, - -0.064, - -0.076, - -0.076, + 0.104, + -0.184, + -0.256, + -0.204, + -0.108, + 0.012, + 0.024, + -0.02, -0.08, - -0.092, -0.068, - -0.064, + -0.06, -0.068, - -0.064, - -0.076, - -0.072, - -0.072, - -0.072, - -0.072, - -0.064, - -0.076, - -0.076, - -0.076, - -0.088, - -0.092, - -0.092, - -0.092, + 0.004, + 0.024, + 0.004, + 0.016, + 0.024, + 0.008, + -0.008, + -0.012, + -0.032, + 0 + ], + "y": [ + 0.2, + 0.24, + 0.192, + 0.104, + 0.144, + 0.232, + 0.22, + 0.228, + 0.448, + 0.424, + 0.324, + 0.264, + 0.544, + 1.344, + 2.04, + 2.04, + 2.04, + -1.78, + -2.04, + -2.04, + -2.04, + -1.92, + -0.796, + -0.172, + 0.172, + 0.276, + 0.252, + 0.148, + 0.032, + -0.148, + -0.2, + -0.132, + -0.052, + 0.008, + 0.092, + 0.148, + 0.164, + 0.108, + 0.076, + 0.06, + 0.048, + 0.02, + -0.02, + -0.06, + -0.1, + -0.1, + -0.096, -0.092, - -0.084, + -0.06 + ], + "z": [ + -0.988, + -0.952, + -0.908, + -0.888, + -0.904, + -0.964, + -1.004, + -1.036, + -1.136, + -1.068, + -0.912, + -1.06, + -1.148, + -1.22, + -1.168, + -0.476, + 0.676, + 0.304, + 0.672, + -1.616, + -1.608, + -1.98, + -2.04, + -1.304, + -0.728, + -0.504, + -0.548, + -1.036, + -1.064, + -1.188, + -1.256, + -1.252, + -1.176, + -1.04, + -0.96, + -0.928, + -0.932, + -0.968, + -0.992, + -1.072, + -1.1, + -1.068, + -1.068, + -1.072, + -1.088, + -1.108, + -1.128, + -1.104, + -1.088 + ] + }, + "createdAt": 1730110873321 + }, + { + "id": "c6754c6b-44a5-4b8e-ada4-c7f6c3b9cc62", + "data": { + "x": [ + -0.128, -0.072, - -0.084, -0.092, - -0.072, - -0.072, - -0.064, - -0.064, - -0.08, - -0.068, - -0.084, - -0.08, - -0.088, - -0.084, + -0.108, + -0.052, -0.084, - -0.076, - -0.088, - -0.08, - -0.088, - -0.092, - -0.076, - -0.076, - -0.076, - -0.072, - -0.088, + -0.108, + -0.108, -0.084, + -0.012, + -0.004, + -0.004, + -0.052, + -0.096, + -0.048, + -0.02, + -0.044, + -0.148, + -0.32, + -0.004, + 0.236, + 0.2, + -0.428, + -1.52, + -0.408, + 0.868, + -0.12, + -0.672, + -0.556, + -0.32, -0.08, - -0.076, - -0.08, - -0.072, - -0.076, - -0.076, - -0.076, - -0.072, - -0.08, + -0.236, + -0.332, + -0.356, + -0.316, + -0.18, + -0.008, + 0.124, + 0.136, + 0.2, + 0.204, + 0.164, + 0.136, + 0.156, + 0.016, + -0.008, + 0, + 0 + ], + "y": [ + 0.004, + 0.012, + 0.04, + -0.008, + -0.012, + -0.004, + 0.064, + 0.064, + 0.04, + 0.028, + 0, + -0.02, + -0.036, + 0.064, + 0.404, + 1.116, + 1.98, + 2.04, + 2.04, + 2.04, + -1.044, + -2.04, + -2.04, + -2.04, + -2.04, + -1.584, + -0.932, + -0.492, + -0.252, + -0.236, + -0.268, + -0.26, + -0.292, + -0.272, + -0.168, -0.08, - -0.076 + 0.048, + 0.22, + 0.44, + 0.48, + 0.432, + 0.132, + 0.012, + 0.076, + 0.128, + 0.04, + -0.068, + -0.06 ], "z": [ - 0.98, - 0.992, - 0.996, - 0.992, - 0.996, - 0.988, - 0.98, - 0.98, - 0.98, - 0.984, - 0.992, - 0.98, - 0.956, - 0.976, - 0.972, - 0.968, - 0.972, - 0.976, - 0.976, - 0.968, - 0.972, - 0.972, - 0.976, - 0.98, - 0.984, - 0.968, - 0.968, - 0.984, - 0.992, - 0.992, - 0.988, - 0.984, - 0.98, - 0.96, - 0.96, - 0.976, - 0.976, - 0.98, - 0.968, - 0.968, - 0.976, - 0.976, - 0.968, - 0.984, - 0.988, - 0.988, - 0.976, - 0.964, - 0.964, - 0.964, - 0.984, - 0.98, - 0.992, - 1, - 0.996, - 1, - 1.004, - 0.992, - 1.008, - 1, - 0.968, - 0.948, - 0.968, - 0.98, - 0.98, - 0.948, - 0.948, - 0.968, - 0.984, - 0.988, - 0.992, - 1.012, - 1, - 0.996, - 0.98, - 0.98, - 0.984, - 0.988, - 0.976, - 0.972, - 0.956, - 0.964, - 0.976, - 0.968, - 0.976, - 0.984, - 0.976, - 0.976, - 0.98, - 0.988, - 0.968 + -1.08, + -1.056, + -0.976, + -0.96, + -1.06, + -1.06, + -1.064, + -1.044, + -1.04, + -1.064, + -1.068, + -1.084, + -1.048, + -1.056, + -1.08, + -1.04, + -0.832, + -0.632, + -0.588, + -0.76, + -1.02, + -0.044, + -0.224, + -0.136, + -1.712, + -2.04, + -1.712, + -0.92, + -0.72, + -0.656, + -0.86, + -0.864, + -0.892, + -0.976, + -1.116, + -1.196, + -1.164, + -1.056, + -0.852, + -0.924, + -0.928, + -0.916, + -0.952, + -1.14, + -1.112, + -1.044, + -1.02, + -1.016 ] - } + }, + "createdAt": 1730110869055 }, { - "ID": 1717765543427, + "id": "9ef250cc-b57c-4dbd-a4c3-06532c093dce", "data": { "x": [ - 0.212, - 0.212, - 0.208, - 0.2, - 0.204, - 0.204, - 0.216, - 0.22, - 0.208, - 0.2, - 0.208, - 0.216, - 0.212, - 0.204, - 0.2, - 0.212, - 0.212, - 0.212, - 0.204, - 0.208, - 0.216, - 0.204, - 0.204, - 0.212, - 0.208, - 0.208, - 0.2, - 0.208, - 0.2, - 0.204, - 0.22, - 0.216, - 0.208, - 0.196, - 0.196, - 0.208, - 0.216, - 0.216, - 0.204, - 0.2, - 0.2, - 0.208, - 0.216, - 0.216, - 0.216, - 0.212, - 0.208, - 0.216, - 0.224, - 0.22, - 0.22, - 0.22, - 0.228, - 0.224, - 0.224, - 0.212, - 0.224, - 0.204, - 0.212, - 0.212, - 0.224, - 0.224, - 0.212, - 0.208, - 0.224, - 0.216, - 0.212, - 0.216, - 0.216, - 0.216, - 0.216, - 0.232, - 0.232, - 0.216, - 0.22, - 0.228, - 0.228, - 0.228, - 0.224, - 0.22, - 0.212, - 0.22, - 0.22, - 0.22, - 0.22, - 0.22, - 0.22, - 0.228, + -0.004, + 0, + 0, + -0.028, + -0.04, + -0.036, + -0.04, + -0.028, + -0.028, + -0.024, + -0.004, + 0.028, + 0.028, + 0.016, + 0.016, + 0.016, + 0.028, + 0.012, + 0.032, + 0.028, + 0, + -0.088, + -0.216, + -0.344, + -0.28, + 0.156, + 0.288, + 0.076, + -0.512, + -0.868, + -1.284, + 0.384, + 0.42, + -0.48, + -0.196, + 0.032, 0.22, - 0.212, - 0.216 - ], - "y": [ - 0.508, - 0.504, - 0.516, - 0.52, - 0.512, - 0.492, - 0.512, - 0.516, - 0.512, - 0.508, - 0.492, - 0.504, - 0.516, - 0.516, - 0.512, - 0.504, - 0.508, - 0.52, - 0.508, - 0.504, - 0.504, - 0.508, - 0.508, - 0.5, - 0.504, - 0.512, - 0.52, - 0.512, - 0.508, - 0.5, - 0.512, - 0.508, - 0.512, - 0.516, - 0.512, - 0.512, - 0.508, - 0.504, - 0.508, - 0.508, - 0.516, - 0.504, - 0.512, - 0.52, - 0.52, - 0.516, - 0.508, - 0.516, - 0.512, - 0.508, - 0.508, - 0.508, - 0.512, - 0.512, - 0.508, - 0.508, - 0.516, - 0.508, - 0.504, - 0.516, - 0.516, - 0.516, - 0.516, - 0.512, - 0.504, - 0.512, - 0.516, - 0.508, - 0.508, - 0.528, - 0.524, - 0.524, - 0.508, - 0.504, - 0.516, - 0.52, - 0.516, - 0.52, - 0.516, - 0.512, - 0.504, - 0.5, - 0.516, - 0.524, - 0.524, - 0.516, - 0.508, - 0.508, - 0.512, - 0.516, - 0.504 + 0.068, + -0.164, + -0.252, + -0.184, + -0.088, + -0.076, + -0.004, + 0.016, + 0.016, + 0.016, + 0.02, + 0.064 + ], + "y": [ + -0.004, + -0.004, + 0, + 0, + -0.008, + 0, + -0.008, + -0.012, + -0.004, + -0.028, + -0.064, + -0.06, + -0.064, + -0.056, + -0.028, + -0.028, + 0.008, + 0.064, + 0.164, + 0.268, + 0.544, + 0.972, + 1.52, + 2.04, + 2.04, + 2.04, + 0.704, + -2.04, + -2.04, + -2.04, + -2.04, + -1.552, + -0.672, + -0.2, + 0.048, + 0.168, + 0.084, + 0.016, + -0.076, + -0.196, + -0.168, + -0.108, + -0.056, + 0, + 0.06, + 0.108, + 0.124, + 0.112, + 0.08 ], "z": [ - -0.892, - -0.884, - -0.896, - -0.908, - -0.904, - -0.908, - -0.904, - -0.9, - -0.908, - -0.924, - -0.912, - -0.908, - -0.9, - -0.904, - -0.908, - -0.9, - -0.896, - -0.908, - -0.912, - -0.9, - -0.884, - -0.888, - -0.904, - -0.892, - -0.892, - -0.908, - -0.912, - -0.892, - -0.912, - -0.924, - -0.896, - -0.888, - -0.884, - -0.904, + -1, + -1.032, + -1.06, + -1.036, + -1.012, + -0.988, + -1, + -1.016, + -1.036, + -1.048, + -1.072, + -1.088, + -1.096, + -1.056, + -1.068, + -1.052, + -1.06, + -1.032, + -0.992, -0.92, - -0.908, - -0.896, - -0.884, - -0.88, - -0.884, - -0.912, - -0.9, - -0.9, - -0.904, - -0.908, - -0.916, - -0.908, - -0.892, - -0.884, - -0.892, -0.888, - -0.904, - -0.896, - -0.892, - -0.896, + -0.824, + -0.756, + -0.604, + -0.544, + -0.772, + -0.48, + -0.476, + -0.32, + -1.204, + -1.32, + -2.04, + -2.04, + -0.872, + -0.736, + -0.696, + -0.912, + -1.008, + -1.08, + -1.132, + -1.176, + -1.128, + -1.036, + -1.012, + -0.98, + -0.968, + -0.976, + -0.996, + -1.056 + ] + }, + "createdAt": 1730110864664 + }, + { + "id": "549aaca8-3e49-481d-bdad-d9a9025df75f", + "data": { + "x": [ + -0.02, + -0.012, + 0.02, + 0, + 0, + -0.008, + -0.008, + -0.024, + -0.04, + -0.02, + 0, + 0, + -0.02, + -0.004, + 0.024, + 0.016, + 0.036, + 0.032, + 0.064, + 0.144, + 0.2, + 0.052, + -0.176, + -0.308, + -0.368, + -0.756, + -0.268, + -0.984, + -0.704, + 0.092, + -0.256, + -0.32, + -0.288, + -0.116, + -0.084, + -0.212, + -0.172, + -0.148, + -0.096, + -0.052, + -0.068, + -0.08, + -0.04, + 0, + 0.004, + -0.024, + -0.028, + -0.06 + ], + "y": [ + -0.044, + -0.052, + -0.032, + -0.02, + -0.028, + -0.028, + -0.012, + -0.008, + -0.016, + 0, + 0.008, + 0.012, + 0.004, + 0.012, + 0.032, + 0.06, + 0.104, + 0.172, + 0.308, + 0.624, + 1.24, + 2.04, + 2.04, + 2.04, + -1.032, + -2.04, + -2.04, + -1.472, + -1.312, + -0.552, + -0.032, + 0.208, + 0.372, + 0.36, + 0.248, + 0.092, + -0.036, + -0.044, + -0.02, + 0.04, + 0.076, + 0.104, + 0.14, + 0.164, + 0.172, + 0.14, + 0.124, + 0.112 + ], + "z": [ + -1.064, + -1.072, + -1.088, + -1.024, + -1.032, + -1.052, + -1.06, + -1.056, + -1.024, + -1.036, + -1.048, + -1.02, + -1.004, + -1.012, + -1.012, + -1.008, + -1.008, + -0.968, -0.912, - -0.908, + -0.804, + -0.712, + -0.688, + -0.7, + -0.444, + -0.328, + -0.18, + -1.696, + -2.004, + -2.04, + -2.04, + -1.1, + -0.688, + -0.468, + -0.612, + -0.828, -0.924, - -0.896, - -0.884, - -0.884, - -0.876, - -0.888, - -0.904, - -0.892, - -0.9, - -0.9, - -0.892, + -1.092, + -1.176, + -1.144, + -1.076, + -0.988, + -0.944, + -1, + -1.016, + -1.024, + -1.016, + -1.04, + -1.032 + ] + }, + "createdAt": 1730110859709 + }, + { + "id": "b292c503-4942-4f2c-8b05-631eebc7ece7", + "data": { + "x": [ + -0.168, + -0.164, + -0.148, + -0.14, + -0.136, + -0.152, + -0.128, + -0.112, + -0.108, + -0.128, + -0.132, + -0.132, + -0.12, + -0.116, + -0.108, + -0.124, + -0.132, + -0.108, + -0.088, + -0.028, + 0.052, + -0.088, + -0.196, + -0.088, + -0.092, + -0.372, + -0.772, + -0.452, + -0.448, + -0.428, + -0.356, + -0.12, + 0.04, + -0.052, + -0.28, + -0.228, + -0.104, + -0.092, + -0.112, + -0.148, + -0.208, + -0.196, + -0.144, + -0.152, + -0.128, + -0.132, + -0.152, + -0.124, + -0.136 + ], + "y": [ + 0.176, + 0.168, + 0.14, + 0.144, + 0.136, + 0.124, + 0.112, + 0.088, + 0.076, + 0.084, + 0.092, + 0.116, + 0.136, + 0.16, + 0.196, + 0.228, + 0.256, + 0.22, + 0.256, + 0.424, + 0.72, + 1.14, + 1.924, + 2.04, + 2.04, + 0.644, + -1.536, + -2.04, + -2.04, + -1.584, + -1.336, + -1, + -0.572, + -0.264, + -0.1, + 0.024, + 0.012, + -0.032, + -0.064, + -0.088, + -0.068, + -0.068, + -0.04, + 0, + 0.02, + 0.028, + 0.032, + 0.012, + -0.008 + ], + "z": [ + -0.992, + -0.956, + -0.964, + -1.016, + -1.024, + -1.02, + -1.008, + -1.016, + -1.036, + -1.04, + -1.032, + -1.024, + -1.044, + -1.048, + -1.032, + -1.032, + -0.992, + -0.976, + -1, + -1.024, + -1.024, + -0.792, + -0.716, + -0.78, + -0.696, + -0.196, + -0.04, + -0.856, + -0.816, + -1.136, + -1.508, + -1.764, + -1.744, + -1.392, + -0.976, -0.9, - -0.904, - -0.904, -0.888, - -0.892, - -0.9, - -0.9, - -0.892, - -0.88, - -0.872, - -0.892, - -0.904, - -0.896, + -0.928, + -0.996, + -1.032, + -1.016, + -1.048, + -1.072, + -1.044, + -1.04, + -1.004, + -0.98, + -0.984, + -0.98 + ] + }, + "createdAt": 1730110855284 + } + ] + }, + { + "id": "24764089-67ac-4bfa-877d-f8ad35605b84", + "name": "waggle", + "icon": "Confused", + "createdAt": 1730110896681, + "recordings": [ + { + "id": "111929b3-697d-4267-a310-fe637d3564fc", + "data": { + "x": [ + 1.872, + 1.088, + 0.208, + -0.06, + -1.748, + -1.112, + 1.548, + 1.96, + 1.464, + 0.276, + -0.244, + -1.136, + -1.012, + 1.236, + 1.956, + 1.168, + -0.424, + -1.508, + -0.592, + 1.488, + 1.864, + 1.016, + -0.092, + -0.688, + -1.744, + 0.256, + 1.94, + 2.04, + 1.124, + -0.032, + -0.772, + -1.692, + 0.332, + 2.04, + 2.04, + 0.604, + -0.564, + -1.812, + -0.348, + 2.04, + 2.024, + 0.648, + -0.648, + -1.572, + -0.312, + 1.912, + 1.716, + -0.032, + -0.52 + ], + "y": [ + 1.008, + 0.784, + -0.216, + -1.064, + -1.356, + -0.988, + -0.4, + 0.66, + 0.932, + 0.14, + -0.736, + -1.16, + -0.804, + -0.176, + 0.86, + 0.632, + -0.448, + -1.076, + -0.808, + -0.196, + 0.864, + 0.816, + -0.172, + -1.316, + -1.272, + -0.82, + 0.112, + 1.096, + 0.52, + -0.572, + -1.488, + -1.276, + -0.808, + 0.324, + 1.104, + 0.348, + -1.124, + -1.368, + -0.976, + 0.016, + 1.196, + 0.42, + -1.116, + -1.16, + -0.62, + 0.732, + 1.344, + 0.096, + -1.572 + ], + "z": [ + 0.712, + 0.472, + -0.384, + -2.04, + -2.04, + -1.808, + -0.936, + 0.336, + 0.42, + -0.08, + -1.584, + -2.04, + -1.86, -0.888, - -0.88, - -0.892, - -0.892, - -0.892, - -0.892, - -0.896, - -0.892, - -0.896, - -0.904 + 0.292, + 0.356, + -0.684, + -2.04, + -2.04, + -1.036, + 0.528, + 0.644, + -0.348, + -2.04, + -2.04, + -1.744, + 0.052, + 0.904, + 0.432, + -0.62, + -2.04, + -2.04, + -1.388, + 0.112, + 0.72, + 0.404, + -1.612, + -2.04, + -2.04, + -0.224, + 1.012, + 0.396, + -1.716, + -2.04, + -1.684, + 0.216, + 0.996, + 0.248, + -2.04 ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - }, - "icon": "Asleep" - }, - { - "ID": 1717765568963, - "name": "wave", - "matrix": [ - true, - false, - true, - false, - false, - true, - false, - true, - false, - false, - true, - true, - true, - true, - false, - true, - true, - false, - true, - false, - true, - true, - true, - true, - false - ], - "recordings": [ + }, + "createdAt": 1730110968106 + }, { - "ID": 1717765679450, + "id": "41eda2c4-605b-4347-8958-c67528560919", "data": { "x": [ - -0.512, - -0.476, - -0.412, - -0.332, - -0.248, - -0.176, - -0.132, - -0.164, + 0.056, + 0.532, + 0.44, + 0, + 0.004, + 0.164, -0.216, - -0.248, - -0.244, - -0.276, - -0.292, - -0.292, - -0.252, - -0.22, - -0.176, - -0.068, - 0.032, - 0.012, - -0.036, - -0.1, - -0.168, + -0.36, + -0.136, + 0.34, + 0.396, + 0.18, + -0.016, + 0.256, + 0.072, + -0.4, + -0.436, + -0.056, + 0.456, + 0.392, + 0.172, + 0.008, + 0.244, + 0.196, -0.26, - -0.44, - -0.584, - -0.62, - -0.6, - -0.608, - -0.612, - -0.604, - -0.612, - -0.584, - -0.528, - -0.448, - -0.368, - -0.272, - -0.208, - -0.18, - -0.144, - -0.156, - -0.144, - -0.156, + -0.46, + -0.052, + 0.444, + 0.204, + 0.08, + 0.244, + 0.288, + 0.192, + -0.24, + -0.516, -0.2, - -0.236, - -0.288, - -0.312, - -0.304, - -0.3, - -0.312, - -0.356, - -0.364, - -0.38, - -0.444, - -0.5, - -0.612, - -0.684, - -0.756, - -0.772, - -0.72, - -0.644, - -0.536, - -0.44, - -0.376, - -0.324, - -0.308, - -0.308, + 0.412, + 0.416, + 0.24, + 0.068, + 0.26, + 0.012, + -0.652, + -0.504, + 0.132, + 0.608, + 0.416, + 0.064, + 0.176 + ], + "y": [ + -0.164, + 0.624, + 1.168, + 1.144, + 0.172, + -0.82, + -0.868, + -0.608, + -0.164, + 0.26, + 0.864, + 1.184, + 0.764, -0.28, - -0.26, - -0.292, - -0.316, - -0.344, - -0.34, - -0.344, + -1.048, + -1.136, + -0.812, -0.316, - -0.272, - -0.244, - -0.232, - -0.268, + 0.248, + 0.904, + 1.332, + 0.904, + -0.188, + -1.068, + -1.268, + -0.888, + -0.352, + 0.2, + 0.784, + 1.312, + 1.216, + 0.136, + -1.012, + -1.2, + -0.872, + -0.264, + 0.256, + 1.016, + 1.484, + 1.028, + -0.148, + -1.204, + -1.196, + -0.692, + 0, + 0.724, + 1.372, + 1.468, + 0.156 + ], + "z": [ + -0.528, -0.344, - -0.436, - -0.52, - -0.576, - -0.644, - -0.716, + 0.128, + 0.464, + -0.324, + -2.028, + -2.04, + -1.804, + -0.692, + -0.648, + -0.304, + 0.272, + 0.38, + -0.88, + -2.04, + -2.04, + -1.68, -0.78, - -0.844, - -0.784, - -0.732, - -0.712 + -0.764, + -0.22, + 0.5, + 0.44, + -0.836, + -2.04, + -2.04, + -1.644, + -0.816, + -0.848, + -0.284, + 0.464, + 0.528, + -0.504, + -2.04, + -2.04, + -1.996, + -0.904, + -0.772, + -0.116, + 0.608, + 0.588, + -0.804, + -2.04, + -2.04, + -1.588, + -0.688, + -0.38, + 0.46, + 1.06, + 0.136 + ] + }, + "createdAt": 1730110963698 + }, + { + "id": "64f636c1-2a19-43f1-aad2-0585efabfdf1", + "data": { + "x": [ + -0.872, + 1.228, + 1.48, + 1, + 0.128, + -0.92, + -1.44, + 0.276, + 1.4, + 1.124, + 0.552, + 0.244, + -0.504, + -1.516, + -0.508, + 1, + 1.372, + 1.188, + 0.356, + -0.424, + -1.62, + -0.46, + 1.112, + 1.28, + 1.084, + 0.336, + -0.008, + -1.296, + -1.304, + 0.608, + 1.336, + 1.34, + 0.632, + 0.16, + -0.824, + -1.48, + 0.3, + 1.368, + 1.316, + 0.344, + -0.184, + -1.028, + -0.764, + 0.784, + 1.288, + 0.96, + 0.032, + -1.124, + -1.128 ], "y": [ - 2.04, - 2.04, - 2.04, - 1.784, - 1.516, - 1.224, - 0.956, - 0.768, - 0.672, + -0.676, + 0.088, + 1.04, + 0.636, + -0.252, + -1.032, + -0.844, + -0.352, 0.54, - 0.396, - 0.3, + 1.072, + 0.44, + -0.372, + -1.008, + -0.928, + -0.492, 0.164, - 0.068, - -0.004, - -0.04, + 0.94, + 0.74, + -0.204, + -1.084, + -1.104, + -0.7, + 0.016, + 1.036, + 1.036, + 0.056, + -0.932, + -1.2, + -0.908, + -0.352, + 0.584, + 1.024, + 0.288, + -0.608, + -1.164, + -0.856, + -0.4, + 0.364, + 0.792, + 0.312, + -0.516, + -0.776, + -0.512, + 0.044, + 0.724, + 0.496, + -0.224, + -0.868, + -0.712 + ], + "z": [ + -1.416, + -0.652, + 0.316, + 0.232, + -0.688, + -2.04, + -2.04, + -1.148, -0.116, - -0.384, - -0.752, - -0.976, - -1.156, - -1.18, - -1.284, - -1.432, + 0.348, + -0.028, + -1.044, + -2.04, + -2.04, + -1.36, + -0.544, + 0.24, + 0.136, + -0.392, + -2.04, + -2.04, + -1.592, + -0.564, + 0.432, + 0.42, + -0.052, + -1.82, + -2.04, + -1.972, + -1.008, + 0.084, + 0.388, + 0.028, + -1.26, + -2.04, + -2.04, + -1.24, + -0.208, + 0.068, + -0.072, + -1.332, + -2.04, + -1.82, + -0.912, + 0.108, + 0.06, + -0.748, + -1.976, + -2.04 + ] + }, + "createdAt": 1730110956731 + }, + { + "id": "eadbd428-b05d-4c3a-a938-f5e8f3e1b807", + "data": { + "x": [ + 1.452, + 0.64, + 0.46, + -1.608, + -2.04, + 0.592, + 1.648, + 1.284, + 1.128, + 0.664, + 0.764, + -0.624, + -2.04, + -1.032, + 1.368, + 1.564, + 1.696, + 1.132, + 0.508, + -0.496, + -2.04, + -0.792, + 1.372, + 1.404, + 1.46, + 0.92, + 0.712, + -0.096, + -2.04, + -1.464, + 1.076, + 1.468, + 1.676, + 1.292, + 0.736, + 0.108, + -2.04, + -1.416, + 1.32, + 1.296, + 1.288, + 0.624, + 0.036, + -1.044, + -1.176, + 1.036, + 1.648, + 0.584, + -0.812 + ], + "y": [ + 0.928, + -0.176, + -1.368, + -1.968, + -1.772, + -1.404, + -0.352, + 0.904, + 1.364, + 0.272, + -0.92, + -1.652, + -1.6, + -1.34, + -0.748, + 0.392, + 1.192, + 0.528, + -0.492, + -1.516, + -1.4, + -1.108, + -0.524, + 0.532, + 1.244, + 0.696, + -0.312, + -1.412, -1.508, - -1.624, - -1.872, + -1.092, + -0.712, + 0.412, + 1.348, + 0.752, + -0.38, + -1.368, + -1.436, + -1.044, + -0.608, + 0.488, + 0.952, + 0.404, + -0.536, + -0.992, + -0.616, + 0, + 0.664, + 0.352, + -0.588 + ], + "z": [ + 0.556, + 0.168, + -1.688, -2.04, -2.04, + -2, + -0.324, + 0.776, + 0.968, + 0.512, + -1.116, -2.04, -2.04, - -1.94, - -1.692, - -1.512, - -1.328, - -1.192, - -1.04, - -0.896, - -0.724, - -0.5, - -0.328, - -0.244, - -0.12, - 0.016, - 0.148, - 0.216, - 0.264, - 0.312, - 0.412, - 0.552, + -2.036, + -1.184, + 0.26, 0.772, - 0.896, - 1.032, - 1.312, - 1.6, - 1.932, - 2.04, - 2.04, - 2.04, - 2.04, - 1.996, - 1.74, - 1.456, - 1.2, - 0.956, - 0.744, + 0.604, + -0.496, + -2.04, + -2.04, + -2.04, + -0.996, + 0.516, + 0.768, + 0.536, + -0.496, + -2.04, + -2.04, + -2.04, + -1.376, + 0.32, + 0.816, + 0.604, + -0.36, + -2.04, + -2.04, + -2.04, + -1.548, + 0.36, 0.564, - 0.376, - 0.136, - 0, - -0.132, - -0.24, - -0.276, - -0.332, - -0.388, - -0.452, - -0.54, - -0.688, - -0.796, - -0.864, - -0.92, - -0.992, - -1.128, - -1.272, - -1.488, - -1.724, - -1.944, + 0.18, + -1.06, -2.04, -2.04, - -2.04 - ], - "z": [ - -0.472, - -0.364, - -0.268, - -0.228, - -0.24, - -0.276, - -0.324, - -0.292, - -0.212, - -0.168, - -0.208, - -0.232, - -0.212, - -0.2, - -0.224, - -0.344, - -0.42, - -0.332, - -0.092, - 0.188, - 0.372, - 0.356, - 0.304, - 0.244, - 0.212, - 0.08, - -0.152, - -0.4, - -0.292, - -0.064, - 0.092, - 0.108, - 0.084, - 0.008, - -0.004, - 0.024, + -1.272, 0.096, - 0.14, - 0.172, - 0.16, - 0.132, - 0.08, - 0.088, - 0.024, - -0.052, - -0.04, - -0.076, - -0.108, - -0.108, - -0.18, - -0.264, - -0.284, - -0.328, - -0.488, - -0.644, - -0.756, - -0.768, - -0.752, - -0.656, - -0.54, - -0.464, - -0.436, + 0.396, + -1.2 + ] + }, + "createdAt": 1730110951969 + }, + { + "id": "52b0efd9-2e93-4fbe-a990-41b9060e9ff9", + "data": { + "x": [ + 0.412, + -0.484, + -1.636, + -1.372, + -0.484, + 0.216, + 0.804, + 1.46, + 1.172, + 0.524, + -0.032, + -1.608, + -1.292, + -0.572, + -0.316, + 0.368, + 0.692, + 0.948, + 0.792, + 0.204, + -0.372, + -0.988, + -0.732, + -0.772, + -0.316, + 0.62, + 1.084, + 0.892, + 0.268, -0.42, + -1.156, + -1.172, + -0.944, + -0.34, + 0.532, + 0.96, + 0.944, + 0.624, + 0.264, + -0.5, + -1.02, + -0.824, + -0.728, + -0.056, + 0.708, + 1.132, + 0.964, + 0.38 + ], + "y": [ + -1.024, + -2.04, + -1.944, + -1.3, + -0.596, + 0.144, + 1.224, + 1.48, + 0.476, + -0.94, + -2.04, + -2.016, + -1.364, + -0.856, -0.376, - -0.308, + 0.084, + 0.696, + 1.132, + 0.808, + -0.064, + -1.548, + -1.904, + -1.424, + -1.016, -0.24, - -0.208, - -0.18, - -0.176, - -0.192, - -0.212, - -0.176, - -0.088, - 0.004, - 0.124, - 0.192, - 0.208, - 0.248, - 0.308, - 0.384, - 0.408, + 0.744, + 1.632, + 1.468, + -0.004, + -2.02, + -2.04, + -1.684, + -1.156, + -0.504, + 0.396, + 1.228, + 1.536, + 0.916, + -0.376, + -1.688, + -1.672, + -1.252, + -0.908, + -0.208, + 0.904, + 1.456, + 0.86, + -0.452 + ], + "z": [ + -0.912, + -2.04, + -2.04, + -2.04, + -0.968, + -0.112, + 1.2, + 1.672, + 0.824, + -0.336, + -2.04, + -2.04, + -2.04, + -1.512, + -0.584, + -0.368, 0.34, - 0.2, - 0.06, - -0.068, - -0.164, - -0.212, - -0.172, - -0.12, - -0.036 + 0.776, + 0.68, + -0.072, + -1.728, + -2.04, + -2.04, + -1.4, + -0.056, + 0.64, + 1.5, + 1.412, + 0.236, + -1.78, + -2.04, + -2.04, + -1.276, + -0.28, + 0.028, + 0.632, + 1.288, + 1.032, + -0.116, + -1.8, + -2.04, + -2.04, + -1.216, + -0.344, + 0.408, + 1.244, + 1.396, + 0.2 ] - } + }, + "createdAt": 1730110947823 }, { - "ID": 1717765674496, + "id": "4fe2f639-0080-4e3a-9655-2995565a2638", "data": { "x": [ - -0.544, - -0.452, - -0.372, - -0.312, - -0.26, - -0.244, - -0.248, - -0.28, - -0.332, - -0.384, - -0.4, - -0.42, - -0.44, - -0.416, - -0.456, - -0.48, - -0.5, - -0.508, - -0.532, - -0.536, - -0.584, + -1.472, + -0.212, + 0.86, + 0.856, + 0.468, + 0.296, + -0.7, + -1.32, + -0.092, + 0.932, + 0.668, + 0.452, + 0.12, + -0.992, + -0.844, + 0.348, + 1.096, + 0.576, + 0.088, + -0.644, + -0.792, + -0.052, + 0.892, + 0.628, + -0.688, + -1.224, + -0.58, + 0.26, + 0.856, + 0.776, + -0.108, + -1.024, -0.632, + 0.244, + 0.7, + 0.956, + 0.356, + -0.66, + -1.448, + -1.012, + -0.084, + 0.768, + 0.664, + 0.536, + 0.044, + -1.284, + -1.08, + -0.264, + -0.148 + ], + "y": [ + -0.684, + 0.508, + 1.388, + 0.856, + -0.592, + -1.14, + -0.908, + -0.436, + 0.652, + 1.284, + 0.568, + -0.74, + -0.996, + -0.652, + -0.136, + 0.612, + 0.584, + -0.02, -0.716, - -0.76, - -0.724, - -0.64, + -0.396, + -0.1, + 0.148, + 0.34, + -0.144, + -0.928, + -0.704, + -0.188, + 0.452, + 0.496, + 0.092, + -0.552, + -0.596, + -0.4, + 0.292, + 0.52, + 0.112, -0.532, - -0.46, - -0.416, - -0.364, - -0.288, - -0.284, - -0.312, - -0.332, - -0.316, - -0.328, - -0.364, - -0.36, - -0.36, - -0.32, - -0.304, - -0.256, - -0.26, - -0.32, - -0.404, + -1.024, + -0.8, -0.472, - -0.62, - -0.792, - -0.912, - -0.916, - -0.908, - -0.864, - -0.78, - -0.712, - -0.62, - -0.52, - -0.452, - -0.412, - -0.384, - -0.38, - -0.368, - -0.444, - -0.432, - -0.484, - -0.484, - -0.5, - -0.5, - -0.492, - -0.488, - -0.496, - -0.508, - -0.504, + 0.172, + 0.492, + 0.176, + -0.112, -0.484, - -0.5, - -0.472, - -0.512, - -0.572, - -0.656, - -0.708, - -0.704, - -0.66, - -0.572, - -0.52, - -0.456, - -0.392, - -0.364, - -0.368, - -0.4, - -0.38, - -0.368, - -0.364 + -0.6, + -0.636, + -0.304, + 0.152 ], - "y": [ - -1.156, - -1.012, - -0.78, - -0.536, - -0.404, - -0.268, - -0.12, - 0.084, + "z": [ + -1.82, + -0.308, + 1.184, + 0.912, + -0.624, + -2.04, + -2.04, + -1.252, + 0.228, + 1.352, + 0.716, + -1.02, + -2.04, + -2.04, + -1.152, + 0.32, + 0.848, + -0.188, + -1.976, + -2.04, + -1.46, + 0.044, + 0.12, + -0.928, + -1.764, + -2.04, + -1.548, + -0.08, + 0.52, + -0.384, + -1.684, + -2.04, + -1.768, + -0.644, + 0.64, + 0.144, + -1.136, + -2.04, + -2.04, + -1.588, + -0.7, + -0.032, + 0.244, + -0.56, + -1.652, + -1.804, + -1.908, + -1.708, + -0.852 + ] + }, + "createdAt": 1730110939381 + }, + { + "id": "f50f1519-8f71-491a-afc2-9c6a73143104", + "data": { + "x": [ 0.276, - 0.332, - 0.3, - 0.288, + 0.272, + 0.324, + 0.192, + 0.372, + 0.224, + 0.324, + 0.12, + -0.6, + -0.98, + -0.04, + 0.764, + 0.796, + 0.512, 0.376, - 0.536, - 0.712, - 0.84, - 0.98, - 1.068, - 1.204, - 1.312, - 1.476, - 1.744, - 2.04, - 2.04, - 2.04, - 1.9, - 1.656, - 1.456, - 1.272, - 1.016, - 0.688, - 0.464, - 0.368, - 0.296, - 0.144, - -0.024, - -0.096, + 0.252, + 0.1, + -0.3, + -0.34, + -0.12, + 0.072, + 0.252, + 0.292, + 0.38, + 0.256, + -0.108, + -0.276, + -0.316, + -0.924, -0.104, - -0.14, - -0.208, + 0.728, + 1.248, + 1.16, + 0.212, + -0.336, + -0.532, + -0.16, + -1.488, + -1.048, + 0.304, + 0.668, + 0.796, + 0.432, + 0.188, + 0.168, + -0.044, + -0.024, + -0.7 + ], + "y": [ + -0.036, + 0.128, + 0.508, + 1.276, + 1.352, + 0.1, + -1.348, + -1.372, + -1.128, + -0.812, + 0.008, + 0.796, + 1.156, + 0.644, + 0.112, -0.32, - -0.444, - -0.568, - -0.652, - -0.752, - -0.976, - -1.2, - -1.456, - -1.884, + -0.572, + -0.616, + -0.408, + -0.02, + 0.512, + 1.072, + 1.384, + 0.836, + -0.276, + -1.672, + -1.688, + -1.364, + -0.896, + -0.204, + 0.668, + 1.548, + 1.868, + 0.516, + -1.7, -2.04, + -1.796, + -1.468, + -0.676, + 0.188, + 0.972, + 1.556, + 1.492, + 0.376, + -1.184, + -1.784, + -1.648, + -1.424 + ], + "z": [ + -0.812, + -1.136, + -1.048, + -0.02, + 0.596, + 0.596, + -1.276, -2.04, -2.04, - -1.828, - -1.48, - -1.2, - -0.924, - -0.78, + -1.364, -0.652, - -0.516, - -0.344, -0.14, - 0.032, + 0.66, + 0.928, + 0.072, + -1.188, + -2.04, + -2.04, + -1.816, + -1.056, + -0.58, + -0.052, + 0.876, + 1.06, + 0.064, + -1.944, + -2.04, + -2.04, + -1.16, + -0.528, + -0.04, + 0.948, + 1.816, + 1.304, + -1.068, + -2.04, + -2.04, + -1.56, + -0.416, + -0.44, + 0.34, + 1.052, + 1.456, + 0.508, + -1.28, + -2.04, + -2.04, + -1.916 + ] + }, + "createdAt": 1730110935138 + }, + { + "id": "064f9a2c-d99d-4b9a-924e-d5f715573804", + "data": { + "x": [ + 0.244, + 0.088, + -0.3, + -0.34, + -0.272, + -0.18, + 0.38, + 0.636, + 0.428, + 0.184, 0.132, - 0.22, + -0.196, + -0.06, + -0.416, + -0.12, + 0.564, + 0.708, + 0.532, + 0.404, + 0.004, + -0.144, + -0.128, + -0.452, + 0.316, + 0.864, + 0.712, + 0.428, 0.192, - 0.204, - 0.24, - 0.3, - 0.424, - 0.544, - 0.62, - 0.628, - 0.72, - 0.908, - 1.124, - 1.42, - 1.712, - 2.02, - 2.04, - 2.04, - 2.04, - 1.844, - 1.604, - 1.372, - 1.076, - 0.784, + -0.388, + -0.208, + -0.648, + -0.588, + 0.352, + 0.712, 0.584, + 0.196, + 0.132, + -0.016, + -0.132, + -0.304, + 0.256, + 0.6, + 0.58, + 0.196, + 0.08, + -0.048, + -0.232, + 0.016, + -0.188 + ], + "y": [ + 0.496, + -0.772, + -1.608, + -1.26, + -0.74, + -0.164, + 0.428, + 0.964, + 0.976, + 0.076, + -1.164, + -1.46, + -1.104, + -0.684, + 0.036, + 0.876, + 1.388, + 0.884, + -0.456, + -1.804, + -1.552, + -1.048, + -0.404, + 0.428, + 1.272, + 1.54, + 0.532, + -1.16, + -2.04, + -1.516, + -1.04, + -0.328, 0.516, - 0.424, - 0.192, - -0.028 + 1.352, + 1.444, + 0.172, + -1.48, + -1.62, + -1.316, + -0.836, + -0.148, + 0.824, + 1.524, + 1.152, + -0.324, + -1.62, + -1.6, + -1.132, + -0.528 ], "z": [ - 0.336, - 0.296, - 0.16, - 0.016, - -0.024, - 0.04, - 0.056, - -0.028, + 0.536, + -0.972, + -2.04, + -2.04, + -1.864, + -0.428, -0.124, - -0.164, + 0.412, + 0.74, + 0.208, + -1.44, + -2.04, + -2.04, + -1.4, + -0.212, + 0.428, + 1.192, + 1.076, + -0.276, + -2.04, + -2.04, + -2.04, + -0.66, + -0.188, + 0.556, + 1.364, + 0.948, + -0.824, + -2.04, + -2.04, + -1.808, + -0.204, + 0.08, + 0.812, + 1.108, + 0.344, + -1.812, + -2.04, + -2.04, + -1.12, + -0.548, + 0.088, + 0.98, + 1.024, + -0.336, + -2.04, + -2.04, + -2.04, + -0.748 + ] + }, + "createdAt": 1730110929535 + }, + { + "id": "16310978-ff3a-4a8d-85b1-bb25c725a10f", + "data": { + "x": [ + 0.144, + 0.096, + 0.092, -0.088, - -0.072, - -0.18, - -0.288, - -0.396, - -0.396, - -0.376, - -0.404, - -0.48, - -0.632, - -0.768, - -0.804, - -0.876, - -0.84, - -0.708, - -0.644, - -0.652, - -0.676, - -0.596, - -0.516, - -0.416, - -0.308, - -0.272, - -0.248, - -0.16, - -0.028, - 0.012, - 0.004, - 0.048, - 0.152, - 0.316, - 0.4, - 0.444, - 0.484, - 0.504, - 0.548, - 0.616, - 0.6, - 0.476, - 0.328, - 0.32, - 0.336, + -0.388, + -0.488, + -0.064, + 0.368, + 0.436, + 0.248, + 0.148, + 0.028, + -0.008, + -0.372, + -0.488, + -0.064, + 0.356, + 0.472, 0.332, - 0.348, - 0.348, 0.264, - 0.184, - 0.14, - 0.104, - 0.056, - 0.12, - 0.132, - 0.112, 0.084, + 0.008, + -0.404, + -0.448, 0.036, - 0.076, + 0.464, + 0.52, + 0.356, + 0.184, + -0.092, + -0.012, + -0.572, + -0.408, + 0.172, + 0.504, + 0.512, + 0.144, + 0.088, + -0.032, + -0.36, + -0.48, + -0.188, + 0.228, + 0.48, + 0.412, + 0.256, 0.108, - 0.032, - -0.096, - -0.236, - -0.248, - -0.16, - -0.192, + -0.068, + -0.508 + ], + "y": [ + 0.424, + -0.292, + -1.036, + -1.128, + -0.892, + -0.472, + 0.004, + 0.448, + 0.784, + 0.524, + -0.156, + -0.888, + -1.072, + -0.984, + -0.56, + -0.04, + 0.512, + 0.864, + 0.56, + -0.228, + -1.12, + -1.232, + -1.096, + -0.672, + -0.06, + 0.624, + 1.036, + 0.736, -0.32, - -0.468, + -1.264, + -1.24, + -1.088, -0.552, - -0.564, - -0.596, - -0.66, - -0.628, - -0.516, - -0.424, - -0.456, - -0.432, - -0.404, - -0.332, - -0.312, - -0.28, + 0.016, + 0.712, + 0.9, + 0.28, + -0.484, + -0.964, + -1.016, + -0.72, + -0.268, + 0.248, + 0.676, + 0.876, + 0.184, + -0.78, + -1.072, + -1.16 + ], + "z": [ + 0.26, + -0.756, + -2.04, + -2.04, + -2.008, + -0.796, + -0.54, + -0.168, + 0.492, + 0.576, + -0.36, + -2.024, + -2.04, + -2.04, + -1.096, + -0.536, + 0.052, + 0.736, + 0.812, + -0.264, + -2.04, + -2.04, + -2.04, + -1.084, + -0.484, + 0.148, + 1.088, + 1.148, + -0.252, + -2.04, + -2.04, + -2.04, + -0.82, -0.256, - -0.192, - -0.092 + 0.444, + 0.692, + 0.216, + -1.2, + -2.04, + -2.04, + -1.66, + -0.836, + -0.312, + 0.376, + 0.932, + 0.212, + -1.512, + -2.04, + -2.04 ] - } + }, + "createdAt": 1730110925513 }, { - "ID": 1717765669623, + "id": "c79c5e37-325c-49d5-8640-e60c23950942", "data": { "x": [ - -0.372, - -0.376, - -0.392, - -0.352, - -0.352, - -0.404, - -0.444, - -0.468, - -0.464, - -0.456, - -0.444, - -0.444, - -0.472, - -0.528, - -0.608, - -0.704, - -0.808, - -0.912, - -0.992, - -0.996, - -0.988, - -0.948, - -0.916, - -0.856, - -0.844, - -0.772, - -0.676, - -0.572, - -0.52, - -0.508, - -0.46, - -0.42, - -0.396, - -0.384, - -0.376, - -0.388, - -0.384, - -0.38, - -0.396, - -0.396, - -0.428, - -0.472, - -0.492, - -0.504, - -0.544, - -0.6, - -0.66, - -0.72, - -0.724, - -0.68, - -0.6, - -0.528, - -0.492, - -0.444, - -0.388, - -0.392, - -0.428, - -0.436, - -0.432, - -0.464, - -0.504, - -0.516, - -0.532, + 0.116, + 0.224, + 0.268, + 0.432, + 0.304, + -0.044, + -0.484, -0.512, - -0.472, - -0.508, - -0.496, - -0.46, - -0.44, - -0.492, - -0.544, - -0.644, - -0.768, - -0.916, - -1.048, - -1.18, - -1.192, - -1.176, - -1.092, - -1.008, - -0.916, - -0.804, - -0.704, - -0.6, - -0.48, - -0.348, - -0.288, + -0.084, + 0.208, + 0.26, + 0.384, + 0.372, + 0.112, -0.272, - -0.296, - -0.324 + -0.536, + -0.396, + 0.052, + 0.196, + 0.216, + 0.38, + 0.408, + 0.032, + -0.476, + -0.488, + -0.088, + 0.144, + 0.22, + 0.32, + 0.524, + 0.292, + -0.284, + -0.612, + -0.54, + 0.004, + 0.252, + 0.212, + 0.204, + 0.268, + 0.204, + -0.352, + -0.76, + -0.228, + 0.256, + 0.276, + 0.2, + 0.32, + 0.276 ], "y": [ - 0.544, - 0.428, - 0.268, - 0.036, - -0.084, - -0.124, - -0.116, - -0.1, - -0.132, - -0.224, - -0.328, - -0.44, - -0.512, - -0.656, - -0.832, - -1.024, - -1.272, - -1.496, - -1.776, - -2.024, - -2.028, - -1.844, - -1.56, - -1.268, - -0.94, - -0.752, - -0.656, - -0.592, - -0.408, - -0.276, - -0.216, - -0.108, - 0.004, - 0.152, + 0.088, 0.304, - 0.368, - 0.344, - 0.352, - 0.428, + 0.632, + 0.46, + -0.176, + -0.84, + -0.96, + -0.484, + -0.072, + 0.092, 0.52, - 0.636, - 0.732, - 0.848, - 1.056, - 1.428, - 1.812, - 2.04, - 2.04, - 2.04, - 2.04, - 1.756, - 1.472, - 1.244, - 0.968, - 0.668, - 0.5, - 0.424, - 0.332, - 0.188, - 0.048, - -0.012, - 0, - 0, - -0.064, - -0.156, - -0.22, - -0.28, + 0.756, + 0.412, + -0.508, + -0.832, + -0.684, + -0.18, + 0.1, + 0.224, + 0.556, + 0.508, + 0.004, + -0.74, + -0.956, + -0.52, + 0.004, + 0.168, + 0.456, + 0.784, + 0.448, + -0.472, + -0.904, + -0.804, -0.368, - -0.46, - -0.576, - -0.812, - -1.036, - -1.108, - -1.188, - -1.304, - -1.464, - -1.628, - -1.76, - -1.728, - -1.556, - -1.34, - -1.132, - -0.86, - -0.68, - -0.576, - -0.536, - -0.38, - -0.088, - 0.176, - 0.304 + 0.024, + 0.392, + 0.788, + 0.852, + 0.248, + -0.5, + -0.64, + -0.448, + 0.008, + 0.204, + 0.556, + 0.88, + 0.264, + -0.48 ], "z": [ - -0.308, - -0.228, - -0.124, - -0.168, - -0.16, - -0.072, - 0.008, - 0.032, - 0.056, - 0.076, - 0.176, - 0.32, + -0.54, + 0.024, + 0.724, + 0.336, + -1.064, + -2.04, + -2.04, + -1.592, + -0.768, + -0.36, 0.38, - 0.388, - 0.416, - 0.42, - 0.36, - 0.316, - 0.284, - 0.28, - 0.308, - 0.252, - 0.26, - 0.152, - 0.056, - 0.04, - 0.064, - 0.12, + 0.728, + -0.06, + -1.816, + -2.04, + -2.04, + -1.02, + -0.644, + -0.276, + 0.452, + 0.376, + -0.804, + -2.04, + -2.04, + -1.772, + -0.864, + -0.448, 0.088, - 0.016, - -0.02, - -0.012, - -0.024, - -0.044, + 0.668, + 0.124, + -1.456, + -2.04, + -2.04, + -1.088, + -0.544, + -0.408, + 0.192, + 0.436, + -0.272, + -2.04, + -2.04, + -1.852, + -0.872, + -0.608, -0.032, - -0.004, - 0.024, - -0.04, - -0.108, - -0.22, - -0.296, - -0.38, - -0.444, - -0.548, + 0.688, + 0.296, + -1.368 + ] + }, + "createdAt": 1730110921508 + }, + { + "id": "c576737a-0b1f-472f-a75f-cec86f35b83c", + "data": { + "x": [ + 0.452, + 0.764, + 0.564, + 0.44, + 0.068, + -0.516, + -0.612, + -0.324, + 0.068, + 0.504, + 0.62, + 0.544, + 0.288, + -0.212, -0.712, - -0.864, - -0.9, - -0.856, + -0.624, + -0.096, + 0.264, + 0.604, + 0.744, + 0.436, + -0.044, + -0.596, + -0.684, + -0.224, + 0.16, + 0.444, + 0.608, + 0.468, + 0.108, + -0.384, + -0.712, + -0.444, + 0.044, + 0.468, + 0.744, + 0.548, + 0.228, + -0.444, + -0.896, + -0.404, + 0.084, + 0.528, + 0.684, + 0.384, + 0.092, + -0.484, -0.792, - -0.72, - -0.704, + -0.192 + ], + "y": [ + 0.556, + 1.104, + 0.84, + -0.12, + -0.972, + -1.124, + -0.96, -0.652, - -0.636, - -0.56, - -0.484, - -0.392, - -0.332, - -0.316, - -0.252, - -0.108, - 0.02, + -0.128, + 0.548, + 0.896, + 0.552, + -0.224, + -1.016, + -1.032, + -0.676, + -0.24, + 0.208, + 0.692, + 0.744, 0.068, + -0.98, + -1.212, + -0.908, + -0.492, + 0, + 0.504, + 0.836, + 0.48, + -0.432, + -0.972, + -0.896, + -0.472, + -0.008, + 0.632, + 0.896, + 0.232, + -0.836, + -1.232, + -1.024, + -0.512, + 0.048, + 0.608, + 0.724, 0.064, - 0.088, - 0.104, - 0.18, - 0.248, - 0.252, - 0.228, - 0.34, - 0.444, - 0.492, - 0.416, - 0.304, - 0.248, - 0.272, - 0.264, - 0.3, - 0.256, - 0.224, - 0.248, - 0.224, - 0.176, - 0.156, - 0.204, - 0.176, - 0.136, + -0.992, + -1.204, + -0.952, + -0.448 + ], + "z": [ + -0.148, + 0.568, + 0.984, + 0.06, + -1.684, + -2.04, + -2.04, + -1.508, + -0.608, + 0.012, + 0.868, + 0.724, + -0.56, + -2.04, + -2.04, + -2.04, + -0.964, + -0.036, + 0.696, + 0.664, + -0.3, + -2.036, + -2.04, + -2.04, + -1.276, + -0.46, + 0.348, + 0.768, + 0.084, + -1.252, + -2.04, + -2.04, + -1.564, + -0.528, + 0.588, + 1.196, + 0.436, + -1.436, + -2.04, + -2.04, + -1.468, + -0.364, + 0.66, + 1.048, 0.032, - -0.056, - -0.096 + -2.04, + -2.04, + -2.04, + -1.144 ] - } - }, + }, + "createdAt": 1730110916926 + } + ] + }, + { + "id": "9db8233a-60f2-414d-a0cd-9b0d12064616", + "name": "flick", + "icon": "Yes", + "createdAt": 1730110969638, + "recordings": [ { - "ID": 1717765664759, + "id": "460e4f1f-af8f-4073-85bb-fd699717b3c7", "data": { "x": [ - -0.524, - -0.416, - -0.384, - -0.352, - -0.352, - -0.344, - -0.356, - -0.396, - -0.428, - -0.452, - -0.468, - -0.468, - -0.484, - -0.5, - -0.528, - -0.548, - -0.556, - -0.576, - -0.604, - -0.624, - -0.616, - -0.628, - -0.656, - -0.656, - -0.576, - -0.508, - -0.428, - -0.412, - -0.392, - -0.364, - -0.348, - -0.328, + 0.016, + 0.028, + 0.024, + 0.02, + 0.012, + 0.028, + 0.012, + 0, + 0.012, + 0.02, + 0.028, + 0.024, + 0.008, + -0.02, + 0.004, + 0.008, + 0.136, + 0.196, + 0.232, -0.332, - -0.328, - -0.364, - -0.416, - -0.456, - -0.48, - -0.476, - -0.476, - -0.516, - -0.6, - -0.684, - -0.712, - -0.804, - -0.88, - -0.916, - -0.924, - -0.916, - -0.888, - -0.836, - -0.776, - -0.76, - -0.732, - -0.692, - -0.604, - -0.536, - -0.504, - -0.484, - -0.488, - -0.48, - -0.5, - -0.488, - -0.492, - -0.508, - -0.508, - -0.46, - -0.444, - -0.456, - -0.452, - -0.42, - -0.44, - -0.456, - -0.476, - -0.472, - -0.476, - -0.452, - -0.412, - -0.372, - -0.348, - -0.364, - -0.384, - -0.4, - -0.376, - -0.412, - -0.456, - -0.504, - -0.504, - -0.508, - -0.484, - -0.492 + -2.04, + -2.04, + 0.064, + 2.04, + 2.04, + 2.04, + 0.44, + 1.208, + 0.596, + 0.308, + 0.168, + -0.276, + -0.188, + -0.072, + -0.04, + -0.096, + 0, + 0.104, + 0.108, + 0.064, + 0.036, + 0.036, + 0, + -0.012, + 0.048, + 0.132, + 0.156, + 0.124, + 0.096, + 0.104 ], "y": [ - -0.824, - -0.72, - -0.52, - -0.292, - -0.124, + -0.208, + -0.224, + -0.232, + -0.224, + -0.204, + -0.208, + -0.212, + -0.204, + -0.2, + -0.204, + -0.204, + -0.216, + -0.2, + -0.2, + -0.2, + 0.036, + -0.016, 0.008, - 0.084, - 0.164, - 0.256, - 0.336, + -0.04, + -0.624, + -2.04, + -2.04, + -2.04, + -1.692, + -0.82, + 0.912, + 1.596, + 0.348, + -0.32, + -0.632, + -0.032, + 0.252, + 0.296, + 0.376, + 0.456, + 0.476, + 0.448, + 0.448, 0.416, - 0.432, - 0.484, - 0.608, - 0.78, - 0.924, - 0.988, - 1.1, - 1.284, - 1.428, - 1.608, - 1.96, + 0.376, + 0.352, + 0.296, + 0.22, + 0.152, + 0.116, + 0.088, + 0.048, + 0.008, + 0.012, + 0.024 + ], + "z": [ + -1.008, + -1.032, + -1.04, + -1.02, + -1.008, + -1.012, + -1.008, + -1.016, + -1.024, + -1.012, + -0.996, + -1.012, + -1.024, + -1.004, + -1.028, + -0.976, + -0.984, + -0.856, + -1.056, + -2.04, + -2.04, + -2.04, + -2.04, + -1.064, + 1.844, 2.04, 2.04, - 1.98, - 1.584, - 1.284, - 1.148, - 1.004, - 0.808, - 0.576, - 0.416, - 0.22, - -0.012, - -0.132, - -0.152, - -0.176, - -0.252, - -0.38, - -0.54, - -0.7, - -0.892, + 0.224, + -0.492, + -1.436, + -1.848, + -1.096, + -0.916, + -0.868, + -0.952, + -0.9, + -0.912, + -0.972, + -0.98, + -0.976, + -0.968, -1.028, - -1.252, - -1.324, - -1.476, - -1.64, - -1.824, - -1.812, - -1.612, - -1.4, + -1.088, + -1.104, + -1.14, + -1.148, + -1.148, -1.16, - -0.836, - -0.552, - -0.408, - -0.372, - -0.332, - -0.16, - 0.048, - 0.264, - 0.452, - 0.56, - 0.576, - 0.588, - 0.584, - 0.584, - 0.596, - 0.7, - 0.86, - 1.048, - 1.248, - 1.56, - 1.936, - 2.04, - 2.04, + -1.18, + -1.156 + ] + }, + "createdAt": 1730111021721 + }, + { + "id": "c1393888-5895-4d82-84bc-3d33ba037b85", + "data": { + "x": [ + 0.044, + 0.06, + 0.044, + 0.004, + 0, + -0.008, + -0.02, + 0.032, + 0.064, + 0.024, + 0.008, + 0.036, + 0.064, + 0.06, + 0.056, + 0.04, + -0.26, + -1.32, + -2.04, + -1.056, + 1.98, 2.04, - 1.868, - 1.66, - 1.4, - 1.124, - 0.884, - 0.748, - 0.54, - 0.3, - 0.18, - 0.072, - 0.02, - -0.016, - -0.076, - -0.172, - -0.308 - ], - "z": [ - 0.124, - 0.112, - 0.176, - 0.156, - 0.072, - -0.024, + 1.832, + 2.02, + 1.316, + 0.152, + -0.096, + -0.38, + -0.38, + -0.344, + -0.496, + -0.252, + -0.02, + 0.016, + -0.02, -0.068, - -0.092, - -0.136, - -0.22, - -0.312, - -0.34, - -0.376, - -0.392, - -0.468, - -0.544, - -0.636, - -0.644, - -0.616, - -0.604, - -0.584, - -0.632, - -0.728, - -0.648, - -0.436, - -0.296, - -0.268, - -0.292, - -0.34, - -0.324, - -0.268, - -0.224, - -0.212, - -0.248, - -0.236, - -0.216, - -0.164, -0.1, + -0.072, -0.02, - 0.048, - 0.144, - 0.284, - 0.408, - 0.424, - 0.424, - 0.408, - 0.38, - 0.32, - 0.304, - 0.272, - 0.228, - 0.184, - 0.036, - -0.132, - -0.172, - -0.088, - 0.036, - 0.116, - 0.128, - 0.056, - -0.024, - -0.052, - -0.056, -0.004, + -0.02, + -0.008, + 0.016, 0.02, - -0.056, + 0.032, + 0.032, + 0.028, + 0.052, + 0.068 + ], + "y": [ + -0.168, + -0.168, + -0.184, + -0.188, -0.176, - -0.268, - -0.32, - -0.332, - -0.38, - -0.472, - -0.564, - -0.64, - -0.556, - -0.396, - -0.324, - -0.368, - -0.432, - -0.392, - -0.34, - -0.304, - -0.264, - -0.272, - -0.256, - -0.256, - -0.244, - -0.216, - -0.064, + -0.184, + -0.168, + -0.156, + -0.168, + -0.156, + -0.152, + -0.14, + -0.128, + -0.1, + -0.06, + 0.016, + -0.172, + -1.632, + -2.04, + -2.04, + -1.112, + -0.412, + 1.108, + 1.472, + 0.844, + -0.076, + -0.28, 0.084, - 0.176 + 0.28, + 0.28, + 0.344, + 0.36, + 0.352, + 0.348, + 0.36, + 0.336, + 0.284, + 0.256, + 0.228, + 0.16, + 0.116, + 0.112, + 0.108, + 0.088, + 0.06, + 0.024, + 0.028, + 0.052, + 0.044 + ], + "z": [ + -1.02, + -1.012, + -1.028, + -1.036, + -1.052, + -1.06, + -1.028, + -1.016, + -1.02, + -1.024, + -1.004, + -1.004, + -0.996, + -0.984, + -0.948, + -1.036, + -1.752, + -2.04, + -2.04, + -2.024, + -1.668, + 1.72, + 2.04, + 2.04, + 0.392, + -0.412, + -1.512, + -1.48, + -1.096, + -1.124, + -0.996, + -1.032, + -1.032, + -1.024, + -1.06, + -1.032, + -1, + -1.036, + -1.124, + -1.148, + -1.132, + -1.1, + -1.088, + -1.048, + -1.056, + -1.108, + -1.116, + -1.096, + -1.06 ] - } + }, + "createdAt": 1730111017623 }, { - "ID": 1717765659660, + "id": "a97b77d2-c44b-4013-840a-fe8a215808a8", "data": { "x": [ - -0.428, - -0.42, - -0.424, - -0.408, - -0.452, - -0.48, - -0.476, - -0.452, - -0.44, - -0.444, - -0.452, - -0.456, - -0.504, - -0.524, - -0.508, - -0.52, - -0.524, - -0.592, - -0.696, - -0.816, - -0.892, - -0.968, - -1.06, - -1.08, - -1.032, - -0.968, - -0.888, - -0.824, - -0.74, - -0.608, - -0.468, - -0.36, - -0.312, - -0.328, - -0.356, - -0.36, - -0.412, - -0.464, - -0.508, - -0.54, - -0.552, - -0.548, - -0.552, - -0.548, - -0.536, - -0.536, - -0.544, - -0.552, - -0.56, - -0.588, - -0.668, - -0.72, - -0.744, - -0.7, - -0.628, - -0.556, - -0.472, - -0.46, - -0.48, - -0.48, - -0.484, - -0.488, - -0.54, - -0.572, - -0.592, - -0.596, - -0.608, - -0.596, - -0.572, - -0.544, - -0.548, - -0.552, - -0.556, - -0.588, - -0.612, - -0.712, - -0.804, - -0.888, - -0.936, - -0.96, - -0.98, - -0.96, - -0.9, - -0.844, - -0.768, - -0.68, - -0.624, - -0.556, - -0.488, - -0.436, - -0.404 + -0.056, + -0.036, + -0.032, + -0.024, + -0.008, + -0.012, + -0.044, + -0.04, + -0.004, + 0.004, + -0.04, + -0.036, + -0.016, + 0.016, + -0.008, + -0.172, + -0.672, + -1.864, + -2.04, + 0.648, + 2.04, + 2.04, + 1.356, + 1.304, + 1.828, + 0.508, + 0.128, + -0.072, + -0.304, + -0.24, + -0.204, + -0.136, + 0.04, + 0.148, + 0.172, + 0.156, + 0.108, + 0.12, + 0.052, + -0.028, + 0, + 0.076, + 0.128, + 0.1, + 0.024, + 0, + 0.02, + 0.076, + 0.104 ], "y": [ - 0.68, - 0.556, - 0.452, - 0.24, - 0.092, - 0.068, - 0.068, - 0.008, - -0.16, + -0.26, + -0.264, + -0.272, + -0.28, + -0.272, + -0.296, + -0.336, + -0.34, -0.316, - -0.412, - -0.376, - -0.376, - -0.424, - -0.576, - -0.704, - -0.812, - -0.908, - -1.028, - -1.176, - -1.336, - -1.524, - -1.616, - -1.624, - -1.628, - -1.548, - -1.38, - -1.132, + -0.292, + -0.268, + -0.264, + -0.264, + -0.224, + -0.196, + -0.176, + -0.58, + -2.04, + -2.04, + -2.04, + -1.68, + -1.312, + 0.312, + 1.596, + 1.528, + 0.672, + 0.108, + 0.232, + 0.42, + 0.416, + 0.296, + 0.16, + 0.024, + 0.156, + 0.156, + 0.072, + 0.04, + 0.08, + 0.084, + 0.052, + 0.012, + -0.016, + -0.004, + 0.012, + -0.02, + 0, + -0.004, + -0.032, + -0.044 + ], + "z": [ + -0.968, + -0.992, + -1.008, + -1.012, + -1.02, + -1.004, + -1.012, + -1.048, + -1.084, + -1.044, + -0.992, + -0.964, -0.96, - -0.864, - -0.86, - -0.776, - -0.54, - -0.22, - -0.008, - 0.116, - 0.212, - 0.292, - 0.4, - 0.472, - 0.5, - 0.52, - 0.588, - 0.66, - 0.7, - 0.744, - 0.86, - 1.06, - 1.32, - 1.6, - 1.904, + -0.996, + -0.956, + -1.176, + -2.04, + -2.04, + -2.04, + -2.04, + -1.316, + 1.372, 2.04, 2.04, - 1.996, - 1.704, - 1.312, - 0.972, - 0.704, - 0.564, - 0.444, - 0.3, - 0.164, - 0.048, + 0.628, + 0.46, + -0.4, + -0.94, + -0.748, + -0.62, + -0.696, + -0.888, + -1.144, + -1.296, + -1.348, + -1.404, + -1.332, + -1.216, + -1.124, + -1.088, + -1.152, + -1.16, + -1.124, + -1.08, + -1.06, + -1.048, + -1.072, + -1.076, + -1.076 + ] + }, + "createdAt": 1730111013390 + }, + { + "id": "2c05aef7-fd5c-43e3-a985-bb72a0c54301", + "data": { + "x": [ + -0.008, + -0.004, + 0.012, + 0.012, 0.012, 0.004, - 0.016, - -0.032, - -0.096, - -0.152, - -0.152, - -0.172, - -0.324, - -0.492, - -0.572, - -0.684, - -0.792, - -1.024, - -1.28, - -1.544, - -1.684, - -1.756, - -1.68, - -1.524, - -1.372, - -1.212, - -0.988, - -0.736, - -0.604, - -0.564, - -0.496, - -0.352 - ], - "z": [ - -0.532, - -0.5, - -0.42, - -0.232, - -0.072, + 0.004, + 0.004, -0.004, - -0.08, - -0.132, + -0.008, 0, - 0.22, - 0.3, - 0.24, - 0.168, - 0.216, - 0.32, - 0.424, - 0.428, - 0.472, - 0.468, - 0.452, - 0.376, - 0.304, - 0.308, - 0.356, - 0.464, - 0.564, - 0.52, - 0.356, - 0.264, - 0.288, - 0.372, - 0.408, - 0.284, - 0.112, + 0.032, + 0.072, + 0.088, + 0.064, + 0.076, + -0.04, + -0.564, + -1.784, + -2.04, + -0.54, + 2.04, + 2.04, + 2.04, + 2.04, + 1.876, + -0.136, + -0.456, + -0.452, + -0.2, + -0.196, + -0.38, + -0.276, + -0.068, + 0.012, + -0.008, + -0.14, + -0.176, + -0.052, -0.048, - -0.132, + -0.08, + 0, + 0.032, + 0.036, + 0.04, + 0.056, + 0.068, + 0.14 + ], + "y": [ + -0.096, + -0.08, + -0.08, + -0.1, -0.108, - -0.14, - -0.196, - -0.228, - -0.208, - -0.256, - -0.304, - -0.36, - -0.352, - -0.332, - -0.332, - -0.42, - -0.584, - -0.788, + -0.112, + -0.124, + -0.12, + -0.124, + -0.12, + -0.112, + -0.084, + -0.052, + -0.052, + -0.06, + -0.032, + 0.052, + -0.46, + -2.04, + -2.04, + -2.04, + -2.04, + -1.728, + 1.412, + 2.04, + 1.036, + -0.976, -0.86, - -0.816, - -0.732, - -0.72, - -0.736, - -0.696, - -0.56, - -0.448, - -0.376, - -0.352, - -0.292, - -0.168, - -0.02, - 0.048, - 0.068, - 0.036, - 0.036, - 0.104, - 0.188, - 0.196, - 0.176, - 0.204, - 0.32, - 0.4, - 0.344, - 0.372, - 0.396, - 0.4, - 0.368, - 0.396, - 0.448, - 0.484, - 0.472, - 0.5, - 0.48, - 0.352, - 0.212, - 0.164, - 0.148, + -0.152, + 0.112, 0.116, - 0.032 + -0.1, + 0.004, + 0.148, + 0.256, + 0.344, + 0.208, + 0.152, + 0.124, + 0.108, + 0.076, + 0.052, + 0.032, + -0.008, + -0.004, + 0, + -0.008, + 0.12 + ], + "z": [ + -1.036, + -1.012, + -1.004, + -1.028, + -1.052, + -1.048, + -1.036, + -1.032, + -1.044, + -1.04, + -1.012, + -0.972, + -0.94, + -0.932, + -0.932, + -0.936, + -1.212, + -2.04, + -2.04, + -2.04, + -2.04, + -1.48, + 2.04, + 2.04, + 2.04, + 0.384, + 0.352, + -1.36, + -1.66, + -1.56, + -1.128, + -1.024, + -1.248, + -1.328, + -1.204, + -1.156, + -1.156, + -1.164, + -1.232, + -1.228, + -1.144, + -1.144, + -1.076, + -1.08, + -1.1, + -1.076, + -1.028, + -0.844 ] - } + }, + "createdAt": 1730111008953 }, { - "ID": 1717765654503, + "id": "b6c8590c-2f84-40aa-9357-e7ff27053629", "data": { "x": [ - -0.312, - -0.352, - -0.4, - -0.468, - -0.464, - -0.416, - -0.396, - -0.308, - -0.22, - -0.084, - -0.016, - -0.012, - -0.064, - -0.104, - -0.152, - -0.252, - -0.352, - -0.404, - -0.484, - -0.508, - -0.52, - -0.516, - -0.5, - -0.468, - -0.444, + -0.008, + -0.008, + 0.016, + 0.044, + -0.12, -0.432, - -0.4, - -0.404, - -0.396, - -0.284, - -0.304, - -0.448, - -0.684, - -0.848, - -1.028, - -1.184, - -1.264, - -1.24, - -1.092, - -0.86, - -0.636, - -0.444, - -0.288, - -0.212, - -0.16, - -0.188, - -0.22, - -0.224, - -0.22, - -0.308, - -0.38, - -0.416, - -0.424, - -0.44, - -0.46, - -0.504, - -0.524, - -0.5, - -0.512, - -0.504, - -0.44, - -0.408, - -0.424, - -0.448, - -0.424, - -0.452, - -0.484, - -0.52, - -0.588, - -0.584, - -0.52, - -0.412, + -0.66, + -0.776, + -2.04, + -2.04, + 0.132, + 2.04, + 2.04, + 2.04, + 1.856, + 1.664, + 0.696, + -0.028, + -0.1, + -0.324, + -0.372, -0.356, -0.316, - -0.244, - -0.224, - -0.248, - -0.276, - -0.324, - -0.364, - -0.42, - -0.468, - -0.476, - -0.496, - -0.484, - -0.484, - -0.448, - -0.46, - -0.428, - -0.38, - -0.38 + -0.256, + -0.184, + -0.044, + 0.048, + 0.036, + 0.032, + 0.04, + -0.036, + -0.1, + -0.1, + 0.008, + 0.008, + -0.048, + 0.004, + 0.048, + 0.028, + -0.004, + -0.044, + 0.016, + 0.06, + 0.044, + 0.052, + 0.088, + 0.08, + 0.096, + 0.084 ], "y": [ - 1.256, - 1.584, - 2.032, - 2.04, - 2.04, - 2.04, - 2.04, - 1.928, - 1.624, - 1.16, - 0.716, - 0.4, - 0.264, - 0.112, - -0.108, - -0.216, - -0.172, + -0.208, + -0.12, + -0.044, + -0.008, + 0.012, + 0.036, + -0.056, + -1.396, + -2.04, + -2.04, + -2.04, + -2.04, + -1.528, + 1.204, + 1.404, + 0.768, + 0.076, + -0.124, + 0.244, + 0.612, + 0.7, + 0.624, + 0.436, + 0.26, + 0.184, + 0.144, + 0.06, + 0.012, + -0.02, + -0.024, + -0.14, + -0.128, + -0.192, -0.16, - -0.22, - -0.348, - -0.368, - -0.292, - -0.256, - -0.352, - -0.488, - -0.52, - -0.52, - -0.44, - -0.36, - -0.644, - -1.112, - -1.312, - -1.524, - -1.908, + -0.16, + -0.16, + -0.2, + -0.244, + -0.24, + -0.216, + -0.208, + -0.232, + -0.2, + -0.188, + -0.176, + -0.192, + -0.168, + -0.16, + -0.172 + ], + "z": [ + -0.944, + -0.892, + -0.872, + -0.888, + -0.944, + -0.928, + -1.092, + -1.696, -2.04, -2.04, - -1.916, - -1.68, - -1.548, - -1.552, - -1.54, - -1.428, - -1.248, - -0.972, - -0.748, - -0.456, - -0.296, - -0.236, - -0.172, - 0.052, - 0.204, - 0.212, - 0.188, - 0.244, - 0.428, - 0.612, - 0.64, - 0.552, - 0.548, - 0.6, - 0.592, - 0.652, - 0.82, - 0.956, - 1.04, - 1.264, - 1.588, - 1.996, + -2.04, + 0.032, 2.04, 2.04, 2.04, - 1.784, - 1.536, - 1.24, - 0.872, - 0.552, - 0.42, - 0.28, - 0.128, - 0.032, - 0.068, - 0.08, - -0.008, - -0.112, - -0.112, - -0.116, - -0.18, - -0.272, - -0.356, - -0.424, - -0.448 - ], - "z": [ - -0.932, - -1.012, - -1.192, - -1.34, + 0.608, + -0.26, + -0.716, + -1.124, + -0.696, + -0.46, + -0.444, + -0.596, + -0.788, + -0.864, + -0.948, + -1.168, + -1.292, -1.34, - -1.144, - -0.956, - -0.936, - -0.932, - -0.876, - -0.748, - -0.588, - -0.472, - -0.364, - -0.192, - 0.028, - 0.136, - 0.116, - 0.12, - 0.22, - 0.292, - 0.236, - 0.22, - 0.212, - 0.272, - 0.292, - 0.244, - 0.26, - 0.24, - 0.224, - 0.408, - 0.472, - 0.6, - 0.56, - 0.296, - 0.084, - 0.02, - 0.12, - 0.324, - 0.548, - 0.664, - 0.612, - 0.56, - 0.468, - 0.364, - 0.188, - 0.076, - 0.096, - 0.104, - -0.056, - -0.164, - -0.132, - -0.068, - -0.14, - -0.256, - -0.336, - -0.328, - -0.3, - -0.304, - -0.364, - -0.448, - -0.468, - -0.528, - -0.632, - -0.708, - -0.82, - -1.02, - -1.208, - -1.212, + -1.26, + -1.304, + -1.304, + -1.304, + -1.252, + -1.2, + -1.152, + -1.188, + -1.192, + -1.136, + -1.124, + -1.076, + -1.056, -1.052, - -0.904, - -0.872, - -0.844, - -0.764, - -0.656, - -0.52, - -0.448, - -0.408, - -0.276, - -0.14, - -0.076, - -0.084, - -0.024, - 0.108, - 0.116, - 0.084, - 0.128, - 0.22, - 0.248, - 0.236, - 0.28 + -1.036, + -1.004, + -1.02, + -1.016, + -1.036, + -1.024 ] - } - } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - }, - "icon": "Rabbit" - }, - { - "ID": 1717765681522, - "name": "clap", - "matrix": [ - false, - false, - true, - false, - false, - false, - false, - true, - true, - false, - false, - false, - true, - false, - true, - true, - true, - true, - false, - false, - true, - true, - true, - false, - false - ], - "recordings": [ + }, + "createdAt": 1730111004935 + }, { - "ID": 1717765716738, + "id": "ef20f66d-03e9-411c-99a5-02f5a6f2372c", "data": { "x": [ - -1.372, - -1.5, - -1.608, - -1.636, - -1.556, - -1.428, - -1.252, - -1.04, - -0.844, - -0.684, - -0.544, - -0.468, - -0.436, - -0.396, - -0.408, - -0.372, - -0.304, - -0.244, - -0.236, - -0.188, - -0.092, - -0.052, - -0.072, - -0.02, - -0.008, - -0.06, - -0.212, - -0.34, - -0.432, - -0.516, - -0.576, - -0.736, - -0.796, - -0.72, - -0.52, - -0.38, - -0.228, + 0.012, + 0.004, + 0, + 0, + 0.02, + 0.044, + 0.028, + 0.008, + 0.004, + 0.012, + 0.02, + 0.076, + 0.1, + 0.008, + -0.364, + -1.18, + -2.04, + -2.04, + 1.668, + 2.04, + 1.612, + 1.648, + 2.04, + 1.596, + 0.692, + 0.428, + 0.212, + 0.012, -0.052, - 0.032, + -0.116, + -0.112, + -0.132, + -0.164, + -0.076, + 0.04, 0.056, - 0.048, + 0.104, + 0.124, 0.008, - 0, - 0.004, - -0.028, - -0.104, - -0.18, - -0.208, - -0.276, - -0.32, - -0.372, - -0.448, - -0.52, - -0.532, - -0.496, - -0.492, - -0.564, - -0.576, - -0.62, - -0.832, - -1.156, - -1.42, - -1.528, - -1.62, - -1.628, - -1.536, - -1.372, - -1.172, - -1.02, - -0.892, - -0.74, - -0.604, - -0.524, - -0.456, - -0.372, - -0.292, - -0.232, - -0.196, - -0.188, - -0.188, - -0.168, - -0.136, - -0.068, - -0.06, - -0.072, + -0.08, -0.112, - -0.22, - -0.388, - -0.552, - -0.696, - -0.768 + 0, + 0.112, + 0.1, + 0.056, + 0, + -0.016, + -0.008, + 0.056 ], "y": [ - 0.176, - 0.26, - 0.276, - 0.36, - 0.42, - 0.436, - 0.408, - 0.3, - 0.208, - 0.064, - -0.076, - -0.116, - -0.112, - -0.1, - -0.084, - -0.104, - -0.148, -0.14, - -0.08, - -0.084, - -0.116, + -0.156, + -0.148, + -0.124, -0.144, + -0.148, -0.176, - -0.304, - -0.332, - -0.328, - -0.348, - -0.4, - -0.504, - -0.532, - -0.58, - -0.632, - -0.756, - -0.892, - -1.1, - -1.208, - -1.176, - -1.124, - -0.904, - -0.688, - -0.52, - -0.388, - -0.308, - -0.256, - -0.212, + -0.168, + -0.172, + -0.176, + -0.156, + -0.136, + -0.092, + 0.02, -0.148, - -0.116, - -0.104, - -0.056, - 0.024, - 0.152, - 0.208, - 0.236, - 0.296, + -1.376, + -2.04, + -2.04, + -2.024, + -1.188, + -0.14, + 1.008, + 1.188, + 0.584, + 0.076, + 0.088, + 0.352, + 0.556, + 0.504, + 0.416, 0.412, - 0.476, - 0.348, - 0.132, - -0.016, + 0.328, + 0.216, 0.112, - 0.516, - 0.652, - 0.588, - 0.544, - 0.58, - 0.624, - 0.604, - 0.488, - 0.316, - 0.108, - -0.036, - -0.072, - -0.068, - -0.052, - -0.04, + 0.072, -0.028, - -0.024, - -0.052, - -0.08, - -0.092, - -0.064, - -0.04, - -0.044, - -0.204, - -0.46, - -0.548, - -0.412, - -0.324, - -0.252, - -0.148, - -0.092 + -0.172, + -0.228, + -0.224, + -0.212, + -0.2, + -0.232, + -0.212, + -0.196, + -0.18, + -0.188, + -0.188, + -0.184, + -0.176 ], "z": [ - -1.32, - -1.404, - -1.244, - -1.316, - -1.408, - -1.328, - -1.032, - -0.708, - -0.448, - -0.28, - -0.16, - -0.02, - 0.184, - 0.296, - 0.368, - 0.44, - 0.536, - 0.676, - 0.804, - 0.92, - 0.98, - 1.012, - 1.064, - 1.184, - 1.256, - 1.16, - 1.084, - 1.088, - 1.148, - 1.26, - 1.332, - 1.544, - 1.78, - 1.944, - 2.036, - 2.04, - 2.008, - 1.832, - 1.756, - 1.688, - 1.476, - 1.244, - 1.016, - 0.828, - 0.744, - 0.672, - 0.536, - 0.304, - 0.124, - 0.06, - 0.136, - 0.212, - 0.048, - -0.248, - -0.252, - 0.14, - 0.348, - 0.056, - -0.468, - -0.596, - -0.764, - -1.264, - -1.604, - -1.8, - -1.656, - -1.38, - -1.076, - -0.8, - -0.556, - -0.412, - -0.332, - -0.192, - 0.032, - 0.228, - 0.356, - 0.452, - 0.532, - 0.688, - 0.772, - 0.844, - 0.904, - 0.976, - 1.024, - 1.048, - 1.096, - 1.16, - 1.064, - 0.988, - 0.96, - 0.94, - 1 + -1.024, + -1.012, + -1.04, + -1, + -0.988, + -1.008, + -1.008, + -1.024, + -1.016, + -1.024, + -1.012, + -1.012, + -1, + -1.072, + -1.448, + -2.04, + -2.04, + -2.04, + -2.016, + 0.476, + 2.04, + 2.04, + 1.004, + 0.06, + -0.268, + -0.764, + -0.816, + -0.628, + -0.632, + -0.532, + -0.544, + -0.652, + -0.796, + -0.94, + -1.096, + -1.236, + -1.528, + -1.728, + -1.54, + -1.292, + -1.096, + -1.1, + -1.156, + -1.124, + -1.104, + -1.064, + -1.052, + -1.06, + -1.104 ] - } + }, + "createdAt": 1730111000940 }, { - "ID": 1717765710734, + "id": "cb010b38-568b-48d6-9a06-86c93cb640ee", "data": { "x": [ - -0.632, - -0.512, - -0.452, - -0.436, - -0.448, - -0.428, - -0.42, - -0.4, - -0.4, - -0.404, - -0.352, - -0.308, - -0.336, + -0.028, + -0.02, + 0.008, + -0.012, + -0.044, + -0.028, + -0.052, + -0.048, + -0.048, + -0.068, + -0.06, + -0.036, + -0.004, + 0, + -0.024, + 0.004, + 0.024, + 0.008, + 0.036, -0.276, - -0.232, - -0.22, - -0.272, - -0.304, - -0.328, - -0.4, - -0.488, - -0.524, - -0.528, - -0.556, - -0.548, - -0.588, - -0.668, - -0.524, - -0.356, - -0.272, - -0.256, - -0.244, - -0.24, - -0.256, - -0.268, - -0.312, - -0.344, - -0.368, - -0.364, - -0.404, - -0.388, - -0.392, - -0.396, - -0.416, - -0.436, - -0.452, - -0.412, - -0.448, - -0.512, - -0.528, - -0.556, - -0.516, - -0.552, - -0.708, - -0.796, - -0.98, - -1.256, - -1.496, - -1.6, - -1.62, - -1.52, + -1.56, + -2.04, -1.392, - -1.256, - -1.108, - -0.972, - -0.88, - -0.772, - -0.696, - -0.66, - -0.632, - -0.552, - -0.492, - -0.464, - -0.372, - -0.34, - -0.324, - -0.288, - -0.244, - -0.212, - -0.228, + 1.94, + 2.04, + 1.988, + 2.04, + 2.04, -0.24, - -0.26, - -0.268, - -0.288, - -0.248, - -0.256, - -0.34, - -0.452, - -0.596, - -0.724, - -0.844 + -0.56, + -0.012, + -0.3, + -0.476, + -0.008, + 0.284, + 0.072, + -0.116, + -0.148, + -0.084, + -0.084, + -0.16, + -0.144, + -0.04, + 0.104, + 0.144, + 0.068, + 0.008, + 0.02 ], "y": [ - -0.184, - -0.304, - -0.284, -0.18, + -0.192, + -0.18, + -0.18, + -0.176, + -0.18, + -0.18, + -0.188, + -0.188, + -0.176, + -0.168, + -0.164, + -0.164, + -0.176, + -0.188, + -0.184, + -0.172, + -0.148, + -0.128, + -0.532, + -1.796, + -2.04, + -2.04, + -1.844, + -0.772, + 1.076, + 1.776, -0.104, - -0.04, - -0.016, - -0.024, - -0.04, - -0.04, - -0.028, - -0.044, - -0.06, - -0.108, - -0.196, - -0.268, - -0.272, - -0.24, - -0.216, - -0.156, - -0.12, - -0.256, - -0.408, - -0.5, - -0.608, + -0.928, + -0.476, + 0.04, + 0.32, + 0.492, + 0.596, + 0.516, + 0.46, + 0.48, + 0.52, + 0.5, + 0.496, + 0.448, + 0.368, + 0.32, + 0.256, + 0.228, + 0.204, + 0.188, + 0.188 + ], + "z": [ + -0.996, + -0.996, + -1.044, + -1.016, + -0.996, + -1.016, + -1.02, + -1.008, + -1.036, + -1.028, + -1.02, + -1.016, + -1.008, + -1.016, + -1.008, + -1.032, + -1.04, + -1, + -1.044, + -1.664, + -2.04, + -2.04, + -2.04, + -1.284, + 2.04, + 2.04, + 2.04, + 0.22, -0.692, - -0.784, - -1.02, - -1.352, - -1.288, - -1.076, - -0.868, - -0.736, - -0.612, - -0.504, - -0.412, - -0.316, - -0.26, - -0.252, - -0.288, - -0.26, - -0.188, - -0.08, - 0.004, + -1.972, + -2.04, + -1.424, + -0.628, + -0.604, + -0.924, + -0.976, + -0.972, + -0.968, + -1.008, + -0.992, + -0.924, + -1.004, + -1.068, + -1.152, + -1.144, + -1.06, + -1.028, + -1.04 + ] + }, + "createdAt": 1730110996785 + }, + { + "id": "df5a3877-3447-46e2-bcbb-ea7c27ddd3f7", + "data": { + "x": [ + 0.04, + 0.064, + 0.076, + 0.028, + 0.008, + -0.012, + -0.016, + 0.02, + 0.016, 0.004, + 0.048, + 0.076, + 0.048, + 0.048, + 0.036, + 0.02, 0.056, - 0.108, - 0.144, - 0.112, - 0.044, - 0.144, - 0.328, - 0.328, + 0.116, 0.048, - 0.024, - 0.3, - 0.404, - 0.444, - 0.512, - 0.608, - 0.564, - 0.48, - 0.344, - 0.196, - 0.04, - -0.116, - -0.208, - -0.224, - -0.192, - -0.112, - -0.044, - -0.024, - -0.04, - -0.032, - -0.024, - -0.064, - -0.1, + -0.18, + -1.444, + -2.04, + -2.04, + 1.512, + 1.788, + 2.04, + 2.04, + 1.652, + 0.084, + 0.148, -0.136, - -0.132, - -0.12, + -0.892, + -0.48, + 0.032, + 0.16, + 0.376, + 0.448, + 0.18, + -0.008, + 0.092, + 0.092, + 0.016, + 0.032, + 0.112, + 0.164, + 0.188, + 0.14, + 0.1, + 0.1 + ], + "y": [ -0.14, + -0.124, + -0.116, + -0.096, + -0.108, + -0.124, -0.136, - -0.072, - -0.06, - -0.232, - -0.452, - -0.528, - -0.464, - -0.444, - -0.496, - -0.584 - ], - "z": [ - -0.184, + -0.124, + -0.116, + -0.1, + -0.096, + -0.1, + -0.14, + -0.152, + -0.148, + -0.116, + -0.076, + -0.028, -0.004, - 0.152, - 0.308, - 0.416, - 0.468, - 0.532, - 0.608, - 0.68, - 0.74, - 0.812, - 0.9, - 0.972, - 0.98, - 0.92, - 0.884, - 0.964, - 1, + -0.212, + -1.144, + -2.04, + -2.04, + -2.04, + -1.024, + 1.032, + 2.02, + -1.576, + -1.124, + 0.292, 0.956, - 0.872, - 0.936, - 1.072, - 1.26, - 1.436, - 1.548, - 1.736, - 1.896, - 1.996, + 1.216, + 0.92, + 0.748, + 0.58, + 0.6, + 0.556, + 0.536, + 0.484, + 0.492, + 0.396, + 0.36, + 0.36, + 0.436, + 0.472, + 0.456, + 0.416, + 0.42, + 0.42 + ], + "z": [ + -1.044, + -1.028, + -1.044, + -1.012, + -1.004, + -1.012, + -1.02, + -1.032, + -1.004, + -0.992, + -1.02, + -1.02, + -0.988, + -1.04, + -1.044, + -0.996, + -0.96, + -0.964, + -0.912, + -1.336, + -2.04, + -2.04, + -2.04, + -2.04, 2.04, 2.04, - 1.9, - 1.736, - 1.58, - 1.356, - 1.124, - 0.88, - 0.712, - 0.644, - 0.612, - 0.552, - 0.528, - 0.452, - 0.408, - 0.412, - 0.312, - 0.144, - 0.044, - 0.12, - 0.156, - -0.056, - -0.232, - -0.008, - 0.276, - 0.048, - -0.6, + 2.04, + -0.26, + -2.04, + -2.04, + -0.892, + -0.06, + -0.884, + -1.216, + -0.944, + -0.796, + -0.748, + -0.816, + -0.824, -0.904, - -0.872, - -1.052, - -1.328, - -1.444, - -1.408, - -1.172, - -0.868, - -0.652, - -0.516, - -0.408, - -0.336, - -0.204, - -0.012, - 0.06, - 0.152, - 0.3, - 0.416, - 0.492, - 0.64, - 0.828, - 0.94, - 0.956, - 0.916, - 0.908, - 0.92, - 0.892, - 0.86, - 0.844, - 0.896, - 1.1, - 1.32, - 1.388, - 1.364, - 1.456, - 1.564 + -1.064, + -1.164, + -1.128, + -0.992, + -0.832, + -0.804, + -0.892, + -0.964, + -1.008 ] - } + }, + "createdAt": 1730110992536 }, { - "ID": 1717765704869, + "id": "fe1da65c-6493-4be2-96cf-a9b8ac565ed1", "data": { "x": [ - -0.788, - -0.86, - -0.8, - -0.616, - -0.448, - -0.364, - -0.264, - -0.224, - -0.22, - -0.184, - -0.2, - -0.184, - -0.22, - -0.244, - -0.244, - -0.272, - -0.316, - -0.352, - -0.352, + 0.024, + -0.064, + -0.124, + -0.068, + -0.028, + 0.012, + 0.024, + -0.008, + -0.008, + 0.024, + 0.008, + -0.044, + -0.056, + -0.032, + -0.004, + -0.004, + 0.056, + -0.02, + -0.712, + -2.04, + -2.04, + -2.04, + 1.82, + 2.04, + 2.04, + 2.04, + 2.04, + 0.328, + 0.288, + -0.284, + -0.336, + -0.116, + -0.196, + -0.116, + 0.184, + 0.204, + 0.248, + 0.216, + 0.12, + 0.104, + 0.2, + 0.268, + 0.112, + 0.028, + 0.112, + 0.2, + 0.18, + 0.1 + ], + "y": [ + -0.092, + -0.108, + -0.144, + -0.144, + -0.136, + -0.12, + -0.116, + -0.096, + -0.104, + -0.12, + -0.108, + -0.112, + -0.12, + -0.104, + -0.092, + -0.084, + -0.064, + -0.044, -0.344, - -0.364, - -0.456, - -0.5, - -0.564, - -0.588, - -0.704, - -0.652, - -0.924, - -1.256, - -1.564, - -1.776, - -1.748, - -1.536, - -1.272, + -1.416, + -2.04, + -2.04, + -2.04, + -2.04, + 0.812, + 2.04, + 0.936, + -0.78, + -0.52, + 0.148, + 0.452, + 0.648, + 0.66, + 0.668, + 0.676, + 0.668, + 0.652, + 0.664, + 0.628, + 0.552, + 0.476, + 0.408, + 0.232, + 0.18, + 0.132, + 0.072, + 0.028, + 0.048 + ], + "z": [ + -1.032, -0.988, - -0.724, - -0.532, - -0.456, - -0.412, - -0.456, - -0.516, - -0.564, - -0.616, - -0.62, - -0.592, - -0.552, - -0.512, - -0.4, - -0.28, - -0.324, - -0.252, - -0.156, - -0.148, - -0.288, - -0.396, - -0.472, - -0.552, - -0.664, - -0.748, - -0.876, + -1.012, + -1.116, + -1.096, + -1.012, + -1.008, -1, + -1.02, + -1.028, + -1.036, + -1.028, + -1.012, + -1.016, + -1.012, -0.988, - -0.788, - -0.528, - -0.364, - -0.26, - -0.216, - -0.248, - -0.26, - -0.24, - -0.272, - -0.28, - -0.268, - -0.284, - -0.248, - -0.248, - -0.284, - -0.292, - -0.304, - -0.292, - -0.304, - -0.36, - -0.444, - -0.436, - -0.456, - -0.584, + -0.976, + -1.128, + -1.884, + -2.04, + -2.04, + -2.04, + -2.024, + 1.56, + 2.04, + 2.04, + 1.044, + -0.264, + -2.04, + -2.016, + -1.116, + -0.724, -0.68, - -0.884, + -0.716, + -0.888, + -0.724, + -0.696, + -0.68, + -0.664, + -0.676, + -0.744, + -0.856, + -0.936, + -1.088, + -1.124, + -1.152, -1.224, - -1.484, - -1.636 + -1.2 + ] + }, + "createdAt": 1730110988086 + }, + { + "id": "49b6fdfd-8125-4750-a90c-64669fde7af4", + "data": { + "x": [ + 0.104, + 0.084, + 0.112, + 0.112, + 0.088, + 0.12, + 0.112, + 0.056, + 0.048, + 0.052, + 0.06, + 0.06, + 0.024, + -0.244, + -1.256, + -2.04, + -1.192, + 1.784, + 2.04, + 1.848, + 2.04, + 2.04, + -0.412, + -0.14, + -0.304, + -0.264, + -0.096, + 0.116, + 0.124, + 0.212, + 0.164, + 0.164, + 0.112, + -0.104, + -0.164, + -0.064, + -0.08, + -0.056, + -0.092, + -0.052, + -0.02, + -0.012, + 0.012, + 0.044, + 0.048, + 0.02, + -0.016, + -0.016 ], "y": [ - -0.832, - -1.016, - -1.228, - -1.456, - -1.496, - -1.288, + -0.164, + -0.18, + -0.172, + -0.16, + -0.168, + -0.152, + -0.164, + -0.192, + -0.22, + -0.212, + -0.172, + -0.112, + -0.064, + -0.252, + -1.464, + -2.04, + -2.04, + -1.652, + -1.82, + 0.412, + 2.04, + 0.128, + -0.568, + 0.036, + 0.72, + 1.044, + 1.104, + 0.924, + 0.736, + 0.536, + 0.508, + 0.54, + 0.608, + 0.552, + 0.572, + 0.544, + 0.524, + 0.5, + 0.496, + 0.524, + 0.544, + 0.528, + 0.516, + 0.5, + 0.504, + 0.464, + 0.456, + 0.472 + ], + "z": [ + -1.012, + -1.028, -1.068, - -0.932, + -1.048, + -0.984, + -0.996, + -0.988, + -1.008, + -1.076, + -1.068, + -1.004, + -0.96, + -1.112, + -1.724, + -2.04, + -2.04, + -2.04, + -2.02, + 2.04, + 2.04, + 2.04, + -0.732, + -0.476, + -2.04, + -1.064, + -0.472, + -0.364, + -0.676, + -0.7, + -0.94, + -0.948, + -0.9, + -0.812, + -0.804, + -0.884, + -0.988, + -0.964, + -1.008, + -0.956, + -0.912, + -0.856, -0.84, - -0.756, - -0.608, - -0.452, - -0.34, - -0.308, - -0.308, - -0.232, - -0.136, - -0.128, - -0.084, + -0.876, + -0.816, + -0.78, + -0.956, + -1.004, + -0.936 + ] + }, + "createdAt": 1730110983822 + }, + { + "id": "b94d55af-041b-4cc2-9939-f1409bf91a71", + "data": { + "x": [ + -0.004, + -0.008, + -0.004, + -0.016, + -0.048, + -0.004, 0.028, - 0.164, - 0.232, - 0.26, - 0.316, - 0.444, - 0.376, - 0.108, - 0.072, - 0.244, - 0.388, - 0.788, - 1.096, - 0.968, - 0.74, - 0.432, - 0.092, - -0.232, - -0.464, - -0.468, - -0.432, - -0.364, - -0.216, - -0.084, - -0.02, 0, - -0.06, - -0.088, - -0.14, - -0.148, - -0.176, - -0.144, - -0.164, - -0.164, - -0.1, + -0.028, + -0.012, + -0.012, + -0.128, + -0.66, + -1.82, + -2.04, + -0.448, + 1.772, + 2.04, + 1.744, + 0.3, + 2.04, + 2.008, + 1.044, + 0.596, + 0.064, + 0.144, + 0.212, + 0.132, + 0.04, + 0.004, + 0.028, + 0.032, + -0.008, + 0.008, + 0.048, + 0.024, -0.056, - -0.152, - -0.332, - -0.512, - -0.696, - -0.884, - -0.984, - -1.096, - -1.28, - -1.524, - -1.468, - -1.188, - -0.928, - -0.752, - -0.6, - -0.532, - -0.452, - -0.396, - -0.348, - -0.328, - -0.324, - -0.3, - -0.264, - -0.208, + 0.012, + 0, + -0.06, + -0.076, + -0.136, + -0.18, + -0.248, + -0.252, + -0.232, + -0.216, + -0.172, + -0.112 + ], + "y": [ -0.132, - 0.008, - 0.104, - 0.096, - 0.052, - 0.136, - 0.308, - 0.24, - 0.112, - 0.24, - 0.272, + -0.132, + -0.144, + -0.152, + -0.136, + -0.152, + -0.18, + -0.172, + -0.136, + -0.12, + -0.104, + -0.036, + -0.36, + -1.248, + -2.04, + -2.04, + -2.04, + -2.04, + -0.264, + 0.784, + 1.604, + 1.404, + 0.768, + 0.616, + 0.576, + 0.704, + 0.812, + 0.78, + 0.772, + 0.728, + 0.652, + 0.628, + 0.608, + 0.576, + 0.532, + 0.48, + 0.464, + 0.48, + 0.48, 0.384, - 0.46 + 0.344, + 0.3, + 0.28, + 0.244, + 0.22, + 0.212, + 0.18, + 0.144, + 0.116 ], "z": [ - 1.684, - 1.848, - 1.968, - 2.004, - 2.028, - 2, - 1.828, - 1.616, - 1.34, - 1.072, - 0.912, - 0.8, - 0.652, - 0.536, - 0.356, - 0.292, - 0.328, - 0.276, - 0.08, - -0.032, - -0.004, - -0.052, - -0.12, - -0.2, - -0.148, - 0.088, - -0.3, + -1.044, + -1.032, -1.004, - -1.376, - -1.764, - -2.032, - -2.024, - -1.676, - -1.204, - -0.848, - -0.552, - -0.18, - 0.06, - 0.32, - 0.436, - 0.424, - 0.34, - 0.316, - 0.388, - 0.456, - 0.536, - 0.472, - 0.44, - 0.592, - 0.788, - 0.904, - 0.96, - 0.956, - 0.988, - 1.028, - 1.112, - 1.124, - 1.068, - 1.116, - 1.372, - 1.548, - 1.588, - 1.776, - 2.036, + -1.024, + -1.024, + -1.028, + -1.064, + -1.06, + -1.036, + -1.004, + -1, + -1.184, + -1.816, + -2.04, + -2.04, + -2.04, + -2.04, + -1.032, 2.04, - 2.024, - 1.788, - 1.572, - 1.356, - 1.104, - 0.916, - 0.792, - 0.68, - 0.604, - 0.608, - 0.584, - 0.52, - 0.36, - 0.2, - 0.208, - 0.248, - 0.168, - -0.02, - -0.212, - -0.072, - 0, - -0.42, - -0.808, - -1.284, - -1.716, - -1.616 + 2.04, + -0.052, + 0.144, + 0.052, + -0.572, + -0.408, + -0.468, + -0.468, + -0.564, + -0.64, + -0.612, + -0.716, + -0.724, + -0.744, + -0.756, + -0.86, + -0.96, + -0.92, + -1.04, + -1.016, + -0.956, + -0.884, + -0.952, + -0.968, + -0.976, + -1, + -1.032, + -1.068, + -1.052, + -1.08 ] - } - }, + }, + "createdAt": 1730110979246 + } + ] + }, + { + "id": "a50277ef-1534-4b4b-ac0c-a890cdda4e47", + "name": "circle", + "icon": "Square", + "createdAt": 1730111022972, + "recordings": [ { - "ID": 1717765700042, + "id": "77871264-32b7-4e43-92d4-4914f7f474a4", "data": { "x": [ - -0.296, - -0.248, - -0.244, - -0.216, - -0.16, - -0.192, - -0.16, - -0.204, - -0.284, - -0.34, - -0.384, - -0.424, - -0.468, - -0.444, - -0.42, - -0.396, - -0.372, - -0.508, - -0.608, - -0.68, + 0.328, + 0.18, + 0.096, + 0.02, + 0.044, + 0.324, + 0.412, + 0.432, + 0.5, + 0.448, + 0.512, + 0.584, + 0.592, + 0.692, + 0.6, + 0.468, + 0.54, + 0.58, + 0.64, + 0.608, + 0.576, + 0.656, + 0.768, + 0.704, + 0.512, + 0.48, + 0.556, + 0.54, + 0.456, + 0.508, + 0.604, + 0.7, + 0.676, + 0.552, + 0.38, + 0.444, + 0.476, + 0.5, + 0.608, + 0.44, + 0.44, + 0.528, + 0.428, + 0.352, + 0.464, + 0.408, + 0.26, + 0.248, + 0.16 + ], + "y": [ + 0.204, + 0.256, + 0.312, + 0.324, + 0.348, + 0.488, + 0.596, + 0.68, + 0.688, + 0.668, + 0.68, + 0.652, + 0.664, + 0.648, + 0.54, + 0.4, + 0.332, + 0.376, + 0.42, + 0.32, + 0.164, + 0.18, + 0.232, + 0.148, + 0.032, + -0.108, + -0.208, + -0.336, + -0.464, + -0.6, -0.764, - -0.908, - -1.092, - -1.248, - -1.396, - -1.384, - -1.16, - -0.856, - -0.64, - -0.488, - -0.444, - -0.492, - -0.536, - -0.588, - -0.632, - -0.672, - -0.684, - -0.692, - -0.712, - -0.664, - -0.532, - -0.42, - -0.528, - -0.484, - -0.384, - -0.284, - -0.352, - -0.416, - -0.364, - -0.368, - -0.552, - -0.76, + -0.932, + -0.804, -0.888, - -1.008, + -1.048, + -1.164, + -1.212, + -1.264, + -1.224, + -1.308, + -1.328, + -1.284, + -1.264, + -1.336, + -1.212, + -1.108, -1.004, + -0.896, + -0.816 + ], + "z": [ + -0.832, + -0.756, + -0.792, -0.836, - -0.632, + -0.736, + -0.812, + -0.712, + -0.48, -0.46, - -0.348, - -0.292, - -0.272, - -0.276, - -0.236, - -0.216, - -0.284, - -0.352, - -0.368, - -0.404, - -0.392, - -0.416, - -0.4, - -0.416, - -0.388, - -0.424, - -0.416, - -0.436, + -0.432, + -0.476, + -0.58, -0.46, + -0.376, + -0.396, + -0.44, + -0.624, + -0.636, + -0.588, + -0.6, + -0.584, + -0.548, + -0.496, -0.528, + -0.476, + -0.472, + -0.456, + -0.412, + -0.384, -0.556, - -0.652, - -0.8, - -0.984, - -1.168, - -1.352, - -1.428, - -1.3, - -1.1, - -0.868, - -0.676, - -0.556, - -0.524 - ], - "y": [ - -0.592, - -0.528, + -0.768, + -0.904, + -1.02, + -0.948, + -0.628, + -0.552, + -0.608, + -0.536, + -0.6, -0.484, - -0.412, - -0.388, - -0.392, - -0.388, - -0.34, - -0.276, - -0.212, - -0.172, - -0.088, - -0.012, - 0.152, - 0.152, - 0.072, - 0.06, - 0.284, - 0.424, - 0.312, - 0.316, + -0.532, + -0.692, + -0.728, + -0.776, + -0.872, + -0.876, + -0.784, + -0.828, + -0.84 + ] + }, + "createdAt": 1730111080605 + }, + { + "id": "7b214d41-26fa-49c3-92f7-dc49bae2e666", + "data": { + "x": [ + -0.076, + -0.2, + -0.184, + -0.096, + -0.048, + 0.164, + 0.396, 0.416, - 0.544, - 0.716, - 1.024, - 1.14, - 0.88, - 0.512, - 0.196, - -0.104, - -0.264, - -0.216, - -0.144, - -0.08, - -0.06, - -0.056, - -0.016, - 0.008, - 0.064, + 0.292, 0.092, - 0.012, - -0.112, - -0.156, - -0.144, - -0.14, - -0.24, - -0.272, - -0.164, - -0.12, - -0.188, + -0.028, + 0.088, + 0.32, + 0.568, + 0.512, + 0.2, + 0.116, + 0.132, + -0.028, + -0.072, + 0.24, + 0.412, + 0.436, + 0.336, + 0.184, + 0.312, + 0.472, + 0.496, + 0.472, + 0.428, + 0.508, + 0.604, + 0.512, + 0.624, + 0.74, + 0.544, + 0.404, + 0.448, + 0.556, + 0.66, + 0.7, + 0.612, + 0.608, + 0.616, + 0.56, + 0.66, + 0.748, + 0.66 + ], + "y": [ + -1.156, + -1.096, + -1.02, + -0.972, + -0.844, + -0.72, + -0.588, + -0.476, + -0.3, + -0.248, + -0.136, + 0.016, + 0.164, + 0.304, + 0.308, + 0.308, + 0.372, + 0.432, + 0.464, + 0.484, + 0.54, + 0.568, + 0.576, + 0.552, + 0.516, + 0.536, + 0.584, + 0.612, + 0.564, + 0.44, + 0.392, + 0.284, + 0.24, + 0.324, + 0.344, + 0.236, + 0.096, + 0.004, + -0.068, + -0.02, + -0.048, + -0.16, -0.304, - -0.504, - -0.716, - -0.84, - -0.98, - -1.128, - -1.216, - -1.108, - -0.996, + -0.384, + -0.436, + -0.6, + -0.696, + -0.772 + ], + "z": [ + -0.78, + -0.776, + -0.848, + -0.924, + -0.86, + -0.828, + -0.9, + -0.86, + -0.776, + -0.656, + -0.616, + -0.736, -0.78, + -0.824, + -0.812, + -0.628, + -0.62, + -0.756, + -0.772, + -0.72, + -0.792, + -0.792, -0.644, - -0.552, - -0.524, - -0.516, - -0.416, - -0.336, - -0.304, - -0.296, - -0.336, - -0.324, - -0.196, - -0.048, - -0.06, - -0.136, - -0.092, - 0.164, + -0.672, + -0.664, + -0.764, + -0.688, + -0.54, + -0.5, + -0.548, + -0.576, + -0.876, + -0.824, + -0.664, + -0.536, + -0.44, + -0.548, + -0.648, + -0.728, + -0.6, + -0.572, + -0.448, + -0.404, + -0.504, + -0.624, + -0.672, + -0.76, + -0.732 + ] + }, + "createdAt": 1730111076549 + }, + { + "id": "0caa6a74-0d93-4242-a6a5-8c617b04f32b", + "data": { + "x": [ + 0.396, + 0.54, + 0.564, + 0.444, + 0.308, + 0.448, + 0.54, + 0.216, + -0.008, + 0.068, + 0.32, + 0.412, + 0.28, + 0.292, 0.288, - 0.248, - 0.164, - 0.276, - 0.356, + 0.112, + 0.06, + 0.144, + 0.184, + 0.24, + 0.212, + 0.184, + 0.24, 0.32, + 0.4, + 0.412, + 0.384, + 0.388, + 0.404, + 0.3, + 0.232, + 0.368, + 0.556, + 0.656, + 0.504, + 0.208, + -0.048, + -0.056, + 0.104, + 0.36, + 0.484, 0.424, - 0.704, - 0.996, - 0.972, - 0.8, - 0.532, - 0.22, - -0.052, - -0.188 + 0.396, + 0.352, + 0.328, + 0.52, + 0.6, + 0.66 + ], + "y": [ + -0.676, + -0.816, + -0.956, + -0.896, + -1.284, + -1.272, + -1.18, + -1.256, + -1.372, + -1.44, + -1.408, + -1.308, + -1.292, + -1.24, + -1.172, + -1.148, + -1.072, + -1.08, + -1.036, + -0.82, + -0.808, + -0.824, + -0.768, + -0.624, + -0.512, + -0.356, + -0.18, + -0.136, + -0.068, + -0.004, + 0.032, + 0.124, + 0.208, + 0.3, + 0.392, + 0.384, + 0.512, + 0.42, + 0.512, + 0.584, + 0.676, + 0.684, + 0.66, + 0.648, + 0.64, + 0.668, + 1.008, + 0.704 ], "z": [ - 2.036, - 1.744, - 1.356, - 1.124, - 0.98, - 0.796, - 0.54, - 0.36, - 0.268, - 0.22, - 0.108, - 0.008, - -0.064, - 0.076, - 0.28, - 0.156, - -0.192, - -0.34, - -0.176, - -0.268, - -0.6, - -0.964, - -1.376, - -1.624, - -1.836, - -1.816, - -1.508, - -1.1, - -0.644, - -0.328, - -0.028, - 0.156, - 0.228, - 0.256, - 0.308, - 0.344, - 0.36, - 0.412, - 0.44, + -0.372, + -0.504, + -0.612, + -0.744, + -0.692, + -0.804, + -0.892, + -0.476, + -0.268, + -0.38, + -0.524, + -0.628, + -0.6, + -0.624, + -0.704, + -0.708, + -0.636, + -0.72, + -0.804, + -0.868, + -0.836, + -0.82, + -0.864, + -0.824, + -0.804, + -0.792, + -0.676, + -0.636, + -0.688, + -0.7, + -0.708, + -0.852, + -0.948, + -0.948, + -0.796, + -0.652, + -0.628, + -0.708, + -0.724, + -0.744, + -0.744, + -0.64, + -0.576, + -0.568, + -0.544, + -0.592, + -0.824, + -0.612 + ] + }, + "createdAt": 1730111072430 + }, + { + "id": "103110e8-0f71-4267-9a83-05fb1627fcb8", + "data": { + "x": [ + 0.672, + 0.684, + 0.52, + 0.42, 0.472, - 0.532, + 0.528, + 0.488, + 0.472, + 0.488, + 0.572, + 0.448, + 0.3, + 0.396, + 0.696, + 0.784, + 0.628, + 0.62, + 0.768, + 0.852, + 0.72, 0.46, + 0.32, 0.48, - 0.532, + 0.752, + 0.728, + 0.552, 0.644, - 0.668, - 0.704, - 0.88, - 1.164, - 1.3, - 1.3, - 1.34, - 1.484, - 1.52, - 1.692, - 2.012, - 2.04, - 2.04, - 2.028, - 1.932, - 1.752, - 1.528, - 1.22, - 0.88, - 0.7, - 0.58, - 0.584, - 0.544, - 0.412, + 0.512, + 0.468, + 0.588, + 0.296, + 0.372, 0.3, - 0.328, - 0.472, - 0.544, - 0.244, - -0.044, - -0.096, - 0.096, - 0.056, - -0.2, - -0.496, - -0.684, - -1.124, - -1.54, - -1.912, - -1.92, - -1.556, - -1.152, - -0.8, + 0.456, + 0.7, + 0.496, + 0.144, + 0.084, + 0.196, + 0.432, + 0.568, + 0.632, + 0.76, + 0.548, + 0.164, + -0.012, + -0.028, + 0.152 + ], + "y": [ + 0.464, + 0.516, + 0.508, + 0.492, + 0.56, + 0.608, + 0.604, + 0.536, + 0.596, + 0.612, + 0.5, + 0.268, + 0.176, + 0.172, + 0.12, + 0.024, + 0.008, + 0.04, + 0.136, + 0.136, + 0.02, + -0.084, + -0.08, + -0.132, + -0.152, + -0.424, -0.472, - -0.12, - 0.112 + -0.64, + -0.764, + -0.756, + -0.644, + -0.72, + -0.812, + -0.972, + -0.968, + -0.872, + -0.916, + -1.024, + -1.124, + -1.276, + -1.192, + -1.156, + -1.052, + -0.924, + -0.884, + -0.852, + -0.82, + -0.736 + ], + "z": [ + -0.804, + -0.672, + -0.548, + -0.516, + -0.544, + -0.572, + -0.48, + -0.524, + -0.492, + -0.428, + -0.332, + -0.54, + -0.728, + -0.824, + -0.852, + -0.88, + -0.984, + -0.908, + -0.712, + -0.548, + -0.496, + -0.528, + -0.608, + -0.716, + -0.86, + -0.66, + -0.784, + -0.724, + -0.764, + -0.956, + -0.62, + -0.78, + -0.468, + -0.476, + -0.72, + -0.736, + -0.484, + -0.628, + -0.808, + -0.928, + -0.98, + -0.972, + -1.044, + -0.956, + -0.788, + -0.724, + -0.712, + -0.8 ] - } + }, + "createdAt": 1730111068366 }, { - "ID": 1717765694490, + "id": "30943b8c-0f57-449d-8cf5-7313793f2e57", "data": { "x": [ - -0.448, - -0.452, - -0.496, - -0.504, - -0.464, - -0.444, - -0.452, - -0.452, - -0.416, - -0.412, - -0.388, - -0.412, - -0.356, - -0.368, - -0.424, - -0.428, - -0.476, - -0.548, - -0.664, - -0.764, - -0.864, - -0.868, + 0.26, + 0.288, + 0.28, + 0.152, + 0.124, + 0.056, + 0.04, + 0.172, + 0.248, + 0.324, + 0.472, + 0.484, + 0.352, + 0.256, + 0.236, + 0.28, + 0.42, + 0.424, + 0.36, + 0.332, + 0.424, + 0.452, + 0.372, + 0.284, + 0.296, + 0.404, + 0.476, + 0.456, + 0.456, + 0.464, + 0.324, + 0.34, + 0.404, + 0.428, + 0.452, + 0.472, + 0.484, + 0.384, + 0.512, + 0.564, + 0.508, + 0.48, + 0.284, + 0.3, + 0.832, + 1.028, + 0.78, + 0.608, + 0.588 + ], + "y": [ + -1.348, + -1.288, + -1.3, + -1.332, + -1.356, + -1.368, + -1.368, + -1.26, + -1.18, + -1.06, + -1.036, + -0.952, + -0.88, -0.788, - -0.66, - -0.552, - -0.456, - -0.376, - -0.288, - -0.264, - -0.272, - -0.288, - -0.272, - -0.224, - -0.2, - -0.192, - -0.224, + -0.672, + -0.5, + -0.328, + -0.172, + -0.12, + 0, + 0.084, + 0.204, + 0.316, + 0.384, + 0.464, + 0.508, + 0.56, + 0.624, + 0.728, + 0.768, + 0.728, + 0.668, + 0.592, + 0.516, + 0.384, + 0.328, + 0.268, + 0.18, + 0.064, + 0.048, + 0, + -0.08, + -0.232, + -0.344, + -0.38, -0.316, - -0.408, - -0.488, - -0.516, - -0.588, - -0.584, - -0.62, - -0.648, - -0.648, - -0.64, - -0.668, + -0.4, + -0.48, + -0.492 + ], + "z": [ + -0.492, + -0.544, + -0.568, + -0.532, -0.664, - -0.82, - -1.1, - -1.364, - -1.556, - -1.536, - -1.396, - -1.252, - -1.068, - -0.916, - -0.8, + -0.864, + -0.852, + -0.744, -0.752, - -0.692, - -0.692, + -0.68, + -0.776, + -0.792, + -0.836, + -0.772, + -0.716, + -0.564, + -0.576, + -0.604, + -0.604, + -0.592, + -0.684, + -0.72, + -0.732, -0.704, - -0.672, - -0.628, - -0.628, - -0.644, - -0.696, -0.668, - -0.556, - -0.532, - -0.52, - -0.5, - -0.464, - -0.444, - -0.42, - -0.504, - -0.52, - -0.488, - -0.444, + -0.636, + -0.612, + -0.516, + -0.352, + -0.34, + -0.292, + -0.416, + -0.568, -0.532, - -0.592, - -0.64, - -0.716, - -0.748, - -0.704, + -0.632, + -0.608, + -0.652, -0.584, - -0.536, - -0.492, - -0.452, - -0.436, - -0.388 - ], - "y": [ - 0.14, - 0.204, - 0.256, - 0.248, - 0.216, - 0.12, - 0.016, - -0.024, - -0.048, - -0.064, - -0.144, - -0.224, - -0.256, - -0.28, - -0.3, - -0.408, - -0.528, - -0.66, + -0.76, + -0.796, -0.716, - -0.692, - -0.704, - -0.888, - -1.108, - -1.224, - -1.06, - -0.9, - -0.768, - -0.692, - -0.592, - -0.456, - -0.372, - -0.276, - -0.252, - -0.24, - -0.256, - -0.22, - -0.116, - -0.024, - 0.004, - 0.052, - 0.14, - 0.252, - 0.164, - 0.036, - 0.064, - 0.328, + -0.744, + -0.7, + -0.636, + -0.928, + -1.024, + -0.956, + -0.98, + -0.832 + ] + }, + "createdAt": 1730111064260 + }, + { + "id": "65e35b65-3640-435c-b215-919d02ffbd1d", + "data": { + "x": [ + 0.484, + 0.276, + 0.212, + 0.408, + 0.44, + 0.304, + 0.296, 0.404, - 0.092, - 0.008, - 0.216, + 0.344, + 0.204, + 0.276, + 0.432, + 0.456, + 0.42, + 0.432, + 0.436, + 0.36, + 0.24, + 0.2, + 0.368, + 0.272, + 0.144, + 0.204, + 0.212, + 0.132, + 0.064, + 0.1, + 0.156, + 0.42, + 0.412, + 0.132, + -0.028, + 0, + 0.188, + 0.308, + 0.416, 0.516, - 0.608, - 0.528, - 0.368, + 0.5, + 0.396, + 0.276, + 0.316, + 0.38, + 0.448, + 0.424, + 0.376, + 0.316, + 0.412, + 0.504, + 0.408 + ], + "y": [ + 0.512, + 0.42, + 0.356, + 0.376, + 0.3, 0.232, - 0.084, - -0.04, - -0.16, - -0.228, + 0.188, + 0.188, + 0, + -0.108, + -0.18, + -0.196, -0.256, - -0.188, - -0.12, - -0.096, - -0.044, + -0.38, + -0.548, + -0.584, + -0.544, + -0.752, + -0.856, + -0.86, + -0.864, + -1.18, + -1.252, + -1.092, + -1.04, + -1.052, + -1.164, + -1.212, + -1.236, + -1.192, + -1.176, + -1.076, + -1.016, + -0.956, + -0.852, + -0.788, + -0.704, + -0.596, + -0.536, + -0.384, + -0.272, + -0.18, + -0.068, 0.008, - 0.08, - 0.156, - 0.172, - 0.068, - -0.036, - -0.104, - -0.144, - -0.132, - -0.176, - -0.212, - -0.216, - -0.188, - -0.196, - -0.308, - -0.408, - -0.472, - -0.476, - -0.56, - -0.672, - -0.828, - -1.048, - -1.16, - -1.072, - -0.968, - -0.844, - -0.736 + 0, + 0, + -0.004, + 0.072, + 0.156 ], "z": [ - 0.372, - 0.404, - 0.452, - 0.468, - 0.52, - 0.564, - 0.588, - 0.636, - 0.596, - 0.632, - 0.664, - 0.74, - 0.836, - 0.876, - 0.924, - 1.024, - 1.272, - 1.668, - 1.884, - 1.884, - 1.924, - 1.92, - 1.912, - 1.948, - 2.02, - 1.896, - 1.76, - 1.436, - 1.172, - 1.016, - 0.808, - 0.684, - 0.58, - 0.524, - 0.408, - 0.28, + -0.616, + -0.688, + -0.708, + -0.744, + -0.768, + -0.768, + -0.708, + -0.656, + -0.752, + -0.78, + -0.752, + -0.708, + -0.76, + -0.808, + -0.844, + -0.908, + -0.892, + -0.776, + -0.696, + -0.948, + -0.892, + -0.732, + -0.804, + -0.792, + -0.796, + -0.6, + -0.6, + -0.708, + -0.968, + -1.008, + -0.944, + -0.892, + -0.784, + -0.808, + -0.748, + -0.776, + -0.808, + -0.768, + -0.744, + -0.612, + -0.72, + -0.808, + -0.828, + -0.836, + -0.792, + -0.72, + -0.86, + -1.06, + -1.108 + ] + }, + "createdAt": 1730111060117 + }, + { + "id": "0609c195-c769-44bc-a401-a3a676629863", + "data": { + "x": [ + 0.032, + 0.024, + -0.044, + -0.06, + 0.12, + 0.048, + -0.024, + 0.04, 0.192, - 0.124, - 0.044, - 0.016, - 0.02, - 0.172, - 0.184, - 0.016, - -0.228, - -0.052, - 0.172, - -0.212, - -0.704, - -1.116, - -1.392, - -1.52, - -1.616, - -1.604, - -1.312, - -0.98, - -0.596, - -0.352, - -0.208, - -0.096, - 0.004, - 0.1, + 0.296, + 0.34, + 0.252, + 0.152, 0.1, - 0.124, - 0.196, + 0.076, + 0.364, + 0.576, + 0.412, + 0.104, + 0.008, + 0.232, + 0.26, + 0.204, + 0.204, 0.256, - 0.264, + 0.288, + 0.34, + 0.408, + 0.376, 0.276, - 0.368, - 0.436, - 0.548, + 0.196, + 0.272, + 0.412, + 0.344, + 0.424, + 0.552, + 0.476, + 0.26, + 0.308, + 0.54, + 0.464, + 0.212, + 0.3, + 0.504, + 0.396, + 0.264, + 0.424, + 0.584, + 0.672 + ], + "y": [ + -1.34, + -1.288, + -1.284, + -1.284, + -1.164, + -1.116, + -1.024, + -0.936, + -0.78, + -0.856, + -0.668, + -0.432, + -0.244, + -0.048, + 0.084, + 0.248, + 0.384, + 0.404, + 0.324, + 0.424, + 0.528, + 0.568, + 0.576, + 0.64, + 0.7, + 0.732, + 0.8, + 0.816, + 0.8, + 0.72, + 0.644, 0.612, - 0.624, - 0.648, - 0.668, - 0.648, - 0.712, - 0.76, - 0.86, - 1.012, - 1.116, - 1.264, - 1.424, - 1.548, - 1.764, - 2.036, - 2.04, - 2.04, - 2.04, - 1.928, - 1.78 + 0.516, + 0.364, + 0.272, + 0.284, + 0.184, + 0.068, + 0.128, + 0.236, + 0.068, + -0.176, + -0.168, + -0.08, + -0.172, + -0.42, + -0.552, + -0.456, + -0.384 + ], + "z": [ + -0.724, + -0.696, + -0.8, + -0.876, + -0.956, + -0.876, + -0.824, + -0.828, + -0.932, + -0.856, + -0.74, + -0.612, + -0.4, + -0.468, + -0.516, + -0.7, + -0.812, + -0.664, + -0.592, + -0.636, + -0.836, + -0.772, + -0.672, + -0.632, + -0.588, + -0.516, + -0.356, + -0.336, + -0.428, + -0.584, + -0.632, + -0.592, + -0.692, + -0.732, + -0.808, + -0.78, + -0.884, + -0.992, + -0.876, + -0.632, + -0.608, + -0.772, + -0.824, + -0.772, + -0.572, + -0.616, + -0.896, + -0.92, + -1.048 ] - } + }, + "createdAt": 1730111055582 }, { - "ID": 1717765689141, + "id": "eab4ad7a-30a8-408d-b23c-e1ff2c779d8a", "data": { "x": [ - -0.444, - -0.4, - -0.368, - -0.368, - -0.304, - -0.26, - -0.28, - -0.312, - -0.368, - -0.336, - -0.316, - -0.328, - -0.408, - -0.436, - -0.42, - -0.412, - -0.456, - -0.456, - -0.44, - -0.412, - -0.304, - -0.26, - -0.244, - -0.192, - -0.192, - -0.184, + -0.004, -0.164, - -0.12, - -0.144, + 0.056, + 0.14, + 0.092, + -0.004, + -0.088, + -0.192, + -0.212, + -0.092, + -0.156, + -0.232, + -0.232, -0.152, - -0.14, - -0.128, - -0.108, - -0.184, + -0.004, + -0.132, + -0.28, + -0.292, + -0.272, + -0.292, + -0.24, + -0.116, + -0.188, + -0.372, -0.248, - -0.284, - -0.364, - -0.468, - -0.516, - -0.5, - -0.516, - -0.52, - -0.532, - -0.568, - -0.596, - -0.608, - -0.672, - -0.764, - -0.896, + -0.036, + 0.068, + 0.196, + 0.236, + 0.06, + -0.052, + -0.016, + 0.084, + 0.188, + 0.256, + 0.32, + 0.328, + 0.272, + 0.28, + 0.352, + 0.416, + 0.344, + 0.192, + 0.112, + 0.128, + 0.24, + 0.3, + 0.352, + 0.34 + ], + "y": [ + -0.64, + -0.92, -0.988, - -1.096, - -1.268, - -1.352, - -1.372, - -1.304, - -1.168, - -0.992, - -0.832, + -1.004, + -0.856, -0.736, - -0.652, - -0.604, - -0.62, - -0.592, - -0.576, - -0.536, - -0.516, - -0.496, - -0.464, - -0.432, - -0.444, - -0.432, - -0.42, - -0.416, - -0.384, - -0.348, - -0.308, - -0.328, - -0.384, - -0.364, - -0.34, - -0.38, - -0.464, - -0.532, - -0.592, - -0.616, - -0.556, - -0.5, - -0.416, + -0.828, + -1.06, + -1.152, + -1.14, + -1.14, + -1.032, + -1.012, + -1.116, + -1.112, + -1.068, + -1.036, + -1.044, + -0.996, + -1.032, + -1.02, + -1.024, + -0.92, + -0.896, + -0.808, + -0.76, + -0.62, + -0.436, -0.396, - -0.344 + -0.4, + -0.352, + -0.328, + -0.264, + -0.196, + -0.12, + -0.068, + 0.008, + 0.048, + 0.104, + 0.204, + 0.272, + 0.296, + 0.292, + 0.332, + 0.388, + 0.504, + 0.56, + 0.596, + 0.624 ], - "y": [ - 0, - -0.04, - -0.02, - 0, - -0.024, - -0.08, - -0.164, - -0.236, - -0.248, - -0.284, - -0.34, - -0.388, - -0.412, - -0.44, - -0.484, - -0.588, - -0.668, + "z": [ + -0.932, -0.764, - -0.892, - -1.044, - -1.144, - -1.1, - -1, - -0.916, - -0.828, - -0.76, + -0.988, + -1.028, + -1.028, -0.696, - -0.648, - -0.572, - -0.504, - -0.476, - -0.444, -0.488, - -0.484, - -0.436, - -0.272, - -0.132, - -0.068, - 0.024, - 0.084, - 0.1, - 0.016, - 0.056, - 0.268, - 0.268, - 0.112, + -0.544, + -0.86, + -1.032, + -0.824, + -0.552, + -0.412, + -0.46, + -0.736, + -0.752, + -0.688, + -0.696, + -0.692, + -0.732, + -0.856, + -1.076, + -1.072, + -0.804, + -0.756, + -0.828, + -0.832, + -0.72, + -0.764, + -0.696, + -0.728, + -0.808, + -0.928, + -0.988, + -0.984, + -0.976, + -0.96, + -0.892, + -0.892, + -0.9, + -0.856, + -0.832, + -0.808, + -0.852, + -0.856, + -0.884, + -0.812, + -0.724, + -0.6 + ] + }, + "createdAt": 1730111051003 + }, + { + "id": "1b72a86b-8c83-492f-9bd9-861418f71d19", + "data": { + "x": [ + 0.692, + 0.632, + 0.68, + 0.688, + 0.596, + 0.576, + 0.7, + 0.684, + 0.656, + 0.808, + 0.868, + 0.836, + 0.708, + 0.44, + 0.304, + 0.444, + 0.748, + 0.984, + 0.296, + 0.148, + 0.68, + 0.756, + 0.364, + -0.1, + 0.28, + 0.404, -0.004, - 0.112, - 0.18, - 0.208, - 0.256, - 0.396, + 0.244, + 0.276, + 0.172, + 0.156, + 0.376, + 0.512, 0.516, - 0.6, - 0.64, - 0.504, - 0.344, - 0.184, + 0.392, + 0.072, + 0.004, + 0.368, + 0.604, + 0.488, + 0.212, + 0.192, + 0.268, + 0.356, + 0.4, + 0.468, + 0.492, + 0.38 + ], + "y": [ + 0.208, 0.064, - -0.056, - -0.024, - 0.06, 0.084, - 0.092, - 0.048, - -0.004, - -0.016, - -0.032, - -0.052, - -0.072, - -0.128, - -0.176, + 0.176, + 0.124, + -0.124, + -0.12, + -0.116, + -0.148, + -0.26, + -0.392, + -0.468, + -0.432, + -0.46, + -0.476, + -0.764, + -0.94, + -0.692, + -0.656, + -0.752, + -0.872, + -0.908, + -0.808, + -0.916, + -1.028, + -1.024, + -1.152, + -1.112, + -1.128, + -1.168, + -1.016, + -0.852, + -0.724, + -0.712, + -0.732, + -0.668, + -0.6, + -0.376, -0.18, - -0.196, - -0.224, - -0.292, - -0.34, - -0.344, - -0.396, - -0.528, - -0.644, + 0.1, + 0.284, + 0.452, + 0.56, + 0.548, + 0.5, + 0.504, + 0.48, + 0.448 + ], + "z": [ + -0.688, + -0.764, + -0.796, + -0.688, + -0.504, + -0.52, + -0.696, + -0.672, + -0.58, + -0.584, -0.6, - -0.476, + -0.752, + -0.74, + -0.624, + -0.428, + -0.488, + -0.744, + -1.224, + -0.548, + -0.18, + -0.66, + -0.86, + -0.796, + -0.496, + -0.788, + -1.016, + -0.768, + -0.92, + -0.984, + -0.976, + -0.94, + -0.816, + -0.756, + -0.88, + -1.18, + -1.068, + -0.78, + -0.78, + -0.808, + -0.756, + -0.48, + -0.372, + -0.328, -0.456, - -0.54, - -0.724, - -0.864, - -1, - -1.1, - -1.136 - ], - "z": [ - 0.256, + -0.656, + -0.772, + -0.752, + -0.732 + ] + }, + "createdAt": 1730111046637 + }, + { + "id": "ab5494a6-ff70-45fe-ae11-8fed15a4f5e9", + "data": { + "x": [ + 0.44, + 0.388, + 0.312, + 0.268, + 0.26, + 0.304, + 0.312, + 0.308, + 0.288, + 0.34, + 0.408, + 0.44, 0.38, + 0.268, + 0.416, + 0.54, + 0.552, + 0.412, + 0.432, 0.532, - 0.632, + 0.528, + 0.404, + 0.356, + 0.352, + 0.376, + 0.492, + 0.556, + 0.504, + 0.512, 0.744, - 0.816, - 0.856, + 0.6, + 0.34, + 0.248, + 0.244, + 0.268, + 0.388, + 0.504, + 0.352, + 0.34, + 0.252, + 0.284, + 0.192, + 0.116, + -0.048, + -0.088, + -0.144, + -0.164, + -0.096, + -0.06 + ], + "y": [ + 0.624, + 0.7, + 0.736, + 0.8, 0.864, - 0.868, - 0.868, - 0.82, + 0.876, + 0.836, 0.784, - 0.86, - 0.98, - 1.108, - 1.188, - 1.348, - 1.556, - 1.82, - 2.032, - 2.04, - 2.04, - 2.04, - 2.04, - 1.956, - 1.688, - 1.42, - 1.208, - 1.044, - 0.94, - 0.848, - 0.752, - 0.588, - 0.468, - 0.288, - 0.132, - 0.028, - -0.072, - -0.004, - 0.16, - 0.24, - 0.148, - -0.032, - 0.056, - 0.22, - 0.072, - -0.14, - -0.228, - -0.34, - -0.74, - -1.116, - -1.476, - -1.684, - -1.716, - -1.608, - -1.408, - -1.204, - -0.956, - -0.688, - -0.484, - -0.304, - -0.128, - 0.004, - 0.124, - 0.224, - 0.32, - 0.468, - 0.564, - 0.668, - 0.732, - 0.728, - 0.688, - 0.704, - 0.728, - 0.712, - 0.712, 0.74, - 0.8, - 0.916, - 0.988, - 0.952, - 0.968, - 1.036, - 1.084, - 1.248, - 1.392, - 1.628, - 1.948, - 2.04, - 2.04 + 0.72, + 0.712, + 0.624, + 0.44, + 0.392, + 0.388, + 0.44, + 0.376, + 0.296, + 0.308, + 0.364, + 0.284, + 0.252, + 0.26, + 0.116, + -0.064, + -0.112, + -0.084, + -0.164, + -0.372, + -0.368, + -0.332, + -0.46, + -0.564, + -0.584, + -0.652, + -0.764, + -0.872, + -0.928, + -0.784, + -0.772, + -0.868, + -1.112, + -1.204, + -1.192, + -1.104, + -1.096, + -1.144, + -1.236, + -1.264 + ], + "z": [ + -0.788, + -0.704, + -0.608, + -0.5, + -0.356, + -0.288, + -0.352, + -0.488, + -0.556, + -0.532, + -0.472, + -0.472, + -0.708, + -0.724, + -0.796, + -0.776, + -0.896, + -0.82, + -0.772, + -0.712, + -0.712, + -0.752, + -0.848, + -0.876, + -0.912, + -0.708, + -0.516, + -0.58, + -0.808, + -1.024, + -0.852, + -0.624, + -0.772, + -0.804, + -0.776, + -0.66, + -0.888, + -0.788, + -0.756, + -0.408, + -0.352, + -0.52, + -0.92, + -0.84, + -0.656, + -0.42, + -0.392, + -0.568, + -0.816 ] - } + }, + "createdAt": 1730111042105 } - ], - "output": {}, - "confidence": { - "currentConfidence": 0, - "requiredConfidence": 0.8, - "isConfident": false - }, - "icon": "EighthNote" + ] } ] }", - "main.blocks": "ml.event.StillIconNames.Asleepml.event.WaveIconNames.Rabbitml.event.ClapIconNames.EighthNote", - "main.ts": "ml.onStart(ml.event.Still, function () { - basic.showIcon(IconNames.Asleep) + "main.blocks": "ml.event.NotASpellIconNames.Noml.event.PokeIconNames.Swordml.event.WaggleIconNames.Confusedml.event.FlickIconNames.Yesml.event.CircleIconNames.Square", + "main.ts": "ml.onStart(ml.event.NotASpell, function () { + basic.showIcon(IconNames.No) +}) +ml.onStart(ml.event.Poke, function () { + basic.showIcon(IconNames.Sword) +}) +ml.onStart(ml.event.Waggle, function () { + basic.showIcon(IconNames.Confused) }) -ml.onStart(ml.event.Wave, function () { - basic.showIcon(IconNames.Rabbit) +ml.onStart(ml.event.Flick, function () { + basic.showIcon(IconNames.Yes) }) -ml.onStart(ml.event.Clap, function () { - basic.showIcon(IconNames.EighthNote) +ml.onStart(ml.event.Circle, function () { + basic.showIcon(IconNames.Square) }) ", "pxt.json": "{"name":"A project name","description":"","dependencies":{"core":"*","microphone":"*","radio":"*","machine-learning":"github:microbit-foundation/pxt-microbit-ml#v1.0.14"},"files":["main.ts","main.blocks","autogenerated.ts","dataset.json","pxt.json","README.md"],"preferredEditor":"blocksprj"}", diff --git a/src/makecode/generate-custom-scripts.ts b/src/makecode/generate-custom-scripts.ts index 8af0b6570..4b809b5ac 100644 --- a/src/makecode/generate-custom-scripts.ts +++ b/src/makecode/generate-custom-scripts.ts @@ -10,7 +10,7 @@ import { ActionName, actionNamesFromLabels } from "./utils"; import { LayersModel } from "@tensorflow/tfjs"; import { DatasetEditorJsonFormat, ActionData } from "../model"; import { mlSettings } from "../mlConfig"; -import { DataWindow } from "../store"; +import { DataWindow } from "../project-utils"; const createMlEvents = (actionNames: ActionName[]) => { let code = ""; diff --git a/src/makecode/generate-main-scripts.test.ts b/src/makecode/generate-main-scripts.test.ts index b0d279807..706d63afd 100644 --- a/src/makecode/generate-main-scripts.test.ts +++ b/src/makecode/generate-main-scripts.test.ts @@ -15,14 +15,18 @@ import { getMainScript } from "./generate-main-scripts"; describe("test generateMainScripts", () => { it("generates xml blocks", () => { const expected = `ml.event.NameIconNames.Heart`; - const actions: Action[] = [{ name: "name", icon: "Heart", ID: 12 }]; + const actions: Action[] = [ + { name: "name", icon: "Heart", id: "12", createdAt: 12 }, + ]; expect(getMainScript(actions, "blocks")).toEqual(expected); }); it("generates js", () => { const expected = "ml.onStart(ml.event.Name, function () {\n basic.showIcon(IconNames.Heart)\n})"; - const actions: Action[] = [{ name: "name", icon: "Heart", ID: 12 }]; + const actions: Action[] = [ + { name: "name", icon: "Heart", id: "12", createdAt: 12 }, + ]; expect(getMainScript(actions, "javascript")).toContain(expected); }); }); diff --git a/src/makecode/generate-main-scripts.ts b/src/makecode/generate-main-scripts.ts index d7e8fcd31..d215a4d4a 100644 --- a/src/makecode/generate-main-scripts.ts +++ b/src/makecode/generate-main-scripts.ts @@ -70,7 +70,7 @@ const onMLEventChildren = ( export const getMainScript = (actions: Action[], lang: Language) => { const actionNames = actionNamesFromLabels(actions.map((a) => a.name)); const configs = actions.map((g, idx) => ({ - id: g.ID, + id: g.id, name: actionNames[idx].actionVar, iconName: g.icon, })); diff --git a/src/makecode/ml4f-output.test.ts b/src/makecode/ml4f-output.test.ts index 421438cba..81dcdd866 100644 --- a/src/makecode/ml4f-output.test.ts +++ b/src/makecode/ml4f-output.test.ts @@ -15,9 +15,9 @@ import { prepareFeaturesAndLabels, trainModel } from "../ml"; import { ActionData } from "../model"; import { getAutogeneratedTs } from "./generate-custom-scripts"; // Change the file path to use different datasets. -import rawTrainingData from "../test-fixtures/activity-timer-data-log-data-samples.json"; -import { currentDataWindow, DataWindow } from "../store"; import path from "path"; +import { currentDataWindow, DataWindow } from "../project-utils"; +import rawTrainingData from "../test-fixtures/activity-timer-data-log-data-samples.json"; // Configure if the recording data is clipped to size of the smallest recording. const CLIP_TRAINING_DATA = false; diff --git a/src/makecode/utils.test.ts b/src/makecode/utils.test.ts index d1b6f8634..39bee4663 100644 --- a/src/makecode/utils.test.ts +++ b/src/makecode/utils.test.ts @@ -12,9 +12,9 @@ import { MakeCodeProject } from "@microbit/makecode-embed/react"; import * as tf from "@tensorflow/tfjs"; import { assert, vi } from "vitest"; import { TrainingResult, trainModel } from "../ml"; -import { DatasetEditorJsonFormat, ActionData } from "../model"; +import { ActionData, DatasetEditorJsonFormat } from "../model"; import oldProject from "../test-fixtures/project-to-update.json"; -import actionData from "../test-fixtures/still-wave-clap-data-samples-legacy.json"; +import actionData from "../test-fixtures/wand-data-samples.json"; import { ActionName, actionNamesFromLabels, @@ -25,7 +25,7 @@ import { hasMakeCodeMlExtension, pxt, } from "./utils"; -import { currentDataWindow } from "../store"; +import { currentDataWindow } from "../project-utils"; const data: DatasetEditorJsonFormat = { data: actionData as ActionData[], @@ -42,10 +42,7 @@ beforeAll(async () => { const randomSpy = vi.spyOn(Math, "random"); randomSpy.mockImplementation(() => 0.5); - trainingResult = await trainModel( - actionData as ActionData[], - currentDataWindow - ); + trainingResult = await trainModel(data.data, currentDataWindow); }); describe("test project generation", () => { diff --git a/src/makecode/utils.ts b/src/makecode/utils.ts index e334c5612..6d6ba5c76 100644 --- a/src/makecode/utils.ts +++ b/src/makecode/utils.ts @@ -12,8 +12,7 @@ import { DatasetEditorJsonFormat } from "../model"; import { getMainScript } from "./generate-main-scripts"; import { getAutogeneratedTs, getDatasetJson } from "./generate-custom-scripts"; import { MakeCodeProject } from "@microbit/makecode-embed/react"; -import { DataWindow } from "../store"; -import { untitledProjectName } from "../project-name"; +import { DataWindow, untitledProjectName } from "../project-utils"; export const filenames = { mainTs: "main.ts", diff --git a/src/ml.test.ts b/src/ml.test.ts index dcbf12dae..afc5c9b20 100644 --- a/src/ml.test.ts +++ b/src/ml.test.ts @@ -9,7 +9,7 @@ * SPDX-License-Identifier: MIT */ import * as tf from "@tensorflow/tfjs"; -import { ActionData } from "./model"; +import { ActionData, OldActionData } from "./model"; import { applyFilters, prepareFeaturesAndLabels, @@ -19,21 +19,24 @@ import { import actionDataBadLabels from "./test-fixtures/shake-still-circle-legacy-bad-labels.json"; import actionData from "./test-fixtures/shake-still-circle-data-samples-legacy.json"; import testData from "./test-fixtures/shake-still-circle-legacy-test-data.json"; -import { currentDataWindow } from "./store"; +import { currentDataWindow, migrateLegacyActionData } from "./project-utils"; -const fixUpTestData = (data: Partial[]): ActionData[] => { +const fixUpTestData = (data: Partial[]): OldActionData[] => { data.forEach((action) => (action.icon = "Heart")); - return data as ActionData[]; + return data as OldActionData[]; }; +const migratedActionData = migrateLegacyActionData(fixUpTestData(actionData)); +const migratedActionDataBadLabels = migrateLegacyActionData( + fixUpTestData(actionDataBadLabels) +); +const migratedTestData = migrateLegacyActionData(fixUpTestData(testData)); + let trainingResult: TrainingResult; beforeAll(async () => { // No webgl in tests running in node. await tf.setBackend("cpu"); - trainingResult = await trainModel( - fixUpTestData(actionData), - currentDataWindow - ); + trainingResult = await trainModel(migratedActionData, currentDataWindow); }); const getModelResults = (data: ActionData[]) => { @@ -66,7 +69,7 @@ const getModelResults = (data: ActionData[]) => { describe("Model tests", () => { test("returns acceptable results on training data", () => { const { tensorFlowResultAccuracy, tensorflowPredictionResult, labels } = - getModelResults(fixUpTestData(actionData)); + getModelResults(migratedActionData); const d = labels[0].length; // dimensions for (let i = 0, j = 0; i < tensorflowPredictionResult.length; i += d, j++) { const result = tensorflowPredictionResult.slice(i, i + d); @@ -81,7 +84,7 @@ describe("Model tests", () => { // Training data is shake, still, circle. This data is still, circle, shake. test("returns incorrect results on wrongly labelled training data", () => { const { tensorFlowResultAccuracy, tensorflowPredictionResult, labels } = - getModelResults(fixUpTestData(actionDataBadLabels)); + getModelResults(migratedActionDataBadLabels); const d = labels[0].length; // dimensions for (let i = 0, j = 0; i < tensorflowPredictionResult.length; i += d, j++) { const result = tensorflowPredictionResult.slice(i, i + d); @@ -93,9 +96,7 @@ describe("Model tests", () => { }); test("returns correct results on testing data", () => { - const { tensorFlowResultAccuracy } = getModelResults( - fixUpTestData(testData) - ); + const { tensorFlowResultAccuracy } = getModelResults(migratedTestData); // The model thinks 1-2 samples of still are circle. expect(parseFloat(tensorFlowResultAccuracy)).toBeGreaterThan(0.85); }); diff --git a/src/ml.ts b/src/ml.ts index 65a9fabbb..a5590efeb 100644 --- a/src/ml.ts +++ b/src/ml.ts @@ -8,7 +8,7 @@ import * as tf from "@tensorflow/tfjs"; import { SymbolicTensor } from "@tensorflow/tfjs"; import { getMlFilters, mlSettings } from "./mlConfig"; import { ActionData, XYZData } from "./model"; -import { DataWindow } from "./store"; +import { DataWindow } from "./project-utils"; export type TrainingResult = | { error: false; model: tf.LayersModel } @@ -128,10 +128,10 @@ export const applyFilters = ( interface PredictInput { model: tf.LayersModel; data: XYZData; - classificationIds: number[]; + classificationIds: string[]; } -export type Confidences = Record; +export type Confidences = Record; export type ConfidencesResult = | { error: true; detail: unknown } diff --git a/src/mlConfig.ts b/src/mlConfig.ts index e77b7a65a..c150430e0 100644 --- a/src/mlConfig.ts +++ b/src/mlConfig.ts @@ -4,7 +4,8 @@ * * SPDX-License-Identifier: MIT */ -import { DataWindow } from "./store"; + +import { DataWindow } from "./project-utils"; export enum Filter { MAX = "max", diff --git a/src/model.test.ts b/src/model.test.ts index 433b83d64..dd533cda1 100644 --- a/src/model.test.ts +++ b/src/model.test.ts @@ -16,29 +16,29 @@ describe("isDatasetUserFileFormat", () => { expect(isDatasetUserFileFormat([{ invalid: 3 }])).toEqual(false); expect(isDatasetUserFileFormat([{ name: 3 }])).toEqual(false); expect( - isDatasetUserFileFormat([{ ID: 0, name: "some name", recordings: [] }]) + isDatasetUserFileFormat([{ id: 0, name: "some name", recordings: [] }]) ).toEqual(true); }); it("checks data recordings", () => { const generateData = (recordings: unknown) => [ - { ID: 0, name: "some name", recordings }, + { id: 0, name: "some name", recordings }, ]; expect(isDatasetUserFileFormat(generateData({}))).toEqual(false); expect(isDatasetUserFileFormat(generateData([]))).toEqual(true); expect( - isDatasetUserFileFormat(generateData([{ ID: 0, data: [] }])) + isDatasetUserFileFormat(generateData([{ id: 0, data: [] }])) ).toEqual(false); expect( - isDatasetUserFileFormat(generateData([{ ID: 0, data: {} }])) + isDatasetUserFileFormat(generateData([{ id: 0, data: {} }])) ).toEqual(false); expect( isDatasetUserFileFormat( - generateData([{ ID: 0, data: { x: 0, y: 0, z: 0 } }]) + generateData([{ id: 0, data: { x: 0, y: 0, z: 0 } }]) ) ).toEqual(false); expect( isDatasetUserFileFormat( - generateData([{ ID: 0, data: { x: [], y: [], z: [] } }]) + generateData([{ id: 0, data: { x: [], y: [], z: [] } }]) ) ).toEqual(true); }); diff --git a/src/model.ts b/src/model.ts index 3e05c4828..547bc9424 100644 --- a/src/model.ts +++ b/src/model.ts @@ -17,15 +17,28 @@ export interface XYZData { } export interface RecordingData { - ID: number; + id: string; data: XYZData; + createdAt: number; } export interface Action { name: string; - ID: number; + id: string; icon: MakeCodeIcon; requiredConfidence?: number; + createdAt: number; +} + +export interface OldRecordingData { + ID: number; + data: XYZData; +} + +export interface OldActionData + extends Omit { + ID: number; + recordings: OldRecordingData[]; } export interface ActionData extends Action { @@ -52,7 +65,7 @@ export const isDatasetUserFileFormat = ( } if ( !("name" in item) || - !("ID" in item) || + !("ID" in item || "id" in item) || !("recordings" in item) || !Array.isArray(item.recordings) ) { @@ -63,7 +76,11 @@ export const isDatasetUserFileFormat = ( if (typeof rec !== "object" || rec === null) { return false; } - if (!("data" in rec) || !("ID" in rec) || Array.isArray(rec.data)) { + if ( + !("data" in rec) || + !("ID" in rec || "id" in rec) || + Array.isArray(rec.data) + ) { return false; } const xyzData = rec.data as object; diff --git a/src/pages/DataSamplesPage.tsx b/src/pages/DataSamplesPage.tsx index 584aa3221..a8dccd9ad 100644 --- a/src/pages/DataSamplesPage.tsx +++ b/src/pages/DataSamplesPage.tsx @@ -36,7 +36,7 @@ const DataSamplesPage = () => { useEffect(() => { // If a user first connects on "Testing model" this can result in the tour when they return to the "Data samples" page. if (isConnected) { - tourStart({ name: "Connect" }, false); + void tourStart({ name: "Connect" }, false); } }, [isConnected, tourStart]); @@ -48,9 +48,9 @@ const DataSamplesPage = () => { }, [navigate]); const trainButtonRef = useRef(null); - const handleAddNewAction = useCallback(() => { + const handleAddNewAction = useCallback(async () => { setSelectedActionIdx(actions.length); - addNewAction(); + await addNewAction(); }, [addNewAction, actions]); useShortcut(keyboardShortcuts.addAction, handleAddNewAction, { enabled: !isAddNewActionDisabled, diff --git a/src/pages/ImportPage.tsx b/src/pages/ImportPage.tsx index 6860adcb6..dd946a96b 100644 --- a/src/pages/ImportPage.tsx +++ b/src/pages/ImportPage.tsx @@ -25,7 +25,7 @@ import { useDeployment } from "../deployment"; import { useDefaultProjectName, useProject } from "../hooks/project-hooks"; import { useLogging } from "../logging/logging-hooks"; import { MicrobitOrgResource } from "../model"; -import { validateProjectName } from "../project-name"; +import { validateProjectName } from "../project-utils"; import { useStore } from "../store"; import { createDataSamplesPageUrl } from "../urls"; import { ButtonWithLoading } from "../components/ButtonWithLoading"; @@ -79,14 +79,14 @@ const ImportPage = () => { const newSession = useStore((s) => s.newSession); const timestamp = useStore((s) => s.timestamp); - const handleStartSession = useCallback(() => { + const handleStartSession = useCallback(async () => { if (project) { - loadProject(project, name); + await loadProject(project, name); navigate(createDataSamplesPageUrl()); } else { // If no resource fetched, start as new empty session // with provided project name - newSession(name); + await newSession(name); navigate(createDataSamplesPageUrl()); } }, [loadProject, name, navigate, newSession, project]); diff --git a/src/pages/NewPage.tsx b/src/pages/NewPage.tsx index 5c66d2bf7..14ee40549 100644 --- a/src/pages/NewPage.tsx +++ b/src/pages/NewPage.tsx @@ -50,11 +50,11 @@ const NewPage = () => { loadProjectRef.current?.chooseFile(); }, []); - const handleStartNewSession = useCallback(() => { + const handleStartNewSession = useCallback(async () => { logging.event({ type: "session-open-new", }); - newSession(); + await newSession(); navigate(createDataSamplesPageUrl()); }, [logging, newSession, navigate]); diff --git a/src/pages/OpenSharedProjectPage.tsx b/src/pages/OpenSharedProjectPage.tsx index 740e3517b..581daa443 100644 --- a/src/pages/OpenSharedProjectPage.tsx +++ b/src/pages/OpenSharedProjectPage.tsx @@ -74,9 +74,9 @@ const OpenSharedProjectPage = () => { useProjectPreload(setName); const { shareId } = useParams(); - const handleOpenProject = useCallback(() => { + const handleOpenProject = useCallback(async () => { if (!header || !projectText) return; - loadProject({ header: { ...header, name }, text: projectText }, name); + await loadProject({ header: { ...header, name }, text: projectText }, name); logging.event({ type: "import-shared-project-complete", detail: { shareId }, @@ -293,7 +293,7 @@ const PreviewData = ({ dataset }: PreviewDataProps) => { {dataset.map((action) => ( { const wasConnected = usePrevious(isConnected); useEffect(() => { if (isConnected) { - tourStart( + void tourStart( { name: "TrainModel", delayedUntilConnection: wasConnected === false }, false ); diff --git a/src/pages/Tour.tsx b/src/pages/Tour.tsx index 524a4baed..8c215a575 100644 --- a/src/pages/Tour.tsx +++ b/src/pages/Tour.tsx @@ -50,11 +50,11 @@ const Tour = () => { }); const ourRef = useRef(); - const handleTourComplete = useCallback(() => { + const handleTourComplete = useCallback(async () => { if (!tourState) { throw new Error("Must be a tour"); } - tourComplete(tourState.markCompleted); + await tourComplete(tourState.markCompleted); }, [tourComplete, tourState]); useEffect(() => { diff --git a/src/project-name.ts b/src/project-name.ts deleted file mode 100644 index aa06f15c9..000000000 --- a/src/project-name.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * (c) 2024, Micro:bit Educational Foundation and contributors - * - * SPDX-License-Identifier: MIT - */ -export const untitledProjectName = "Untitled"; -export const validateProjectName = (name: string): boolean => { - return name.trim().length > 0; -}; diff --git a/src/project-utils.ts b/src/project-utils.ts new file mode 100644 index 000000000..276676aa9 --- /dev/null +++ b/src/project-utils.ts @@ -0,0 +1,90 @@ +/** + * (c) 2024, Micro:bit Educational Foundation and contributors + * + * SPDX-License-Identifier: MIT + */ +import { MakeCodeProject } from "@microbit/makecode-embed"; +import { v4 as uuid } from "uuid"; +import { generateProject } from "./makecode/utils"; +import { ActionData, OldActionData } from "./model"; + +export const untitledProjectName = "Untitled"; + +export const validateProjectName = (name: string): boolean => { + return name.trim().length > 0; +}; + +export interface DataWindow { + duration: number; // Duration of recording + minSamples: number; // minimum number of samples for reliable detection (when detecting actions) + deviceSamplesPeriod: number; + deviceSamplesLength: number; +} + +// Exported for testing. +export const currentDataWindow: DataWindow = { + duration: 990, + minSamples: 44, + deviceSamplesPeriod: 20, // Default value for accelerometer period. + deviceSamplesLength: 50, // Number of samples required at 20 ms intervals for 1 second of data. +}; + +export const legacyDataWindow: DataWindow = { + duration: 1800, + minSamples: 80, + deviceSamplesPeriod: 25, + deviceSamplesLength: 80, +}; + +export const createUntitledProject = (): MakeCodeProject => ({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + header: { + target: "microbit", + targetVersion: "7.1.2", + name: untitledProjectName, + meta: {}, + editor: "blocksprj", + pubId: "", + pubCurrent: false, + _rev: null, + id: "45a3216b-e997-456c-bd4b-6550ddb81c4e", + recentUse: 1726493314, + modificationTime: 1726493314, + cloudUserId: null, + cloudCurrent: false, + cloudVersion: null, + cloudLastSyncTime: 0, + isDeleted: false, + githubCurrent: false, + saveId: null, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any, + ...generateProject( + untitledProjectName, + { data: [] }, + undefined, + currentDataWindow + ), +}); + +export const migrateLegacyActionData = ( + actions: OldActionData[] | ActionData[] +): ActionData[] => { + return actions.map((a) => { + if (Object.prototype.hasOwnProperty.call(a, "ID")) { + return { + name: a.name, + id: uuid(), + icon: a.icon, + requiredConfidence: a.requiredConfidence, + recordings: (a as OldActionData).recordings.map((r) => ({ + id: uuid(), + data: r.data, + createdAt: r.ID, + })), + createdAt: (a as OldActionData).ID, + }; + } + return a as ActionData; + }); +}; diff --git a/src/storage.ts b/src/storage.ts new file mode 100644 index 000000000..87492b863 --- /dev/null +++ b/src/storage.ts @@ -0,0 +1,641 @@ +import { MakeCodeProject } from "@microbit/makecode-embed"; +import { DBSchema, IDBPDatabase, IDBPTransaction, openDB } from "idb"; +import orderBy from "lodash.orderby"; +import { Action, ActionData, RecordingData } from "./model"; +import { + createUntitledProject, + migrateLegacyActionData, +} from "./project-utils"; +import { defaultSettings, Settings } from "./settings"; +import { prepActionForStorage } from "./storageUtils"; +import { v4 as uuid } from "uuid"; + +const DATABASE_NAME = "ml"; + +interface PersistedProjectData { + actions: ActionData[]; + project: MakeCodeProject; + projectEdited: boolean; + settings: Settings; + timestamp: number | undefined; +} + +interface MakeCodeData { + project: MakeCodeProject; + projectEdited: boolean; +} + +enum DatabaseStore { + PROJECT_DATA = "project-data", + MAKECODE_DATA = "makecode-data", + RECORDINGS = "recordings", + ACTIONS = "actions", + SETTINGS = "settings", +} + +export class StorageError extends Error {} + +const defaultCreatedAt = Date.now(); +const defaultProjectId = uuid(); + +const defaultStoreData: Record< + | DatabaseStore.PROJECT_DATA + | DatabaseStore.SETTINGS + | DatabaseStore.MAKECODE_DATA, + { key: string; value: ProjectData | Settings | MakeCodeData } +> = { + [DatabaseStore.PROJECT_DATA]: { + value: { + id: defaultProjectId, + createdAt: defaultCreatedAt, + updatedAt: defaultCreatedAt, + actionIds: [], + }, + key: defaultProjectId, + }, + [DatabaseStore.SETTINGS]: { + value: defaultSettings, + key: DatabaseStore.SETTINGS, + }, + [DatabaseStore.MAKECODE_DATA]: { + value: { + project: createUntitledProject(), + projectEdited: false, + }, + key: defaultProjectId, + }, +}; + +export interface StoreAction extends Action { + recordingIds: string[]; +} + +interface ProjectData { + id: string; + timestamp?: number; + actionIds: string[]; + createdAt: number; + updatedAt: number; +} + +interface Schema extends DBSchema { + [DatabaseStore.PROJECT_DATA]: { + key: string; + value: ProjectData; + }; + [DatabaseStore.ACTIONS]: { + key: string; + value: StoreAction; + }; + [DatabaseStore.RECORDINGS]: { + key: string; + value: RecordingData; + }; + [DatabaseStore.MAKECODE_DATA]: { + key: string; + value: MakeCodeData; + }; + [DatabaseStore.SETTINGS]: { + key: string; + value: Settings; + }; +} + +export class Database { + dbPromise: Promise>; + projectId: string = defaultProjectId; + constructor() { + this.dbPromise = this.initialize(); + } + + initialize(): Promise> { + return openDB(DATABASE_NAME, 1, { + async upgrade(db) { + const localStorageProject = getLocalStorageProject(); + for (const store of Object.values(DatabaseStore)) { + const objectStore = db.createObjectStore(store); + if (localStorageProject) { + switch (store) { + case DatabaseStore.ACTIONS: { + await Promise.all( + localStorageProject.actions.map((a) => + objectStore.add(prepActionForStorage(a), a.id) + ) + ); + break; + } + case DatabaseStore.RECORDINGS: { + await Promise.all( + localStorageProject.actions + .flatMap((a) => a.recordings) + .map((r) => objectStore.add(r, r.id)) + ); + break; + } + case DatabaseStore.MAKECODE_DATA: { + await objectStore.add( + { + project: localStorageProject.project, + projectEdited: localStorageProject.projectEdited, + }, + defaultProjectId + ); + break; + } + case DatabaseStore.PROJECT_DATA: { + await objectStore.add( + { + id: defaultProjectId, + timestamp: localStorageProject.timestamp, + createdAt: defaultCreatedAt, + updatedAt: defaultCreatedAt, + actionIds: [], + }, + defaultProjectId + ); + break; + } + case DatabaseStore.SETTINGS: { + await objectStore.add( + localStorageProject.settings, + DatabaseStore.SETTINGS + ); + break; + } + } + continue; + } + // Set default values if there is are data to migrate. + if ( + store === DatabaseStore.PROJECT_DATA || + store === DatabaseStore.MAKECODE_DATA || + store === DatabaseStore.SETTINGS + ) { + const defaultData = defaultStoreData[store]; + await objectStore.add(defaultData.value, defaultData.key); + } + } + localStorage.removeItem(DATABASE_NAME); + }, + }); + } + + async newSession( + makeCodeData: MakeCodeData, + projectData: Partial + ): Promise { + this.projectId = uuid(); + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.RECORDINGS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + ], + "readwrite" + ); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + await recordingsStore.clear(); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + await actionsStore.clear(); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.clear(); + await makeCodeStore.add(makeCodeData, this.projectId); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + await projectDataStore.clear(); + await projectDataStore.add( + { + id: this.projectId, + actionIds: [], + createdAt: projectData.timestamp!, + updatedAt: projectData.timestamp!, + ...projectData, + }, + this.projectId + ); + return tx.done; + } + + async loadProject(id: string): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.RECORDINGS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + DatabaseStore.SETTINGS, + ], + "readwrite" + ); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(id)); + // Ensure that this project will be loaded by default during next page load. + await projectDataStore.put( + { ...projectData, updatedAt: Date.now() }, + this.projectId + ); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + const storeActions = orderBy( + assertDataArray( + await Promise.all( + projectData.actionIds.map((id) => actionsStore.get(id)) + ) + ), + "createdAt", + "asc" + ); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + const actions: ActionData[] = await Promise.all( + storeActions.map(async (action) => { + return { + id: action.id, + name: action.name, + icon: action.icon, + requiredConfidence: action.requiredConfidence, + createdAt: action.createdAt, + recordings: assertDataArray( + await Promise.all( + action.recordingIds.map((id) => recordingsStore.get(id)) + ) + ), + }; + }) + ); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + const makeCodeData = assertData(await makeCodeStore.get(id)); + const settingsStore = tx.objectStore(DatabaseStore.SETTINGS); + const settings = assertData( + await settingsStore.get(DatabaseStore.SETTINGS) + ); + await tx.done; + return { + actions, + project: makeCodeData.project, + projectEdited: makeCodeData.projectEdited, + timestamp: projectData.timestamp, + settings, + }; + } + + async importProject( + actions: ActionData[], + makeCodeData: MakeCodeData, + projectData: Partial, + settings: Settings + ): Promise { + this.projectId = uuid(); + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.RECORDINGS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + DatabaseStore.SETTINGS, + ], + "readwrite" + ); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + await recordingsStore.clear(); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + await actionsStore.clear(); + await Promise.all( + actions + .flatMap((a) => a.recordings) + .map((r) => recordingsStore.add(r, r.id)) + ); + await Promise.all( + actions.map((a) => actionsStore.add(prepActionForStorage(a), a.id)) + ); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.clear(); + await makeCodeStore.add(makeCodeData, this.projectId); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + await projectDataStore.clear(); + const createdAt = Date.now(); + await projectDataStore.add( + { + id: this.projectId, + actionIds: actions.map((a) => a.id), + createdAt, + updatedAt: createdAt, + ...projectData, + }, + this.projectId + ); + + const settingsStore = tx.objectStore(DatabaseStore.SETTINGS); + await settingsStore.put(settings, DatabaseStore.SETTINGS); + return tx.done; + } + + async getLatestProjectId(): Promise { + const projectData = await ( + await this.dbPromise + ).getAll(DatabaseStore.PROJECT_DATA); + const latestProjectData = orderBy(projectData, "updatedAt", "desc")[0]; + this.projectId = latestProjectData.id; + return this.projectId; + } + + async addAction( + action: ActionData, + makeCodeData: MakeCodeData + ): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + ], + "readwrite" + ); + const actionToStore = prepActionForStorage(action); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + await actionsStore.add(actionToStore, actionToStore.id); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(this.projectId)); + projectData.actionIds.push(action.id); + projectData.updatedAt = Date.now(); + await projectDataStore.put(projectData, this.projectId); + return tx.done; + } + + async updateAction( + action: ActionData, + makeCodeData: MakeCodeData + ): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + ], + "readwrite" + ); + const actionToStore = prepActionForStorage(action); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + await actionsStore.put(actionToStore, actionToStore.id); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(this.projectId)); + const updatedActionIds = Array.from( + new Set([action.id, ...projectData.actionIds]) + ); + await projectDataStore.put( + { + ...projectData, + actionIds: updatedActionIds, + updatedAt: Date.now(), + }, + this.projectId + ); + return tx.done; + } + + async updateActions( + actions: ActionData[], + makeCodeData: MakeCodeData + ): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + ], + "readwrite" + ); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + await Promise.all( + actions.map((action) => + actionsStore.put(prepActionForStorage(action), action.id) + ) + ); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(this.projectId)); + const updatedActionIds = Array.from( + new Set(...actions.map((a) => a.id), projectData.actionIds) + ); + await projectDataStore.put( + { + ...projectData, + actionIds: updatedActionIds, + updatedAt: Date.now(), + }, + this.projectId + ); + return tx.done; + } + + async deleteAction( + action: ActionData, + makeCodeData: MakeCodeData + ): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.RECORDINGS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + ], + "readwrite" + ); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + await actionsStore.delete(action.id); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + await Promise.all( + action.recordings.map((r) => recordingsStore.delete(r.id)) + ); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(this.projectId)); + const updatedActionIds = projectData.actionIds.filter( + (id) => id !== action.id + ); + await projectDataStore.put( + { ...projectData, actionIds: updatedActionIds, updatedAt: Date.now() }, + this.projectId + ); + return tx.done; + } + + async deleteAllActions(makeCodeData: MakeCodeData): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.RECORDINGS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + ], + "readwrite" + ); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(this.projectId)); + + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + const actions = assertDataArray( + await Promise.all(projectData.actionIds.map((id) => actionsStore.get(id))) + ); + await Promise.all( + projectData.actionIds.map((id) => actionsStore.delete(id)) + ); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + await Promise.all( + actions + .flatMap((a) => a.recordingIds) + .map((id) => recordingsStore.delete(id)) + ); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + await projectDataStore.put( + { ...projectData, actionIds: [], updatedAt: Date.now() }, + this.projectId + ); + return tx.done; + } + + async addRecording( + recording: RecordingData, + action: ActionData, + makeCodeData: MakeCodeData + ): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + DatabaseStore.RECORDINGS, + ], + "readwrite" + ); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + const actionToStore = prepActionForStorage(action); + await actionsStore.put(actionToStore, actionToStore.id); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + await recordingsStore.add(recording, recording.id); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + await this.updateProjectInternal(tx); + return tx.done; + } + + async deleteRecording( + key: string, + action: ActionData, + makeCodeData: MakeCodeData + ): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + DatabaseStore.RECORDINGS, + ], + "readwrite" + ); + const actionsStore = tx.objectStore(DatabaseStore.ACTIONS); + const actionToStore = prepActionForStorage(action); + await actionsStore.put(actionToStore, actionToStore.id); + const recordingsStore = tx.objectStore(DatabaseStore.RECORDINGS); + await recordingsStore.delete(key); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + await this.updateProjectInternal(tx); + return tx.done; + } + + async updateMakeCodeProject(makeCodeData: MakeCodeData): Promise { + const tx = (await this.dbPromise).transaction( + [ + DatabaseStore.ACTIONS, + DatabaseStore.MAKECODE_DATA, + DatabaseStore.PROJECT_DATA, + DatabaseStore.RECORDINGS, + ], + "readwrite" + ); + const makeCodeStore = tx.objectStore(DatabaseStore.MAKECODE_DATA); + await makeCodeStore.put(makeCodeData, this.projectId); + await this.updateProjectInternal(tx); + return tx.done; + } + + // TODO: TypeScript to ensure that a transaction with DatabaseStore.PROJECT_DATA is passed in. + private async updateProjectInternal( + tx: IDBPTransaction, + projectUpdates?: Partial + ): Promise { + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const projectData = assertData(await projectDataStore.get(this.projectId)); + await projectDataStore.put( + { + ...projectData, + updatedAt: Date.now(), + ...projectUpdates, + }, + this.projectId + ); + } + + // Currently unused. + async updateProject(project: Partial): Promise { + const tx = (await this.dbPromise).transaction( + DatabaseStore.PROJECT_DATA, + "readwrite" + ); + const projectDataStore = tx.objectStore(DatabaseStore.PROJECT_DATA); + const storedProjectData = assertData( + await projectDataStore.get(this.projectId) + ); + await projectDataStore.put( + { + ...storedProjectData, + ...project, + updatedAt: Date.now(), + }, + this.projectId + ); + return tx.done; + } + + async updateSettings(settings: Settings): Promise { + return (await this.dbPromise).put( + DatabaseStore.SETTINGS, + settings, + DatabaseStore.SETTINGS + ); + } +} + +const assertData = (data: T) => { + if (!data) { + throw new StorageError("Failed to fetch expected data from storage"); + } + return data; +}; + +const assertDataArray = (data: (undefined | T)[]) => { + data.forEach((item) => { + if (!item) { + throw new StorageError("Failed to fetch expected data from storage"); + } + }); + return data as T[]; +}; + +export const getLocalStorageProject = (): PersistedProjectData | undefined => { + const data = localStorage.getItem(DATABASE_NAME); + if (!data) { + return undefined; + } + const dataToMigrate = JSON.parse(data) as { state: PersistedProjectData }; + return { + ...dataToMigrate.state, + actions: migrateLegacyActionData(dataToMigrate.state.actions), + }; +}; diff --git a/src/storageUtils.ts b/src/storageUtils.ts new file mode 100644 index 000000000..833fcc83a --- /dev/null +++ b/src/storageUtils.ts @@ -0,0 +1,13 @@ +import { ActionData } from "./model"; +import { StoreAction } from "./storage"; + +export const prepActionForStorage = (action: ActionData): StoreAction => { + return { + id: action.id, + name: action.name, + icon: action.icon, + requiredConfidence: action.requiredConfidence, + recordingIds: action.recordings.map((r) => r.id), + createdAt: action.createdAt, + }; +}; diff --git a/src/store.ts b/src/store.ts index eada40e8c..5c75c1ac8 100644 --- a/src/store.ts +++ b/src/store.ts @@ -6,11 +6,14 @@ */ import { MakeCodeProject } from "@microbit/makecode-embed/react"; import * as tf from "@tensorflow/tfjs"; +import { v4 as uuid } from "uuid"; import { create } from "zustand"; -import { devtools, persist } from "zustand/middleware"; +import { devtools } from "zustand/middleware"; import { useShallow } from "zustand/react/shallow"; +import { BufferedData } from "./buffered-data"; import { deployment } from "./deployment"; import { flags } from "./flags"; +import { createPromise, PromiseInfo } from "./hooks/use-promise-ref"; import { Logging } from "./logging/logging"; import { filenames, @@ -18,108 +21,72 @@ import { generateProject, } from "./makecode/utils"; import { Confidences, predict, trainModel } from "./ml"; +import { mlSettings } from "./mlConfig"; import { + Action, + ActionData, DataSamplesView, DownloadState, DownloadStep, - Action, - ActionData, + EditorStartUp, MicrobitToFlash, + OldActionData, PostImportDialogState, RecordingData, SaveState, SaveStep, - TourTrigger, + tourSequence, TourState, - TrainModelDialogStage, - EditorStartUp, + TourTrigger, TourTriggerName, - tourSequence, + TrainModelDialogStage, } from "./model"; +import { + createUntitledProject, + currentDataWindow, + DataWindow, + legacyDataWindow, + migrateLegacyActionData, + untitledProjectName, +} from "./project-utils"; import { defaultSettings, Settings } from "./settings"; +import { Database, StorageError } from "./storage"; +import { getTour as getTourSpec } from "./tours"; import { getTotalNumSamples } from "./utils/actions"; import { defaultIcons, MakeCodeIcon } from "./utils/icons"; -import { untitledProjectName } from "./project-name"; -import { mlSettings } from "./mlConfig"; -import { BufferedData } from "./buffered-data"; import { getDetectedAction } from "./utils/prediction"; -import { getTour as getTourSpec } from "./tours"; -import { createPromise, PromiseInfo } from "./hooks/use-promise-ref"; + +export enum BroadcastChannelMessages { + RELOAD_PROJECT = "reload-project", + REMOVE_MODEL = "remove-model", +} +// Used to keep state synced between open tabs. +const broadcastChannel = new BroadcastChannel("ml"); + +const storage = new Database(); export const modelUrl = "indexeddb://micro:bit-ai-creator-model"; -const createFirstAction = () => ({ +const createFirstAction = (): ActionData => ({ icon: defaultIcons[0], - ID: Date.now(), + id: uuid(), name: "", recordings: [], + createdAt: Date.now(), }); -export interface DataWindow { - duration: number; // Duration of recording - minSamples: number; // minimum number of samples for reliable detection (when detecting actions) - deviceSamplesPeriod: number; - deviceSamplesLength: number; -} - -const legacyDataWindow: DataWindow = { - duration: 1800, - minSamples: 80, - deviceSamplesPeriod: 25, - deviceSamplesLength: 80, -}; - -// Exported for testing. -export const currentDataWindow: DataWindow = { - duration: 990, - minSamples: 44, - deviceSamplesPeriod: 20, // Default value for accelerometer period. - deviceSamplesLength: 50, // Number of samples required at 20 ms intervals for 1 second of data. -}; - interface PredictionResult { confidences: Confidences; detected: Action | undefined; } -const createUntitledProject = (): MakeCodeProject => ({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - header: { - target: "microbit", - targetVersion: "7.1.2", - name: untitledProjectName, - meta: {}, - editor: "blocksprj", - pubId: "", - pubCurrent: false, - _rev: null, - id: "45a3216b-e997-456c-bd4b-6550ddb81c4e", - recentUse: 1726493314, - modificationTime: 1726493314, - cloudUserId: null, - cloudCurrent: false, - cloudVersion: null, - cloudLastSyncTime: 0, - isDeleted: false, - githubCurrent: false, - saveId: null, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } as any, - ...generateProject( - untitledProjectName, - { data: [] }, - undefined, - currentDataWindow - ), -}); - const updateProject = ( project: MakeCodeProject, projectEdited: boolean, actions: ActionData[], model: tf.LayersModel | undefined, dataWindow: DataWindow -): Partial => { +): Pick => { const actionsData = { data: actions }; const updatedProject = { ...project, @@ -222,39 +189,41 @@ export interface ConnectOptions { } export interface Actions { - addNewAction(): void; - addActionRecordings(id: ActionData["ID"], recs: RecordingData[]): void; - deleteAction(id: ActionData["ID"]): void; - setActionName(id: ActionData["ID"], name: string): void; - setActionIcon(id: ActionData["ID"], icon: MakeCodeIcon): void; - setRequiredConfidence(id: ActionData["ID"], value: number): void; - deleteActionRecording(id: ActionData["ID"], recordingIdx: number): void; - deleteAllActions(): void; + loadProjectFromStorage(id: string): Promise; + addNewAction(): Promise; + addActionRecording(id: string, recording: RecordingData): Promise; + deleteAction(action: ActionData): Promise; + setActionName(id: string, name: string): Promise; + setActionIcon(id: string, icon: MakeCodeIcon): Promise; + setRequiredConfidence(id: string, value: number): Promise; + deleteActionRecording(id: string, recordingId: string): Promise; + deleteAllActions(): Promise; downloadDataset(): void; dataCollectionMicrobitConnectionStart(options?: ConnectOptions): void; dataCollectionMicrobitConnected(): void; - loadDataset(actions: ActionData[]): void; - loadProject(project: MakeCodeProject, name: string): void; + loadDataset(actions: ActionData[]): Promise; + loadProject(project: MakeCodeProject, name: string): Promise; setEditorOpen(open: boolean): void; recordingStarted(): void; recordingStopped(): void; - newSession(projectName?: string): void; + newSession(projectName?: string): Promise; trainModelFlowStart: (callback?: () => void) => Promise; closeTrainModelDialogs: () => void; trainModel(): Promise; - setSettings(update: Partial): void; - setLanguage(languageId: string): void; + removeModel(): void; + setSettings(update: Partial): Promise; + setLanguage(languageId: string): Promise; /** * Resets the project. */ - resetProject(): void; + resetProject(): Promise; /** * Sets the project name. */ - setProjectName(name: string): void; + setProjectName(name: string): Promise; /** * When interacting outside of React to sync with MakeCode it's important to have @@ -264,7 +233,7 @@ export interface Actions { checkIfProjectNeedsFlush(): boolean; checkIfLangChanged(): boolean; langChangeFlushedToEditor(): void; - editorChange(project: MakeCodeProject): void; + editorChange(project: MakeCodeProject): Promise; editorReady(): void; editorTimedOut(): void; getEditorStartUp(): EditorStartUp; @@ -274,19 +243,18 @@ export interface Actions { projectFlushedToEditor(): void; setDownload(state: DownloadState): void; - // TODO: does the persistence slow this down? we could move it to another store setDownloadFlashingProgress(value: number): void; setSave(state: SaveState): void; - tourStart(trigger: TourTrigger, manual?: boolean): void; + tourStart(trigger: TourTrigger, manual?: boolean): Promise; tourNext(): void; tourBack(): void; - tourComplete(markCompleted: TourTriggerName[]): void; + tourComplete(markCompleted: TourTriggerName[]): Promise; setPostConnectTourTrigger(trigger: TourTrigger | undefined): void; - setDataSamplesView(view: DataSamplesView): void; - setShowGraphs(show: boolean): void; + setDataSamplesView(view: DataSamplesView): Promise; + setShowGraphs(show: boolean): Promise; setPostImportDialogState(state: PostImportDialogState): void; startPredicting(buffer: BufferedData): void; @@ -312,1015 +280,1138 @@ type Store = State & Actions; const createMlStore = (logging: Logging) => { return create()( devtools( - persist( - (set, get) => ({ - timestamp: undefined, - actions: [], - dataWindow: currentDataWindow, - isRecording: false, - project: createUntitledProject(), - projectLoadTimestamp: 0, - download: { - step: DownloadStep.None, - microbitToFlash: MicrobitToFlash.Default, - }, - downloadFlashingProgress: 0, - save: { - step: SaveStep.None, - }, - projectEdited: false, - settings: defaultSettings, - model: undefined, - isEditorOpen: false, - isEditorReady: false, - isEditorLoadingFile: false, - isEditorImportingState: false, - editorStartUp: "in-progress", - editorStartUpTimestamp: Date.now(), - editorPromises: { - editorReadyPromise: createPromise(), - editorContentLoadedPromise: createPromise(), - }, - isEditorTimedOutDialogOpen: false, - langChanged: false, - appEditNeedsFlushToEditor: true, - // This dialog flow spans two pages - trainModelDialogStage: TrainModelDialogStage.Closed, - trainModelProgress: 0, - dataSamplesView: DataSamplesView.Graph, - postImportDialogState: PostImportDialogState.None, - predictionInterval: undefined, - predictionResult: undefined, - isLanguageDialogOpen: false, - isSettingsDialogOpen: false, - isConnectFirstDialogOpen: false, - isAboutDialogOpen: false, - isFeedbackFormOpen: false, - isDeleteAllActionsDialogOpen: false, - isNameProjectDialogOpen: false, - isRecordingDialogOpen: false, - isConnectToRecordDialogOpen: false, - isDeleteActionDialogOpen: false, - isIncompatibleEditorDeviceDialogOpen: false, - - setSettings(update: Partial) { - set( - ({ settings }) => ({ - settings: { - ...settings, - ...update, - }, - }), - false, - "setSettings" - ); - }, - - setLanguage(languageId: string) { - const currLanguageId = get().settings.languageId; - if (languageId === currLanguageId) { - // No need to update language if language is the same. - // MakeCode does not reload. - return; - } - set( - ({ settings }) => ({ - settings: { - ...settings, - languageId, - }, - editorPromises: { - editorReadyPromise: createPromise(), - editorContentLoadedPromise: createPromise(), - }, - isEditorReady: false, - editorStartUp: "in-progress", - editorStartUpTimestamp: Date.now(), - langChanged: true, - }), - false, - "setLanguage" - ); - }, - - newSession(projectName?: string) { - const untitledProject = createUntitledProject(); - set( - { - actions: [], - dataWindow: currentDataWindow, - model: undefined, - project: projectName - ? renameProject(untitledProject, projectName) - : untitledProject, - projectEdited: false, - appEditNeedsFlushToEditor: true, - timestamp: Date.now(), + (set, get) => ({ + timestamp: undefined, + actions: [], + dataWindow: currentDataWindow, + isRecording: false, + project: createUntitledProject(), + projectLoadTimestamp: 0, + download: { + step: DownloadStep.None, + microbitToFlash: MicrobitToFlash.Default, + }, + downloadFlashingProgress: 0, + save: { + step: SaveStep.None, + }, + projectEdited: false, + settings: defaultSettings, + model: undefined, + isEditorOpen: false, + isEditorReady: false, + isEditorLoadingFile: false, + isEditorImportingState: false, + editorStartUp: "in-progress", + editorStartUpTimestamp: Date.now(), + editorPromises: { + editorReadyPromise: createPromise(), + editorContentLoadedPromise: createPromise(), + }, + isEditorTimedOutDialogOpen: false, + langChanged: false, + appEditNeedsFlushToEditor: true, + // This dialog flow spans two pages + trainModelDialogStage: TrainModelDialogStage.Closed, + trainModelProgress: 0, + dataSamplesView: DataSamplesView.Graph, + postImportDialogState: PostImportDialogState.None, + predictionInterval: undefined, + predictionResult: undefined, + isLanguageDialogOpen: false, + isSettingsDialogOpen: false, + isConnectFirstDialogOpen: false, + isAboutDialogOpen: false, + isFeedbackFormOpen: false, + isDeleteAllActionsDialogOpen: false, + isNameProjectDialogOpen: false, + isRecordingDialogOpen: false, + isConnectToRecordDialogOpen: false, + isDeleteActionDialogOpen: false, + isIncompatibleEditorDeviceDialogOpen: false, + + async setSettings(update: Partial) { + const { settings } = get(); + const updatedSettings = { + ...settings, + ...update, + }; + set({ settings: updatedSettings }, false, "setSettings"); + await storageWithErrHandling(() => + storage.updateSettings(updatedSettings) + ); + }, + + async setLanguage(languageId: string) { + const { settings } = get(); + if (languageId === settings.languageId) { + // No need to update language if language is the same. + // MakeCode does not reload. + return; + } + const updatedSettings = { + ...settings, + languageId, + }; + set( + { + settings: updatedSettings, + editorPromises: { + editorReadyPromise: createPromise(), + editorContentLoadedPromise: createPromise(), }, - false, - "newSession" - ); - }, - - setEditorOpen(open: boolean) { - set( - ({ download }) => ({ - isEditorOpen: open, - download: { - ...download, - usbDevice: undefined, - }, - }), - false, - "setEditorOpen" - ); - }, - - recordingStarted() { - set({ isRecording: true }, false, "recordingStarted"); - }, - recordingStopped() { - set({ isRecording: false }, false, "recordingStopped"); - }, - - addNewAction() { - return set(({ project, projectEdited, actions, dataWindow }) => { - const newActions = [ - ...actions, - { - icon: actionIcon({ - isFirstAction: actions.length === 0, - existingActions: actions, - }), - ID: Date.now(), - name: "", - recordings: [], - }, - ]; - return { - actions: newActions, - model: undefined, - ...updateProject( - project, - projectEdited, - newActions, - undefined, - dataWindow - ), - }; - }); - }, - - addActionRecordings(id: ActionData["ID"], recs: RecordingData[]) { - return set(({ actions, dataWindow, project, projectEdited }) => { - const updatedActions = actions.map((action) => { - if (action.ID === id) { - return { - ...action, - recordings: [...recs, ...action.recordings], - }; - } - return action; - }); - return { - actions: updatedActions, - model: undefined, - ...updateProject( - project, - projectEdited, - updatedActions, - undefined, - dataWindow - ), - }; - }); - }, - - deleteAction(id: ActionData["ID"]) { - return set(({ project, projectEdited, actions, dataWindow }) => { - const newActions = actions.filter((a) => a.ID !== id); - const newDataWindow = - newActions.length === 0 ? currentDataWindow : dataWindow; - return { - actions: - newActions.length === 0 ? [createFirstAction()] : newActions, - dataWindow: newDataWindow, - model: undefined, - ...updateProject( - project, - projectEdited, - newActions, - undefined, - newDataWindow - ), - }; - }); - }, - - setActionName(id: ActionData["ID"], name: string) { - return set( - ({ project, projectEdited, actions, model, dataWindow }) => { - const newActions = actions.map((action) => - id !== action.ID ? action : { ...action, name } - ); - return { - actions: newActions, - ...updateProject( - project, - projectEdited, - newActions, - model, - dataWindow - ), - }; - } - ); - }, - - setActionIcon(id: ActionData["ID"], icon: MakeCodeIcon) { - return set( - ({ project, projectEdited, actions, model, dataWindow }) => { - // If we're changing the action to use an icon that's already in use - // then we update the action that's using the icon to use the action's current icon - const currentIcon = actions.find((a) => a.ID === id)?.icon; - const newActions = actions.map((action) => { - if (action.ID === id) { - return { ...action, icon }; - } else if ( - action.ID !== id && - action.icon === icon && - currentIcon - ) { - return { ...action, icon: currentIcon }; - } - return action; - }); - return { - actions: newActions, - ...updateProject( - project, - projectEdited, - newActions, - model, - dataWindow - ), - }; - } - ); - }, - - setRequiredConfidence(id: ActionData["ID"], value: number) { - return set( - ({ project, projectEdited, actions, model, dataWindow }) => { - const newActions = actions.map((a) => - id !== a.ID ? a : { ...a, requiredConfidence: value } - ); - return { - actions: newActions, - ...updateProject( - project, - projectEdited, - newActions, - model, - dataWindow - ), - }; - } - ); - }, - - deleteActionRecording(id: ActionData["ID"], recordingIdx: number) { - return set(({ project, projectEdited, actions, dataWindow }) => { - const newActions = actions.map((action) => { - if (id !== action.ID) { - return action; - } - const recordings = action.recordings.filter( - (_r, i) => i !== recordingIdx - ); - return { ...action, recordings }; - }); - const numRecordings = newActions.reduce( - (acc, curr) => acc + curr.recordings.length, - 0 - ); - const newDataWindow = - numRecordings === 0 ? currentDataWindow : dataWindow; - return { - actions: newActions, - dataWindow: newDataWindow, - model: undefined, - ...updateProject( - project, - projectEdited, - newActions, - undefined, - newDataWindow - ), - }; - }); - }, - - deleteAllActions() { - return set(({ project, projectEdited }) => ({ - actions: [createFirstAction()], + isEditorReady: false, + editorStartUp: "in-progress", + editorStartUpTimestamp: Date.now(), + langChanged: true, + }, + false, + "setLanguage" + ); + await storageWithErrHandling(() => + storage.updateSettings(updatedSettings) + ); + }, + + async newSession(projectName?: string) { + const untitledProject = createUntitledProject(); + const timestamp = Date.now(); + const projectEdited = false; + const newProject = projectName + ? renameProject(untitledProject, projectName) + : untitledProject; + set( + { + actions: [], dataWindow: currentDataWindow, model: undefined, - ...updateProject( - project, + project: newProject, + projectEdited, + appEditNeedsFlushToEditor: true, + timestamp, + }, + false, + "newSession" + ); + await storageWithErrHandling(() => + storage.newSession( + { + project: newProject, projectEdited, - [], - undefined, - currentDataWindow - ), - })); - }, - - downloadDataset() { - const { actions, project } = get(); - const a = document.createElement("a"); - a.setAttribute( - "href", - "data:application/json;charset=utf-8," + - encodeURIComponent(JSON.stringify(actions, null, 2)) - ); - a.setAttribute( - "download", - `${project.header?.name ?? untitledProjectName}-data-samples.json` - ); - a.style.display = "none"; - a.click(); - }, - - loadDataset(newActions: ActionData[]) { - set(({ project, projectEdited, settings }) => { - const dataWindow = getDataWindowFromActions(newActions); - return { - settings: { - ...settings, - toursCompleted: Array.from( - new Set([...settings.toursCompleted, "DataSamplesRecorded"]) - ), - }, - actions: (() => { - const copy = newActions.map((a) => ({ ...a })); - for (const a of copy) { - if (!a.icon) { - a.icon = actionIcon({ - isFirstAction: false, - existingActions: copy, - }); - } - } - return copy; - })(), - dataWindow, - model: undefined, - timestamp: Date.now(), - ...updateProject( - project, - projectEdited, - newActions, - undefined, - dataWindow - ), - }; - }); - }, - - /** - * Generally project loads go via MakeCode as it reads the hex but when we open projects - * from microbit.org we have the JSON already and use this route. - */ - loadProject(project: MakeCodeProject, name: string) { - const newActions = getActionsFromProject(project); - set(({ settings, project: prevProject }) => { - project = renameProject(project, name); - project = { - ...project, - header: { - ...project.header!, - // .org projects have a partial header with no id which causes MakeCode sadness - id: project.header?.id ?? prevProject.header!.id, - }, - }; - const timestamp = Date.now(); - return { - settings: { - ...settings, - toursCompleted: Array.from( - new Set([...settings.toursCompleted, "DataSamplesRecorded"]) - ), - }, - actions: newActions, - dataWindow: getDataWindowFromActions(newActions), - model: undefined, - project, - projectEdited: true, - appEditNeedsFlushToEditor: true, - timestamp, - // We don't update projectLoadTimestamp here as we don't want a toast notification for .org import + }, + { timestamp } + ) + ); + }, + + setEditorOpen(open: boolean) { + set( + ({ download }) => ({ + isEditorOpen: open, + download: { + ...download, + usbDevice: undefined, + }, + }), + false, + "setEditorOpen" + ); + }, + + recordingStarted() { + set({ isRecording: true }, false, "recordingStarted"); + }, + recordingStopped() { + set({ isRecording: false }, false, "recordingStopped"); + }, + + async loadProjectFromStorage(id: string) { + const persistedData = await storage.loadProject(id); + set({ + // Get data window from actions on app load. + dataWindow: getDataWindowFromActions(persistedData.actions), + ...persistedData, + }); + }, + + async addNewAction() { + const { actions, dataWindow, project, projectEdited } = get(); + const newAction: ActionData = { + icon: actionIcon({ + isFirstAction: actions.length === 0, + existingActions: actions, + }), + id: uuid(), + name: "", + recordings: [], + createdAt: Date.now(), + }; + const updatedActions = [...actions, newAction]; + const updatedProject = updateProject( + project, + projectEdited, + updatedActions, + undefined, + dataWindow + ); + set({ + actions: updatedActions, + model: undefined, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.addAction(newAction, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async addActionRecording(id: string, recording: RecordingData) { + const { actions, dataWindow, project, projectEdited } = get(); + let updatedAction: ActionData; + const updatedActions = actions.map((action) => { + if (action.id === id) { + updatedAction = { + ...action, + recordings: [recording, ...action.recordings], }; - }); - }, - - closeTrainModelDialogs() { - set({ - trainModelDialogStage: TrainModelDialogStage.Closed, - }); - }, - - async trainModelFlowStart(callback?: () => void) { - const { - settings: { showPreTrainHelp }, - actions, - trainModel, - } = get(); - if (!hasSufficientDataForTraining(actions)) { - set({ - trainModelDialogStage: TrainModelDialogStage.InsufficientData, - }); - } else if (showPreTrainHelp) { - set({ - trainModelDialogStage: TrainModelDialogStage.Help, + return updatedAction; + } + return action; + }); + const updatedProject = updateProject( + project, + projectEdited, + updatedActions, + undefined, + dataWindow + ); + set({ + actions: updatedActions, + model: undefined, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.addRecording(recording, updatedAction, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async deleteAction(action: ActionData) { + const { actions, dataWindow, project, projectEdited } = get(); + const newActions = actions.filter((a) => a.id !== action.id); + const newDataWindow = + newActions.length === 0 ? currentDataWindow : dataWindow; + const updatedProject = updateProject( + project, + projectEdited, + newActions, + undefined, + newDataWindow + ); + set({ + actions: + newActions.length === 0 ? [createFirstAction()] : newActions, + dataWindow: newDataWindow, + model: undefined, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.deleteAction(action, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async setActionName(id: string, name: string) { + const { actions, dataWindow, project, projectEdited, model } = get(); + let updatedAction: ActionData; + const newActions = actions.map((action) => { + if (id === action.id) { + updatedAction = { ...action, name }; + return updatedAction; + } + return action; + }); + const updatedProject = updateProject( + project, + projectEdited, + newActions, + model, + dataWindow + ); + set({ + actions: newActions, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.updateAction(updatedAction, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async setActionIcon(id: string, icon: MakeCodeIcon) { + const { actions, dataWindow, project, projectEdited, model } = get(); + const updatedActions: ActionData[] = []; + // If we're changing the action to use an icon that's already in use + // then we update the action that's using the icon to use the action's current icon + const currentIcon = actions.find((a) => a.id === id)?.icon; + const newActions = actions.map((action) => { + if (action.id === id) { + const updatedAction = { ...action, icon }; + updatedActions.push(updatedAction); + return updatedAction; + } else if ( + action.id !== id && + action.icon === icon && + currentIcon + ) { + const updatedAction = { ...action, icon: currentIcon }; + updatedActions.push(updatedAction); + return updatedAction; + } + return action; + }); + const updatedProject = updateProject( + project, + projectEdited, + newActions, + model, + dataWindow + ); + set({ + actions: newActions, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.updateActions(updatedActions, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async setRequiredConfidence(id: string, value: number) { + const { actions, dataWindow, project, projectEdited, model } = get(); + let updatedAction: ActionData; + const newActions = actions.map((action) => { + if (id === action.id) { + updatedAction = { ...action, requiredConfidence: value }; + return updatedAction; + } + return action; + }); + const updatedProject = updateProject( + project, + projectEdited, + newActions, + model, + dataWindow + ); + set({ + actions: newActions, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.updateAction(updatedAction, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async deleteActionRecording(id: string, recordingId: string) { + const { actions, dataWindow, project, projectEdited } = get(); + let updatedAction: ActionData; + const updatedActions = actions.map((action) => { + if (id !== action.id) { + return action; + } + const recordings = action.recordings.filter( + (recording) => recording.id !== recordingId + ); + updatedAction = { ...action, recordings }; + return updatedAction; + }); + const numRecordings = updatedActions.reduce( + (acc, curr) => acc + curr.recordings.length, + 0 + ); + const newDataWindow = + numRecordings === 0 ? currentDataWindow : dataWindow; + const updatedProject = updateProject( + project, + projectEdited, + updatedActions, + undefined, + newDataWindow + ); + set({ + actions: updatedActions, + dataWindow: newDataWindow, + model: undefined, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.deleteRecording(recordingId.toString(), updatedAction, { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + async deleteAllActions() { + const { project, projectEdited } = get(); + const updatedProject = updateProject( + project, + projectEdited, + [], + undefined, + currentDataWindow + ); + set({ + actions: [createFirstAction()], + dataWindow: currentDataWindow, + model: undefined, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.deleteAllActions({ + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + }, + + downloadDataset() { + const { actions, project } = get(); + const a = document.createElement("a"); + a.setAttribute( + "href", + "data:application/json;charset=utf-8," + + encodeURIComponent(JSON.stringify(actions, null, 2)) + ); + a.setAttribute( + "download", + `${project.header?.name ?? untitledProjectName}-data-samples.json` + ); + a.style.display = "none"; + a.click(); + }, + + async loadDataset(newActions: ActionData[]) { + const { settings, project, projectEdited } = get(); + const updatedSettings: Settings = { + ...settings, + toursCompleted: Array.from( + new Set([...settings.toursCompleted, "DataSamplesRecorded"]) + ), + }; + const newActionsWithIcons = migrateLegacyActionData(newActions); + // Older datasets did not have icons. Add icons to actions where these are missing. + newActionsWithIcons.forEach((a) => { + if (!a.icon) { + a.icon = actionIcon({ + isFirstAction: false, + existingActions: newActionsWithIcons, }); - } else { - await trainModel(); - callback?.(); } - }, - - async trainModel() { - const { actions, dataWindow } = get(); - logging.event({ - type: "model-train", - detail: { - actions: actions.length, - samples: getTotalNumSamples(actions), + }); + const timestamp = Date.now(); + const dataWindow = getDataWindowFromActions(newActionsWithIcons); + const updatedProject = updateProject( + project, + projectEdited, + newActionsWithIcons, + undefined, + dataWindow + ); + set({ + settings: updatedSettings, + actions: newActionsWithIcons, + dataWindow, + model: undefined, + timestamp, + ...updatedProject, + }); + await storageWithErrHandling(() => + storage.importProject( + newActionsWithIcons, + { + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, }, + { + timestamp, + }, + updatedSettings + ) + ); + }, + + /** + * Generally project loads go via MakeCode as it reads the hex but when we open projects + * from microbit.org we have the JSON already and use this route. + */ + async loadProject(project: MakeCodeProject, name: string) { + const { settings } = get(); + const updatedSettings: Settings = { + ...settings, + toursCompleted: Array.from( + new Set([...settings.toursCompleted, "DataSamplesRecorded"]) + ), + }; + const newActions = getActionsFromProject(project); + const timestamp = Date.now(); + const projectEdited = true; + set(({ project: prevProject }) => { + project = renameProject(project, name); + project = { + ...project, + header: { + ...project.header!, + // .org projects have a partial header with no id which causes MakeCode sadness + id: project.header?.id ?? prevProject.header!.id, + }, + }; + return { + settings: updatedSettings, + actions: newActions, + dataWindow: getDataWindowFromActions(newActions), + model: undefined, + project, + projectEdited, + appEditNeedsFlushToEditor: true, + timestamp, + // We don't update projectLoadTimestamp here as we don't want a toast notification for .org import + }; + }); + await storageWithErrHandling(() => + storage.importProject( + newActions, + { project, projectEdited }, + { timestamp }, + updatedSettings + ) + ); + }, + + closeTrainModelDialogs() { + set({ + trainModelDialogStage: TrainModelDialogStage.Closed, + }); + }, + + async trainModelFlowStart(callback?: () => void) { + const { + settings: { showPreTrainHelp }, + actions, + trainModel, + } = get(); + if (!hasSufficientDataForTraining(actions)) { + set({ + trainModelDialogStage: TrainModelDialogStage.InsufficientData, }); - const actionName = "trainModel"; + } else if (showPreTrainHelp) { set({ - trainModelDialogStage: TrainModelDialogStage.TrainingInProgress, - trainModelProgress: 0, + trainModelDialogStage: TrainModelDialogStage.Help, }); - // Delay so we get UI change before training starts. The initial part of training - // can block the UI. 50 ms is not sufficient, so use 100 for now. - await new Promise((res) => setTimeout(res, 100)); - const trainingResult = await trainModel( - actions, - dataWindow, - (trainModelProgress) => - set({ trainModelProgress }, false, "trainModelProgress") - ); - const model = trainingResult.error - ? undefined - : trainingResult.model; - set( - ({ project, projectEdited }) => ({ - model, - trainModelDialogStage: model - ? TrainModelDialogStage.Closed - : TrainModelDialogStage.TrainingError, - ...updateProject( - project, - projectEdited, - actions, - model, - dataWindow - ), - }), - false, - actionName - ); - return !trainingResult.error; - }, - - resetProject(): void { - const { - project: previousProject, - actions, + } else { + await trainModel(); + callback?.(); + } + }, + + async trainModel() { + const { actions, dataWindow, project, projectEdited } = get(); + logging.event({ + type: "model-train", + detail: { + actions: actions.length, + samples: getTotalNumSamples(actions), + }, + }); + const actionName = "trainModel"; + set({ + trainModelDialogStage: TrainModelDialogStage.TrainingInProgress, + trainModelProgress: 0, + }); + // Delay so we get UI change before training starts. The initial part of training + // can block the UI. 50 ms is not sufficient, so use 100 for now. + await new Promise((res) => setTimeout(res, 100)); + const trainingResult = await trainModel( + actions, + dataWindow, + (trainModelProgress) => + set({ trainModelProgress }, false, "trainModelProgress") + ); + const model = trainingResult.error ? undefined : trainingResult.model; + const updatedProject = updateProject( + project, + projectEdited, + actions, + model, + dataWindow + ); + set( + { model, - dataWindow, - } = get(); - const newProject = { - ...previousProject, - text: { - ...previousProject.text, - ...generateProject( - previousProject.header?.name ?? untitledProjectName, - { data: actions }, - model, - dataWindow - ).text, - }, - }; - set( - { - project: newProject, - projectEdited: false, - appEditNeedsFlushToEditor: true, - }, - false, - "resetProject" - ); - }, - - setProjectName(name: string): void { - return set( - ({ project }) => { - return { - appEditNeedsFlushToEditor: true, - project: renameProject(project, name), - }; - }, - false, - "setProjectName" - ); - }, - - checkIfProjectNeedsFlush() { - return get().appEditNeedsFlushToEditor; - }, - - checkIfLangChanged() { - return get().langChanged; - }, - - getCurrentProject() { - return get().project; - }, - - editorReady() { - set( - { isEditorReady: true, editorStartUp: "done" }, - false, - "editorReady" - ); - }, - - editorTimedOut() { - set({ editorStartUp: "timed out" }, false, "editorTimedOut"); - }, - - getEditorStartUp() { - return get().editorStartUp; - }, - - setIsEditorTimedOutDialogOpen(isOpen: boolean) { - set( - { isEditorTimedOutDialogOpen: isOpen }, - false, - "setIsEditorTimedOutDialogOpen" - ); - }, - - editorChange(newProject: MakeCodeProject) { - // Notes on past issues with the MakeCode integration: - // - // We update MakeCode only as needed. However, it loads in the - // background because we need it to be ready. This means it will - // have the initial project from the state open. So we must be sure - // to update MakeCode before "Edit in MakeCode" and "Save" actions. - // - // MakeCode has a visibility listener that will cause it to re-run - // its initialization when its tab becomes hidden/visible. We aim to - // ignore this when MakeCode is closed. When MakeCode is open we'll - // have up-to-date state to reinit MakeCode with. In the past this - // has caused us to update app state with old data from MakeCode. - // - // It's too slow/async from a UI perspective to rely on only - // understanding project contents via editorChange as they're - // delayed by MakeCode load and then the async nature of loading a - // project. - // - // We have no choice but to write to MakeCode and wait for the - // project data in editorChange when loading a hex file. - - const actionName = "editorChange"; - set( - (state) => { - const { - project: prevProject, - isEditorOpen, - isEditorImportingState, - isEditorLoadingFile, - settings, - } = state; - const newProjectHeader = newProject.header!.id; - const previousProjectHeader = prevProject.header!.id; - if ( - (isEditorLoadingFile || - isEditorOpen || - isEditorImportingState) && - newProjectHeader !== previousProjectHeader - ) { - if (isEditorImportingState) { - // It's a change but we originated it so state is in sync. - logging.log( - `[MakeCode] Ignored header change due to us syncing state. ID change: ${prevProject.header?.id} -> ${newProject.header?.id}` - ); - return { - isEditorImportingState: false, - // Still need to update this for the new header id. - project: newProject, - }; - } else { - // It's a change that originated in MakeCode, e.g. a hex load, so update our state. - logging.log( - `[MakeCode] Updating state from MakeCode header change. ID change: ${prevProject.header?.id} -> ${newProject.header?.id}` - ); - const timestamp = Date.now(); - const newActions = getActionsFromProject(newProject); - return { - settings: { - ...settings, - toursCompleted: Array.from( - new Set([ - ...settings.toursCompleted, - "DataSamplesRecorded", - ]) - ), - }, - project: newProject, - projectLoadTimestamp: timestamp, - timestamp, - // New project loaded externally so we can't know whether its edited. - projectEdited: true, - actions: newActions, - dataWindow: getDataWindowFromActions(newActions), - model: undefined, - isEditorOpen: false, - isEditorLoadingFile: false, - }; - } - } else if (isEditorOpen) { + trainModelDialogStage: model + ? TrainModelDialogStage.Closed + : TrainModelDialogStage.TrainingError, + ...updatedProject, + }, + false, + actionName + ); + await storageWithErrHandling(() => + storage.updateMakeCodeProject({ + project: updatedProject.project, + projectEdited: updatedProject.projectEdited, + }) + ); + return !trainingResult.error; + }, + + removeModel(): void { + set({ + model: undefined, + }); + }, + + async resetProject(): Promise { + const { + project: previousProject, + actions, + model, + dataWindow, + } = get(); + const newProject = { + ...previousProject, + text: { + ...previousProject.text, + ...generateProject( + previousProject.header?.name ?? untitledProjectName, + { data: actions }, + model, + dataWindow + ).text, + }, + }; + set( + { + project: newProject, + projectEdited: false, + appEditNeedsFlushToEditor: true, + }, + false, + "resetProject" + ); + await storageWithErrHandling(() => + storage.updateMakeCodeProject({ + project: newProject, + projectEdited: false, + }) + ); + }, + + async setProjectName(name: string): Promise { + const { project, projectEdited } = get(); + const updatedProject = renameProject(project, name); + set( + { + appEditNeedsFlushToEditor: true, + project: updatedProject, + }, + false, + "setProjectName" + ); + await storageWithErrHandling(() => + storage.updateMakeCodeProject({ + project: updatedProject, + projectEdited, + }) + ); + }, + + checkIfProjectNeedsFlush() { + return get().appEditNeedsFlushToEditor; + }, + + checkIfLangChanged() { + return get().langChanged; + }, + + getCurrentProject() { + return get().project; + }, + + editorReady() { + set( + { isEditorReady: true, editorStartUp: "done" }, + false, + "editorReady" + ); + }, + + editorTimedOut() { + set({ editorStartUp: "timed out" }, false, "editorTimedOut"); + }, + + getEditorStartUp() { + return get().editorStartUp; + }, + + setIsEditorTimedOutDialogOpen(isOpen: boolean) { + set( + { isEditorTimedOutDialogOpen: isOpen }, + false, + "setIsEditorTimedOutDialogOpen" + ); + }, + + async editorChange(newProject: MakeCodeProject) { + // Notes on past issues with the MakeCode integration: + // + // We update MakeCode only as needed. However, it loads in the + // background because we need it to be ready. This means it will + // have the initial project from the state open. So we must be sure + // to update MakeCode before "Edit in MakeCode" and "Save" actions. + // + // MakeCode has a visibility listener that will cause it to re-run + // its initialization when its tab becomes hidden/visible. We aim to + // ignore this when MakeCode is closed. When MakeCode is open we'll + // have up-to-date state to reinit MakeCode with. In the past this + // has caused us to update app state with old data from MakeCode. + // + // It's too slow/async from a UI perspective to rely on only + // understanding project contents via editorChange as they're + // delayed by MakeCode load and then the async nature of loading a + // project. + // + // We have no choice but to write to MakeCode and wait for the + // project data in editorChange when loading a hex file. + + const actionName = "editorChange"; + const { settings, timestamp, projectEdited } = get(); + const updatedSettings: Settings = { + ...settings, + toursCompleted: Array.from( + new Set([...settings.toursCompleted, "DataSamplesRecorded"]) + ), + }; + let updatedTimestamp = timestamp; + let updatedProjectEdited = projectEdited; + let newActions: ActionData[] | undefined; + let importProject = false; + let updateMakeCodeProject = false; + set( + (state) => { + const { + project: prevProject, + isEditorOpen, + isEditorImportingState, + isEditorLoadingFile, + } = state; + const newProjectHeader = newProject.header!.id; + const previousProjectHeader = prevProject.header!.id; + if ( + (isEditorLoadingFile || + isEditorOpen || + isEditorImportingState) && + newProjectHeader !== previousProjectHeader + ) { + if (isEditorImportingState) { + // It's a change but we originated it so state is in sync. logging.log( - `[MakeCode] Edit copied to project. ID ${newProject.header?.id}` + `[MakeCode] Ignored header change due to us syncing state. ID change: ${prevProject.header?.id} -> ${newProject.header?.id}` ); + updateMakeCodeProject = true; return { + isEditorImportingState: false, + // Still need to update this for the new header id. project: newProject, - // We just assume its been edited as spurious changes from MakeCode happen that we can't identify - projectEdited: true, }; } else { - // This lets us skip more pointless init-time edits. + // It's a change that originated in MakeCode, e.g. a hex load, so update our state. logging.log( - `[MakeCode] Edit ignored when closed. ID ${newProject.header?.id}` + `[MakeCode] Updating state from MakeCode header change. ID change: ${prevProject.header?.id} -> ${newProject.header?.id}` ); + newActions = getActionsFromProject(newProject); + updatedTimestamp = Date.now(); + updatedProjectEdited = true; + importProject = true; + return { + settings: updatedSettings, + project: newProject, + projectLoadTimestamp: updatedTimestamp, + timestamp: updatedTimestamp, + // New project loaded externally so we can't know whether its edited. + projectEdited: updatedProjectEdited, + actions: newActions, + dataWindow: getDataWindowFromActions(newActions), + model: undefined, + isEditorOpen: false, + isEditorLoadingFile: false, + }; } - return state; - }, - false, - actionName - ); - }, - setDownload(download: DownloadState) { - set( - { download, downloadFlashingProgress: 0 }, - false, - "setDownload" - ); - }, - setDownloadFlashingProgress(value) { - set({ downloadFlashingProgress: value }); - }, - setSave(save: SaveState) { - set({ save }, false, "setSave"); - }, - setEditorLoadingFile() { - set({ isEditorLoadingFile: true }, false, "setEditorLoadingFile"); - }, - setEditorImportingState() { - set( - { isEditorImportingState: true }, - false, - "setEditorImportingState" - ); - }, - langChangeFlushedToEditor() { - set( - { - langChanged: false, - }, - false, - "langChangeFlushedToEditor" - ); - }, - projectFlushedToEditor() { - set( - { - appEditNeedsFlushToEditor: false, - }, - false, - "projectFlushedToEditor" - ); - }, - setPostConnectTourTrigger(trigger: TourTrigger | undefined) { - set( - { postConnectTourTrigger: trigger }, - false, - "setPostConnectTourId" - ); - }, - dataCollectionMicrobitConnectionStart(options) { - set( - { postConnectTourTrigger: options?.postConnectTourTrigger }, - false, - "dataCollectionMicrobitConnectionStart" - ); - }, - dataCollectionMicrobitConnected() { - set( - ({ actions, tourState, postConnectTourTrigger }) => { + } else if (isEditorOpen) { + logging.log( + `[MakeCode] Edit copied to project. ID ${newProject.header?.id}` + ); + updatedProjectEdited = true; + updateMakeCodeProject = true; return { - actions: - actions.length === 0 ? [createFirstAction()] : actions, - - // If a tour has been explicitly requested, do that. - // Other tours are triggered by callbacks or effects on the relevant page so they run only on the correct screen. - tourState: postConnectTourTrigger - ? { - index: 0, - ...getTourSpec(postConnectTourTrigger, actions), - } - : tourState, - postConnectTourTrigger: undefined, - }; - }, - false, - "dataCollectionMicrobitConnected" - ); - }, - - tourStart(trigger: TourTrigger, manual: boolean = false) { - set((state) => { - if ( - manual || - (!state.tourState && - !state.settings.toursCompleted.includes(trigger.name)) - ) { - const tourSpec = getTourSpec(trigger, state.actions); - const result = { - tourState: { - ...tourSpec, - index: 0, - }, - // If manually triggered, filter out subsequent tours as they should run again too when reached - settings: manual - ? { - ...state.settings, - toursCompleted: state.settings.toursCompleted.filter( - (t) => - tourSequence.indexOf(t) <= - tourSequence.indexOf(trigger.name) - ), - } - : state.settings, + project: newProject, + // We just assume its been edited as spurious changes from MakeCode happen that we can't identify + projectEdited: updatedProjectEdited, }; - return result; + } else { + // This lets us skip more pointless init-time edits. + logging.log( + `[MakeCode] Edit ignored when closed. ID ${newProject.header?.id}` + ); } return state; - }); - }, - tourNext() { - set(({ tourState }) => { - if (!tourState) { - throw new Error("No tour"); - } - return { - tourState: { ...tourState, index: tourState.index + 1 }, - }; - }); - }, - tourBack() { - set(({ tourState }) => { - if (!tourState) { - throw new Error("No tour"); - } + }, + false, + actionName + ); + if (importProject) { + await storageWithErrHandling(() => + storage.importProject( + newActions as ActionData[], + { + project: newProject, + projectEdited: updatedProjectEdited, + }, + { timestamp: updatedTimestamp }, + updatedSettings + ) + ); + } else if (updateMakeCodeProject) { + await storageWithErrHandling(() => + storage.updateMakeCodeProject({ + project: newProject, + projectEdited: updatedProjectEdited, + }) + ); + } + }, + setDownload(download: DownloadState) { + set({ download, downloadFlashingProgress: 0 }, false, "setDownload"); + }, + setDownloadFlashingProgress(value) { + set({ downloadFlashingProgress: value }); + }, + setSave(save: SaveState) { + set({ save }, false, "setSave"); + }, + setEditorLoadingFile() { + set({ isEditorLoadingFile: true }, false, "setEditorLoadingFile"); + }, + setEditorImportingState() { + set( + { isEditorImportingState: true }, + false, + "setEditorImportingState" + ); + }, + langChangeFlushedToEditor() { + set( + { + langChanged: false, + }, + false, + "langChangeFlushedToEditor" + ); + }, + projectFlushedToEditor() { + set( + { + appEditNeedsFlushToEditor: false, + }, + false, + "projectFlushedToEditor" + ); + }, + setPostConnectTourTrigger(trigger: TourTrigger | undefined) { + set( + { postConnectTourTrigger: trigger }, + false, + "setPostConnectTourId" + ); + }, + dataCollectionMicrobitConnectionStart(options) { + set( + { postConnectTourTrigger: options?.postConnectTourTrigger }, + false, + "dataCollectionMicrobitConnectionStart" + ); + }, + dataCollectionMicrobitConnected() { + set( + ({ actions, tourState, postConnectTourTrigger }) => { return { - tourState: { ...tourState, index: tourState.index - 1 }, - }; - }); - }, - tourComplete(triggers: TourTriggerName[]) { - set(({ settings }) => ({ - tourState: undefined, - settings: { - ...settings, - toursCompleted: Array.from( - new Set([...settings.toursCompleted, ...triggers]) - ), - }, - })); - }, - - setDataSamplesView(view: DataSamplesView) { - set(({ settings }) => ({ - settings: { - ...settings, - dataSamplesView: view, - }, - })); - }, - setShowGraphs(show: boolean) { - set(({ settings }) => ({ - settings: { - ...settings, - showGraphs: show, - }, - })); - }, - - setPostImportDialogState(state: PostImportDialogState) { - set({ postImportDialogState: state }); - }, - - startPredicting(buffer: BufferedData) { - const { actions, model, predictionInterval, dataWindow } = get(); - if (!model || predictionInterval) { - return; - } - const newPredictionInterval = setInterval(() => { - const startTime = Date.now() - dataWindow.duration; - const input = { - model, - data: buffer.getSamples(startTime), - classificationIds: actions.map((a) => a.ID), + actions: actions.length === 0 ? [createFirstAction()] : actions, + + // If a tour has been explicitly requested, do that. + // Other tours are triggered by callbacks or effects on the relevant page so they run only on the correct screen. + tourState: postConnectTourTrigger + ? { + index: 0, + ...getTourSpec(postConnectTourTrigger, actions), + } + : tourState, + postConnectTourTrigger: undefined, }; - if (input.data.x.length > dataWindow.minSamples) { - const result = predict(input, dataWindow); - if (result.error) { - logging.error(result.detail); - } else { - const { confidences } = result; - const detected = getDetectedAction( - // Get latest actions from store so that changes to - // recognition point are realised. - get().actions, - result.confidences - ); - set({ - predictionResult: { - detected, - confidences, - }, - }); + }, + false, + "dataCollectionMicrobitConnected" + ); + }, + + async tourStart(trigger: TourTrigger, manual: boolean = false) { + const { actions, settings, tourState } = get(); + if ( + manual || + (!tourState && !settings.toursCompleted.includes(trigger.name)) + ) { + const tourSpec = getTourSpec(trigger, actions); + // If manually triggered, filter out subsequent tours as they should run again too when reached + const updatedSettings = manual + ? { + ...settings, + toursCompleted: settings.toursCompleted.filter( + (t) => + tourSequence.indexOf(t) <= + tourSequence.indexOf(trigger.name) + ), } - } - }, 1000 / mlSettings.updatesPrSecond); - set({ predictionInterval: newPredictionInterval }); - }, - - getPrediction() { - return get().predictionResult; - }, - - stopPredicting() { - const { predictionInterval } = get(); - if (predictionInterval) { - clearInterval(predictionInterval); - set({ predictionInterval: undefined }); - } - }, - - languageDialogOnOpen() { - set({ isLanguageDialogOpen: true }); - }, - settingsDialogOnOpen() { - set({ isSettingsDialogOpen: true }); - }, - connectFirstDialogOnOpen() { - set({ isConnectFirstDialogOpen: true }); - }, - aboutDialogOnOpen() { - set({ isAboutDialogOpen: true }); - }, - feedbackFormOnOpen() { - set({ isFeedbackFormOpen: true }); - }, - deleteAllActionsDialogOnOpen() { - set({ isDeleteAllActionsDialogOpen: true }); - }, - nameProjectDialogOnOpen() { - set({ isNameProjectDialogOpen: true }); - }, - recordingDialogOnOpen() { - set({ isRecordingDialogOpen: true }); - }, - connectToRecordDialogOnOpen() { - set({ isConnectToRecordDialogOpen: true }); - }, - deleteActionDialogOnOpen() { - set({ isDeleteActionDialogOpen: true }); - }, - incompatibleEditorDeviceDialogOnOpen() { - set({ isIncompatibleEditorDeviceDialogOpen: true }); - }, - closeDialog() { - set({ - isLanguageDialogOpen: false, - isSettingsDialogOpen: false, - isConnectFirstDialogOpen: false, - isAboutDialogOpen: false, - isFeedbackFormOpen: false, - isDeleteAllActionsDialogOpen: false, - isNameProjectDialogOpen: false, - isRecordingDialogOpen: false, - isConnectToRecordDialogOpen: false, - isDeleteActionDialogOpen: false, - isIncompatibleEditorDeviceDialogOpen: false, - }); - }, - - isNonConnectionDialogOpen() { - const { - isAboutDialogOpen, - isSettingsDialogOpen, - isConnectFirstDialogOpen, - isLanguageDialogOpen, - isFeedbackFormOpen, - postImportDialogState, - isEditorOpen, - tourState, - trainModelDialogStage, - isEditorTimedOutDialogOpen, - isDeleteAllActionsDialogOpen, - isRecordingDialogOpen, - isConnectToRecordDialogOpen, - isDeleteActionDialogOpen, - isIncompatibleEditorDeviceDialogOpen, - save, - } = get(); - return ( - isAboutDialogOpen || - isSettingsDialogOpen || - isConnectFirstDialogOpen || - isLanguageDialogOpen || - isFeedbackFormOpen || - isDeleteAllActionsDialogOpen || - isRecordingDialogOpen || - isConnectToRecordDialogOpen || - isDeleteActionDialogOpen || - isIncompatibleEditorDeviceDialogOpen || - postImportDialogState !== PostImportDialogState.None || - isEditorOpen || - tourState !== undefined || - trainModelDialogStage !== TrainModelDialogStage.Closed || - isEditorTimedOutDialogOpen || - save.step !== SaveStep.None + : settings; + const updatedState = { + tourState: { + ...tourSpec, + index: 0, + }, + settings: updatedSettings, + }; + set(updatedState); + await storageWithErrHandling(() => + storage.updateSettings(updatedSettings) ); - }, - }), - - { - version: 1, - name: "ml", - partialize: ({ - actions, - project, - projectEdited, - settings, - timestamp, - }) => ({ - actions, - project, - projectEdited, - settings, - timestamp, - // The model itself is in IndexDB - }), - migrate(persistedStateUnknown, version) { - switch (version) { - case 0: { - // We need to rename the "gestures" field to "actions" - interface StateV0 extends Omit { - gestures?: ActionData[]; - } - const stateV0 = persistedStateUnknown as StateV0; - const { gestures, ...rest } = stateV0; - return { actions: gestures, ...rest } as State; - } - default: - return persistedStateUnknown; + } + }, + tourNext() { + set(({ tourState }) => { + if (!tourState) { + throw new Error("No tour"); } - }, - merge(persistedStateUnknown, currentState) { - // The zustand default merge does no validation either. - const persistedState = persistedStateUnknown as State; return { - ...currentState, - ...persistedState, - settings: { - // Make sure we have any new settings defaulted - ...defaultSettings, - ...currentState.settings, - ...persistedState.settings, - }, + tourState: { ...tourState, index: tourState.index + 1 }, + }; + }); + }, + tourBack() { + set(({ tourState }) => { + if (!tourState) { + throw new Error("No tour"); + } + return { + tourState: { ...tourState, index: tourState.index - 1 }, }; - }, - } - ), + }); + }, + async tourComplete(triggers: TourTriggerName[]) { + const { settings } = get(); + const updatedSettings = { + ...settings, + toursCompleted: Array.from( + new Set([...settings.toursCompleted, ...triggers]) + ), + }; + set({ + tourState: undefined, + settings: updatedSettings, + }); + await storageWithErrHandling(() => + storage.updateSettings(updatedSettings) + ); + }, + + async setDataSamplesView(view: DataSamplesView) { + const { settings } = get(); + const updatedSettings = { + ...settings, + dataSamplesView: view, + }; + set({ + settings: updatedSettings, + }); + await storageWithErrHandling(() => + storage.updateSettings(updatedSettings) + ); + }, + async setShowGraphs(show: boolean) { + const { settings } = get(); + const updatedSettings = { + ...settings, + showGraphs: show, + }; + set({ + settings: updatedSettings, + }); + await storageWithErrHandling(() => + storage.updateSettings(updatedSettings) + ); + }, + + setPostImportDialogState(state: PostImportDialogState) { + set({ postImportDialogState: state }); + }, + + startPredicting(buffer: BufferedData) { + const { actions, model, predictionInterval, dataWindow } = get(); + if (!model || predictionInterval) { + return; + } + const newPredictionInterval = setInterval(() => { + const startTime = Date.now() - dataWindow.duration; + const input = { + model, + data: buffer.getSamples(startTime), + classificationIds: actions.map((a) => a.id), + }; + if (input.data.x.length > dataWindow.minSamples) { + const result = predict(input, dataWindow); + if (result.error) { + logging.error(result.detail); + } else { + const { confidences } = result; + const detected = getDetectedAction( + // Get latest actions from store so that changes to + // recognition point are realised. + get().actions, + result.confidences + ); + set({ + predictionResult: { + detected, + confidences, + }, + }); + } + } + }, 1000 / mlSettings.updatesPrSecond); + set({ predictionInterval: newPredictionInterval }); + }, + + getPrediction() { + return get().predictionResult; + }, + + stopPredicting() { + const { predictionInterval } = get(); + if (predictionInterval) { + clearInterval(predictionInterval); + set({ predictionInterval: undefined }); + } + }, + + languageDialogOnOpen() { + set({ isLanguageDialogOpen: true }); + }, + settingsDialogOnOpen() { + set({ isSettingsDialogOpen: true }); + }, + connectFirstDialogOnOpen() { + set({ isConnectFirstDialogOpen: true }); + }, + aboutDialogOnOpen() { + set({ isAboutDialogOpen: true }); + }, + feedbackFormOnOpen() { + set({ isFeedbackFormOpen: true }); + }, + deleteAllActionsDialogOnOpen() { + set({ isDeleteAllActionsDialogOpen: true }); + }, + nameProjectDialogOnOpen() { + set({ isNameProjectDialogOpen: true }); + }, + recordingDialogOnOpen() { + set({ isRecordingDialogOpen: true }); + }, + connectToRecordDialogOnOpen() { + set({ isConnectToRecordDialogOpen: true }); + }, + deleteActionDialogOnOpen() { + set({ isDeleteActionDialogOpen: true }); + }, + incompatibleEditorDeviceDialogOnOpen() { + set({ isIncompatibleEditorDeviceDialogOpen: true }); + }, + closeDialog() { + set({ + isLanguageDialogOpen: false, + isSettingsDialogOpen: false, + isConnectFirstDialogOpen: false, + isAboutDialogOpen: false, + isFeedbackFormOpen: false, + isDeleteAllActionsDialogOpen: false, + isNameProjectDialogOpen: false, + isRecordingDialogOpen: false, + isConnectToRecordDialogOpen: false, + isDeleteActionDialogOpen: false, + isIncompatibleEditorDeviceDialogOpen: false, + }); + }, + + isNonConnectionDialogOpen() { + const { + isAboutDialogOpen, + isSettingsDialogOpen, + isConnectFirstDialogOpen, + isLanguageDialogOpen, + isFeedbackFormOpen, + postImportDialogState, + isEditorOpen, + tourState, + trainModelDialogStage, + isEditorTimedOutDialogOpen, + isDeleteAllActionsDialogOpen, + isRecordingDialogOpen, + isConnectToRecordDialogOpen, + isDeleteActionDialogOpen, + isIncompatibleEditorDeviceDialogOpen, + save, + } = get(); + return ( + isAboutDialogOpen || + isSettingsDialogOpen || + isConnectFirstDialogOpen || + isLanguageDialogOpen || + isFeedbackFormOpen || + isDeleteAllActionsDialogOpen || + isRecordingDialogOpen || + isConnectToRecordDialogOpen || + isDeleteActionDialogOpen || + isIncompatibleEditorDeviceDialogOpen || + postImportDialogState !== PostImportDialogState.None || + isEditorOpen || + tourState !== undefined || + trainModelDialogStage !== TrainModelDialogStage.Closed || + isEditorTimedOutDialogOpen || + save.step !== SaveStep.None + ); + }, + }), { enabled: flags.devtools } ) ); @@ -1335,36 +1426,34 @@ const getDataWindowFromActions = (actions: ActionData[]): DataWindow => { : currentDataWindow; }; -// Get data window from actions on app load. -const { actions } = useStore.getState(); -useStore.setState( - { dataWindow: getDataWindowFromActions(actions) }, - false, - "setDataWindow" -); - -tf.loadLayersModel(modelUrl) - .then((model) => { +const loadModelFromStorage = async () => { + try { + const model = await tf.loadLayersModel(modelUrl); if (model) { useStore.setState({ model }, false, "loadModel"); } - }) - .catch(() => { + } catch (err) { // This happens if there's no model. - }); + } +}; -useStore.subscribe((state, prevState) => { +useStore.subscribe(async (state, prevState) => { const { model: newModel } = state; const { model: previousModel } = prevState; if (newModel !== previousModel) { if (!newModel) { - tf.io.removeModel(modelUrl).catch(() => { - // No IndexedDB/no model. - }); + try { + await tf.io.removeModel(modelUrl); + broadcastChannel.postMessage(BroadcastChannelMessages.REMOVE_MODEL); + } catch (err) { + // IndexedDB not available? + } } else { - newModel.save(modelUrl).catch(() => { + try { + await newModel.save(modelUrl); + } catch (err) { // IndexedDB not available? - }); + } } } }); @@ -1440,7 +1529,9 @@ const getActionsFromProject = (project: MakeCodeProject): ActionData[] => { if (typeof dataset !== "object" || !("data" in dataset)) { return []; } - return dataset.data as ActionData[]; + return migrateLegacyActionData( + dataset.data as OldActionData[] | ActionData[] + ); }; const renameProject = ( @@ -1465,3 +1556,42 @@ const renameProject = ( }, }; }; + +const storageWithErrHandling = async (callback: () => Promise) => { + try { + await callback(); + broadcastChannel.postMessage(BroadcastChannelMessages.RELOAD_PROJECT); + } catch (err) { + if (err instanceof DOMException && err.name === "QuotaExceededError") { + console.error("Storage quota exceeded!", err); + } else if (err instanceof StorageError) { + // We have failed to load an expected value from storage. + console.error(err); + } else { + console.error(err); + } + // We can in theory set error state here with useStore.setState. + } +}; + +export const loadProjectFromStorage = async () => { + // When multiple projects are supported, the latest project should only be + // fetched when not on the homepage / projects page. + const lastestProjectId = await storage.getLatestProjectId(); + await useStore.getState().loadProjectFromStorage(lastestProjectId); + await loadModelFromStorage(); + return true; +}; + +broadcastChannel.onmessage = async (event) => { + switch (event.data) { + case BroadcastChannelMessages.RELOAD_PROJECT: { + await loadProjectFromStorage(); + break; + } + case BroadcastChannelMessages.REMOVE_MODEL: { + useStore.getState().removeModel(); + break; + } + } +}; diff --git a/src/test-fixtures/activity-timer-data-log-data-samples.json b/src/test-fixtures/activity-timer-data-log-data-samples.json index f44a63ae5..b9ea1665c 100644 --- a/src/test-fixtures/activity-timer-data-log-data-samples.json +++ b/src/test-fixtures/activity-timer-data-log-data-samples.json @@ -1,11 +1,13 @@ [ { "icon": "Rollerskate", - "ID": 1729612325284, + "id": "1729612325284", + "createdAt": 1729612325284, "name": "Walking", "recordings": [ { - "ID": 1729673727812, + "id": "1729673727812", + "createdAt": 1729673727812, "data": { "x": [ -1.672, -1.668, -2.024, -2.04, -1.832, -1.136, -0.712, 0.052, @@ -34,7 +36,8 @@ } }, { - "ID": 1729673721119, + "id": "1729673721119", + "createdAt": 1729673721119, "data": { "x": [ -1.136, -1.12, -1.028, -1.036, -0.984, -1.044, -1.076, -1.04, @@ -63,7 +66,8 @@ } }, { - "ID": 1729673711705, + "id": "1729673711705", + "createdAt": 1729673711705, "data": { "x": [ -1.184, -1.248, -1.26, -1.384, -1.58, -1.568, -1.84, -2.04, -2.04, @@ -92,7 +96,8 @@ } }, { - "ID": 1729673451114, + "id": "1729673451114", + "createdAt": 1729673451114, "data": { "x": [ -1.496, -1.148, -0.66, -1.052, -1.136, -1.092, -1.112, -1.1, -1.108, @@ -121,7 +126,8 @@ } }, { - "ID": 1729673436748, + "id": "1729673436748", + "createdAt": 1729673436748, "data": { "x": [ -1.584, -1.324, -1.236, -1.1, -1.08, -0.788, -1.176, -1.164, -2.04, @@ -149,7 +155,8 @@ } }, { - "ID": 1729673425222, + "id": "1729673425222", + "createdAt": 1729673425222, "data": { "x": [ -1.512, -1.3, -1.108, -1.088, -1.104, -0.952, -0.884, -1.12, -1.064, @@ -177,7 +184,8 @@ } }, { - "ID": 1729673415459, + "id": "1729673415459", + "createdAt": 1729673415459, "data": { "x": [ -1.128, -0.896, -1.132, -1.068, -1.1, -1.084, -1.156, -1.152, @@ -205,7 +213,8 @@ } }, { - "ID": 1729673404782, + "id": "1729673404782", + "createdAt": 1729673404782, "data": { "x": [ -1.068, -0.92, -0.812, -1.776, -2.04, -1.272, -0.944, -0.816, @@ -234,7 +243,8 @@ } }, { - "ID": 1729673391690, + "id": "1729673391690", + "createdAt": 1729673391690, "data": { "x": [ -0.616, -0.796, -1.112, -1.332, -1.496, -1.748, -1.948, -2.008, @@ -266,11 +276,13 @@ }, { "icon": "StickFigure", - "ID": 1729612383565, + "id": "1729612383565", + "createdAt": 1729612383565, "name": "Jumping up&down", "recordings": [ { - "ID": 1729673745713, + "id": "1729673745713", + "createdAt": 1729673745713, "data": { "x": [ -2.04, -1.792, -0.644, -0.772, -0.768, -0.28, -0.488, -0.408, @@ -299,7 +311,8 @@ } }, { - "ID": 1729673739656, + "id": "1729673739656", + "createdAt": 1729673739656, "data": { "x": [ -0.516, -0.256, -0.056, 0.024, -0.112, -0.104, 0.396, -0.376, -2.04, @@ -328,7 +341,8 @@ } }, { - "ID": 1729673496948, + "id": "1729673496948", + "createdAt": 1729673496948, "data": { "x": [ -0.644, -0.3, -0.276, -0.208, -0.232, -0.196, 0.032, 0.076, -0.352, @@ -357,7 +371,8 @@ } }, { - "ID": 1729673492272, + "id": "1729673492272", + "createdAt": 1729673492272, "data": { "x": [ -0.42, -0.248, -0.104, -0.18, -0.172, -0.152, -0.032, 0.672, -2, @@ -386,7 +401,8 @@ } }, { - "ID": 1729673487113, + "id": "1729673487113", + "createdAt": 1729673487113, "data": { "x": [ -0.236, -0.132, -0.116, -0.196, -0.252, -0.176, -0.08, 0.404, -2.04, @@ -415,7 +431,8 @@ } }, { - "ID": 1729673481599, + "id": "1729673481599", + "createdAt": 1729673481599, "data": { "x": [ -0.316, -0.596, -0.612, -0.456, -0.26, -0.168, -1.896, -2.04, -1.36, @@ -444,7 +461,8 @@ } }, { - "ID": 1729673476563, + "id": "1729673476563", + "createdAt": 1729673476563, "data": { "x": [ -2.04, -2.04, -1.012, -1.46, -1.364, -2.04, -1.78, -2.04, -2.04, @@ -473,7 +491,8 @@ } }, { - "ID": 1729673470692, + "id": "1729673470692", + "createdAt": 1729673470692, "data": { "x": [ -0.12, 0.028, -0.108, -0.132, -0.232, 0.112, -0.38, -2.04, -2.04, @@ -505,11 +524,13 @@ }, { "icon": "Asleep", - "ID": 1729612436971, + "id": "1729612436971", + "createdAt": 1729612436971, "name": "Being still", "recordings": [ { - "ID": 1729673556262, + "id": "1729673556262", + "createdAt": 1729673556262, "data": { "x": [ -1.076, -1.084, -1.08, -1.084, -1.08, -1.084, -1.076, -1.08, -1.092, @@ -537,7 +558,8 @@ } }, { - "ID": 1729673551465, + "id": "1729673551465", + "createdAt": 1729673551465, "data": { "x": [ -1.064, -1.06, -1.064, -1.068, -1.056, -1.068, -1.076, -1.068, @@ -564,7 +586,8 @@ } }, { - "ID": 1729673546660, + "id": "1729673546660", + "createdAt": 1729673546660, "data": { "x": [ -1.08, -1.184, -1.048, -1.068, -1.088, -1.072, -1.044, -1.072, @@ -592,7 +615,8 @@ } }, { - "ID": 1729673541916, + "id": "1729673541916", + "createdAt": 1729673541916, "data": { "x": [ -1.072, -1.092, -1.092, -1.076, -1.084, -1.076, -1.072, -1.076, @@ -620,7 +644,8 @@ } }, { - "ID": 1729673537247, + "id": "1729673537247", + "createdAt": 1729673537247, "data": { "x": [ -1.088, -1.076, -1.088, -1.088, -1.088, -1.084, -1.08, -1.08, @@ -648,7 +673,8 @@ } }, { - "ID": 1729673531741, + "id": "1729673531741", + "createdAt": 1729673531741, "data": { "x": [ -1.084, -1.08, -1.084, -1.08, -1.084, -1.08, -1.092, -1.08, -1.084, diff --git a/src/test-fixtures/wand-data-samples.json b/src/test-fixtures/wand-data-samples.json index ad5825a57..7bca69e6a 100644 --- a/src/test-fixtures/wand-data-samples.json +++ b/src/test-fixtures/wand-data-samples.json @@ -1,1572 +1,1638 @@ [ { - "icon": "Heart", - "ID": 1729159323639, + "id": "a847ac69-2c80-49cd-bee2-f7fe430b7c4c", "name": "Not a spell", + "icon": "No", + "createdAt": 1730110768152, "recordings": [ { - "ID": 1729159669573, + "id": "a7045ed7-4629-4d46-9e34-843919413bd9", "data": { "x": [ - -0.984, -1.06, -1.156, -1.236, -1.256, -1.16, -1.128, -1.148, - -1.104, -1.016, -0.924, -0.856, -0.804, -0.736, -0.756, -0.816, - -0.776, -0.692, -0.688, -0.668, -0.604, -0.568, -0.592, -0.6, - -0.552, -0.516, -0.452, -0.304, -0.192, -0.132, -0.032, 0.076, - 0.148, 0.156, 0.076, -0.024, -0.092, -0.156, -0.272, -0.404, -0.472, - -0.468, -0.456, -0.632 + 0.788, 0.76, 0.828, 0.928, 0.948, 0.932, 0.956, 1.012, 0.968, 1.032, + 1.208, 1.1, 1.016, 0.968, 0.884, 0.748, 0.596, 0.48, 0.248, 0.204, + 0.108, -0.176, -0.132, -0.08, -0.148, -0.1, -0.096, -0.304, -0.332, + -0.24, -0.248, -0.268, -0.332, -0.344, -0.424, -0.544, -0.572, + -0.54, -0.568, -0.668, -0.748, -0.672, -0.616, -0.768, -0.892, + -0.824, -0.74, -0.896 ], "y": [ - -0.388, -0.372, -0.316, -0.316, -0.32, -0.316, -0.332, -0.352, - -0.388, -0.396, -0.436, -0.496, -0.472, -0.432, -0.452, -0.508, - -0.512, -0.508, -0.512, -0.532, -0.52, -0.5, -0.52, -0.56, -0.572, - -0.604, -0.588, -0.552, -0.516, -0.636, -0.632, -0.5, -0.46, -0.404, - -0.36, -0.356, -0.352, -0.376, -0.388, -0.416, -0.46, -0.432, - -0.416, -0.504 + 0.152, 0.084, 0.068, 0.06, 0.012, -0.064, -0.076, -0.044, -0.04, + -0.036, 0.024, 0.096, 0.044, -0.032, 0.008, 0.076, 0.268, 0.312, + 0.356, 0.4, 0.42, 0.484, 0.488, 0.532, 0.544, 0.592, 0.584, 0.588, + 0.648, 0.66, 0.66, 0.652, 0.64, 0.612, 0.56, 0.54, 0.52, 0.496, + 0.46, 0.424, 0.444, 0.404, 0.36, 0.328, 0.316, 0.268, 0.248, 0.204 ], "z": [ - -0.144, -0.088, 0.036, 0.156, 0.18, 0.032, -0.044, -0.056, -0.12, - -0.228, -0.32, -0.368, -0.396, -0.46, -0.448, -0.404, -0.464, - -0.556, -0.536, -0.544, -0.612, -0.68, -0.7, -0.72, -0.792, -0.856, - -0.948, -1.056, -1.028, -1.224, -1.28, -1.368, -1.352, -1.288, - -1.188, -1.06, -1, -0.972, -0.904, -0.82, -0.788, -0.776, -0.772, - -0.608 + -0.52, -0.548, -0.656, -0.748, -0.752, -0.744, -0.752, -0.796, + -0.684, -0.656, -0.804, -0.896, -0.976, -0.972, -0.908, -0.88, + -0.744, -0.656, -0.816, -0.956, -0.576, -0.692, -0.788, -0.828, + -0.78, -0.804, -0.8, -0.548, -0.536, -0.68, -0.672, -0.652, -0.572, + -0.608, -0.628, -0.604, -0.616, -0.656, -0.644, -0.568, -0.516, + -0.652, -0.816, -0.648, -0.452, -0.48, -0.624, -0.488 ] - } + }, + "createdAt": 1730110843600 }, { - "ID": 1729159665397, + "id": "08ca8fa0-86f2-4980-916f-6a3c80373828", "data": { "x": [ - 0.204, 0.184, 0.188, 0.196, 0.188, 0.176, 0.172, 0.156, 0.168, - 0.188, 0.168, 0.184, 0.18, 0.176, 0.176, 0.176, 0.2, 0.192, 0.188, - 0.18, 0.188, 0.192, 0.204, 0.208, 0.184, 0.168, 0.18, 0.192, 0.196, - 0.192, 0.172, 0.172, 0.196, 0.188, 0.18, 0.192, 0.204, 0.208, 0.208, - 0.216, 0.18, 0.136, 0.168, 0.208, 0.2 + -0.104, -0.124, -0.128, -0.112, -0.096, -0.108, -0.104, -0.108, + -0.084, -0.108, -0.128, -0.116, -0.108, -0.096, -0.096, -0.104, + -0.084, -0.092, -0.108, -0.104, -0.088, -0.108, -0.116, -0.14, + -0.156, -0.132, -0.132, -0.14, -0.132, -0.136, -0.12, -0.068, + -0.052, -0.052, -0.08, -0.132, -0.192, -0.204, -0.176, -0.164, + -0.164, -0.16, -0.152, -0.124, -0.088, -0.076, -0.1, -0.104, -0.128 ], "y": [ - -0.284, -0.292, -0.304, -0.292, -0.292, -0.288, -0.276, -0.272, - -0.272, -0.276, -0.276, -0.276, -0.28, -0.276, -0.284, -0.288, - -0.288, -0.28, -0.284, -0.284, -0.276, -0.28, -0.276, -0.26, -0.276, - -0.272, -0.284, -0.284, -0.288, -0.268, -0.264, -0.264, -0.276, - -0.288, -0.296, -0.296, -0.296, -0.296, -0.296, -0.284, -0.272, - -0.276, -0.272, -0.276, -0.28 + 0.936, 0.936, 0.932, 0.936, 0.924, 0.932, 0.928, 0.928, 0.936, + 0.932, 0.932, 0.924, 0.932, 0.936, 0.932, 0.94, 0.94, 0.932, 0.936, + 0.948, 0.948, 0.932, 0.932, 0.92, 0.916, 0.908, 0.916, 0.884, 0.892, + 0.88, 0.896, 0.924, 0.972, 1, 0.976, 0.928, 0.884, 0.832, 0.812, + 0.82, 0.816, 0.848, 0.9, 0.98, 1.032, 1.032, 1.012, 0.964, 0.904 ], "z": [ - -0.988, -0.96, -0.964, -0.984, -0.984, -0.972, -0.972, -0.96, - -0.976, -0.988, -0.984, -0.976, -0.972, -0.976, -0.98, -0.972, - -0.98, -0.976, -0.988, -0.98, -0.972, -0.984, -0.972, -0.98, -0.96, - -0.976, -0.984, -0.984, -0.984, -0.972, -0.96, -0.944, -0.976, - -0.976, -0.984, -0.984, -0.968, -0.972, -0.98, -0.98, -0.964, -0.96, - -0.976, -1.004, -0.98 + -0.5, -0.488, -0.484, -0.496, -0.5, -0.508, -0.504, -0.492, -0.504, + -0.504, -0.492, -0.488, -0.488, -0.492, -0.492, -0.48, -0.5, -0.5, + -0.484, -0.48, -0.48, -0.496, -0.504, -0.512, -0.528, -0.54, -0.544, + -0.504, -0.544, -0.532, -0.504, -0.504, -0.496, -0.504, -0.532, + -0.532, -0.536, -0.56, -0.6, -0.612, -0.616, -0.628, -0.568, -0.488, + -0.416, -0.396, -0.412, -0.456, -0.464 ] - } + }, + "createdAt": 1730110838090 }, { - "ID": 1729159661282, + "id": "62d25bc6-ffe7-4188-9488-0038f1fcfb4b", "data": { "x": [ - 0.188, 0.2, 0.188, 0.172, 0.16, 0.156, 0.164, 0.176, 0.184, 0.184, - 0.176, 0.172, 0.176, 0.172, 0.184, 0.18, 0.168, 0.164, 0.164, 0.172, - 0.192, 0.184, 0.18, 0.18, 0.192, 0.168, 0.176, 0.18, 0.172, 0.18, - 0.168, 0.18, 0.184, 0.184, 0.2, 0.188, 0.176, 0.168, 0.176, 0.176, - 0.172, 0.16, 0.172, 0.168, 0.172 + -0.012, -0.02, -0.016, -0.036, -0.052, -0.036, -0.032, -0.04, + -0.044, -0.036, -0.04, -0.028, -0.008, -0.004, -0.008, -0.012, + -0.028, -0.032, -0.036, -0.04, -0.016, -0.024, -0.052, -0.048, + -0.032, -0.068, -0.056, -0.036, -0.024, -0.036, -0.052, -0.032, + -0.028, -0.02, -0.012, -0.036, -0.028, -0.032, -0.06, -0.036, -0.04, + -0.056, -0.032, -0.02, -0.024, -0.024, -0.024, -0.044, -0.032 ], "y": [ - -0.28, -0.264, -0.26, -0.256, -0.268, -0.264, -0.272, -0.276, - -0.268, -0.268, -0.268, -0.272, -0.264, -0.268, -0.276, -0.276, - -0.268, -0.272, -0.272, -0.272, -0.272, -0.272, -0.264, -0.264, - -0.272, -0.268, -0.268, -0.26, -0.26, -0.272, -0.268, -0.284, -0.28, - -0.28, -0.264, -0.276, -0.272, -0.28, -0.28, -0.272, -0.268, -0.256, - -0.26, -0.268, -0.26 + -0.952, -0.952, -0.948, -0.976, -0.972, -0.98, -0.992, -0.992, + -0.976, -0.968, -0.968, -0.964, -0.96, -0.968, -0.968, -0.964, + -0.976, -0.968, -0.988, -0.992, -0.976, -0.976, -0.992, -0.976, + -0.964, -0.98, -0.992, -0.98, -0.972, -0.98, -0.984, -0.98, -0.98, + -0.98, -0.984, -0.988, -0.98, -0.98, -0.984, -0.98, -0.972, -0.972, + -0.968, -0.968, -0.968, -0.964, -0.984, -0.976, -0.98 ], "z": [ - -0.964, -0.98, -0.964, -0.968, -0.988, -0.996, -0.992, -0.968, - -0.96, -0.984, -0.98, -0.976, -0.976, -0.964, -0.976, -0.988, - -0.984, -0.984, -0.98, -0.984, -0.988, -0.976, -0.964, -0.972, - -0.984, -0.968, -0.984, -0.988, -0.988, -0.992, -0.984, -0.988, - -0.98, -0.976, -0.976, -0.96, -0.964, -0.972, -0.988, -0.992, - -0.992, -0.976, -0.976, -0.972, -0.972 + -0.368, -0.368, -0.364, -0.34, -0.348, -0.384, -0.376, -0.364, + -0.372, -0.364, -0.352, -0.348, -0.36, -0.348, -0.352, -0.352, + -0.352, -0.352, -0.348, -0.356, -0.384, -0.356, -0.32, -0.348, + -0.364, -0.348, -0.352, -0.36, -0.38, -0.36, -0.344, -0.348, -0.34, + -0.348, -0.364, -0.356, -0.356, -0.356, -0.344, -0.36, -0.38, + -0.356, -0.368, -0.36, -0.364, -0.364, -0.356, -0.36, -0.36 ] - } + }, + "createdAt": 1730110833013 }, { - "ID": 1729159657150, + "id": "3db7f567-460a-478f-803d-b823bf6a4582", "data": { "x": [ - 0.052, 0.048, 0.016, -0.004, 0.02, 0.044, 0.036, 0.048, 0.02, 0.028, - 0.044, 0.028, 0.024, 0.016, 0.028, 0.044, 0.02, 0.004, 0.024, 0.032, - 0.052, 0.036, 0.032, 0.016, 0.024, 0.044, 0.044, 0.04, 0.024, 0.004, - 0.028, 0.064, 0.048, 0.028, 0.008, 0.04, 0.036, 0.024, 0.04, 0.036, - 0.02, 0.028, 0.052, 0.092 + 0.66, 0.64, 0.648, 0.668, 0.676, 0.656, 0.632, 0.648, 0.656, 0.636, + 0.624, 0.648, 0.652, 0.648, 0.636, 0.648, 0.672, 0.668, 0.656, + 0.668, 0.668, 0.64, 0.636, 0.64, 0.64, 0.66, 0.66, 0.66, 0.664, + 0.668, 0.652, 0.648, 0.652, 0.64, 0.64, 0.632, 0.648, 0.684, 0.716, + 0.708, 0.7, 0.684, 0.688, 0.696, 0.692, 0.708, 0.692 ], "y": [ - 0.084, 0.084, 0.08, 0.08, 0.092, 0.1, 0.108, 0.108, 0.08, 0.06, - 0.064, 0.064, 0.08, 0.08, 0.072, 0.072, 0.084, 0.08, 0.088, 0.108, - 0.096, 0.084, 0.08, 0.064, 0.06, 0.068, 0.076, 0.092, 0.1, 0.096, - 0.092, 0.092, 0.092, 0.092, 0.072, 0.072, 0.064, 0.06, 0.084, 0.084, - 0.068, 0.048, 0.04, 0.068 + 0.18, 0.164, 0.156, 0.164, 0.16, 0.156, 0.16, 0.156, 0.176, 0.176, + 0.18, 0.184, 0.192, 0.18, 0.168, 0.168, 0.172, 0.172, 0.172, 0.168, + 0.172, 0.176, 0.184, 0.176, 0.172, 0.168, 0.16, 0.16, 0.152, 0.152, + 0.144, 0.16, 0.176, 0.168, 0.176, 0.18, 0.16, 0.16, 0.172, 0.168, + 0.144, 0.164, 0.172, 0.164, 0.168, 0.164, 0.176 ], "z": [ - -1.04, -1.056, -1.032, -1.024, -1.024, -1.028, -1.012, -1.008, - -1.004, -1.048, -1.068, -1.048, -1.02, -1.016, -1.024, -1.072, - -1.044, -1, -1.02, -1.032, -1.024, -1.024, -1.036, -1.044, -1.036, - -1.048, -1.052, -1.04, -1.036, -1.028, -1.032, -1.028, -1.008, - -1.028, -1.016, -1.048, -1.052, -1.032, -1.052, -1.028, -1.036, - -1.028, -1.048, -1.052 + -0.772, -0.784, -0.784, -0.808, -0.796, -0.784, -0.784, -0.8, -0.8, + -0.788, -0.772, -0.772, -0.768, -0.772, -0.776, -0.78, -0.772, + -0.764, -0.76, -0.788, -0.788, -0.772, -0.768, -0.776, -0.784, + -0.784, -0.772, -0.764, -0.772, -0.792, -0.792, -0.78, -0.776, + -0.756, -0.764, -0.764, -0.756, -0.76, -0.772, -0.74, -0.752, + -0.752, -0.744, -0.728, -0.724, -0.74, -0.74 ] - } + }, + "createdAt": 1730110828469 }, { - "ID": 1729159653154, + "id": "99ca2691-cd53-4eac-b32a-dcb291fcb74b", "data": { "x": [ - 0.02, 0.028, 0.016, 0.008, 0.032, 0.044, 0.052, 0.044, 0.036, 0.012, - 0.012, 0.008, 0.02, 0.028, 0.024, 0.012, 0.004, 0, 0.024, 0.048, - 0.068, 0.06, 0.036, 0.052, 0.044, 0.02, 0.028, 0.036, 0.04, 0.036, - 0.012, 0.016, 0.048, 0.048, 0.044, 0.028, 0.012, 0.032, 0.024, - 0.016, 0.04, 0.044, 0, 0.04, 0.068 + 0.972, 0.964, 0.988, 0.976, 0.952, 0.944, 0.964, 0.976, 0.956, + 0.952, 0.96, 0.972, 0.984, 0.984, 0.972, 0.968, 0.956, 0.964, 0.972, + 0.976, 0.964, 0.976, 0.984, 0.968, 0.968, 0.952, 0.96, 0.972, 0.976, + 0.956, 0.964, 0.968, 0.96, 0.98, 0.984, 0.964, 0.948, 0.952, 0.976, + 0.98, 0.972, 0.98, 0.972, 0.968, 0.968, 0.96, 0.984, 0.976 ], "y": [ - 0.084, 0.088, 0.08, 0.08, 0.076, 0.064, 0.048, 0.052, 0.06, 0.052, - 0.064, 0.084, 0.1, 0.1, 0.084, 0.108, 0.112, 0.112, 0.108, 0.08, - 0.084, 0.092, 0.084, 0.084, 0.076, 0.068, 0.064, 0.06, 0.076, 0.108, - 0.112, 0.12, 0.132, 0.136, 0.132, 0.128, 0.124, 0.132, 0.12, 0.108, - 0.096, 0.064, 0.04, 0.04, 0.028 + 0.112, 0.112, 0.116, 0.116, 0.12, 0.112, 0.128, 0.124, 0.12, 0.124, + 0.12, 0.124, 0.124, 0.128, 0.124, 0.12, 0.12, 0.12, 0.112, 0.1, + 0.104, 0.108, 0.116, 0.124, 0.128, 0.132, 0.136, 0.136, 0.136, + 0.128, 0.124, 0.116, 0.108, 0.108, 0.12, 0.116, 0.112, 0.108, 0.112, + 0.112, 0.116, 0.116, 0.116, 0.116, 0.116, 0.116, 0.124, 0.108 ], "z": [ - -1.032, -1.04, -1.024, -1.036, -1.044, -1.04, -1.044, -1.048, - -1.048, -1.024, -1.044, -1.04, -1.02, -1.02, -1.024, -1.032, -1.024, - -1.02, -1.012, -1.016, -1.032, -1.04, -1.012, -1.032, -1.032, - -1.036, -1.048, -1.048, -1.04, -1.044, -1.028, -1.016, -1.02, - -1.008, -1.012, -1.004, -1.004, -1.04, -1.032, -1.02, -1.032, - -1.044, -1.012, -1.068, -1.076 + -0.344, -0.324, -0.328, -0.316, -0.312, -0.32, -0.312, -0.328, + -0.332, -0.328, -0.324, -0.328, -0.308, -0.308, -0.304, -0.324, + -0.32, -0.312, -0.328, -0.336, -0.336, -0.34, -0.34, -0.332, -0.34, + -0.324, -0.308, -0.296, -0.292, -0.3, -0.312, -0.32, -0.32, -0.328, + -0.316, -0.336, -0.344, -0.332, -0.344, -0.332, -0.324, -0.308, + -0.316, -0.324, -0.316, -0.288, -0.316, -0.328 ] - } + }, + "createdAt": 1730110823337 }, { - "ID": 1729159648983, + "id": "2ae996d3-b806-468b-b60a-529dadc24877", "data": { "x": [ - 0.256, 0.256, 0.26, 0.272, 0.308, 0.312, 0.288, 0.3, 0.284, 0.232, - 0.236, 0.276, 0.292, 0.288, 0.284, 0.344, 0.368, 0.34, 0.268, 0.24, - 0.272, 0.28, 0.292, 0.288, 0.256, 0.208, 0.216, 0.192, 0.212, 0.244, - 0.256, 0.248, 0.26, 0.248, 0.256, 0.296, 0.3, 0.264, 0.248, 0.24, - 0.236, 0.256, 0.244, 0.216 + -0.512, -0.504, -0.492, -0.468, -0.468, -0.484, -0.5, -0.496, + -0.484, -0.484, -0.496, -0.492, -0.472, -0.48, -0.476, -0.448, + -0.448, -0.464, -0.468, -0.484, -0.476, -0.472, -0.464, -0.472, + -0.484, -0.48, -0.48, -0.48, -0.468, -0.48, -0.484, -0.492, -0.476, + -0.468, -0.496, -0.468, -0.46, -0.456, -0.476, -0.492, -0.5, -0.492, + -0.488, -0.492, -0.488, -0.496, -0.5, -0.464 ], "y": [ - 0.256, 0.272, 0.288, 0.284, 0.232, 0.184, 0.124, 0.136, 0.168, - 0.188, 0.188, 0.204, 0.236, 0.224, 0.188, 0.176, 0.184, 0.172, - 0.156, 0.168, 0.172, 0.184, 0.16, 0.168, 0.168, 0.184, 0.192, 0.184, - 0.188, 0.172, 0.156, 0.16, 0.16, 0.152, 0.148, 0.152, 0.132, 0.116, - 0.12, 0.136, 0.168, 0.204, 0.2, 0.196 + 0.116, 0.12, 0.128, 0.128, 0.128, 0.116, 0.132, 0.144, 0.136, 0.14, + 0.136, 0.16, 0.14, 0.144, 0.14, 0.136, 0.128, 0.132, 0.132, 0.132, + 0.136, 0.136, 0.132, 0.128, 0.14, 0.152, 0.14, 0.124, 0.112, 0.104, + 0.136, 0.144, 0.14, 0.128, 0.128, 0.144, 0.136, 0.128, 0.116, 0.108, + 0.108, 0.124, 0.128, 0.128, 0.124, 0.136, 0.132, 0.128 ], "z": [ - -0.98, -1.004, -1.04, -1.068, -1.08, -1.04, -0.976, -0.968, -0.956, - -0.92, -0.904, -0.94, -0.984, -0.996, -0.972, -1.012, -1.036, - -1.028, -0.992, -0.964, -0.984, -0.96, -0.932, -0.932, -0.944, - -0.956, -0.976, -0.972, -1.004, -1.016, -1.02, -0.996, -0.984, - -0.976, -0.972, -0.996, -1.004, -0.996, -1.008, -1.004, -0.996, - -0.988, -0.976, -0.98 + -0.936, -0.932, -0.928, -0.936, -0.928, -0.92, -0.92, -0.92, -0.916, + -0.916, -0.912, -0.912, -0.92, -0.908, -0.932, -0.936, -0.924, + -0.932, -0.948, -0.928, -0.928, -0.912, -0.936, -0.924, -0.92, + -0.924, -0.916, -0.904, -0.94, -0.936, -0.916, -0.896, -0.936, + -0.936, -0.928, -0.932, -0.9, -0.916, -0.936, -0.94, -0.928, -0.924, + -0.94, -0.924, -0.92, -0.916, -0.9, -0.908 ] - } + }, + "createdAt": 1730110818555 }, { - "ID": 1729159397874, + "id": "a435a2c9-c26d-4436-b405-d0e659a7f677", "data": { "x": [ - -0.848, -0.928, -0.944, -0.948, -0.924, -0.852, -0.856, -0.884, - -0.88, -0.876, -0.84, -0.832, -0.872, -0.888, -0.868, -0.872, - -0.852, -0.864, -0.848, -0.86, -0.872, -0.88, -0.868, -0.876, - -0.844, -0.832, -0.876, -0.88, -0.852, -0.848, -0.868, -0.856, - -0.844, -0.86, -0.872, -0.844, -0.848, -0.84, -0.844, -0.864, - -0.884, -0.864, -0.852, -0.856 + 0.292, 0.228, -0.012, -0.12, -0.172, -0.252, -0.356, -0.404, -0.384, + -0.352, -0.308, -0.332, -0.364, -0.38, -0.42, -0.388, -0.244, + -0.172, -0.176, -0.176, -0.172, -0.196, -0.2, -0.156, -0.08, -0.068, + -0.052, -0.008, 0, 0.068, -0.048, -0.148, -0.128, -0.132, -0.176, + -0.208, -0.244, -0.224, -0.136, -0.128, -0.152, -0.132, -0.132, + -0.176, -0.188, -0.176, -0.152, -0.108 ], "y": [ - 0.076, 0.064, 0.084, 0.072, 0.092, 0.088, 0.08, 0.084, 0.08, 0.1, - 0.136, 0.128, 0.112, 0.108, 0.104, 0.108, 0.12, 0.116, 0.116, 0.116, - 0.088, 0.1, 0.088, 0.1, 0.096, 0.092, 0.096, 0.116, 0.116, 0.116, - 0.104, 0.116, 0.112, 0.096, 0.12, 0.112, 0.12, 0.136, 0.124, 0.108, - 0.108, 0.116, 0.112, 0.1 + 0.188, 0.088, 0.072, 0.168, 0.184, 0.18, 0.108, 0.1, 0.096, 0.124, + 0.164, 0.212, 0.212, 0.18, 0.136, 0.168, 0.196, 0.224, 0.212, 0.188, + 0.188, 0.196, 0.192, 0.164, 0.164, 0.148, 0.132, 0.164, 0.168, 0.12, + 0.152, 0.124, 0.06, 0.04, 0.016, 0, 0.008, 0.004, 0.004, -0.004, + -0.028, -0.02, -0.004, 0.024, 0.02, 0.04, 0.044, 0.04 ], "z": [ - -0.6, -0.472, -0.572, -0.58, -0.556, -0.536, -0.576, -0.544, -0.596, - -0.56, -0.568, -0.572, -0.556, -0.568, -0.572, -0.576, -0.576, - -0.548, -0.564, -0.584, -0.6, -0.58, -0.6, -0.596, -0.608, -0.6, - -0.568, -0.584, -0.576, -0.588, -0.616, -0.62, -0.612, -0.616, - -0.592, -0.616, -0.608, -0.592, -0.592, -0.592, -0.576, -0.568, - -0.564, -0.572 + -0.944, -1.032, -1.056, -1.024, -1.1, -1.088, -1.036, -1.012, + -0.976, -0.94, -0.96, -0.984, -1.012, -1.028, -0.988, -0.952, + -0.988, -0.98, -1.016, -1.032, -1, -0.988, -1.024, -1.084, -1.088, + -1.008, -0.948, -0.964, -0.996, -0.944, -0.924, -0.94, -1.032, + -1.088, -1.064, -1.056, -1.028, -1.032, -1.068, -1.044, -1.052, + -1.084, -1.096, -1.024, -1.024, -1.032, -1.024, -1.076 ] - } + }, + "createdAt": 1730110814258 }, { - "ID": 1729159392725, + "id": "146782de-b559-462a-b122-098afb637033", "data": { "x": [ - 0.636, 0.612, 0.644, 0.7, 0.764, 0.832, 0.832, 0.764, 0.772, 0.88, - 1.016, 1.06, 1.14, 1.26, 1.32, 1.172, 1.044, 0.86, 0.672, 0.572, - 0.424, 0.172, 0.036, 0.04, -0.02, -0.148, -0.296, -0.432, -0.652, - -0.732, -0.708, -0.652, -1.136, -1.196, -0.972, -0.796, -0.776, - -0.6, -0.556, -0.52, -0.464, -0.392, -0.308, -0.192 + -0.052, 0.084, 0.104, 0.048, 0.012, -0.016, -0.068, -0.092, -0.084, + 0, 0.044, -0.204, -0.336, -0.308, -0.428, -0.544, -0.552, -0.504, + -0.512, -0.532, -0.492, -0.452, -0.456, -0.404, -0.4, -0.42, -0.368, + -0.344, -0.312, -0.224, -0.184, -0.148, -0.104, -0.116, -0.188, + -0.18, -0.144, -0.152, 0.008, 0.136, 0.152, 0.176, 0.184, 0.212, + 0.244, 0.276, 0.324, 0.332, 0.352 ], "y": [ - 1.2, 1.272, 1.288, 1.244, 1.116, 0.944, 0.76, 0.596, 0.484, 0.416, - 0.316, 0.228, 0.032, -0.116, -0.144, -0.056, -0.088, -0.232, -0.384, - -0.496, -0.544, -0.556, -0.5, -0.504, -0.508, -0.508, -0.692, - -0.808, -0.808, -0.68, -0.76, -1.156, -0.72, -1.132, -1.008, -0.984, - -0.904, -0.84, -0.824, -0.808, -0.776, -0.756, -0.72, -0.7 + 0.336, 0.316, 0.24, 0.132, 0.028, -0.016, -0.064, -0.14, -0.144, + -0.132, -0.156, -0.164, -0.172, -0.168, -0.124, -0.072, -0.032, + -0.008, 0.064, 0.116, 0.172, 0.232, 0.268, 0.356, 0.412, 0.428, + 0.492, 0.556, 0.56, 0.552, 0.524, 0.524, 0.508, 0.48, 0.456, 0.444, + 0.46, 0.46, 0.464, 0.492, 0.484, 0.46, 0.44, 0.4, 0.368, 0.372, + 0.38, 0.332, 0.256 ], "z": [ - -0.376, -0.288, -0.224, -0.176, -0.176, -0.256, -0.344, -0.46, - -0.56, -0.62, -0.688, -0.756, -0.832, -0.908, -0.912, -0.764, - -0.728, -0.7, -0.736, -0.824, -0.82, -0.768, -0.776, -0.82, -0.792, - -0.736, -0.772, -0.756, -0.62, -0.636, -0.688, -0.364, -0.552, - -0.324, -0.724, -0.84, -0.736, -0.796, -0.736, -0.7, -0.744, -0.844, - -0.888, -0.9 + -0.84, -0.904, -0.964, -1.004, -1.064, -1.116, -1.156, -1.224, + -1.252, -1.256, -1.348, -1.24, -1.188, -1.252, -1.22, -1.14, -1.096, + -1.108, -1.056, -1.02, -0.988, -0.96, -0.9, -0.876, -0.828, -0.76, + -0.8, -0.752, -0.72, -0.74, -0.796, -0.824, -0.864, -0.9, -0.908, + -0.916, -0.928, -0.836, -0.86, -0.864, -0.824, -0.828, -0.82, + -0.852, -0.888, -0.888, -0.864, -0.852, -0.892 ] - } + }, + "createdAt": 1730110809909 }, { - "ID": 1729159387146, + "id": "4fe7a9df-3232-4ac5-9a28-71dedbab518c", "data": { "x": [ - 0.332, 0.356, 0.384, 0.356, 0.376, 0.312, 0.224, 0.292, 0.388, - 0.344, 0.26, 0.232, 0.212, 0.22, 0.188, 0.112, 0.036, 0.004, 0.008, - 0, -0.092, -0.136, -0.124, -0.144, -0.12, -0.008, 0.048, 0.076, - 0.124, 0.136, 0.156, 0.24, 0.28, 0.248, 0.168, 0.116, 0.136, 0.176, - 0.144, 0.152, 0.2, 0.084, 0.036, 0.1 + 0.184, 0.172, 0.156, 0.168, 0.16, 0.18, 0.128, 0.168, 0.212, 0.128, + 0.096, 0.108, 0.112, 0.044, 0.036, 0.084, 0.14, 0.068, 0.056, 0.144, + 0.204, 0.16, 0.152, 0.16, 0.136, 0.136, 0.156, 0.192, 0.208, 0.156, + 0.124, 0.104, 0.088, 0.06, 0.068, 0.104, 0.056, 0.032, 0.076, 0.04, + 0.024, 0.016, -0.004, -0.012, -0.016, 0.012, 0.036, 0.024, 0.004 ], "y": [ - -0.036, -0.092, -0.128, -0.168, -0.18, -0.164, -0.176, -0.168, - -0.208, -0.288, -0.344, -0.384, -0.384, -0.412, -0.352, -0.324, - -0.264, -0.188, -0.112, -0.044, 0.02, 0.12, 0.2, 0.26, 0.368, 0.468, - 0.552, 0.668, 0.796, 0.88, 0.924, 0.964, 0.968, 0.972, 1.02, 1.06, - 1.092, 1.06, 0.976, 0.884, 0.752, 0.652, 0.556, 0.432 + 0.376, 0.296, 0.248, 0.212, 0.212, 0.204, 0.188, 0.172, 0.132, + 0.124, 0.1, 0.084, -0.008, -0.112, -0.172, -0.16, -0.184, -0.292, + -0.392, -0.42, -0.424, -0.424, -0.408, -0.412, -0.46, -0.472, + -0.448, -0.42, -0.416, -0.408, -0.384, -0.36, -0.324, -0.296, + -0.256, -0.2, -0.196, -0.144, -0.096, -0.02, 0.02, 0.104, 0.172, + 0.248, 0.304, 0.372, 0.448, 0.5, 0.52 ], "z": [ - -1.252, -1.36, -1.396, -1.328, -1.368, -1.376, -1.36, -1.412, - -1.456, -1.508, -1.548, -1.572, -1.548, -1.52, -1.432, -1.284, - -1.112, -1.012, -0.944, -0.896, -0.8, -0.732, -0.688, -0.588, -0.46, - -0.432, -0.4, -0.34, -0.332, -0.3, -0.292, -0.34, -0.388, -0.344, - -0.268, -0.176, -0.164, -0.208, -0.184, -0.208, -0.38, -0.408, -0.4, - -0.548 + -0.912, -0.948, -0.956, -0.976, -0.92, -0.984, -0.936, -0.896, + -0.94, -0.924, -0.888, -0.864, -0.92, -0.996, -1.064, -1.072, -1.08, + -1.06, -1.068, -1.112, -1.12, -1.124, -1.124, -1.196, -1.196, + -1.168, -1.132, -1.116, -1.12, -1.092, -1.092, -1.096, -1.108, + -1.116, -1.1, -1.104, -1.08, -1.048, -1.068, -1.024, -1.016, -0.984, + -0.956, -0.948, -0.924, -0.876, -0.832, -0.796, -0.756 ] - } + }, + "createdAt": 1730110805536 }, { - "ID": 1729159381480, + "id": "140b3468-1bfa-4868-9ce8-e68bda104eab", "data": { "x": [ - 0.456, 0.536, 0.612, 0.696, 0.728, 0.628, 0.396, 0.164, 0.032, - -0.056, -0.108, -0.044, -0.012, -0.148, -0.2, -0.136, -0.152, - -0.296, -0.252, -0.06, -0.02, -0.1, -0.208, -0.276, -0.348, -0.304, - -0.3, -0.428, -0.444, -0.42, -0.492, -0.508, -0.424, -0.3, -0.268, - -0.272, -0.292, -0.328, -0.28, -0.212, -0.192, -0.184, -0.156, -0.06 + 0.016, -0.06, -0.096, -0.096, -0.052, 0.052, 0.148, 0.256, 0.38, + 0.452, 0.524, 0.476, 0.44, 0.412, 0.356, 0.34, 0.332, 0.256, 0.256, + 0.28, 0.244, 0.204, 0.196, 0.196, 0.156, 0.136, 0.164, 0.188, 0.244, + 0.176, 0.072, -0.024, 0.012, 0.1, 0.168, 0.104, 0.076, 0.108, 0, + -0.112, -0.092, 0, 0.004, -0.096, -0.06, 0.008, -0.052, -0.196, + -0.192 ], "y": [ - 0.408, 0.448, 0.504, 0.548, 0.548, 0.456, 0.332, 0.22, 0.104, 0.024, - -0.004, -0.016, -0.084, -0.132, -0.124, -0.088, -0.112, -0.108, - -0.02, 0.02, -0.02, -0.112, -0.144, -0.132, -0.152, -0.136, -0.108, - -0.148, -0.176, -0.172, -0.196, -0.288, -0.188, -0.196, -0.236, - -0.264, -0.292, -0.304, -0.296, -0.26, -0.188, -0.1, -0.008, 0.1 + 0.18, 0.092, 0.028, -0.076, -0.212, -0.264, -0.32, -0.376, -0.444, + -0.48, -0.436, -0.4, -0.372, -0.308, -0.212, -0.088, -0.032, 0.064, + 0.18, 0.212, 0.264, 0.356, 0.42, 0.464, 0.516, 0.572, 0.584, 0.656, + 0.668, 0.712, 0.708, 0.708, 0.74, 0.792, 0.812, 0.844, 0.9, 0.852, + 0.756, 0.692, 0.648, 0.636, 0.604, 0.588, 0.496, 0.504, 0.476, + 0.404, 0.36 ], "z": [ - -0.944, -0.884, -0.816, -0.808, -0.856, -0.924, -0.964, -0.956, - -1.036, -1.076, -1.076, -1.12, -1.148, -1.06, -1.028, -1.056, - -1.108, -1.016, -1.016, -1.08, -1.048, -1.036, -1.056, -1.064, - -1.008, -1.024, -0.968, -0.868, -0.908, -0.968, -0.944, -0.928, - -0.98, -1.036, -1.024, -1.084, -1.176, -1.24, -1.288, -1.288, - -1.208, -1.084, -0.98, -0.944 + -0.868, -0.94, -0.996, -1.004, -1.012, -1.108, -1.26, -1.384, + -1.544, -1.636, -1.688, -1.468, -1.276, -1.116, -0.948, -0.872, + -0.88, -0.86, -0.86, -0.9, -0.892, -0.856, -0.836, -0.844, -0.8, + -0.724, -0.68, -0.6, -0.652, -0.64, -0.7, -0.64, -0.648, -0.556, + -0.556, -0.492, -0.388, -0.456, -0.548, -0.604, -0.676, -0.768, + -0.848, -0.744, -0.764, -0.872, -0.904, -0.816, -0.832 ] - } + }, + "createdAt": 1730110801292 }, { - "ID": 1729159377294, + "id": "deda7d69-97dc-43b4-84bd-55afb661c7db", "data": { "x": [ - -1.008, -0.912, -0.884, -0.856, -0.792, -0.728, -0.616, -0.44, - -0.264, -0.208, -0.22, -0.208, -0.236, -0.324, -0.356, -0.404, - -0.476, -0.564, -0.584, -0.652, -0.8, -0.78, -0.676, -0.604, -0.516, - -0.5, -0.508, -0.496, -0.408, -0.24, -0.124, 0.04, 0.48, 0.64, - 0.108, -0.404, -0.256, -0.12, -0.064, 0.076, 0.192, 0.396, 0.516, - 0.436, 0.308 + -0.62, -0.552, -0.42, -0.316, -0.284, -0.212, -0.104, 0, 0.172, + 0.392, 0.536, 0.58, 0.572, 0.532, 0.456, 0.36, 0.408, 0.528, 0.54, + 0.548, 0.616, 0.624, 0.632, 0.652, 0.7, 0.7, 0.644, 0.528, 0.4, + 0.332, 0.396, 0.396, 0.348, 0.34, 0.308, 0.208, 0.1, 0.068, 0.104, + 0.1, 0.024, -0.028, -0.024, -0.068, -0.244, -0.424, -0.392 ], "y": [ - 0.508, 0.524, 0.52, 0.524, 0.512, 0.508, 0.512, 0.492, 0.484, 0.46, - 0.448, 0.452, 0.516, 0.484, 0.364, 0.272, 0.24, 0.184, 0.124, 0.076, - 0.132, 0.076, 0.008, -0.028, -0.028, 0.008, 0.012, 0.012, 0.024, - 0.044, 0.04, 0.092, 0.328, 0.632, 0.66, 0.644, 0.676, 0.676, 0.72, - 0.868, 0.996, 1.072, 1.008, 0.832, 0.68 + -0.268, -0.144, -0.12, -0.048, 0.044, 0.124, 0.192, 0.236, 0.272, + 0.28, 0.3, 0.312, 0.304, 0.264, 0.168, 0.092, 0.052, 0.004, -0.052, + -0.084, -0.116, -0.188, -0.264, -0.384, -0.436, -0.408, -0.408, + -0.408, -0.416, -0.356, -0.296, -0.236, -0.16, -0.076, 0, 0.064, + 0.136, 0.228, 0.324, 0.388, 0.4, 0.396, 0.388, 0.38, 0.3, 0.236, + 0.188 ], "z": [ - 0.284, 0.356, 0.384, 0.328, 0.22, 0.184, 0.14, 0.044, -0.064, - -0.164, -0.196, -0.208, -0.212, -0.196, -0.256, -0.432, -0.616, - -0.752, -1.024, -1.192, -1.196, -1.368, -1.58, -1.816, -1.912, - -1.828, -1.712, -1.66, -1.592, -1.536, -1.408, -1.092, -0.732, - -0.848, -0.724, -0.52, -0.732, -0.62, -0.436, -0.364, -0.148, -0.14, - -0.276, -0.32, -0.396 + -0.972, -0.956, -0.964, -0.94, -0.856, -0.752, -0.704, -0.668, + -0.664, -0.76, -0.784, -0.756, -0.712, -0.724, -0.756, -0.772, + -0.812, -0.896, -0.908, -0.896, -0.932, -0.94, -0.996, -1.064, + -1.148, -1.24, -1.276, -1.248, -1.168, -1.088, -1.072, -1.044, + -1.008, -1.024, -1.052, -0.996, -0.9, -0.8, -0.704, -0.672, -0.664, + -0.66, -0.72, -0.76, -0.78, -0.672, -0.716 ] - } + }, + "createdAt": 1730110797072 }, { - "ID": 1729159373130, + "id": "a23ad509-a7af-4140-aa42-dba9a936bd0e", "data": { "x": [ - 1.004, 1.408, 1.528, 1.192, 0.94, 0.636, 0.584, 0.5, 0.168, -0.004, - 0.1, -0.024, -0.292, -0.56, -0.6, -0.42, -0.488, -0.7, -0.784, - -0.772, -0.84, -1.012, -1.184, -1.352, -1.552, -1.784, -1.788, - -1.596, -1.412, -1.148, -0.928, -0.716, -0.532, -0.332, -0.24, - -0.212, -0.124, -0.08, -0.036, -0.004, 0.004, -0.06, -0.092, 0.008 + -0.536, -0.568, -0.628, -0.78, -0.856, -0.792, -0.7, -0.636, -0.54, + -0.456, -0.444, -0.396, -0.296, -0.288, -0.256, -0.056, -0.18, + -0.328, -0.252, -0.128, -0.112, -0.02, 0.008, -0.076, -0.06, -0.036, + 0.008, 0.172, 0.284, 0.34, 0.412, 0.444, 0.508, 0.576, 0.56, 0.66, + 0.66, 0.356, 0.168, 0.28, 0.46, 0.512, 0.524, 0.424, 0.288, 0.248, + 0.08, -0.08, -0.036 ], "y": [ - 0.304, 0.356, 0.496, 0.452, 0.344, 0.448, 0.596, 0.644, 0.632, - 0.604, 0.656, 0.732, 0.5, 0.368, 0.28, 0.216, -0.012, -0.324, - -0.472, -0.596, -0.892, -1.24, -1.492, -1.644, -1.808, -1.844, - -1.572, -1.244, -0.856, -0.596, -0.344, -0.192, -0.06, 0.068, 0.288, - 0.528, 0.612, 0.648, 0.672, 0.644, 0.668, 0.6, 0.536, 0.452 + 0.028, 0.06, 0.036, -0.02, 0.044, 0.148, 0.18, 0.236, 0.26, 0.292, + 0.268, 0.26, 0.244, 0.244, 0.264, 0.18, 0.244, 0.252, 0.252, 0.228, + 0.168, 0.196, 0.264, 0.264, 0.26, 0.288, 0.256, 0.184, 0.184, 0.236, + 0.144, 0.04, 0.092, 0.136, 0.124, 0.056, -0.012, -0.084, -0.088, + -0.112, -0.216, -0.316, -0.424, -0.52, -0.54, -0.528, -0.492, + -0.384, -0.284 ], "z": [ - -2.032, -2.04, -1.648, -1.392, -1.248, -0.984, -0.756, -0.524, - -0.048, 0.16, 0.1, 0.268, 0.488, 0.332, 0.124, -0.208, -0.32, - -0.512, -0.784, -0.988, -1.116, -1.232, -1.368, -1.48, -1.456, - -1.26, -1.048, -0.808, -0.56, -0.468, -0.384, -0.332, -0.304, - -0.216, -0.016, 0.152, 0.112, 0.012, -0.152, -0.316, -0.508, -0.596, - -0.672, -0.856 + -0.968, -0.928, -0.96, -0.908, -0.892, -0.92, -0.932, -0.92, -0.932, + -0.904, -0.852, -0.892, -0.968, -0.96, -0.94, -1.096, -1.088, + -0.988, -1.032, -1.044, -1.012, -1.016, -1.012, -0.9, -0.844, -0.86, + -0.884, -0.996, -0.988, -0.908, -0.904, -0.884, -0.896, -0.924, + -0.844, -0.884, -1.052, -0.908, -0.848, -0.96, -1.092, -1.16, + -1.196, -1.172, -1.176, -1.304, -1.296, -1.156, -1.08 ] - } - }, - { - "ID": 1729159368840, - "data": { - "x": [ - -0.412, -0.416, -0.44, -0.388, -0.26, -0.152, -0.072, -0.048, -0.1, - -0.076, 0.004, 0.012, -0.008, -0.024, -0.024, -0.004, 0.032, 0.044, - -0.016, -0.132, -0.192, -0.264, -0.316, -0.38, -0.34, -0.28, -0.404, - -0.612, -0.644, -0.576, -0.584, -0.568, -0.624, -0.748, -0.772, - -0.668, -0.556, -0.512, -0.6, -0.7, -0.688, -0.632, -0.604, -0.648 - ], - "y": [ - 0.284, 0.296, 0.312, 0.32, 0.352, 0.36, 0.38, 0.416, 0.472, 0.492, - 0.48, 0.432, 0.428, 0.368, 0.348, 0.38, 0.38, 0.32, 0.26, 0.216, - 0.232, 0.216, 0.096, 0.068, 0.152, 0.148, 0.024, -0.016, -0.008, - 0.004, 0.028, -0.072, -0.028, 0.02, 0.156, 0.316, 0.42, 0.5, 0.488, - 0.444, 0.504, 0.572, 0.648, 0.632 - ], - "z": [ - -0.872, -0.884, -0.868, -0.888, -0.932, -0.952, -0.996, -1.036, - -0.976, -0.908, -0.984, -0.992, -0.96, -0.976, -1.072, -1.008, - -0.972, -1, -1.116, -1.068, -1.02, -0.928, -1.148, -1.216, -1.004, - -0.98, -1.172, -1.196, -1.092, -1.04, -1.008, -1.144, -1.14, -0.972, - -0.824, -0.66, -0.476, -0.368, -0.188, -0.068, -0.012, 0.052, 0.112, - 0.176 - ] - } - }, - { - "ID": 1729159364771, - "data": { - "x": [ - -0.828, -0.828, -0.792, -0.788, -0.804, -0.792, -0.768, -0.724, - -0.692, -0.704, -0.7, -0.656, -0.6, -0.576, -0.58, -0.604, -0.604, - -0.604, -0.58, -0.564, -0.584, -0.624, -0.648, -0.652, -0.648, - -0.656, -0.664, -0.66, -0.668, -0.688, -0.704, -0.776, -0.868, - -0.86, -0.976, -1, -0.84, -0.696, -0.704, -0.716, -0.628, -0.512, - -0.488, -0.476, -0.476, -0.472 - ], - "y": [ - -0.232, -0.212, -0.204, -0.22, -0.236, -0.236, -0.236, -0.236, - -0.228, -0.232, -0.208, -0.2, -0.18, -0.16, -0.16, -0.184, -0.188, - -0.18, -0.188, -0.188, -0.184, -0.22, -0.24, -0.256, -0.256, -0.264, - -0.264, -0.272, -0.26, -0.264, -0.272, -0.296, -0.328, -0.348, - -0.32, -0.292, -0.256, -0.228, -0.244, -0.224, -0.172, -0.148, - -0.12, -0.064, 0.016, 0.096 - ], - "z": [ - -0.676, -0.676, -0.708, -0.728, -0.732, -0.736, -0.748, -0.756, - -0.784, -0.756, -0.748, -0.764, -0.752, -0.764, -0.756, -0.764, - -0.772, -0.776, -0.756, -0.772, -0.792, -0.8, -0.832, -0.848, - -0.864, -0.868, -0.832, -0.844, -0.836, -0.828, -0.816, -0.792, - -0.764, -0.828, -0.74, -0.644, -0.704, -0.764, -0.776, -0.784, - -0.864, -0.94, -0.916, -0.876, -0.82, -0.764 - ] - } - }, - { - "ID": 1729159360601, - "data": { - "x": [ - -0.008, 0.04, 0.036, -0.032, -0.12, -0.196, -0.172, -0.064, 0, - -0.004, -0.036, -0.076, -0.092, -0.052, -0.016, -0.044, -0.104, - -0.1, -0.12, -0.132, -0.068, -0.036, -0.048, -0.064, -0.068, -0.072, - -0.056, -0.016, -0.004, -0.024, -0.06, -0.1, -0.156, -0.188, -0.14, - -0.1, -0.076, -0.04, -0.024, -0.004, -0.016, -0.028, -0.064, -0.092 - ], - "y": [ - -1.048, -1.06, -1.072, -1.104, -1.136, -1.14, -1.1, -1.084, -1.064, - -1.048, -1.048, -1.044, -1.024, -1.008, -0.984, -0.964, -0.952, - -0.972, -0.98, -0.988, -0.992, -0.976, -0.972, -0.988, -0.992, - -1.004, -0.996, -0.988, -0.976, -0.98, -0.992, -0.976, -0.976, - -0.96, -0.968, -0.972, -0.984, -0.98, -0.996, -1.024, -1.04, -1.056, - -1.08, -1.08 - ], - "z": [ - 0.18, 0.136, 0.156, 0.188, 0.212, 0.244, 0.236, 0.212, 0.224, 0.3, - 0.344, 0.34, 0.288, 0.264, 0.304, 0.36, 0.376, 0.312, 0.296, 0.288, - 0.26, 0.292, 0.36, 0.376, 0.348, 0.324, 0.292, 0.28, 0.256, 0.248, - 0.228, 0.224, 0.244, 0.24, 0.216, 0.208, 0.204, 0.196, 0.18, 0.176, - 0.16, 0.156, 0.148, 0.12 - ] - } - }, + }, + "createdAt": 1730110792926 + } + ] + }, + { + "id": "931f1732-5bdc-4baf-b560-beecf1333439", + "name": "poke", + "icon": "Sword", + "createdAt": 1730110845881, + "recordings": [ { - "ID": 1729159356485, + "id": "adef518e-1296-4f10-a412-44e8c02b50a4", "data": { "x": [ - -0.476, -0.472, -0.46, -0.468, -0.492, -0.476, -0.512, -0.492, - -0.516, -0.5, -0.46, -0.464, -0.464, -0.484, -0.492, -0.488, -0.468, - -0.456, -0.448, -0.444, -0.468, -0.472, -0.48, -0.484, -0.476, - -0.472, -0.464, -0.444, -0.448, -0.468, -0.456, -0.448, -0.452, - -0.46, -0.448, -0.444, -0.452, -0.472, -0.472, -0.492, -0.464, - -0.456, -0.452, -0.456 + -0.024, -0.02, -0.052, -0.04, -0.036, -0.048, -0.016, -0.012, + -0.056, -0.052, -0.072, -0.056, -0.056, -0.084, -0.096, -0.048, + -0.02, -0.008, -0.104, -0.072, 0.084, 0.332, 0.46, -0.584, -1.532, + -0.956, -1.552, -0.62, 0.392, -0.08, -0.36, -0.28, -0.156, 0.016, + -0.184, -0.28, -0.38, -0.412, -0.252, -0.164, -0.112, -0.088, + -0.168, -0.144, -0.112, -0.092, -0.14, -0.16 ], "y": [ - 0.316, 0.332, 0.328, 0.328, 0.312, 0.312, 0.324, 0.328, 0.324, 0.34, - 0.36, 0.34, 0.308, 0.292, 0.304, 0.288, 0.292, 0.308, 0.308, 0.328, - 0.324, 0.312, 0.304, 0.3, 0.308, 0.312, 0.328, 0.336, 0.332, 0.328, - 0.328, 0.344, 0.344, 0.332, 0.32, 0.312, 0.312, 0.32, 0.312, 0.32, - 0.308, 0.288, 0.284, 0.28 + 0.1, 0.1, 0.108, 0.088, 0.1, 0.112, 0.128, 0.112, 0.088, 0.072, + 0.056, 0.08, 0.128, 0.2, 0.288, 0.412, 0.672, 1.068, 1.572, 2.04, + 2.04, 2.04, 0.356, -2.04, -2.04, -2.04, -1.544, -1.164, -0.436, + -0.104, 0.18, 0.3, 0.3, 0.212, 0.092, -0.028, -0.076, -0.04, 0.04, + 0.128, 0.196, 0.212, 0.204, 0.156, 0.168, 0.156, 0.092, 0.052 ], "z": [ - -0.88, -0.884, -0.884, -0.86, -0.876, -0.884, -0.848, -0.856, - -0.844, -0.864, -0.88, -0.868, -0.868, -0.884, -0.912, -0.904, - -0.908, -0.908, -0.904, -0.884, -0.872, -0.896, -0.888, -0.88, - -0.884, -0.868, -0.856, -0.884, -0.88, -0.888, -0.888, -0.88, - -0.884, -0.892, -0.884, -0.904, -0.912, -0.9, -0.904, -0.9, -0.928, - -0.924, -0.92, -0.904 + -1.064, -1.024, -1.008, -1.032, -1.032, -1.02, -1.004, -1.004, + -1.012, -1.056, -1.048, -1.072, -1.06, -1.012, -0.96, -0.956, + -0.888, -0.832, -0.72, -0.816, -0.72, -0.352, -0.624, -0.152, -1.94, + -1.412, -1.24, -1.896, -2.04, -1.38, -0.78, -0.544, -0.544, -0.928, + -0.98, -1.108, -1.188, -1.188, -1.212, -1.1, -0.996, -0.964, -0.94, + -0.98, -1.012, -1.052, -1.036, -1.04 ] - } + }, + "createdAt": 1730110894817 }, { - "ID": 1729159352516, + "id": "fcfbd9e4-9f40-4a4a-9361-b7035d767446", "data": { "x": [ - 0.032, 0.02, 0.04, 0.052, 0.088, 0.072, 0.076, 0.084, 0.088, 0.104, - 0.116, 0.144, 0.136, 0.148, 0.124, 0.084, 0.084, 0.088, 0.1, 0.104, - 0.092, 0.132, 0.168, 0.124, 0.084, 0.076, 0.124, 0.128, 0.08, 0.064, - 0.092, 0.088, 0.088, 0.104, 0.064, 0.028, 0.048, 0.076, 0.072, 0.08, - 0.064, 0.08, 0.12, 0.12 + -0.068, -0.056, -0.032, -0.036, -0.068, -0.048, -0.028, -0.032, + -0.028, -0.056, -0.108, -0.096, -0.084, -0.1, -0.056, -0.032, -0.02, + -0.02, 0.004, -0.004, 0.2, 0, -0.328, -0.068, 0.276, -0.52, -0.812, + -1.22, -1.088, 0.184, -0.032, -0.34, -0.34, -0.3, -0.044, -0.108, + -0.256, -0.3, -0.316, -0.252, -0.164, -0.12, -0.116, -0.116, -0.076, + -0.028, -0.048, -0.036, -0.004 ], "y": [ - 0.3, 0.316, 0.312, 0.308, 0.324, 0.336, 0.34, 0.348, 0.344, 0.332, - 0.332, 0.34, 0.336, 0.324, 0.288, 0.268, 0.288, 0.312, 0.328, 0.344, - 0.348, 0.36, 0.372, 0.376, 0.34, 0.312, 0.312, 0.312, 0.316, 0.312, - 0.3, 0.288, 0.284, 0.3, 0.3, 0.296, 0.316, 0.308, 0.324, 0.316, - 0.324, 0.28, 0.268, 0.276 + -0.012, -0.04, -0.024, -0.02, -0.02, -0.012, -0.004, 0.04, 0.096, + 0.116, 0.108, 0.1, 0.048, -0.012, -0.008, -0.004, 0.068, 0.196, + 0.472, 0.98, 1.824, 2.04, 2.04, 2.04, -0.368, -2.04, -2.04, -2.04, + -2.04, -1.196, -0.504, -0.056, 0.168, 0.22, 0.14, 0.064, 0.036, + -0.028, -0.064, -0.06, 0.024, 0.044, 0.068, 0.088, 0.08, 0.076, + 0.092, 0.096, 0.08 ], "z": [ - -0.992, -0.988, -0.972, -0.976, -0.988, -0.972, -0.96, -0.964, - -0.964, -0.988, -0.984, -0.992, -0.96, -0.96, -0.984, -1.008, - -1.028, -1.012, -0.996, -0.984, -0.964, -0.972, -0.976, -0.972, - -0.984, -0.988, -1, -0.992, -0.968, -0.964, -0.984, -0.98, -0.988, - -1.004, -0.992, -0.996, -1.016, -1.024, -0.984, -0.988, -0.988, - -0.988, -0.996, -0.984 + -1.048, -1.056, -1.064, -1.056, -1.036, -1.052, -1.064, -1.044, + -1.024, -0.988, -0.992, -1.036, -1.048, -1.024, -1.06, -1.056, + -1.04, -1.004, -0.944, -0.832, -0.972, -0.744, -0.176, -0.132, + -0.592, -0.576, -1.284, -1.46, -1.492, -2.04, -1.612, -0.908, + -0.608, -0.488, -0.828, -0.984, -1.016, -1.088, -1.14, -1.092, + -1.08, -1.008, -0.988, -0.996, -1.004, -1.044, -1.024, -1.004, + -1.012 ] - } + }, + "createdAt": 1730110890482 }, { - "ID": 1729159347563, + "id": "39081e43-edbe-4878-b92d-f9f10873eb60", "data": { "x": [ - 0.508, 0.716, 1.004, 1.18, 1.256, 1.196, 1.136, 1.172, 1.252, 1.304, - 1.288, 1.312, 1.316, 1.22, 1.108, 0.88, 0.52, 0.216, -0.104, -0.3, - -0.336, -0.4, -0.468, -0.528, -0.516, -0.572, -0.672, -0.704, - -0.572, -0.372, -0.316, -0.392, -0.5, -0.6, -0.72, -0.812, -0.792, - -0.688, -0.86, -1.224, -1.372, -1.344 + -0.068, -0.072, -0.072, -0.084, -0.06, -0.084, -0.068, -0.048, + -0.06, -0.04, -0.012, -0.024, -0.064, -0.068, -0.084, -0.096, -0.08, + -0.056, -0.048, -0.056, -0.044, -0.048, -0.036, -0.084, -0.212, + -0.152, -0.064, 0.152, 0.16, 0.328, 0.652, 0.56, -0.504, -1.552, + -1.284, -1.016, 0.228, 0.132, -0.528, -0.364, -0.124, 0.128, 0.132, + -0.14, -0.244, -0.252, -0.196, -0.116, -0.076, -0.092 ], "y": [ - 0.368, 0.436, 0.472, 0.444, 0.396, 0.38, 0.376, 0.332, 0.412, 0.384, - 0.5, 0.508, 0.524, 0.756, 0.484, 0.468, 0.68, 0.52, 0.588, 0.62, - 0.564, 0.544, 0.544, 0.584, 0.604, 0.612, 0.608, 0.612, 0.648, 0.7, - 0.692, 0.66, 0.588, 0.524, 0.472, 0.396, 0.316, 0.236, -0.104, -0.1, - -0.368, -0.328 + 0.08, 0.084, 0.08, 0.1, 0.088, 0.076, 0.064, 0.052, 0.076, 0.096, + 0.1, 0.092, 0.072, 0.068, 0.064, 0.064, 0.072, 0.08, 0.076, 0.068, + 0.076, 0.136, 0.204, 0.312, 0.448, 0.804, 1.42, 2.04, 2.04, 2.04, + 1.156, -0.52, -2.04, -2.04, -2.04, -2.04, -1.288, -0.556, -0.152, + 0.108, 0.228, 0.2, 0.148, 0.1, 0.048, 0, 0.004, -0.004, 0.016, 0.02 ], "z": [ - 0.532, 0.288, 0.224, 0.328, 0.344, 0.32, 0.356, 0.372, 0.304, 0.196, - 0.076, -0.124, -0.236, -0.164, -0.24, -0.192, -0.168, -0.14, -0.292, - -0.388, -0.564, -0.632, -0.584, -0.548, -0.524, -0.392, -0.284, - -0.228, -0.36, -0.552, -0.584, -0.476, -0.432, -0.368, -0.364, - -0.504, -0.652, -0.796, -0.792, -0.6, -0.312, -0.44 + -1.056, -1.032, -1.04, -1.02, -1.032, -1.016, -1.028, -1.052, + -1.032, -1.016, -1.016, -1.024, -1.032, -1.068, -1.06, -1.06, + -1.044, -1.036, -1.032, -1.032, -1.036, -1.036, -1, -0.944, -0.796, + -0.812, -0.856, -0.92, -0.504, -0.316, -0.68, -1.008, -0.52, -0.176, + -1.304, -1.704, -2.04, -1.968, -0.92, -0.632, -0.556, -0.792, -0.98, + -0.912, -0.972, -1.024, -1.072, -1.132, -1.1, -1.06 ] - } + }, + "createdAt": 1730110885869 }, { - "ID": 1729159343095, + "id": "098069b5-7da6-4008-8421-a63b5112a03a", "data": { "x": [ - 0.064, 0.256, 0.348, 0.284, 0.224, 0.096, -0.212, -0.74, -0.888, - -1.032, -0.808, -0.508, -0.536, -0.556, -0.44, -0.336, -0.288, - -0.28, -0.208, -0.064, 0.036, 0.032, -0.02, -0.092, -0.104, -0.048, - -0.036, -0.092, -0.292, -0.464, -0.488, -0.436, -0.428, -0.48, - -0.584, -0.612, -0.704, -0.816, -0.868, -0.792, -0.676, -0.636, - -0.572, -0.488 + -0.14, -0.12, -0.116, -0.16, -0.132, -0.092, -0.088, -0.08, -0.092, + -0.08, -0.08, -0.08, -0.032, -0.02, -0.052, -0.064, -0.092, -0.072, + -0.08, -0.04, 0.02, 0.052, 0.136, 0.096, -0.08, 0.148, 0.352, + -1.196, -0.96, -1.156, -0.864, 0.556, 0.052, -0.284, -0.38, -0.216, + 0.184, 0.136, -0.204, -0.268, -0.28, -0.216, -0.06, -0.004, 0.044, + 0.068, 0.024, 0.02, 0.02 ], "y": [ - 0.568, 0.6, 0.616, 0.644, 0.64, 0.6, 0.432, 0.352, 0.308, 0.376, - 0.404, 0.424, 0.36, 0.3, 0.3, 0.304, 0.32, 0.3, 0.316, 0.388, 0.432, - 0.448, 0.448, 0.476, 0.544, 0.608, 0.64, 0.604, 0.508, 0.368, 0.396, - 0.34, 0.304, 0.136, 0.196, 0.184, 0.16, 0.104, 0.08, 0.104, 0.132, - 0.128, 0.112, 0.112 + 0.084, 0.112, 0.112, 0.116, 0.152, 0.148, 0.14, 0.152, 0.128, 0.1, + 0.072, 0.068, 0.096, 0.088, 0.068, 0.092, 0.14, 0.196, 0.268, 0.384, + 0.648, 1.076, 1.668, 2.04, 2.04, 2.04, -0.184, -2.04, -2.04, -2.04, + -2.04, -1.272, -0.564, -0.044, 0.208, 0.28, 0.256, 0.124, -0.064, + -0.192, -0.164, -0.108, -0.048, 0.028, 0.1, 0.148, 0.136, 0.136, + 0.124 ], "z": [ - -0.76, -0.884, -0.908, -1.028, -1.196, -1.412, -1.312, -1.088, - -1.108, -0.96, -1.008, -1.148, -1.092, -1.12, -1.16, -1.176, -1.128, - -1.04, -0.944, -0.892, -0.84, -0.784, -0.728, -0.632, -0.536, - -0.508, -0.52, -0.544, -0.512, -0.584, -0.72, -0.84, -0.928, -0.916, - -0.904, -0.932, -0.856, -0.824, -0.84, -0.9, -0.912, -0.864, -0.9, - -0.94 + -1.02, -0.996, -0.98, -0.972, -0.992, -0.992, -0.988, -1, -1.024, + -1.032, -1.044, -1.056, -1.076, -1.06, -1.04, -1.048, -1.008, + -1.008, -0.92, -0.884, -0.84, -0.74, -0.788, -0.896, -0.72, -0.472, + -0.208, 0.768, -0.756, -1.86, -2.04, -2.04, -2.04, -1.144, -0.388, + -0.152, -0.56, -0.888, -0.964, -1.196, -1.284, -1.24, -1.208, + -1.076, -1.02, -0.988, -0.964, -1.012, -1.06 ] - } - } - ], - "requiredConfidence": 0.35000000000000003 - }, - { - "icon": "Tortoise", - "ID": 1729160762766, - "name": "flick-and-wait", - "recordings": [ - { - "ID": 1729160809521, - "data": { - "x": [ - 0.156, 0.18, 0.172, 0.148, 0.16, 0.168, 0.192, 0.212, 0.204, 0.18, - 0.168, 0.192, 0.192, 0.164, 0.156, 0.22, 0.288, 0.356, -0.06, -2.04, - -2.04, 1.052, 2.04, 2.04, 2.04, 2.04, 1.164, 0.616, 0.356, -0.524, - -0.268, -0.164, -0.328, -0.36, -0.212, -0.084, -0.048, -0.14, - -0.088, -0.1, -0.216, -0.272, -0.244, -0.216 - ], - "y": [ - -0.336, -0.348, -0.348, -0.36, -0.36, -0.352, -0.356, -0.352, - -0.348, -0.372, -0.356, -0.328, -0.328, -0.34, -0.348, -0.336, - -0.288, -0.216, -0.684, -2.04, -2.04, -2.04, -2.04, -2.04, -1.212, - 1.616, 1.028, 1.12, 1.032, 1.008, 0.916, 0.856, 0.78, 0.796, 0.768, - 0.752, 0.74, 0.688, 0.708, 0.704, 0.708, 0.68, 0.676, 0.696 - ], - "z": [ - -0.944, -0.98, -0.988, -0.964, -0.948, -0.96, -0.948, -0.96, -0.964, - -0.94, -0.948, -0.952, -0.944, -0.928, -0.904, -0.952, -0.936, - -1.068, -2.04, -2.04, -2.04, -2.04, -0.616, 1.604, 2.04, 2.04, 0.44, - 0.012, -1.248, -0.944, -0.848, -0.484, -0.476, -0.608, -0.668, - -0.748, -0.764, -0.808, -0.8, -0.756, -0.804, -0.856, -0.868, -0.868 - ] - } + }, + "createdAt": 1730110881733 }, { - "ID": 1729160804665, + "id": "37992398-b615-466e-ac1c-be4d4a685d14", "data": { "x": [ - 0.168, 0.14, 0.124, 0.14, 0.168, 0.192, 0.212, 0.2, 0.156, 0.148, - 0.156, 0.156, 0.132, 0.124, 0.128, 0.14, 0.12, -0.112, -1.276, - -2.04, -0.532, 2.04, 2.04, 2.04, 1.596, -0.12, 0.292, 0.996, -0.544, - -0.188, 0.116, -0.38, -0.436, -0.064, -0.052, -0.208, -0.04, 0.016, - -0.04, -0.052, -0.076, -0.156, -0.18, -0.124, -0.096 + 0.004, -0.024, -0.016, 0, 0.008, 0.04, 0.032, 0.024, 0.016, -0.004, + -0.02, 0.016, 0.068, 0.044, -0.012, -0.124, -0.044, 0.02, 0.124, + 0.268, 0.324, 0.568, 0.26, -1.384, -1.488, -1.232, -0.288, 0.484, + -0.392, -0.516, -0.344, -0.132, 0.224, 0.06, -0.136, -0.084, -0.1, + -0.056, -0.008, -0.072, -0.012, -0.02, -0.052, -0.064, -0.072, + -0.116, -0.164, -0.212, -0.148 ], "y": [ - -0.464, -0.496, -0.512, -0.524, -0.528, -0.516, -0.508, -0.48, - -0.476, -0.468, -0.48, -0.504, -0.5, -0.488, -0.488, -0.468, -0.428, - -0.516, -1.616, -2.04, -2.04, -2.04, -2.04, 0.032, 1.556, -0.016, - 0.648, 0.464, 0.216, 0.416, 0.74, 0.68, 0.584, 0.604, 0.536, 0.408, - 0.436, 0.46, 0.464, 0.484, 0.464, 0.436, 0.428, 0.46, 0.456 + -0.004, -0.028, -0.02, -0.004, 0.016, 0.044, 0.036, 0.032, 0.02, + 0.008, 0.016, 0.108, 0.252, 0.492, 0.76, 0.876, 0.916, 0.976, 1.304, + 2.04, 2.04, 1.752, -2.032, -2.04, -2.04, -2.04, -2.04, -1.184, + -0.548, -0.188, 0.056, 0.012, -0.084, -0.168, -0.252, -0.276, -0.28, + -0.192, -0.152, -0.144, -0.116, -0.084, -0.024, -0.032, -0.04, + -0.096, -0.02, 0.056, 0.164 ], "z": [ - -0.904, -0.884, -0.892, -0.912, -0.92, -0.904, -0.896, -0.876, - -0.828, -0.86, -0.892, -0.904, -0.904, -0.896, -0.884, -0.872, - -0.912, -1.26, -2.04, -2.04, -2.04, -2.04, 0.912, 2.04, 2.04, 2.04, - -0.828, -2.04, -1.38, -1.572, -1.048, -0.544, -0.688, -0.952, -1, - -0.928, -1.02, -0.98, -0.912, -0.912, -0.972, -1, -1.044, -0.976, - -0.94 + -1.056, -1.06, -1.068, -1.068, -1.036, -1.02, -1.016, -1.032, + -1.012, -1.016, -1, -0.98, -0.932, -0.94, -1, -0.872, -0.768, + -0.716, -0.812, -1.176, -1.296, -1.096, -0.188, 1.08, -0.38, -1.516, + -2.04, -2.04, -1.452, -0.856, -0.524, -0.48, -0.92, -1.036, -1.076, + -1.208, -1.168, -1.096, -1, -0.9, -0.904, -0.888, -0.88, -0.872, + -0.9, -0.912, -0.916, -0.98, -1.076 ] - } + }, + "createdAt": 1730110877571 }, { - "ID": 1729160799654, + "id": "e2b2d824-4b57-4f1a-9ddf-7c689f02d912", "data": { "x": [ - 0.224, 0.224, 0.204, 0.228, 0.212, 0.2, 0.228, 0.216, 0.216, 0.212, - 0.22, 0.212, 0.204, 0.204, 0.216, 0.18, 0.212, 0.228, 0.24, 0.26, - 0.248, 0.264, 0.34, 0.476, 0.328, -1.06, -2.04, -0.62, 2.04, 2.04, - 2.04, 2.04, -1.156, -0.936, 1.196, 0.236, -0.748, -0.004, -0.052, - -0.348, -0.364, -0.288, -0.272, -0.184, -0.116 + -0.056, -0.036, 0, 0.008, 0.016, 0, -0.06, -0.072, 0.08, 0.204, + 0.184, 0.408, 0.58, 0.592, 0.604, 0.528, 0.356, 0.208, -1.8, -0.908, + -1.808, -1.252, 0.58, -0.26, -0.356, -0.136, -0.072, 0.104, -0.184, + -0.256, -0.204, -0.108, 0.012, 0.024, -0.02, -0.08, -0.068, -0.06, + -0.068, 0.004, 0.024, 0.004, 0.016, 0.024, 0.008, -0.008, -0.012, + -0.032, 0 ], "y": [ - -0.52, -0.508, -0.52, -0.516, -0.508, -0.512, -0.5, -0.512, -0.52, - -0.52, -0.512, -0.508, -0.52, -0.52, -0.516, -0.52, -0.512, -0.516, - -0.516, -0.512, -0.508, -0.476, -0.432, -0.3, -0.532, -1.708, -2.04, - -2.04, -2.04, -2.04, -0.568, 0.108, 0.876, -1.144, -0.144, 0.164, - -0.004, 0.696, 0.792, 0.584, 0.472, 0.444, 0.476, 0.54, 0.568 + 0.2, 0.24, 0.192, 0.104, 0.144, 0.232, 0.22, 0.228, 0.448, 0.424, + 0.324, 0.264, 0.544, 1.344, 2.04, 2.04, 2.04, -1.78, -2.04, -2.04, + -2.04, -1.92, -0.796, -0.172, 0.172, 0.276, 0.252, 0.148, 0.032, + -0.148, -0.2, -0.132, -0.052, 0.008, 0.092, 0.148, 0.164, 0.108, + 0.076, 0.06, 0.048, 0.02, -0.02, -0.06, -0.1, -0.1, -0.096, -0.092, + -0.06 ], "z": [ - -0.896, -0.888, -0.836, -0.864, -0.844, -0.852, -0.864, -0.868, - -0.856, -0.856, -0.86, -0.864, -0.852, -0.864, -0.88, -0.848, - -0.852, -0.872, -0.864, -0.872, -0.832, -0.816, -0.752, -0.744, - -1.088, -2.04, -2.04, -2.04, -1.912, 0.884, 2.04, 1.86, 2.04, 0.836, - -2.04, -2.04, -0.876, -0.772, -0.5, -0.74, -0.904, -1.06, -1.036, - -0.896, -0.748 + -0.988, -0.952, -0.908, -0.888, -0.904, -0.964, -1.004, -1.036, + -1.136, -1.068, -0.912, -1.06, -1.148, -1.22, -1.168, -0.476, 0.676, + 0.304, 0.672, -1.616, -1.608, -1.98, -2.04, -1.304, -0.728, -0.504, + -0.548, -1.036, -1.064, -1.188, -1.256, -1.252, -1.176, -1.04, + -0.96, -0.928, -0.932, -0.968, -0.992, -1.072, -1.1, -1.068, -1.068, + -1.072, -1.088, -1.108, -1.128, -1.104, -1.088 ] - } + }, + "createdAt": 1730110873321 }, { - "ID": 1729160795515, + "id": "c6754c6b-44a5-4b8e-ada4-c7f6c3b9cc62", "data": { "x": [ - 0.144, 0.132, 0.144, 0.168, 0.152, 0.144, 0.136, 0.124, 0.12, 0.12, - 0.14, 0.164, 0.128, -0.016, 0, -0.636, -2.04, -2.04, 1.692, 2.04, - 2.04, 2.04, 0.308, 0.156, 1.524, 1.024, -0.56, -0.296, 0.216, -0.32, - -0.324, -0.096, -0.112, -0.176, 0.012, 0.06, -0.032, -0.14, -0.128, - -0.112, -0.1, -0.116, -0.096, -0.144 + -0.128, -0.072, -0.092, -0.108, -0.052, -0.084, -0.108, -0.108, + -0.084, -0.012, -0.004, -0.004, -0.052, -0.096, -0.048, -0.02, + -0.044, -0.148, -0.32, -0.004, 0.236, 0.2, -0.428, -1.52, -0.408, + 0.868, -0.12, -0.672, -0.556, -0.32, -0.08, -0.236, -0.332, -0.356, + -0.316, -0.18, -0.008, 0.124, 0.136, 0.2, 0.204, 0.164, 0.136, + 0.156, 0.016, -0.008, 0, 0 ], "y": [ - -0.384, -0.4, -0.4, -0.384, -0.388, -0.388, -0.396, -0.4, -0.388, - -0.408, -0.404, -0.392, -0.34, -0.264, -0.316, -0.892, -2.04, -2.04, - -2.04, -2.04, -1.388, -0.348, 1.376, 0.148, 0.376, 0.548, 0.34, - 0.516, 0.816, 0.808, 0.772, 0.796, 0.7, 0.64, 0.664, 0.724, 0.708, - 0.664, 0.628, 0.612, 0.624, 0.628, 0.608, 0.612 + 0.004, 0.012, 0.04, -0.008, -0.012, -0.004, 0.064, 0.064, 0.04, + 0.028, 0, -0.02, -0.036, 0.064, 0.404, 1.116, 1.98, 2.04, 2.04, + 2.04, -1.044, -2.04, -2.04, -2.04, -2.04, -1.584, -0.932, -0.492, + -0.252, -0.236, -0.268, -0.26, -0.292, -0.272, -0.168, -0.08, 0.048, + 0.22, 0.44, 0.48, 0.432, 0.132, 0.012, 0.076, 0.128, 0.04, -0.068, + -0.06 ], "z": [ - -0.936, -0.92, -0.936, -0.964, -0.944, -0.948, -0.936, -0.936, - -0.936, -0.944, -0.948, -0.964, -0.956, -0.98, -1.252, -2.008, - -2.04, -2.04, -2.04, -0.416, 1.512, 2.04, 2.04, 1.616, -1.084, - -1.76, -1.092, -1.068, -1.016, -0.396, -0.544, -0.712, -0.916, - -0.832, -0.876, -0.788, -0.776, -0.76, -0.872, -0.912, -0.896, - -0.828, -0.844, -0.88 + -1.08, -1.056, -0.976, -0.96, -1.06, -1.06, -1.064, -1.044, -1.04, + -1.064, -1.068, -1.084, -1.048, -1.056, -1.08, -1.04, -0.832, + -0.632, -0.588, -0.76, -1.02, -0.044, -0.224, -0.136, -1.712, -2.04, + -1.712, -0.92, -0.72, -0.656, -0.86, -0.864, -0.892, -0.976, -1.116, + -1.196, -1.164, -1.056, -0.852, -0.924, -0.928, -0.916, -0.952, + -1.14, -1.112, -1.044, -1.02, -1.016 ] - } + }, + "createdAt": 1730110869055 }, { - "ID": 1729160791306, + "id": "9ef250cc-b57c-4dbd-a4c3-06532c093dce", "data": { "x": [ - 0.212, 0.208, 0.216, 0.248, 0.232, 0.196, 0.236, 0.24, 0.256, 0.252, - 0.24, 0.276, 0.268, 0.28, 0.36, 0.3, 0.3, 0.056, -1.724, -2.04, - 0.76, 2.04, 2.04, 2.04, 1.652, 1.108, 0.304, 0.72, 0.796, -0.136, - -0.328, -0.216, -0.28, -0.352, -0.296, -0.104, -0.112, -0.048, 0.02, - -0.1, -0.212, -0.2, -0.132, -0.144 + -0.004, 0, 0, -0.028, -0.04, -0.036, -0.04, -0.028, -0.028, -0.024, + -0.004, 0.028, 0.028, 0.016, 0.016, 0.016, 0.028, 0.012, 0.032, + 0.028, 0, -0.088, -0.216, -0.344, -0.28, 0.156, 0.288, 0.076, + -0.512, -0.868, -1.284, 0.384, 0.42, -0.48, -0.196, 0.032, 0.22, + 0.068, -0.164, -0.252, -0.184, -0.088, -0.076, -0.004, 0.016, 0.016, + 0.016, 0.02, 0.064 ], "y": [ - -0.396, -0.396, -0.404, -0.412, -0.428, -0.432, -0.42, -0.428, - -0.408, -0.404, -0.392, -0.38, -0.38, -0.368, -0.288, -0.312, - -0.332, -0.648, -2.04, -2.04, -2.04, -2.04, -1.34, -0.84, 0.52, - 1.044, 0.172, 0.128, 0.428, 0.424, 0.56, 0.76, 0.792, 0.804, 0.76, - 0.748, 0.744, 0.748, 0.804, 0.756, 0.716, 0.692, 0.684, 0.7 + -0.004, -0.004, 0, 0, -0.008, 0, -0.008, -0.012, -0.004, -0.028, + -0.064, -0.06, -0.064, -0.056, -0.028, -0.028, 0.008, 0.064, 0.164, + 0.268, 0.544, 0.972, 1.52, 2.04, 2.04, 2.04, 0.704, -2.04, -2.04, + -2.04, -2.04, -1.552, -0.672, -0.2, 0.048, 0.168, 0.084, 0.016, + -0.076, -0.196, -0.168, -0.108, -0.056, 0, 0.06, 0.108, 0.124, + 0.112, 0.08 ], "z": [ - -0.888, -0.896, -0.92, -0.924, -0.932, -0.916, -0.944, -0.908, -0.9, - -0.92, -0.88, -0.896, -0.872, -0.864, -0.896, -0.868, -1.084, -1.84, - -2.04, -2.04, -2.04, -1.032, 0.36, 2.04, 2.04, 2.04, 1.088, -0.396, - -1.548, -1.292, -1.212, -0.94, -0.624, -0.628, -0.7, -0.872, -0.824, - -0.728, -0.692, -0.628, -0.728, -0.828, -0.86, -0.868 + -1, -1.032, -1.06, -1.036, -1.012, -0.988, -1, -1.016, -1.036, + -1.048, -1.072, -1.088, -1.096, -1.056, -1.068, -1.052, -1.06, + -1.032, -0.992, -0.92, -0.888, -0.824, -0.756, -0.604, -0.544, + -0.772, -0.48, -0.476, -0.32, -1.204, -1.32, -2.04, -2.04, -0.872, + -0.736, -0.696, -0.912, -1.008, -1.08, -1.132, -1.176, -1.128, + -1.036, -1.012, -0.98, -0.968, -0.976, -0.996, -1.056 ] - } + }, + "createdAt": 1730110864664 }, { - "ID": 1729160786788, + "id": "549aaca8-3e49-481d-bdad-d9a9025df75f", "data": { "x": [ - -0.212, -0.108, 0.056, 0.372, 0.712, 1.1, 1.304, 0.768, 0.416, 0.46, - 0.648, 0.92, 1.076, 0.2, 0.172, 0.532, 0.54, 0.544, 0.556, 0.432, - 0.324, 0.384, 0.444, 0.504, 0.5, 0.504, 0.588, 0.628, 0.284, -0.444, - -2.04, 0.92, 2.04, 2.04, 2.04, 2.04, 1.672, -0.608, 1.46, 0.556, - -1.116, 0.1, 0.02, -0.604 + -0.02, -0.012, 0.02, 0, 0, -0.008, -0.008, -0.024, -0.04, -0.02, 0, + 0, -0.02, -0.004, 0.024, 0.016, 0.036, 0.032, 0.064, 0.144, 0.2, + 0.052, -0.176, -0.308, -0.368, -0.756, -0.268, -0.984, -0.704, + 0.092, -0.256, -0.32, -0.288, -0.116, -0.084, -0.212, -0.172, + -0.148, -0.096, -0.052, -0.068, -0.08, -0.04, 0, 0.004, -0.024, + -0.028, -0.06 ], "y": [ - 0.888, 0.868, 0.88, 0.848, 0.74, 0.368, -0.124, -0.752, -1.364, - -1.816, -1.676, -1.236, -1.116, -1.244, -0.956, -0.652, -0.472, - -0.348, -0.364, -0.404, -0.52, -0.532, -0.496, -0.508, -0.5, -0.492, - -0.46, -0.484, -0.68, -1.752, -2.04, -2.04, -2.04, -2.04, -2.04, - -1.884, 2.04, -2.04, -2.04, -0.084, 0.456, 0.784, 0.752, 0.356 + -0.044, -0.052, -0.032, -0.02, -0.028, -0.028, -0.012, -0.008, + -0.016, 0, 0.008, 0.012, 0.004, 0.012, 0.032, 0.06, 0.104, 0.172, + 0.308, 0.624, 1.24, 2.04, 2.04, 2.04, -1.032, -2.04, -2.04, -1.472, + -1.312, -0.552, -0.032, 0.208, 0.372, 0.36, 0.248, 0.092, -0.036, + -0.044, -0.02, 0.04, 0.076, 0.104, 0.14, 0.164, 0.172, 0.14, 0.124, + 0.112 ], "z": [ - -0.46, -0.32, -0.04, 0.276, 0.384, 0.324, 0.056, -0.144, -0.404, - -1.084, -1.956, -2.04, -2.04, -1.676, -1.124, -0.824, -0.616, - -0.616, -0.704, -0.776, -0.808, -0.936, -0.86, -0.732, -0.68, - -0.716, -0.672, -0.736, -0.864, -2.04, -2.04, -2.04, -2.04, 0.344, - 2.04, 2.04, 2.04, 1.424, -0.836, -1.96, 0.96, 0.132, -0.188, -0.336 + -1.064, -1.072, -1.088, -1.024, -1.032, -1.052, -1.06, -1.056, + -1.024, -1.036, -1.048, -1.02, -1.004, -1.012, -1.012, -1.008, + -1.008, -0.968, -0.912, -0.804, -0.712, -0.688, -0.7, -0.444, + -0.328, -0.18, -1.696, -2.004, -2.04, -2.04, -1.1, -0.688, -0.468, + -0.612, -0.828, -0.924, -1.092, -1.176, -1.144, -1.076, -0.988, + -0.944, -1, -1.016, -1.024, -1.016, -1.04, -1.032 ] - } + }, + "createdAt": 1730110859709 }, { - "ID": 1729160782525, + "id": "b292c503-4942-4f2c-8b05-631eebc7ece7", "data": { "x": [ - 2.04, 2.04, 2.04, 0.74, -0.904, 0.236, 0.944, -0.288, -0.404, 0.076, - -0.06, -0.356, -0.36, -0.26, -0.248, -0.172, -0.308, -0.236, -0.236, - -0.252, -0.272, -0.248, -0.32, -0.308, -0.296, -0.268, -0.224, - -0.26, -0.344, -0.296, -0.232, -0.304, -0.24, -0.248, -0.312, - -0.276, -0.228, -0.264, -0.264, -0.26, -0.308, -0.236, -0.292, - -0.308 + -0.168, -0.164, -0.148, -0.14, -0.136, -0.152, -0.128, -0.112, + -0.108, -0.128, -0.132, -0.132, -0.12, -0.116, -0.108, -0.124, + -0.132, -0.108, -0.088, -0.028, 0.052, -0.088, -0.196, -0.088, + -0.092, -0.372, -0.772, -0.452, -0.448, -0.428, -0.356, -0.12, 0.04, + -0.052, -0.28, -0.228, -0.104, -0.092, -0.112, -0.148, -0.208, + -0.196, -0.144, -0.152, -0.128, -0.132, -0.152, -0.124, -0.136 ], "y": [ - -2.04, -2.008, 0.952, 1.488, 0.132, 0.084, 0.088, 0.452, 0.784, - 1.124, 0.944, 0.732, 0.736, 0.836, 0.924, 0.932, 0.78, 0.752, 0.76, - 0.756, 0.8, 0.78, 0.72, 0.704, 0.728, 0.768, 0.788, 0.772, 0.716, - 0.736, 0.768, 0.768, 0.768, 0.756, 0.74, 0.736, 0.768, 0.76, 0.736, - 0.748, 0.752, 0.768, 0.752, 0.72 + 0.176, 0.168, 0.14, 0.144, 0.136, 0.124, 0.112, 0.088, 0.076, 0.084, + 0.092, 0.116, 0.136, 0.16, 0.196, 0.228, 0.256, 0.22, 0.256, 0.424, + 0.72, 1.14, 1.924, 2.04, 2.04, 0.644, -1.536, -2.04, -2.04, -1.584, + -1.336, -1, -0.572, -0.264, -0.1, 0.024, 0.012, -0.032, -0.064, + -0.088, -0.068, -0.068, -0.04, 0, 0.02, 0.028, 0.032, 0.012, -0.008 ], "z": [ - -1.236, 1.516, 2.04, 2.04, 1.956, -1.944, -2.04, -0.812, 0.12, - -0.204, -0.588, -0.568, -0.796, -0.696, -0.42, -0.528, -0.568, -0.8, - -0.748, -0.672, -0.624, -0.664, -0.648, -0.76, -0.772, -0.688, - -0.676, -0.676, -0.668, -0.72, -0.72, -0.652, -0.68, -0.688, -0.656, - -0.688, -0.724, -0.664, -0.668, -0.7, -0.636, -0.716, -0.672, -0.724 + -0.992, -0.956, -0.964, -1.016, -1.024, -1.02, -1.008, -1.016, + -1.036, -1.04, -1.032, -1.024, -1.044, -1.048, -1.032, -1.032, + -0.992, -0.976, -1, -1.024, -1.024, -0.792, -0.716, -0.78, -0.696, + -0.196, -0.04, -0.856, -0.816, -1.136, -1.508, -1.764, -1.744, + -1.392, -0.976, -0.9, -0.888, -0.928, -0.996, -1.032, -1.016, + -1.048, -1.072, -1.044, -1.04, -1.004, -0.98, -0.984, -0.98 ] - } + }, + "createdAt": 1730110855284 } - ], - "requiredConfidence": 0.37 + ] }, { - "icon": "StickFigure", - "ID": 1729160875428, + "id": "24764089-67ac-4bfa-877d-f8ad35605b84", "name": "waggle", + "icon": "Confused", + "createdAt": 1730110896681, "recordings": [ { - "ID": 1729161027028, + "id": "111929b3-697d-4267-a310-fe637d3564fc", "data": { "x": [ - 0.464, 0.604, 0.352, -0.308, -0.544, 0.044, 0.388, 0.496, 0.476, - 0.272, -0.268, -0.436, -0.172, 0.38, 0.492, 0.444, 0.264, -0.028, - -0.276, -0.236, 0, 0.216, 0.22, 0.2, 0.116, -0.044, 0.132, 0.236, - 0.208, 0.172, 0.08, -0.004, 0.048, 0.072, 0.104, 0.132, 0.192, 0.1, - -0.008, 0.056, 0.048, 0.072, 0.164, 0.168, 0.128, 0.036 + 1.872, 1.088, 0.208, -0.06, -1.748, -1.112, 1.548, 1.96, 1.464, + 0.276, -0.244, -1.136, -1.012, 1.236, 1.956, 1.168, -0.424, -1.508, + -0.592, 1.488, 1.864, 1.016, -0.092, -0.688, -1.744, 0.256, 1.94, + 2.04, 1.124, -0.032, -0.772, -1.692, 0.332, 2.04, 2.04, 0.604, + -0.564, -1.812, -0.348, 2.04, 2.024, 0.648, -0.648, -1.572, -0.312, + 1.912, 1.716, -0.032, -0.52 ], "y": [ - -0.072, -0.716, -0.804, -0.688, -0.52, 0.052, 0.752, 0.204, -0.756, - -1, -0.772, -0.784, -0.312, 0.216, 0.82, -0.22, -0.644, -0.512, - -0.588, -0.448, -0.112, 0.008, -0.108, -0.052, -0.072, -0.036, - 0.188, 0.188, 0.08, 0.06, -0.04, -0.072, -0.076, -0.052, -0.064, - -0.016, 0.048, 0.008, -0.008, -0.04, -0.04, -0.044, -0.052, -0.044, - 0, 0.032 + 1.008, 0.784, -0.216, -1.064, -1.356, -0.988, -0.4, 0.66, 0.932, + 0.14, -0.736, -1.16, -0.804, -0.176, 0.86, 0.632, -0.448, -1.076, + -0.808, -0.196, 0.864, 0.816, -0.172, -1.316, -1.272, -0.82, 0.112, + 1.096, 0.52, -0.572, -1.488, -1.276, -0.808, 0.324, 1.104, 0.348, + -1.124, -1.368, -0.976, 0.016, 1.196, 0.42, -1.116, -1.16, -0.62, + 0.732, 1.344, 0.096, -1.572 ], "z": [ - 0.444, -1.308, -2.04, -2.04, -1.336, 0.096, 1.236, 0.908, -0.728, - -2.04, -2.04, -2.04, -0.552, 0.808, 1.144, 0.26, -1.336, -2.04, - -2.04, -1.568, -0.512, -0.184, -0.544, -1.204, -1.34, -0.98, -0.72, - -0.564, -0.688, -1.016, -1.244, -1.252, -1.276, -1.116, -1.028, - -0.984, -0.964, -0.948, -0.908, -1, -1.036, -1.024, -1.064, -1.068, - -1.108, -1.096 + 0.712, 0.472, -0.384, -2.04, -2.04, -1.808, -0.936, 0.336, 0.42, + -0.08, -1.584, -2.04, -1.86, -0.888, 0.292, 0.356, -0.684, -2.04, + -2.04, -1.036, 0.528, 0.644, -0.348, -2.04, -2.04, -1.744, 0.052, + 0.904, 0.432, -0.62, -2.04, -2.04, -1.388, 0.112, 0.72, 0.404, + -1.612, -2.04, -2.04, -0.224, 1.012, 0.396, -1.716, -2.04, -1.684, + 0.216, 0.996, 0.248, -2.04 ] - } + }, + "createdAt": 1730110968106 }, { - "ID": 1729161023128, + "id": "41eda2c4-605b-4347-8958-c67528560919", "data": { "x": [ - 0.448, 0.688, 0.592, 0.248, -0.596, -0.708, -0.54, -0.208, 0.248, - 0.556, 0.608, 0.396, -0.076, -0.824, -0.484, -0.444, -0.064, 0.304, - 0.516, 0.416, 0.308, -0.088, -0.352, -0.46, -0.296, 0.092, 0.44, - 0.468, 0.132, 0.084, -0.132, -0.26, -0.38, -0.272, 0.048, 0.352, - 0.404, 0.18, 0.18, 0.1, 0.028, -0.44, -0.356, 0, 0.32 + 0.056, 0.532, 0.44, 0, 0.004, 0.164, -0.216, -0.36, -0.136, 0.34, + 0.396, 0.18, -0.016, 0.256, 0.072, -0.4, -0.436, -0.056, 0.456, + 0.392, 0.172, 0.008, 0.244, 0.196, -0.26, -0.46, -0.052, 0.444, + 0.204, 0.08, 0.244, 0.288, 0.192, -0.24, -0.516, -0.2, 0.412, 0.416, + 0.24, 0.068, 0.26, 0.012, -0.652, -0.504, 0.132, 0.608, 0.416, + 0.064, 0.176 ], "y": [ - 0.852, 0.16, -0.54, -1.096, -1.184, -0.968, -0.576, -0.024, 0.584, - 0.96, -0.08, -0.688, -1.144, -1.228, -1.076, -0.66, 0.084, 0.776, - 1.072, -0.096, -0.988, -1.264, -1.316, -1.032, -0.424, 0.304, 0.868, - 1.004, -0.06, -0.972, -1.184, -1.228, -0.928, -0.344, 0.252, 0.908, - 0.956, -0.192, -1.2, -1.304, -1.38, -1.116, -0.484, 0.268, 1.064 + -0.164, 0.624, 1.168, 1.144, 0.172, -0.82, -0.868, -0.608, -0.164, + 0.26, 0.864, 1.184, 0.764, -0.28, -1.048, -1.136, -0.812, -0.316, + 0.248, 0.904, 1.332, 0.904, -0.188, -1.068, -1.268, -0.888, -0.352, + 0.2, 0.784, 1.312, 1.216, 0.136, -1.012, -1.2, -0.872, -0.264, + 0.256, 1.016, 1.484, 1.028, -0.148, -1.204, -1.196, -0.692, 0, + 0.724, 1.372, 1.468, 0.156 ], "z": [ - 0.964, 0.24, -1, -2.04, -2.04, -2.04, -0.78, 0.348, 1, 0.76, 0.028, - -1.408, -2.04, -2.04, -2.04, -0.66, 0.356, 1.128, 0.788, -0.152, - -2.04, -2.04, -2.04, -1.336, -0.068, 0.6, 0.772, 0.376, -0.3, -2.04, - -2.04, -2.04, -1.436, -0.288, 0.528, 0.956, 0.74, 0.012, -2.012, - -2.04, -2.04, -1.512, -0.256, 0.76, 1.296 + -0.528, -0.344, 0.128, 0.464, -0.324, -2.028, -2.04, -1.804, -0.692, + -0.648, -0.304, 0.272, 0.38, -0.88, -2.04, -2.04, -1.68, -0.78, + -0.764, -0.22, 0.5, 0.44, -0.836, -2.04, -2.04, -1.644, -0.816, + -0.848, -0.284, 0.464, 0.528, -0.504, -2.04, -2.04, -1.996, -0.904, + -0.772, -0.116, 0.608, 0.588, -0.804, -2.04, -2.04, -1.588, -0.688, + -0.38, 0.46, 1.06, 0.136 ] - } + }, + "createdAt": 1730110963698 }, { - "ID": 1729161018855, + "id": "64f636c1-2a19-43f1-aad2-0585efabfdf1", "data": { "x": [ - -0.044, -0.248, 0.048, 0.124, -0.164, -0.28, 0.172, 0.996, 1, 0.032, - 0.088, 0.496, 0.444, 0.28, 0.016, 0.104, 0.552, 0.924, 0.264, - -0.196, 0.2, 0.584, 0.612, 0.256, -0.02, -0.1, 0.304, 1.068, 0.416, - -0.28, 0.08, 0.38, 0.48, 0.368, 0.232, 0, 0.116, 0.764, 0.272, - -0.164, 0.272, 0.504, 0.576, 0.248 + -0.872, 1.228, 1.48, 1, 0.128, -0.92, -1.44, 0.276, 1.4, 1.124, + 0.552, 0.244, -0.504, -1.516, -0.508, 1, 1.372, 1.188, 0.356, + -0.424, -1.62, -0.46, 1.112, 1.28, 1.084, 0.336, -0.008, -1.296, + -1.304, 0.608, 1.336, 1.34, 0.632, 0.16, -0.824, -1.48, 0.3, 1.368, + 1.316, 0.344, -0.184, -1.028, -0.764, 0.784, 1.288, 0.96, 0.032, + -1.124, -1.128 ], "y": [ - -0.832, -0.064, 0.74, 1.42, 1.5, -0.308, -1.76, -1.828, -1.68, - -1.308, -0.648, 0.04, 0.856, 1.08, 0.312, -0.664, -1.588, -1.52, - -1.448, -1.108, -0.352, 0.312, 0.96, 1.096, 0.096, -0.94, -1.768, - -1.552, -1.52, -1.04, -0.304, 0.272, 0.876, 1.16, 0.18, -0.772, - -1.468, -1.38, -1.292, -0.9, -0.196, 0.428, 0.968, 1.132 + -0.676, 0.088, 1.04, 0.636, -0.252, -1.032, -0.844, -0.352, 0.54, + 1.072, 0.44, -0.372, -1.008, -0.928, -0.492, 0.164, 0.94, 0.74, + -0.204, -1.084, -1.104, -0.7, 0.016, 1.036, 1.036, 0.056, -0.932, + -1.2, -0.908, -0.352, 0.584, 1.024, 0.288, -0.608, -1.164, -0.856, + -0.4, 0.364, 0.792, 0.312, -0.516, -0.776, -0.512, 0.044, 0.724, + 0.496, -0.224, -0.868, -0.712 ], "z": [ - -1.124, -0.64, -0.216, 0.464, 0.86, 0.716, -0.98, -2.04, -2.04, - -1.636, -0.772, -0.236, 0.736, 1.132, 0.784, -0.548, -2.04, -2.04, - -2.04, -1.12, -0.444, 0.28, 0.74, 0.948, 0.456, -0.684, -2.04, - -2.04, -2.04, -0.84, -0.36, 0.348, 0.624, 0.66, 0.188, -0.876, - -2.04, -2.04, -2.04, -1.044, -0.632, 0.008, 0.532, 1.04 + -1.416, -0.652, 0.316, 0.232, -0.688, -2.04, -2.04, -1.148, -0.116, + 0.348, -0.028, -1.044, -2.04, -2.04, -1.36, -0.544, 0.24, 0.136, + -0.392, -2.04, -2.04, -1.592, -0.564, 0.432, 0.42, -0.052, -1.82, + -2.04, -1.972, -1.008, 0.084, 0.388, 0.028, -1.26, -2.04, -2.04, + -1.24, -0.208, 0.068, -0.072, -1.332, -2.04, -1.82, -0.912, 0.108, + 0.06, -0.748, -1.976, -2.04 ] - } + }, + "createdAt": 1730110956731 }, { - "ID": 1729161014420, + "id": "eadbd428-b05d-4c3a-a938-f5e8f3e1b807", "data": { "x": [ - 0.972, 0.516, 0.5, 0.22, -0.156, -0.28, 0.088, 0.628, 1.3, 1.148, - 0.86, 0.504, 0.272, 0.208, -0.104, -0.008, 0.284, 0.844, 1.272, - 0.564, 0.288, 0.432, 0.416, 0.208, -0.004, 0.18, 0.468, 1.092, 0.92, - 0.464, 0.38, 0.348, 0.12, 0, 0.112, 0.168, 0.496, 0.98, 1.396, - 0.984, 0.352, 0.356, 0.128, -0.072 + 1.452, 0.64, 0.46, -1.608, -2.04, 0.592, 1.648, 1.284, 1.128, 0.664, + 0.764, -0.624, -2.04, -1.032, 1.368, 1.564, 1.696, 1.132, 0.508, + -0.496, -2.04, -0.792, 1.372, 1.404, 1.46, 0.92, 0.712, -0.096, + -2.04, -1.464, 1.076, 1.468, 1.676, 1.292, 0.736, 0.108, -2.04, + -1.416, 1.32, 1.296, 1.288, 0.624, 0.036, -1.044, -1.176, 1.036, + 1.648, 0.584, -0.812 ], "y": [ - -1.208, -0.804, -0.048, 0.572, 1.188, 1.06, 0.176, -0.732, -1.084, - -0.924, -0.836, -0.46, 0.084, 0.732, 1.504, 0.964, -0.404, -1.152, - -1.236, -1.288, -1.048, -0.384, 0.476, 1.232, 1.424, 0.212, -0.936, - -1.268, -1.268, -1.372, -0.508, 0.228, 0.912, 1.212, 1.144, 0.072, - -0.896, -1.4, -1.196, -0.912, -0.508, 0.156, 0.944, 1.444 + 0.928, -0.176, -1.368, -1.968, -1.772, -1.404, -0.352, 0.904, 1.364, + 0.272, -0.92, -1.652, -1.6, -1.34, -0.748, 0.392, 1.192, 0.528, + -0.492, -1.516, -1.4, -1.108, -0.524, 0.532, 1.244, 0.696, -0.312, + -1.412, -1.508, -1.092, -0.712, 0.412, 1.348, 0.752, -0.38, -1.368, + -1.436, -1.044, -0.608, 0.488, 0.952, 0.404, -0.536, -0.992, -0.616, + 0, 0.664, 0.352, -0.588 ], "z": [ - -2.04, -1.312, -0.584, 0.304, 1.264, 1.312, 0.2, -0.968, -2.04, - -2.04, -2.04, -1.412, -0.564, 0.364, 1.436, 1.068, -0.376, -2.04, - -2.04, -2.04, -1.496, -0.844, 0.18, 0.956, 1.396, 0.3, -1.28, -2.04, - -2.04, -2.024, -1.164, -0.304, 0.588, 1.14, 0.644, -0.32, -1.52, - -2.04, -2.04, -2.016, -0.872, -0.204, 0.712, 1.276 + 0.556, 0.168, -1.688, -2.04, -2.04, -2, -0.324, 0.776, 0.968, 0.512, + -1.116, -2.04, -2.04, -2.036, -1.184, 0.26, 0.772, 0.604, -0.496, + -2.04, -2.04, -2.04, -0.996, 0.516, 0.768, 0.536, -0.496, -2.04, + -2.04, -2.04, -1.376, 0.32, 0.816, 0.604, -0.36, -2.04, -2.04, + -2.04, -1.548, 0.36, 0.564, 0.18, -1.06, -2.04, -2.04, -1.272, + 0.096, 0.396, -1.2 ] - } + }, + "createdAt": 1730110951969 }, { - "ID": 1729161010340, + "id": "52b0efd9-2e93-4fbe-a990-41b9060e9ff9", "data": { "x": [ - 0.152, 0.404, 0.288, 0.188, -0.092, -0.108, 0.48, 1.212, 1.612, - 0.744, -0.116, 0.2, 0.34, 0.284, -0.016, -0.288, 0.124, 0.98, 1.588, - 1.444, 0.056, 0.14, 0.416, 0.32, 0.04, -0.16, -0.044, 0.584, 1.336, - 1.688, 0.52, 0.064, 0.4, 0.268, 0.144, -0.16, 0.048, 0.996, 1.624, - 1.616, 0.504, 0.256, 0.272, -0.088 + 0.412, -0.484, -1.636, -1.372, -0.484, 0.216, 0.804, 1.46, 1.172, + 0.524, -0.032, -1.608, -1.292, -0.572, -0.316, 0.368, 0.692, 0.948, + 0.792, 0.204, -0.372, -0.988, -0.732, -0.772, -0.316, 0.62, 1.084, + 0.892, 0.268, -0.42, -1.156, -1.172, -0.944, -0.34, 0.532, 0.96, + 0.944, 0.624, 0.264, -0.5, -1.02, -0.824, -0.728, -0.056, 0.708, + 1.132, 0.964, 0.38 ], "y": [ - -0.7, -0.056, 0.408, 0.892, 1.232, 0.172, -0.724, -1.26, -0.916, -1, - -0.904, -0.18, 0.388, 0.904, 1.408, 0.708, -0.468, -1.52, -1.316, - -1.12, -1.224, -0.692, 0.128, 0.8, 1.304, 1.312, 0.22, -0.984, -1.4, - -0.9, -1.056, -0.764, 0.004, 0.736, 1.292, 1.228, -0.056, -1.232, - -1.388, -1.308, -1.304, -0.648, 0.228, 0.988 + -1.024, -2.04, -1.944, -1.3, -0.596, 0.144, 1.224, 1.48, 0.476, + -0.94, -2.04, -2.016, -1.364, -0.856, -0.376, 0.084, 0.696, 1.132, + 0.808, -0.064, -1.548, -1.904, -1.424, -1.016, -0.24, 0.744, 1.632, + 1.468, -0.004, -2.02, -2.04, -1.684, -1.156, -0.504, 0.396, 1.228, + 1.536, 0.916, -0.376, -1.688, -1.672, -1.252, -0.908, -0.208, 0.904, + 1.456, 0.86, -0.452 ], "z": [ - -0.94, -0.436, 0.188, 0.568, 0.768, 0.284, -0.952, -2.04, -2.04, - -2.04, -0.92, -0.332, 0.32, 0.676, 0.8, 0.52, -0.408, -1.904, -2.04, - -2.04, -1.412, -0.564, 0.108, 0.58, 0.916, 0.632, 0.008, -1.176, - -2.04, -2.04, -1.88, -0.732, -0.276, 0.492, 0.908, 0.972, 0.192, - -1.392, -2.04, -2.04, -1.812, -0.78, -0.084, 0.908 + -0.912, -2.04, -2.04, -2.04, -0.968, -0.112, 1.2, 1.672, 0.824, + -0.336, -2.04, -2.04, -2.04, -1.512, -0.584, -0.368, 0.34, 0.776, + 0.68, -0.072, -1.728, -2.04, -2.04, -1.4, -0.056, 0.64, 1.5, 1.412, + 0.236, -1.78, -2.04, -2.04, -1.276, -0.28, 0.028, 0.632, 1.288, + 1.032, -0.116, -1.8, -2.04, -2.04, -1.216, -0.344, 0.408, 1.244, + 1.396, 0.2 ] - } + }, + "createdAt": 1730110947823 }, { - "ID": 1729160922477, + "id": "4fe2f639-0080-4e3a-9655-2995565a2638", "data": { "x": [ - 0.648, -1.224, -2.04, -2.04, -0.552, 0.5, 1.36, 1.936, 2.04, 1.972, - 1.608, 0.68, -1.036, -2.04, -2.04, -0.884, 0.72, 1.572, 2.04, 2.04, - 2.016, 1.46, 0.636, -0.888, -2.04, -2.04, -0.996, 0.4, 1.168, 1.948, - 2.04, 2.04, 1.176, 0.576, -0.988, -2.04, -2.04, -0.116, 0.62, 1.432, - 2.04, 2.04, 1.764, 1.588 + -1.472, -0.212, 0.86, 0.856, 0.468, 0.296, -0.7, -1.32, -0.092, + 0.932, 0.668, 0.452, 0.12, -0.992, -0.844, 0.348, 1.096, 0.576, + 0.088, -0.644, -0.792, -0.052, 0.892, 0.628, -0.688, -1.224, -0.58, + 0.26, 0.856, 0.776, -0.108, -1.024, -0.632, 0.244, 0.7, 0.956, + 0.356, -0.66, -1.448, -1.012, -0.084, 0.768, 0.664, 0.536, 0.044, + -1.284, -1.08, -0.264, -0.148 ], "y": [ - -0.7, -0.816, -1.26, -1.356, -0.648, -0.256, -0.02, 0.404, 0.076, - -0.264, -0.5, -0.82, -0.808, -0.976, -1.492, -0.852, -0.316, -0.064, - 0.288, 0.16, -0.12, -0.476, -0.788, -0.708, -1.044, -1.508, -0.996, - -0.672, -0.468, -0.068, 0.348, 0.42, -0.104, -0.396, -0.604, -1.268, - -1.296, -0.648, -0.404, -0.268, 0.196, 0.144, -0.196, -0.484 + -0.684, 0.508, 1.388, 0.856, -0.592, -1.14, -0.908, -0.436, 0.652, + 1.284, 0.568, -0.74, -0.996, -0.652, -0.136, 0.612, 0.584, -0.02, + -0.716, -0.396, -0.1, 0.148, 0.34, -0.144, -0.928, -0.704, -0.188, + 0.452, 0.496, 0.092, -0.552, -0.596, -0.4, 0.292, 0.52, 0.112, + -0.532, -1.024, -0.8, -0.472, 0.172, 0.492, 0.176, -0.112, -0.484, + -0.6, -0.636, -0.304, 0.152 ], "z": [ - -0.832, -1.5, -1.508, -1.572, -2.04, -1.248, -0.152, 0.292, 0.404, - 0.568, -0.268, -0.912, -1.428, -1.396, -1.324, -2.04, -1.58, -0.3, - 0.436, 0.472, 0.744, 0.076, -0.648, -1.348, -1.42, -1.66, -2.04, - -1.964, -0.612, 0.212, 0.98, 1.056, 1.064, -0.432, -1.62, -1.824, - -2.04, -2.04, -1.288, 0.048, 0.604, 1.02, 1.204, 0.156 + -1.82, -0.308, 1.184, 0.912, -0.624, -2.04, -2.04, -1.252, 0.228, + 1.352, 0.716, -1.02, -2.04, -2.04, -1.152, 0.32, 0.848, -0.188, + -1.976, -2.04, -1.46, 0.044, 0.12, -0.928, -1.764, -2.04, -1.548, + -0.08, 0.52, -0.384, -1.684, -2.04, -1.768, -0.644, 0.64, 0.144, + -1.136, -2.04, -2.04, -1.588, -0.7, -0.032, 0.244, -0.56, -1.652, + -1.804, -1.908, -1.708, -0.852 ] - } + }, + "createdAt": 1730110939381 }, { - "ID": 1729160918245, + "id": "f50f1519-8f71-491a-afc2-9c6a73143104", "data": { "x": [ - -0.3, 0.104, 0.2, 0.232, 0.188, 0.188, 0.596, 0.728, -0.18, -0.204, - 0.26, 0.312, 0.328, 0.36, 0.144, 0.56, 0.708, -0.2, -0.048, 0.388, - 0.144, 0.02, 0.296, 0.532, 0.996, 0.376, -0.196, 0.132, 0.256, - 0.204, 0.096, 0.004, 0.44, 0.776, -0.08, -0.172, 0.136, 0.176, 0.18, - 0.352, 0.392, 0.528, 0.684, -0.1 + 0.276, 0.272, 0.324, 0.192, 0.372, 0.224, 0.324, 0.12, -0.6, -0.98, + -0.04, 0.764, 0.796, 0.512, 0.376, 0.252, 0.1, -0.3, -0.34, -0.12, + 0.072, 0.252, 0.292, 0.38, 0.256, -0.108, -0.276, -0.316, -0.924, + -0.104, 0.728, 1.248, 1.16, 0.212, -0.336, -0.532, -0.16, -1.488, + -1.048, 0.304, 0.668, 0.796, 0.432, 0.188, 0.168, -0.044, -0.024, + -0.7 ], "y": [ - -0.724, -0.272, 0.316, 0.868, 0.344, -0.556, -1.008, -1.072, -1.104, - -0.672, -0.296, 0.352, 0.952, 0.112, -0.772, -1.112, -0.96, -0.976, - -0.452, -0.096, 0.496, 0.8, -0.492, -1.072, -0.868, -0.968, -0.692, - -0.2, 0.14, 0.756, 0.548, -0.76, -0.72, -0.836, -0.984, -0.616, - -0.244, 0.32, 0.672, 0.02, -0.86, -0.936, -0.972, -0.96 + -0.036, 0.128, 0.508, 1.276, 1.352, 0.1, -1.348, -1.372, -1.128, + -0.812, 0.008, 0.796, 1.156, 0.644, 0.112, -0.32, -0.572, -0.616, + -0.408, -0.02, 0.512, 1.072, 1.384, 0.836, -0.276, -1.672, -1.688, + -1.364, -0.896, -0.204, 0.668, 1.548, 1.868, 0.516, -1.7, -2.04, + -1.796, -1.468, -0.676, 0.188, 0.972, 1.556, 1.492, 0.376, -1.184, + -1.784, -1.648, -1.424 ], "z": [ - -1.128, -0.468, 0.932, 1.72, 1.112, -0.592, -2.04, -2.04, -2.04, - -1.204, -0.364, 1.196, 2.02, 1.08, -0.976, -2.04, -2.04, -2.04, - -1.02, -0.06, 1.764, 1.844, 0.188, -1.952, -2.04, -2.04, -1.472, - -0.84, 0.544, 1.704, 1.488, -0.328, -2.04, -2.04, -2.04, -1.384, - -0.476, 0.836, 1.48, 0.772, -0.784, -2.04, -2.04, -2.04 + -0.812, -1.136, -1.048, -0.02, 0.596, 0.596, -1.276, -2.04, -2.04, + -1.364, -0.652, -0.14, 0.66, 0.928, 0.072, -1.188, -2.04, -2.04, + -1.816, -1.056, -0.58, -0.052, 0.876, 1.06, 0.064, -1.944, -2.04, + -2.04, -1.16, -0.528, -0.04, 0.948, 1.816, 1.304, -1.068, -2.04, + -2.04, -1.56, -0.416, -0.44, 0.34, 1.052, 1.456, 0.508, -1.28, + -2.04, -2.04, -1.916 ] - } + }, + "createdAt": 1730110935138 }, { - "ID": 1729160914261, + "id": "064f9a2c-d99d-4b9a-924e-d5f715573804", "data": { "x": [ - 0.444, 0.292, 0.112, 0.632, 1.212, -0.14, -0.168, 0.332, 0.34, - 0.516, 0.628, 0.2, 0.748, 1.212, -0.408, -0.232, 0.192, 0.228, - 0.348, 0.32, 0.292, 0.096, 1.136, 1.352, -0.088, 0.164, 0.332, - 0.312, 0.68, 0.34, -0.088, 1.016, 0.772, -0.4, 0.268, 0.556, 0.636, - 0.46, 0.304, -0.1, 0.396, 1.264, 0.156, -0.244 + 0.244, 0.088, -0.3, -0.34, -0.272, -0.18, 0.38, 0.636, 0.428, 0.184, + 0.132, -0.196, -0.06, -0.416, -0.12, 0.564, 0.708, 0.532, 0.404, + 0.004, -0.144, -0.128, -0.452, 0.316, 0.864, 0.712, 0.428, 0.192, + -0.388, -0.208, -0.648, -0.588, 0.352, 0.712, 0.584, 0.196, 0.132, + -0.016, -0.132, -0.304, 0.256, 0.6, 0.58, 0.196, 0.08, -0.048, + -0.232, 0.016, -0.188 ], "y": [ - 0.86, 0.26, -0.696, -1.268, -0.872, -1.252, -0.872, -0.392, 0.22, - 1.1, 0.28, -1.056, -0.92, -0.764, -1.056, -0.66, -0.196, 0.1, 0.352, - 0.548, 0.44, -0.82, -0.948, -0.832, -0.896, -0.42, -0.228, 0.976, - 0.868, -0.264, -1.944, -1.536, -1.136, -1.156, -0.6, -0.092, 0.5, - 0.884, 0.236, -0.96, -1.332, -0.948, -1.14, -0.792 + 0.496, -0.772, -1.608, -1.26, -0.74, -0.164, 0.428, 0.964, 0.976, + 0.076, -1.164, -1.46, -1.104, -0.684, 0.036, 0.876, 1.388, 0.884, + -0.456, -1.804, -1.552, -1.048, -0.404, 0.428, 1.272, 1.54, 0.532, + -1.16, -2.04, -1.516, -1.04, -0.328, 0.516, 1.352, 1.444, 0.172, + -1.48, -1.62, -1.316, -0.836, -0.148, 0.824, 1.524, 1.152, -0.324, + -1.62, -1.6, -1.132, -0.528 ], "z": [ - 2.04, 1.308, -0.296, -2.04, -2.04, -2.04, -1.436, -0.212, 1.892, - 2.04, 1.444, -0.668, -2.04, -2.04, -1.92, -1.052, -0.552, -0.208, - 0.176, 1.024, 0.736, -0.744, -2.04, -2.04, -1.824, -1.004, 0.888, - 2.04, 2.04, 0.552, -1.508, -2.04, -2.04, -1.552, -0.76, 0.372, - 1.572, 2.04, 1.04, -0.4, -2.04, -2.04, -2.04, -1.204 + 0.536, -0.972, -2.04, -2.04, -1.864, -0.428, -0.124, 0.412, 0.74, + 0.208, -1.44, -2.04, -2.04, -1.4, -0.212, 0.428, 1.192, 1.076, + -0.276, -2.04, -2.04, -2.04, -0.66, -0.188, 0.556, 1.364, 0.948, + -0.824, -2.04, -2.04, -1.808, -0.204, 0.08, 0.812, 1.108, 0.344, + -1.812, -2.04, -2.04, -1.12, -0.548, 0.088, 0.98, 1.024, -0.336, + -2.04, -2.04, -2.04, -0.748 ] - } + }, + "createdAt": 1730110929535 }, { - "ID": 1729160910190, + "id": "16310978-ff3a-4a8d-85b1-bb25c725a10f", "data": { "x": [ - 1.54, 1.188, 0.064, -1.284, -2.04, -1.268, 1.12, 0.684, 0.56, 1.096, - 0.952, -0.4, -1.816, -2.032, -0.356, 0.548, 0.808, 0.664, 1.036, - 1.468, 1.112, -0.292, -1.96, -2.04, -0.356, 0.7, 0.492, 1.016, 1.6, - 1.796, 1.216, -0.536, -1.948, -2.04, 0.04, 1.304, 0.716, 0.796, - 1.384, 1.896, 1.508, -0.016, -1.668, -2.04 + 0.144, 0.096, 0.092, -0.088, -0.388, -0.488, -0.064, 0.368, 0.436, + 0.248, 0.148, 0.028, -0.008, -0.372, -0.488, -0.064, 0.356, 0.472, + 0.332, 0.264, 0.084, 0.008, -0.404, -0.448, 0.036, 0.464, 0.52, + 0.356, 0.184, -0.092, -0.012, -0.572, -0.408, 0.172, 0.504, 0.512, + 0.144, 0.088, -0.032, -0.36, -0.48, -0.188, 0.228, 0.48, 0.412, + 0.256, 0.108, -0.068, -0.508 ], "y": [ - 0.46, 0.78, 0.948, 0.416, -2.036, -2.04, -0.896, -0.86, -0.396, - 0.048, 0.548, 0.292, -0.312, -0.268, -0.852, -1.132, -0.736, -0.064, - -0.084, -0.052, 0.392, 0.532, -0.276, -1.072, -1.344, -1.244, - -0.856, -0.204, 0.06, 0.144, 0.248, 0.544, -1.036, -1.516, -1.448, - -0.984, -0.84, -0.34, -0.036, 0.12, 0.372, 0.4, -0.288, -1.492 + 0.424, -0.292, -1.036, -1.128, -0.892, -0.472, 0.004, 0.448, 0.784, + 0.524, -0.156, -0.888, -1.072, -0.984, -0.56, -0.04, 0.512, 0.864, + 0.56, -0.228, -1.12, -1.232, -1.096, -0.672, -0.06, 0.624, 1.036, + 0.736, -0.32, -1.264, -1.24, -1.088, -0.552, 0.016, 0.712, 0.9, + 0.28, -0.484, -0.964, -1.016, -0.72, -0.268, 0.248, 0.676, 0.876, + 0.184, -0.78, -1.072, -1.16 ], "z": [ - -0.064, 0.652, 1.148, 1.268, 0.768, -2.04, -2.04, -1.952, -0.16, - -0.228, 0.232, 0.92, 1.196, -0.248, -2.04, -2.04, -1.88, -0.596, - -0.368, 0.168, 0.568, 0.84, 0.724, -0.812, -2.04, -2.04, -1.108, - -0.392, -0.092, 0.432, 0.992, 1.092, 1.004, -0.688, -2.04, -2.04, - -1.468, -0.296, 0.072, 0.244, 0.78, 1.124, 0.956, 0.564 + 0.26, -0.756, -2.04, -2.04, -2.008, -0.796, -0.54, -0.168, 0.492, + 0.576, -0.36, -2.024, -2.04, -2.04, -1.096, -0.536, 0.052, 0.736, + 0.812, -0.264, -2.04, -2.04, -2.04, -1.084, -0.484, 0.148, 1.088, + 1.148, -0.252, -2.04, -2.04, -2.04, -0.82, -0.256, 0.444, 0.692, + 0.216, -1.2, -2.04, -2.04, -1.66, -0.836, -0.312, 0.376, 0.932, + 0.212, -1.512, -2.04, -2.04 ] - } + }, + "createdAt": 1730110925513 }, { - "ID": 1729160906185, + "id": "c79c5e37-325c-49d5-8640-e60c23950942", "data": { "x": [ - 1.896, 2.04, 2.04, 2.04, 1.288, -0.004, -1.68, -2.04, -2.04, -0.74, - 0.444, 1.66, 2.04, 2.04, 2.04, 1.024, -0.064, -1.52, -2.04, -1.752, - -0.052, 0.84, 1.62, 2.04, 2.04, 1.6, 0.356, -0.72, -2.04, -2.04, - -1.14, 0.556, 1.176, 2.04, 2.04, 2.004, 1.632, 0.672, -0.996, -2.04, - -2.04, -0.824, 0.708, 1.612 + 0.116, 0.224, 0.268, 0.432, 0.304, -0.044, -0.484, -0.512, -0.084, + 0.208, 0.26, 0.384, 0.372, 0.112, -0.272, -0.536, -0.396, 0.052, + 0.196, 0.216, 0.38, 0.408, 0.032, -0.476, -0.488, -0.088, 0.144, + 0.22, 0.32, 0.524, 0.292, -0.284, -0.612, -0.54, 0.004, 0.252, + 0.212, 0.204, 0.268, 0.204, -0.352, -0.76, -0.228, 0.256, 0.276, + 0.2, 0.32, 0.276 ], "y": [ - -0.244, 0.532, 0.684, -0.06, -0.84, -1.512, -1.572, -1.532, -1.42, - -1.276, -0.912, -0.44, 0.292, 0.604, 0.3, -0.42, -1.004, -1.392, - -1.872, -1.32, -1.048, -0.772, -0.244, 0.424, 0.764, 0.428, -0.268, - -0.764, -1.34, -1.64, -1.192, -0.832, -0.32, 0.328, 0.96, 0.776, - 0.048, -0.912, -1.62, -2.004, -2.008, -1.452, -1.1, -0.46 + 0.088, 0.304, 0.632, 0.46, -0.176, -0.84, -0.96, -0.484, -0.072, + 0.092, 0.52, 0.756, 0.412, -0.508, -0.832, -0.684, -0.18, 0.1, + 0.224, 0.556, 0.508, 0.004, -0.74, -0.956, -0.52, 0.004, 0.168, + 0.456, 0.784, 0.448, -0.472, -0.904, -0.804, -0.368, 0.024, 0.392, + 0.788, 0.852, 0.248, -0.5, -0.64, -0.448, 0.008, 0.204, 0.556, 0.88, + 0.264, -0.48 ], "z": [ - -0.072, 0.672, 0.844, 0.988, -0.096, -1.004, -2, -2.04, -2.04, -1.9, - -0.916, -0.28, 0.28, 0.616, 0.744, 0.236, -0.752, -1.676, -2.036, - -2.04, -2.04, -1.132, -0.484, -0.04, 0.404, 0.748, 0.456, -0.556, - -1.392, -2.04, -2.04, -1.984, -0.432, 0.332, 0.728, 1.044, 0.284, - -0.676, -1.652, -2.04, -2.04, -2.04, -1.304, -0.172 + -0.54, 0.024, 0.724, 0.336, -1.064, -2.04, -2.04, -1.592, -0.768, + -0.36, 0.38, 0.728, -0.06, -1.816, -2.04, -2.04, -1.02, -0.644, + -0.276, 0.452, 0.376, -0.804, -2.04, -2.04, -1.772, -0.864, -0.448, + 0.088, 0.668, 0.124, -1.456, -2.04, -2.04, -1.088, -0.544, -0.408, + 0.192, 0.436, -0.272, -2.04, -2.04, -1.852, -0.872, -0.608, -0.032, + 0.688, 0.296, -1.368 ] - } + }, + "createdAt": 1730110921508 }, { - "ID": 1729160902241, + "id": "c576737a-0b1f-472f-a75f-cec86f35b83c", "data": { "x": [ - 0.788, -0.808, -2.04, -1.736, -0.52, 0.56, 1.712, 2.028, 1.664, - 1.284, 0.472, -1.24, -1.704, -1.276, -0.588, 0.732, 1.808, 2.032, - 1.62, 1.188, 0.544, -1.304, -2.04, -1.132, -0.108, 0.948, 1.964, - 1.852, 1.408, 1.068, 0.18, -1.528, -2.04, -1.496, -0.284, 1.236, - 1.82, 1.976, 1.284, 1.048, 0.42, -1.256, -2.016, -1.276 + 0.452, 0.764, 0.564, 0.44, 0.068, -0.516, -0.612, -0.324, 0.068, + 0.504, 0.62, 0.544, 0.288, -0.212, -0.712, -0.624, -0.096, 0.264, + 0.604, 0.744, 0.436, -0.044, -0.596, -0.684, -0.224, 0.16, 0.444, + 0.608, 0.468, 0.108, -0.384, -0.712, -0.444, 0.044, 0.468, 0.744, + 0.548, 0.228, -0.444, -0.896, -0.404, 0.084, 0.528, 0.684, 0.384, + 0.092, -0.484, -0.792, -0.192 ], "y": [ - -0.152, -1.504, -1.964, -1.608, -1.364, -0.804, 0.12, 1.036, 1.176, - 0.324, -0.468, -1.732, -1.828, -1.624, -1.36, -0.712, 0.152, 1.024, - 1.14, -0.004, -0.768, -1.748, -1.824, -1.524, -1.188, -0.496, 0.22, - 1.048, 1.004, 0.204, -0.632, -1.652, -1.784, -1.544, -1.224, -0.488, - 0.688, 1.168, 1.044, 0.04, -0.876, -1.716, -1.728, -1.432 + 0.556, 1.104, 0.84, -0.12, -0.972, -1.124, -0.96, -0.652, -0.128, + 0.548, 0.896, 0.552, -0.224, -1.016, -1.032, -0.676, -0.24, 0.208, + 0.692, 0.744, 0.068, -0.98, -1.212, -0.908, -0.492, 0, 0.504, 0.836, + 0.48, -0.432, -0.972, -0.896, -0.472, -0.008, 0.632, 0.896, 0.232, + -0.836, -1.232, -1.024, -0.512, 0.048, 0.608, 0.724, 0.064, -0.992, + -1.204, -0.952, -0.448 ], "z": [ - -0.32, -1.636, -2.04, -2.04, -2.04, -0.616, 0.088, 0.884, 1.464, - 0.956, -0.424, -1.708, -2.04, -2.04, -1.62, -0.516, 0.112, 1.048, - 1.572, 0.932, -0.592, -2.04, -2.04, -2.04, -1.304, -0.196, 0.508, - 1.008, 1.252, 0.4, -0.98, -2.04, -2.04, -2.04, -1.244, -0.512, - 0.284, 1.036, 1.556, 0.572, -0.88, -2.04, -2.04, -2.04 + -0.148, 0.568, 0.984, 0.06, -1.684, -2.04, -2.04, -1.508, -0.608, + 0.012, 0.868, 0.724, -0.56, -2.04, -2.04, -2.04, -0.964, -0.036, + 0.696, 0.664, -0.3, -2.036, -2.04, -2.04, -1.276, -0.46, 0.348, + 0.768, 0.084, -1.252, -2.04, -2.04, -1.564, -0.528, 0.588, 1.196, + 0.436, -1.436, -2.04, -2.04, -1.468, -0.364, 0.66, 1.048, 0.032, + -2.04, -2.04, -2.04, -1.144 ] - } - }, + }, + "createdAt": 1730110916926 + } + ] + }, + { + "id": "9db8233a-60f2-414d-a0cd-9b0d12064616", + "name": "flick", + "icon": "Yes", + "createdAt": 1730110969638, + "recordings": [ { - "ID": 1729160898388, + "id": "460e4f1f-af8f-4073-85bb-fd699717b3c7", "data": { "x": [ - 0.416, 1.396, 1.696, 1.292, 0.728, 0.324, -0.704, -1.328, -1.024, - -0.304, 0.608, 1.264, 1.34, 1.136, 0.728, -0.164, -1.436, -1.556, - -0.524, 0.528, 1.18, 1.34, 1.016, 0.728, 0.552, -0.356, -1.252, - -1.324, -0.492, 0.528, 1.312, 1.492, 1.2, 0.708, 0.304, -0.62, - -1.316, -0.828, 0.168, 0.572, 1.1, 1.16, 0.672, 0.572 + 0.016, 0.028, 0.024, 0.02, 0.012, 0.028, 0.012, 0, 0.012, 0.02, + 0.028, 0.024, 0.008, -0.02, 0.004, 0.008, 0.136, 0.196, 0.232, + -0.332, -2.04, -2.04, 0.064, 2.04, 2.04, 2.04, 0.44, 1.208, 0.596, + 0.308, 0.168, -0.276, -0.188, -0.072, -0.04, -0.096, 0, 0.104, + 0.108, 0.064, 0.036, 0.036, 0, -0.012, 0.048, 0.132, 0.156, 0.124, + 0.096, 0.104 ], "y": [ - -0.768, 0.048, 0.96, 1.116, 0.256, -0.568, -1.772, -1.624, -1.324, - -1.024, -0.34, 0.416, 0.948, 1.152, 0.256, -0.972, -1.616, -1.44, - -1.204, -0.596, 0.16, 0.832, 0.98, 0.628, 0.032, -1.108, -1.456, - -1.168, -1.196, -0.836, -0.004, 0.852, 1.04, 0.612, 0, -1.096, - -1.524, -1.344, -1.084, -0.452, 0.42, 1.076, 1.068, 0.44 + -0.208, -0.224, -0.232, -0.224, -0.204, -0.208, -0.212, -0.204, + -0.2, -0.204, -0.204, -0.216, -0.2, -0.2, -0.2, 0.036, -0.016, + 0.008, -0.04, -0.624, -2.04, -2.04, -2.04, -1.692, -0.82, 0.912, + 1.596, 0.348, -0.32, -0.632, -0.032, 0.252, 0.296, 0.376, 0.456, + 0.476, 0.448, 0.448, 0.416, 0.376, 0.352, 0.296, 0.22, 0.152, 0.116, + 0.088, 0.048, 0.008, 0.012, 0.024 ], "z": [ - -1.052, -0.232, 0.764, 1.508, 1.192, -0.284, -2.04, -2.04, -2.04, - -1.084, -0.44, 0.04, 0.756, 0.896, 0.216, -1.028, -2.04, -2.04, - -2.04, -0.728, -0.264, 0.392, 1.088, 1.012, -0.012, -1.428, -2.04, - -2.04, -2.04, -0.968, -0.3, 0.312, 0.972, 1.076, 0.076, -1.364, - -2.04, -2.04, -1.988, -0.528, -0.092, 0.428, 1.02, 0.78 + -1.008, -1.032, -1.04, -1.02, -1.008, -1.012, -1.008, -1.016, + -1.024, -1.012, -0.996, -1.012, -1.024, -1.004, -1.028, -0.976, + -0.984, -0.856, -1.056, -2.04, -2.04, -2.04, -2.04, -1.064, 1.844, + 2.04, 2.04, 0.224, -0.492, -1.436, -1.848, -1.096, -0.916, -0.868, + -0.952, -0.9, -0.912, -0.972, -0.98, -0.976, -0.968, -1.028, -1.088, + -1.104, -1.14, -1.148, -1.148, -1.16, -1.18, -1.156 ] - } + }, + "createdAt": 1730111021721 }, { - "ID": 1729160894170, + "id": "c1393888-5895-4d82-84bc-3d33ba037b85", "data": { "x": [ - 1.52, 1.396, -0.492, -1.152, -0.708, 0.016, 1.208, 1.26, -0.416, - -1.236, -0.9, -0.224, 1.116, 1.408, 0.288, -0.956, -1.308, -0.512, - 0.308, 1.148, 0.96, -0.456, -0.608, -0.344, -0.092, 0.852, 0.984, - 0.256, -0.816, -1.288, -0.428, 0.252, 0.996, 1.184, 0.704, -0.036, - -0.788, -0.832, -0.256, 0.264, 0.808, 0.952, 0.572, 0.028 + 0.044, 0.06, 0.044, 0.004, 0, -0.008, -0.02, 0.032, 0.064, 0.024, + 0.008, 0.036, 0.064, 0.06, 0.056, 0.04, -0.26, -1.32, -2.04, -1.056, + 1.98, 2.04, 1.832, 2.02, 1.316, 0.152, -0.096, -0.38, -0.38, -0.344, + -0.496, -0.252, -0.02, 0.016, -0.02, -0.068, -0.1, -0.072, -0.02, + -0.004, -0.02, -0.008, 0.016, 0.02, 0.032, 0.032, 0.028, 0.052, + 0.068 ], "y": [ - 1.612, 0.904, -0.764, -1.068, -0.532, 0.048, 1.14, 1.064, -0.42, - -1.244, -0.676, -0.172, 0.94, 1.7, -0.636, -1.108, -0.472, -0.372, - 0.24, 1.288, 0.756, -0.66, -0.924, -0.488, -0.056, 0.928, 1.256, - -0.272, -1.076, -0.856, -0.532, -0.024, 0.908, 1.6, 0.032, -1.144, - -1.148, -0.724, -0.66, 0, 1.012, 1.212, 0.272, -0.572 + -0.168, -0.168, -0.184, -0.188, -0.176, -0.184, -0.168, -0.156, + -0.168, -0.156, -0.152, -0.14, -0.128, -0.1, -0.06, 0.016, -0.172, + -1.632, -2.04, -2.04, -1.112, -0.412, 1.108, 1.472, 0.844, -0.076, + -0.28, 0.084, 0.28, 0.28, 0.344, 0.36, 0.352, 0.348, 0.36, 0.336, + 0.284, 0.256, 0.228, 0.16, 0.116, 0.112, 0.108, 0.088, 0.06, 0.024, + 0.028, 0.052, 0.044 ], "z": [ - 1.084, 0.512, -0.784, -2.04, -2.04, -0.412, 0.836, 0.508, -0.824, - -2.04, -2.04, -0.676, 0.884, 0.984, 0.016, -2.04, -2.04, -2.04, - 0.008, 1.104, 0.512, -0.792, -2.04, -2.04, -0.772, 0.516, 0.888, - -0.036, -2.04, -2.04, -2.04, -0.636, 0.688, 1.244, 0.812, -0.924, - -2.04, -2.04, -1.58, -0.144, 0.88, 1.112, 0.356, -1.204 + -1.02, -1.012, -1.028, -1.036, -1.052, -1.06, -1.028, -1.016, -1.02, + -1.024, -1.004, -1.004, -0.996, -0.984, -0.948, -1.036, -1.752, + -2.04, -2.04, -2.024, -1.668, 1.72, 2.04, 2.04, 0.392, -0.412, + -1.512, -1.48, -1.096, -1.124, -0.996, -1.032, -1.032, -1.024, + -1.06, -1.032, -1, -1.036, -1.124, -1.148, -1.132, -1.1, -1.088, + -1.048, -1.056, -1.108, -1.116, -1.096, -1.06 ] - } - } - ], - "requiredConfidence": 0.76 - }, - { - "icon": "SmallDiamond", - "ID": 1729161417082, - "name": "Poke", - "recordings": [ + }, + "createdAt": 1730111017623 + }, { - "ID": 1729161719599, + "id": "a97b77d2-c44b-4013-840a-fe8a215808a8", "data": { "x": [ - 0.324, 0.22, 0.168, 0.2, 0.252, 0.216, 0.192, 0.24, 0.284, 0.284, - 0.212, 0.216, 0.34, 0.516, 0.4, 0.412, 0.708, -0.868, -1.472, -0.68, - -0.656, 0.308, 1.024, 0.648, 0.316, 0.076, -0.136, -0.176, 0.116, - 0.388, 0.504, 0.436, 0.228, 0.04, -0.02, 0.124, 0.268, 0.344, 0.288, - 0.228, 0.396, 0.504, 0.244, 0.444 + -0.056, -0.036, -0.032, -0.024, -0.008, -0.012, -0.044, -0.04, + -0.004, 0.004, -0.04, -0.036, -0.016, 0.016, -0.008, -0.172, -0.672, + -1.864, -2.04, 0.648, 2.04, 2.04, 1.356, 1.304, 1.828, 0.508, 0.128, + -0.072, -0.304, -0.24, -0.204, -0.136, 0.04, 0.148, 0.172, 0.156, + 0.108, 0.12, 0.052, -0.028, 0, 0.076, 0.128, 0.1, 0.024, 0, 0.02, + 0.076, 0.104 ], "y": [ - 0.236, 0.276, 0.292, 0.296, 0.24, 0.192, 0.176, 0.208, 0.168, 0.16, - 0.236, 0.356, 0.856, 1.78, 2.04, 1.324, -0.556, -2.04, -1.724, - -1.364, -1.824, -1.272, -0.36, -0.116, -0.064, -0.024, 0.02, 0.212, - 0.448, 0.552, 0.608, 0.544, 0.5, 0.372, 0.312, 0.332, 0.38, 0.476, - 0.624, 0.952, 1.796, 2.04, 1.98, -0.028 + -0.26, -0.264, -0.272, -0.28, -0.272, -0.296, -0.336, -0.34, -0.316, + -0.292, -0.268, -0.264, -0.264, -0.224, -0.196, -0.176, -0.58, + -2.04, -2.04, -2.04, -1.68, -1.312, 0.312, 1.596, 1.528, 0.672, + 0.108, 0.232, 0.42, 0.416, 0.296, 0.16, 0.024, 0.156, 0.156, 0.072, + 0.04, 0.08, 0.084, 0.052, 0.012, -0.016, -0.004, 0.012, -0.02, 0, + -0.004, -0.032, -0.044 ], "z": [ - -0.952, -0.892, -0.884, -0.84, -0.832, -0.868, -0.936, -1.036, - -1.044, -1.08, -1.044, -1.092, -1.224, -1.456, -1.296, -0.68, - -0.428, 1.388, 0.772, -1.1, -1.372, -1.716, -2.036, -1.516, -1.124, - -0.86, -0.628, -0.56, -0.704, -0.784, -0.84, -0.82, -0.812, -0.828, - -0.952, -1.076, -1.036, -1.036, -0.976, -0.908, -1.032, -1.192, - -0.736, -0.692 + -0.968, -0.992, -1.008, -1.012, -1.02, -1.004, -1.012, -1.048, + -1.084, -1.044, -0.992, -0.964, -0.96, -0.996, -0.956, -1.176, + -2.04, -2.04, -2.04, -2.04, -1.316, 1.372, 2.04, 2.04, 0.628, 0.46, + -0.4, -0.94, -0.748, -0.62, -0.696, -0.888, -1.144, -1.296, -1.348, + -1.404, -1.332, -1.216, -1.124, -1.088, -1.152, -1.16, -1.124, + -1.08, -1.06, -1.048, -1.072, -1.076, -1.076 ] - } + }, + "createdAt": 1730111013390 }, { - "ID": 1729161464980, + "id": "2c05aef7-fd5c-43e3-a985-bb72a0c54301", "data": { "x": [ - 0.052, 0.044, -0.048, -0.148, -0.04, 0.064, 0.116, 0.096, -0.04, - -0.096, 0.184, 0.1, 0.096, -0.308, -0.348, -0.008, -0.548, -0.508, - 0.272, 0.26, 0.16, 0.032, -0.176, -0.256, -0.156, 0.024, 0.04, 0.1, - 0.02, -0.156, -0.12, 0.46, 0.404, 0.192, -0.116, -0.3, -0.104, - 0.076, 0.188, 0.072, -0.132, -0.088, 0.32, 0.356 + -0.008, -0.004, 0.012, 0.012, 0.012, 0.004, 0.004, 0.004, -0.004, + -0.008, 0, 0.032, 0.072, 0.088, 0.064, 0.076, -0.04, -0.564, -1.784, + -2.04, -0.54, 2.04, 2.04, 2.04, 2.04, 1.876, -0.136, -0.456, -0.452, + -0.2, -0.196, -0.38, -0.276, -0.068, 0.012, -0.008, -0.14, -0.176, + -0.052, -0.048, -0.08, 0, 0.032, 0.036, 0.04, 0.056, 0.068, 0.14 ], "y": [ - 0.236, 0.172, 0.2, 0.164, 0.148, 0.316, 0.564, 0.884, 1.224, 1.7, - 2.04, 2.04, 0.528, -2.04, -2.04, -2.04, -1.988, -1.636, -0.76, - -0.384, -0.348, -0.428, -0.696, -1.052, -1.032, -0.764, -0.572, - -0.34, 0.368, 0.912, 0.66, 0.008, 0.188, 0.204, 0.236, 0.272, 0.352, - 0.46, 0.604, 0.776, 0.908, 1.264, 1.868, 1.812 + -0.096, -0.08, -0.08, -0.1, -0.108, -0.112, -0.124, -0.12, -0.124, + -0.12, -0.112, -0.084, -0.052, -0.052, -0.06, -0.032, 0.052, -0.46, + -2.04, -2.04, -2.04, -2.04, -1.728, 1.412, 2.04, 1.036, -0.976, + -0.86, -0.152, 0.112, 0.116, -0.1, 0.004, 0.148, 0.256, 0.344, + 0.208, 0.152, 0.124, 0.108, 0.076, 0.052, 0.032, -0.008, -0.004, 0, + -0.008, 0.12 ], "z": [ - -1.068, -0.956, -0.904, -0.88, -0.948, -0.984, -0.96, -0.864, - -0.728, -0.628, -0.912, -1.028, -1.06, -0.176, 0.116, -0.804, - -0.836, -0.892, -1.892, -1.768, -1.512, -1.224, -0.832, -0.596, - -0.656, -0.684, -0.592, -0.648, -0.78, -0.772, -1.044, -1.78, - -1.452, -1.172, -0.876, -0.616, -0.728, -0.836, -0.972, -0.96, -0.9, - -0.992, -1.284, -1.196 + -1.036, -1.012, -1.004, -1.028, -1.052, -1.048, -1.036, -1.032, + -1.044, -1.04, -1.012, -0.972, -0.94, -0.932, -0.932, -0.936, + -1.212, -2.04, -2.04, -2.04, -2.04, -1.48, 2.04, 2.04, 2.04, 0.384, + 0.352, -1.36, -1.66, -1.56, -1.128, -1.024, -1.248, -1.328, -1.204, + -1.156, -1.156, -1.164, -1.232, -1.228, -1.144, -1.144, -1.076, + -1.08, -1.1, -1.076, -1.028, -0.844 ] - } + }, + "createdAt": 1730111008953 }, { - "ID": 1729161460313, + "id": "b6c8590c-2f84-40aa-9357-e7ff27053629", "data": { "x": [ - -0.316, -0.344, -0.168, 0, 0, -0.056, -0.096, -0.244, -0.252, -0.2, - 0.284, 0.34, -0.844, 0.02, -0.768, -0.872, 0.284, 0.36, 0.292, 0.1, - -0.068, -0.128, -0.192, -0.116, -0.032, 0.012, 0.084, 0.068, 0.136, - 0.408, 0.344, 0.08, -0.064, -0.136, -0.124, 0.012, 0.08, 0.096, - 0.072, -0.164, -0.252, 0.112, 0.324, 0.388 + -0.008, -0.008, 0.016, 0.044, -0.12, -0.432, -0.66, -0.776, -2.04, + -2.04, 0.132, 2.04, 2.04, 2.04, 1.856, 1.664, 0.696, -0.028, -0.1, + -0.324, -0.372, -0.356, -0.316, -0.256, -0.184, -0.044, 0.048, + 0.036, 0.032, 0.04, -0.036, -0.1, -0.1, 0.008, 0.008, -0.048, 0.004, + 0.048, 0.028, -0.004, -0.044, 0.016, 0.06, 0.044, 0.052, 0.088, + 0.08, 0.096, 0.084 ], "y": [ - 0.308, 0.308, 0.312, 0.368, 0.408, 0.428, 0.644, 1.02, 1.752, 2.04, - 1.56, -0.984, -2.04, -2.04, -2.04, -2.036, -0.996, -0.336, -0.192, - -0.276, -0.308, -0.448, -0.664, -0.552, -0.368, -0.18, 0.108, 0.432, - 0.612, 0.548, 0.424, 0.264, 0.208, 0.288, 0.444, 0.496, 0.464, - 0.432, 0.524, 0.716, 1.228, 2.04, 2.04, 0.624 + -0.208, -0.12, -0.044, -0.008, 0.012, 0.036, -0.056, -1.396, -2.04, + -2.04, -2.04, -2.04, -1.528, 1.204, 1.404, 0.768, 0.076, -0.124, + 0.244, 0.612, 0.7, 0.624, 0.436, 0.26, 0.184, 0.144, 0.06, 0.012, + -0.02, -0.024, -0.14, -0.128, -0.192, -0.16, -0.16, -0.16, -0.2, + -0.244, -0.24, -0.216, -0.208, -0.232, -0.2, -0.188, -0.176, -0.192, + -0.168, -0.16, -0.172 ], "z": [ - -0.704, -0.496, -0.76, -0.992, -1.004, -0.956, -1, -0.964, -1.06, - -1.16, -1.132, -0.748, 0.824, -0.808, -0.92, -1.168, -2.04, -1.928, - -1.476, -1.036, -0.688, -0.532, -0.484, -0.564, -0.696, -0.748, - -0.744, -0.852, -1.02, -1.376, -1.496, -1.132, -0.952, -0.82, -0.78, - -0.788, -0.864, -0.944, -1.048, -0.98, -0.92, -1.16, -1.164, -1.012 + -0.944, -0.892, -0.872, -0.888, -0.944, -0.928, -1.092, -1.696, + -2.04, -2.04, -2.04, 0.032, 2.04, 2.04, 2.04, 0.608, -0.26, -0.716, + -1.124, -0.696, -0.46, -0.444, -0.596, -0.788, -0.864, -0.948, + -1.168, -1.292, -1.34, -1.26, -1.304, -1.304, -1.304, -1.252, -1.2, + -1.152, -1.188, -1.192, -1.136, -1.124, -1.076, -1.056, -1.052, + -1.036, -1.004, -1.02, -1.016, -1.036, -1.024 ] - } + }, + "createdAt": 1730111004935 }, { - "ID": 1729161455886, + "id": "ef20f66d-03e9-411c-99a5-02f5a6f2372c", "data": { "x": [ - 0.1, 0.16, 0.112, -0.028, -0.12, -0.128, -0.128, -0.052, 0.168, - 0.18, 0.3, -0.352, -0.644, -0.112, -0.732, -0.536, 0.156, 0.26, - 0.256, 0.348, 0.172, 0.064, 0.012, -0.02, 0.068, 0.148, 0.124, - 0.132, 0.12, 0.068, 0.128, 0, 0.04, 0.108, 0.156, 0.164, 0.06, - -0.132, -0.128, 0.164, 0.116, 0.264, -0.96, -1.044 + 0.012, 0.004, 0, 0, 0.02, 0.044, 0.028, 0.008, 0.004, 0.012, 0.02, + 0.076, 0.1, 0.008, -0.364, -1.18, -2.04, -2.04, 1.668, 2.04, 1.612, + 1.648, 2.04, 1.596, 0.692, 0.428, 0.212, 0.012, -0.052, -0.116, + -0.112, -0.132, -0.164, -0.076, 0.04, 0.056, 0.104, 0.124, 0.008, + -0.08, -0.112, 0, 0.112, 0.1, 0.056, 0, -0.016, -0.008, 0.056 ], "y": [ - 0.232, 0.26, 0.308, 0.316, 0.388, 0.504, 0.676, 1.26, 2.04, 2.04, - 0.276, -2.04, -2.04, -2.04, -2.04, -2.04, -1.024, -0.512, -0.336, - -0.284, -0.264, -0.248, -0.136, -0.136, -0.128, -0.044, -0.044, - -0.004, 0.04, 0.092, 0.156, 0.188, 0.228, 0.304, 0.452, 0.624, 0.86, - 1.156, 2.04, 2.04, 2.04, -1.36, -2.04, -2.04 + -0.14, -0.156, -0.148, -0.124, -0.144, -0.148, -0.176, -0.168, + -0.172, -0.176, -0.156, -0.136, -0.092, 0.02, -0.148, -1.376, -2.04, + -2.04, -2.024, -1.188, -0.14, 1.008, 1.188, 0.584, 0.076, 0.088, + 0.352, 0.556, 0.504, 0.416, 0.412, 0.328, 0.216, 0.112, 0.072, + -0.028, -0.172, -0.228, -0.224, -0.212, -0.2, -0.232, -0.212, + -0.196, -0.18, -0.188, -0.188, -0.184, -0.176 ], "z": [ - -0.888, -0.968, -0.976, -0.972, -0.984, -1.004, -0.956, -0.956, - -1.008, -0.88, -0.596, 0.076, 0.124, -1.26, -0.976, -1.184, -1.832, - -1.652, -1.216, -1.076, -0.736, -0.608, -0.552, -0.504, -0.584, - -0.736, -0.848, -1.124, -1.3, -1.316, -1.328, -0.992, -0.888, -0.84, - -0.872, -0.948, -1.008, -1.02, -1.176, -1.256, -1.088, -1.036, - 0.524, -0.384 + -1.024, -1.012, -1.04, -1, -0.988, -1.008, -1.008, -1.024, -1.016, + -1.024, -1.012, -1.012, -1, -1.072, -1.448, -2.04, -2.04, -2.04, + -2.016, 0.476, 2.04, 2.04, 1.004, 0.06, -0.268, -0.764, -0.816, + -0.628, -0.632, -0.532, -0.544, -0.652, -0.796, -0.94, -1.096, + -1.236, -1.528, -1.728, -1.54, -1.292, -1.096, -1.1, -1.156, -1.124, + -1.104, -1.064, -1.052, -1.06, -1.104 ] - } + }, + "createdAt": 1730111000940 }, { - "ID": 1729161451782, + "id": "cb010b38-568b-48d6-9a06-86c93cb640ee", "data": { "x": [ - 0.244, 0.152, 0.076, -0.044, -0.052, 0.052, 0.108, 0.088, -0.004, - -0.148, -0.272, -0.148, -0.212, -0.28, -0.124, -0.468, -0.372, - 0.156, -0.664, -0.12, 0.364, 0.156, 0.052, -0.024, -0.064, 0.048, - 0.196, 0.22, 0.104, 0.136, 0.116, 0.272, 0.084, -0.16, -0.128, - -0.168, 0.04, 0.136, 0.208, 0.136, -0.048, -0.224, -0.24, 0.004 + -0.028, -0.02, 0.008, -0.012, -0.044, -0.028, -0.052, -0.048, + -0.048, -0.068, -0.06, -0.036, -0.004, 0, -0.024, 0.004, 0.024, + 0.008, 0.036, -0.276, -1.56, -2.04, -1.392, 1.94, 2.04, 1.988, 2.04, + 2.04, -0.24, -0.56, -0.012, -0.3, -0.476, -0.008, 0.284, 0.072, + -0.116, -0.148, -0.084, -0.084, -0.16, -0.144, -0.04, 0.104, 0.144, + 0.068, 0.008, 0.02 ], "y": [ - 0.36, 0.26, 0.332, 0.408, 0.384, 0.336, 0.336, 0.4, 0.608, 0.904, - 1.284, 1.996, 2.04, 2.04, -0.072, -2.04, -2.04, -2.04, -2.04, -1.58, - -0.784, -0.404, -0.332, -0.432, -0.632, -0.688, -0.528, -0.256, - 0.084, 0.464, 0.768, 0.48, 0.104, 0.004, 0.28, 0.3, 0.292, 0.228, - 0.216, 0.332, 0.488, 0.756, 1.132, 1.836 + -0.18, -0.192, -0.18, -0.18, -0.176, -0.18, -0.18, -0.188, -0.188, + -0.176, -0.168, -0.164, -0.164, -0.176, -0.188, -0.184, -0.172, + -0.148, -0.128, -0.532, -1.796, -2.04, -2.04, -1.844, -0.772, 1.076, + 1.776, -0.104, -0.928, -0.476, 0.04, 0.32, 0.492, 0.596, 0.516, + 0.46, 0.48, 0.52, 0.5, 0.496, 0.448, 0.368, 0.32, 0.256, 0.228, + 0.204, 0.188, 0.188 ], "z": [ - -1.416, -1.032, -0.88, -0.748, -0.724, -0.832, -0.972, -1.052, - -1.032, -0.908, -0.804, -0.848, -0.616, -0.716, -0.736, 0.008, - -0.512, -1.476, -1.016, -1.676, -1.948, -1.448, -1.068, -0.692, - -0.5, -0.432, -0.448, -0.508, -0.568, -0.896, -1.448, -2.008, - -1.528, -0.94, -0.856, -0.704, -0.808, -0.912, -1.052, -1.084, - -0.96, -0.92, -0.988, -1.072 + -0.996, -0.996, -1.044, -1.016, -0.996, -1.016, -1.02, -1.008, + -1.036, -1.028, -1.02, -1.016, -1.008, -1.016, -1.008, -1.032, + -1.04, -1, -1.044, -1.664, -2.04, -2.04, -2.04, -1.284, 2.04, 2.04, + 2.04, 0.22, -0.692, -1.972, -2.04, -1.424, -0.628, -0.604, -0.924, + -0.976, -0.972, -0.968, -1.008, -0.992, -0.924, -1.004, -1.068, + -1.152, -1.144, -1.06, -1.028, -1.04 ] - } + }, + "createdAt": 1730110996785 }, { - "ID": 1729161446750, + "id": "df5a3877-3447-46e2-bcbb-ea7c27ddd3f7", "data": { "x": [ - 0.224, 0.1, 0.008, -0.096, -0.06, 0.064, 0.168, 0.22, 0.148, 0.112, - 0.088, 0.136, 0.156, 0.176, 0.204, 0.088, 0.08, -0.064, -0.252, - -0.152, -0.544, -1.02, -0.32, -0.024, 0.14, 0.312, -0.06, -0.136, 0, - -0.068, 0.164, 0.204, 0.224, 0.076, 0.008, 0, -0.16, -0.296, -0.272, - -0.228, -0.052, 0.088, 0.12, -0.04 + 0.04, 0.064, 0.076, 0.028, 0.008, -0.012, -0.016, 0.02, 0.016, + 0.004, 0.048, 0.076, 0.048, 0.048, 0.036, 0.02, 0.056, 0.116, 0.048, + -0.18, -1.444, -2.04, -2.04, 1.512, 1.788, 2.04, 2.04, 1.652, 0.084, + 0.148, -0.136, -0.892, -0.48, 0.032, 0.16, 0.376, 0.448, 0.18, + -0.008, 0.092, 0.092, 0.016, 0.032, 0.112, 0.164, 0.188, 0.14, 0.1, + 0.1 ], "y": [ - 0.056, 0.06, 0.148, 0.124, 0.084, 0.064, 0.016, 0.028, -0.056, - -0.084, -0.052, 0.016, 0.116, 0.284, 0.656, 1.1, 2.04, 2.04, 2.04, - 0.012, -2.04, -2.04, -2.04, -1.796, -0.636, -0.18, -0.16, -0.32, - -0.556, -0.532, -0.46, -0.356, 0.004, 0.776, 0.956, 0.496, 0.324, - 0.192, 0.28, 0.336, 0.236, 0.144, 0.128, 0.188 + -0.14, -0.124, -0.116, -0.096, -0.108, -0.124, -0.136, -0.124, + -0.116, -0.1, -0.096, -0.1, -0.14, -0.152, -0.148, -0.116, -0.076, + -0.028, -0.004, -0.212, -1.144, -2.04, -2.04, -2.04, -1.024, 1.032, + 2.02, -1.576, -1.124, 0.292, 0.956, 1.216, 0.92, 0.748, 0.58, 0.6, + 0.556, 0.536, 0.484, 0.492, 0.396, 0.36, 0.36, 0.436, 0.472, 0.456, + 0.416, 0.42, 0.42 ], "z": [ - -1.312, -0.996, -0.808, -0.724, -0.84, -1, -1.064, -1.092, -1.016, - -1.028, -1.036, -1.048, -1, -0.992, -1.02, -1.052, -1.008, -1.084, - -0.792, -0.696, 1.616, -0.236, -0.964, -1.684, -1.824, -1.836, - -1.18, -0.708, -0.568, -0.388, -0.552, -0.732, -0.692, -0.88, - -1.276, -1.344, -1.352, -0.992, -0.928, -0.832, -0.824, -0.908, - -1.08, -1.068 + -1.044, -1.028, -1.044, -1.012, -1.004, -1.012, -1.02, -1.032, + -1.004, -0.992, -1.02, -1.02, -0.988, -1.04, -1.044, -0.996, -0.96, + -0.964, -0.912, -1.336, -2.04, -2.04, -2.04, -2.04, 2.04, 2.04, + 2.04, -0.26, -2.04, -2.04, -0.892, -0.06, -0.884, -1.216, -0.944, + -0.796, -0.748, -0.816, -0.824, -0.904, -1.064, -1.164, -1.128, + -0.992, -0.832, -0.804, -0.892, -0.964, -1.008 ] - } + }, + "createdAt": 1730110992536 }, { - "ID": 1729161442233, + "id": "fe1da65c-6493-4be2-96cf-a9b8ac565ed1", "data": { "x": [ - 0.004, 0.144, -0.5, -0.056, -0.876, -0.088, 0.48, 0.148, -0.016, - -0.192, -0.2, -0.032, 0.012, 0.016, 0.04, 0.044, 0.084, 0.156, 0.2, - 0.316, 0.384, 0.372, 0.244, 0.132, 0.128, 0.132, 0.16, 0.184, 0.164, - 0.132, 0.1, 0.032, 0.06, 0.012, -0.148, 0.108, -0.38, -0.516, - -0.656, -0.164, 0.24, 0.42, 0.412, 0.256, 0.152 + 0.024, -0.064, -0.124, -0.068, -0.028, 0.012, 0.024, -0.008, -0.008, + 0.024, 0.008, -0.044, -0.056, -0.032, -0.004, -0.004, 0.056, -0.02, + -0.712, -2.04, -2.04, -2.04, 1.82, 2.04, 2.04, 2.04, 2.04, 0.328, + 0.288, -0.284, -0.336, -0.116, -0.196, -0.116, 0.184, 0.204, 0.248, + 0.216, 0.12, 0.104, 0.2, 0.268, 0.112, 0.028, 0.112, 0.2, 0.18, 0.1 ], "y": [ - 0.556, -2.04, -2.04, -2.04, -2.04, -1.268, -0.216, -0.088, -0.124, - -0.108, -0.184, -0.064, -0.064, -0.076, -0.116, -0.02, 0.072, 0.168, - 0.164, 0.188, 0.168, 0.104, 0.096, 0.132, 0.176, 0.28, 0.396, 0.552, - 0.632, 0.804, 1.16, 1.896, 2.04, 2.04, 0.476, -2.04, -2.04, -2.04, - -2.04, -2.04, -1.244, -0.664, -0.3, -0.408, -0.388 + -0.092, -0.108, -0.144, -0.144, -0.136, -0.12, -0.116, -0.096, + -0.104, -0.12, -0.108, -0.112, -0.12, -0.104, -0.092, -0.084, + -0.064, -0.044, -0.344, -1.416, -2.04, -2.04, -2.04, -2.04, 0.812, + 2.04, 0.936, -0.78, -0.52, 0.148, 0.452, 0.648, 0.66, 0.668, 0.676, + 0.668, 0.652, 0.664, 0.628, 0.552, 0.476, 0.408, 0.232, 0.18, 0.132, + 0.072, 0.028, 0.048 ], "z": [ - -0.4, -0.256, 0.084, -1.576, -0.908, -1.9, -2.04, -1.464, -1.032, - -0.656, -0.44, -0.544, -0.564, -0.58, -0.696, -0.792, -0.908, - -1.084, -1.168, -1.288, -1.34, -1.292, -1.172, -0.996, -0.872, - -0.852, -0.884, -0.944, -0.884, -0.856, -0.844, -0.796, -0.992, - -0.716, -0.364, -0.28, -0.028, -0.456, -0.62, -1.516, -1.852, - -1.744, -1.564, -1.172, -0.896 + -1.032, -0.988, -1.012, -1.116, -1.096, -1.012, -1.008, -1, -1.02, + -1.028, -1.036, -1.028, -1.012, -1.016, -1.012, -0.988, -0.976, + -1.128, -1.884, -2.04, -2.04, -2.04, -2.024, 1.56, 2.04, 2.04, + 1.044, -0.264, -2.04, -2.016, -1.116, -0.724, -0.68, -0.716, -0.888, + -0.724, -0.696, -0.68, -0.664, -0.676, -0.744, -0.856, -0.936, + -1.088, -1.124, -1.152, -1.224, -1.2 ] - } + }, + "createdAt": 1730110988086 }, { - "ID": 1729161438150, + "id": "49b6fdfd-8125-4750-a90c-64669fde7af4", "data": { "x": [ - -0.312, -0.132, 0.252, -0.168, -0.244, -0.232, -0.188, -0.032, - 0.168, 0.312, 0.34, 0.272, 0.196, 0.1, 0.044, 0.036, 0.012, 0.064, - 0.092, 0.152, 0.24, 0.26, 0.176, 0.072, 0.02, 0.024, -0.108, -0.024, - 0.216, 0.272, 0.568, -0.812, -1.336, -0.668, -0.564, -0.024, 0.324, - 0.092, 0.036, 0.144, 0.18, 0.208, 0.268, 0.308, 0.196 + 0.104, 0.084, 0.112, 0.112, 0.088, 0.12, 0.112, 0.056, 0.048, 0.052, + 0.06, 0.06, 0.024, -0.244, -1.256, -2.04, -1.192, 1.784, 2.04, + 1.848, 2.04, 2.04, -0.412, -0.14, -0.304, -0.264, -0.096, 0.116, + 0.124, 0.212, 0.164, 0.164, 0.112, -0.104, -0.164, -0.064, -0.08, + -0.056, -0.092, -0.052, -0.02, -0.012, 0.012, 0.044, 0.048, 0.02, + -0.016, -0.016 ], "y": [ - -2.04, -1.432, -0.556, -0.344, -0.22, -0.156, -0.112, -0.112, 0.064, - 0.26, 0.348, 0.42, 0.388, 0.256, 0.208, 0.148, 0.128, 0.152, 0.136, - 0.192, 0.264, 0.328, 0.408, 0.504, 0.668, 0.928, 1.32, 2.04, 2.04, - 1.732, -1.584, -2.04, -2.04, -2.032, -1.96, -0.932, -0.408, -0.244, - -0.156, -0.124, -0.18, -0.24, -0.112, -0.04, 0.016 + -0.164, -0.18, -0.172, -0.16, -0.168, -0.152, -0.164, -0.192, -0.22, + -0.212, -0.172, -0.112, -0.064, -0.252, -1.464, -2.04, -2.04, + -1.652, -1.82, 0.412, 2.04, 0.128, -0.568, 0.036, 0.72, 1.044, + 1.104, 0.924, 0.736, 0.536, 0.508, 0.54, 0.608, 0.552, 0.572, 0.544, + 0.524, 0.5, 0.496, 0.524, 0.544, 0.528, 0.516, 0.5, 0.504, 0.464, + 0.456, 0.472 ], "z": [ - -1.864, -2.036, -2.04, -1.088, -0.676, -0.492, -0.46, -0.52, -0.74, - -0.928, -1, -1.072, -1.184, -1.168, -1.132, -1.116, -1.08, -1.04, - -0.996, -0.972, -0.984, -0.96, -0.96, -0.948, -0.932, -0.888, - -0.868, -1.012, -1.296, -0.928, -0.856, 0.656, 0.344, -0.72, -1.004, - -1.36, -1.548, -1.264, -1.192, -1.228, -1.092, -1.028, -1.008, - -0.96, -0.832 + -1.012, -1.028, -1.068, -1.048, -0.984, -0.996, -0.988, -1.008, + -1.076, -1.068, -1.004, -0.96, -1.112, -1.724, -2.04, -2.04, -2.04, + -2.02, 2.04, 2.04, 2.04, -0.732, -0.476, -2.04, -1.064, -0.472, + -0.364, -0.676, -0.7, -0.94, -0.948, -0.9, -0.812, -0.804, -0.884, + -0.988, -0.964, -1.008, -0.956, -0.912, -0.856, -0.84, -0.876, + -0.816, -0.78, -0.956, -1.004, -0.936 ] - } + }, + "createdAt": 1730110983822 }, { - "ID": 1729161433809, + "id": "b94d55af-041b-4cc2-9939-f1409bf91a71", "data": { "x": [ - 0.084, 0.072, 0.084, 0.104, 0.028, -0.064, 0.044, 0.148, -0.012, - 0.476, -1.82, -1.408, 0.764, 0.124, 0.472, -0.58, -0.888, -0.28, - -0.192, -0.06, 0.112, 0.128, 0.016, 0.048, 0.036, 0.04, -0.012, - 0.02, 0.088, 0.032, 0.072, 0.136, 0.112, 0.052, 0, -0.016, -0.028, - -0.084, -0.252, -0.172, 0.16, 0.18, 0.336, -2.04, -0.556 + -0.004, -0.008, -0.004, -0.016, -0.048, -0.004, 0.028, 0, -0.028, + -0.012, -0.012, -0.128, -0.66, -1.82, -2.04, -0.448, 1.772, 2.04, + 1.744, 0.3, 2.04, 2.008, 1.044, 0.596, 0.064, 0.144, 0.212, 0.132, + 0.04, 0.004, 0.028, 0.032, -0.008, 0.008, 0.048, 0.024, -0.056, + 0.012, 0, -0.06, -0.076, -0.136, -0.18, -0.248, -0.252, -0.232, + -0.216, -0.172, -0.112 ], "y": [ - 0.228, 0.276, 0.364, 0.564, 0.9, 1.476, 2.04, 2.04, 2.04, -2.04, - -2.04, -2.04, -2.04, -1.352, -0.356, -0.176, -0.24, -0.12, -0.232, - -0.04, 0.128, 0.092, 0.184, 0.232, 0.396, 0.288, 0.3, 0.264, 0.208, - 0.184, 0.172, 0.16, 0.156, 0.232, 0.376, 0.536, 0.74, 1.04, 1.564, - 2.04, 2.04, 1.764, -2.04, -2.04, -2.04 + -0.132, -0.132, -0.144, -0.152, -0.136, -0.152, -0.18, -0.172, + -0.136, -0.12, -0.104, -0.036, -0.36, -1.248, -2.04, -2.04, -2.04, + -2.04, -0.264, 0.784, 1.604, 1.404, 0.768, 0.616, 0.576, 0.704, + 0.812, 0.78, 0.772, 0.728, 0.652, 0.628, 0.608, 0.576, 0.532, 0.48, + 0.464, 0.48, 0.48, 0.384, 0.344, 0.3, 0.28, 0.244, 0.22, 0.212, + 0.18, 0.144, 0.116 ], "z": [ - -1.02, -0.972, -0.956, -0.964, -0.86, -0.88, -0.544, -0.768, -0.072, - 0.076, 1.404, 0.344, -2.04, -2.04, -2.04, -0.996, -0.02, -0.368, - -0.38, -0.552, -0.788, -0.948, -1.024, -1.084, -0.96, -0.992, - -1.024, -1.092, -1.148, -1.128, -1.104, -1.056, -1.016, -1.036, - -0.996, -0.952, -0.856, -0.808, -0.676, -0.592, -0.868, -0.644, - -0.372, 1.44, -0.804 + -1.044, -1.032, -1.004, -1.024, -1.024, -1.028, -1.064, -1.06, + -1.036, -1.004, -1, -1.184, -1.816, -2.04, -2.04, -2.04, -2.04, + -1.032, 2.04, 2.04, -0.052, 0.144, 0.052, -0.572, -0.408, -0.468, + -0.468, -0.564, -0.64, -0.612, -0.716, -0.724, -0.744, -0.756, + -0.86, -0.96, -0.92, -1.04, -1.016, -0.956, -0.884, -0.952, -0.968, + -0.976, -1, -1.032, -1.068, -1.052, -1.08 ] - } + }, + "createdAt": 1730110979246 } ] }, { - "icon": "House", - "ID": 1729161958213, + "id": "a50277ef-1534-4b4b-ac0c-a890cdda4e47", "name": "circle", + "icon": "Square", + "createdAt": 1730111022972, "recordings": [ { - "ID": 1729162002337, + "id": "77871264-32b7-4e43-92d4-4914f7f474a4", + "data": { + "x": [ + 0.328, 0.18, 0.096, 0.02, 0.044, 0.324, 0.412, 0.432, 0.5, 0.448, + 0.512, 0.584, 0.592, 0.692, 0.6, 0.468, 0.54, 0.58, 0.64, 0.608, + 0.576, 0.656, 0.768, 0.704, 0.512, 0.48, 0.556, 0.54, 0.456, 0.508, + 0.604, 0.7, 0.676, 0.552, 0.38, 0.444, 0.476, 0.5, 0.608, 0.44, + 0.44, 0.528, 0.428, 0.352, 0.464, 0.408, 0.26, 0.248, 0.16 + ], + "y": [ + 0.204, 0.256, 0.312, 0.324, 0.348, 0.488, 0.596, 0.68, 0.688, 0.668, + 0.68, 0.652, 0.664, 0.648, 0.54, 0.4, 0.332, 0.376, 0.42, 0.32, + 0.164, 0.18, 0.232, 0.148, 0.032, -0.108, -0.208, -0.336, -0.464, + -0.6, -0.764, -0.932, -0.804, -0.888, -1.048, -1.164, -1.212, + -1.264, -1.224, -1.308, -1.328, -1.284, -1.264, -1.336, -1.212, + -1.108, -1.004, -0.896, -0.816 + ], + "z": [ + -0.832, -0.756, -0.792, -0.836, -0.736, -0.812, -0.712, -0.48, + -0.46, -0.432, -0.476, -0.58, -0.46, -0.376, -0.396, -0.44, -0.624, + -0.636, -0.588, -0.6, -0.584, -0.548, -0.496, -0.528, -0.476, + -0.472, -0.456, -0.412, -0.384, -0.556, -0.768, -0.904, -1.02, + -0.948, -0.628, -0.552, -0.608, -0.536, -0.6, -0.484, -0.532, + -0.692, -0.728, -0.776, -0.872, -0.876, -0.784, -0.828, -0.84 + ] + }, + "createdAt": 1730111080605 + }, + { + "id": "7b214d41-26fa-49c3-92f7-dc49bae2e666", "data": { "x": [ - 0.8, 0.696, 0.812, 0.808, 0.708, 0.632, 0.412, 0.212, 0.016, -0.12, - -0.196, -0.356, -0.524, -0.688, -0.812, -0.792, -0.692, -0.58, - -0.516, -0.516, -0.46, -0.46, -0.512, -0.508, -0.596, -0.504, - -0.496, -0.636, -0.652, -0.508, -0.16, 0.04, -0.008, 0.02, 0.016, - 0.08, 0.296, 0.276, 0.764, 1.128, 1.248, 1.284, 1.212, 0.66 + -0.076, -0.2, -0.184, -0.096, -0.048, 0.164, 0.396, 0.416, 0.292, + 0.092, -0.028, 0.088, 0.32, 0.568, 0.512, 0.2, 0.116, 0.132, -0.028, + -0.072, 0.24, 0.412, 0.436, 0.336, 0.184, 0.312, 0.472, 0.496, + 0.472, 0.428, 0.508, 0.604, 0.512, 0.624, 0.74, 0.544, 0.404, 0.448, + 0.556, 0.66, 0.7, 0.612, 0.608, 0.616, 0.56, 0.66, 0.748, 0.66 ], "y": [ - -1.504, -1.584, -1.608, -1.544, -1.412, -1.42, -1.308, -1.24, - -1.176, -1.008, -0.876, -0.824, -0.648, -0.476, -0.296, -0.116, - 0.048, 0.184, 0.324, 0.444, 0.596, 0.7, 0.76, 0.832, 0.868, 0.9, - 0.876, 0.82, 0.728, 0.608, 0.656, 0.612, 0.528, 0.332, 0.208, - -0.028, -0.204, -0.216, -0.456, -0.408, -0.588, -0.592, -0.612, - -1.004 + -1.156, -1.096, -1.02, -0.972, -0.844, -0.72, -0.588, -0.476, -0.3, + -0.248, -0.136, 0.016, 0.164, 0.304, 0.308, 0.308, 0.372, 0.432, + 0.464, 0.484, 0.54, 0.568, 0.576, 0.552, 0.516, 0.536, 0.584, 0.612, + 0.564, 0.44, 0.392, 0.284, 0.24, 0.324, 0.344, 0.236, 0.096, 0.004, + -0.068, -0.02, -0.048, -0.16, -0.304, -0.384, -0.436, -0.6, -0.696, + -0.772 ], "z": [ - -0.888, -0.864, -1.212, -1.244, -1.136, -1.08, -1.064, -0.94, -0.72, - -0.8, -0.844, -0.832, -0.784, -0.736, -0.584, -0.448, -0.34, -0.312, - -0.34, -0.32, -0.356, -0.316, -0.232, -0.168, -0.012, -0.064, - -0.136, -0.148, -0.108, -0.112, -0.272, -0.336, -0.276, -0.328, - -0.344, -0.456, -0.564, -0.716, -0.836, -1.072, -1.06, -0.972, - -1.004, -0.82 + -0.78, -0.776, -0.848, -0.924, -0.86, -0.828, -0.9, -0.86, -0.776, + -0.656, -0.616, -0.736, -0.78, -0.824, -0.812, -0.628, -0.62, + -0.756, -0.772, -0.72, -0.792, -0.792, -0.644, -0.672, -0.664, + -0.764, -0.688, -0.54, -0.5, -0.548, -0.576, -0.876, -0.824, -0.664, + -0.536, -0.44, -0.548, -0.648, -0.728, -0.6, -0.572, -0.448, -0.404, + -0.504, -0.624, -0.672, -0.76, -0.732 ] - } + }, + "createdAt": 1730111076549 }, { - "ID": 1729161997930, + "id": "0caa6a74-0d93-4242-a6a5-8c617b04f32b", "data": { "x": [ - -0.66, -0.752, -0.768, -0.824, -0.84, -0.828, -0.756, -0.84, -0.976, - -0.976, -1.012, -0.884, -0.772, -0.772, -0.72, -0.724, -0.576, - -0.472, -0.52, -0.628, -0.56, -0.376, -0.216, -0.032, 0.08, 0.26, - 0.468, 0.628, 0.696, 0.92, 1.36, 1.48, 0.82, 0.528, 0.76, 0.824, - 0.94, 1.08, 1.128, 1.032, 0.692, 0.524, 0.476, 0.348 + 0.396, 0.54, 0.564, 0.444, 0.308, 0.448, 0.54, 0.216, -0.008, 0.068, + 0.32, 0.412, 0.28, 0.292, 0.288, 0.112, 0.06, 0.144, 0.184, 0.24, + 0.212, 0.184, 0.24, 0.32, 0.4, 0.412, 0.384, 0.388, 0.404, 0.3, + 0.232, 0.368, 0.556, 0.656, 0.504, 0.208, -0.048, -0.056, 0.104, + 0.36, 0.484, 0.424, 0.396, 0.352, 0.328, 0.52, 0.6, 0.66 ], "y": [ - -0.476, -0.264, -0.088, 0.084, 0.208, 0.252, 0.384, 0.432, 0.48, - 0.508, 0.536, 0.548, 0.604, 0.612, 0.664, 0.652, 0.668, 0.728, 0.72, - 0.6, 0.528, 0.52, 0.508, 0.436, 0.372, 0.308, 0.232, 0.216, 0.116, - -0.016, 0.024, -0.112, -0.468, -0.708, -0.724, -0.776, -0.82, - -0.828, -0.864, -0.836, -0.872, -0.82, -0.852, -0.8 + -0.676, -0.816, -0.956, -0.896, -1.284, -1.272, -1.18, -1.256, + -1.372, -1.44, -1.408, -1.308, -1.292, -1.24, -1.172, -1.148, + -1.072, -1.08, -1.036, -0.82, -0.808, -0.824, -0.768, -0.624, + -0.512, -0.356, -0.18, -0.136, -0.068, -0.004, 0.032, 0.124, 0.208, + 0.3, 0.392, 0.384, 0.512, 0.42, 0.512, 0.584, 0.676, 0.684, 0.66, + 0.648, 0.64, 0.668, 1.008, 0.704 ], "z": [ - -0.672, -0.556, -0.412, -0.292, -0.176, -0.156, -0.24, -0.156, - -0.044, -0.048, -0.052, -0.136, -0.148, -0.056, -0.116, -0.04, -0.1, - -0.136, -0.092, -0.032, -0.132, -0.304, -0.38, -0.504, -0.568, - -0.652, -0.668, -0.748, -0.688, -0.608, -0.668, -0.928, -0.744, - -0.672, -0.9, -0.96, -1.052, -1.148, -1.236, -1.356, -1.256, -1.22, - -1.252, -1.224 + -0.372, -0.504, -0.612, -0.744, -0.692, -0.804, -0.892, -0.476, + -0.268, -0.38, -0.524, -0.628, -0.6, -0.624, -0.704, -0.708, -0.636, + -0.72, -0.804, -0.868, -0.836, -0.82, -0.864, -0.824, -0.804, + -0.792, -0.676, -0.636, -0.688, -0.7, -0.708, -0.852, -0.948, + -0.948, -0.796, -0.652, -0.628, -0.708, -0.724, -0.744, -0.744, + -0.64, -0.576, -0.568, -0.544, -0.592, -0.824, -0.612 ] - } + }, + "createdAt": 1730111072430 }, { - "ID": 1729161993696, + "id": "103110e8-0f71-4267-9a83-05fb1627fcb8", "data": { "x": [ - -0.452, -0.364, -0.284, -0.22, -0.104, -0.016, 0.104, 0.2, 0.328, - 0.532, 0.756, 1.08, 1.196, 0.964, 0.792, 0.612, 0.364, 0.276, 0.232, - 0.284, 0.384, 0.348, 0.252, 0.116, -0.14, -0.316, -0.456, -0.612, - -0.896, -0.816, -0.516, -0.46, -0.556, -0.584, -0.608, -0.664, - -0.588, -0.54, -0.504, -0.516, -0.624, -0.684, -0.736, -0.732 + 0.672, 0.684, 0.52, 0.42, 0.472, 0.528, 0.488, 0.472, 0.488, 0.572, + 0.448, 0.3, 0.396, 0.696, 0.784, 0.628, 0.62, 0.768, 0.852, 0.72, + 0.46, 0.32, 0.48, 0.752, 0.728, 0.552, 0.644, 0.512, 0.468, 0.588, + 0.296, 0.372, 0.3, 0.456, 0.7, 0.496, 0.144, 0.084, 0.196, 0.432, + 0.568, 0.632, 0.76, 0.548, 0.164, -0.012, -0.028, 0.152 ], "y": [ - 0.552, 0.54, 0.508, 0.408, 0.248, 0.06, -0.08, -0.264, -0.564, -0.8, - -0.764, -0.776, -0.872, -1.1, -1.268, -1.388, -1.504, -1.48, -1.492, - -1.528, -1.508, -1.512, -1.52, -1.472, -1.416, -1.392, -1.112, - -0.964, -0.708, -0.428, -0.16, 0.004, 0.2, 0.332, 0.396, 0.452, - 0.536, 0.612, 0.668, 0.696, 0.74, 0.72, 0.72, 0.64 + 0.464, 0.516, 0.508, 0.492, 0.56, 0.608, 0.604, 0.536, 0.596, 0.612, + 0.5, 0.268, 0.176, 0.172, 0.12, 0.024, 0.008, 0.04, 0.136, 0.136, + 0.02, -0.084, -0.08, -0.132, -0.152, -0.424, -0.472, -0.64, -0.764, + -0.756, -0.644, -0.72, -0.812, -0.972, -0.968, -0.872, -0.916, + -1.024, -1.124, -1.276, -1.192, -1.156, -1.052, -0.924, -0.884, + -0.852, -0.82, -0.736 ], "z": [ - -0.128, -0.22, -0.268, -0.308, -0.376, -0.448, -0.52, -0.568, - -0.624, -0.828, -0.94, -1.064, -1.152, -0.936, -0.86, -0.76, -0.684, - -0.74, -0.74, -0.864, -0.996, -1.104, -1.176, -1.2, -0.928, -0.76, - -0.644, -0.6, -0.404, -0.384, -0.46, -0.376, -0.296, -0.268, -0.228, - -0.196, -0.26, -0.296, -0.292, -0.236, -0.18, -0.176, -0.2, -0.188 + -0.804, -0.672, -0.548, -0.516, -0.544, -0.572, -0.48, -0.524, + -0.492, -0.428, -0.332, -0.54, -0.728, -0.824, -0.852, -0.88, + -0.984, -0.908, -0.712, -0.548, -0.496, -0.528, -0.608, -0.716, + -0.86, -0.66, -0.784, -0.724, -0.764, -0.956, -0.62, -0.78, -0.468, + -0.476, -0.72, -0.736, -0.484, -0.628, -0.808, -0.928, -0.98, + -0.972, -1.044, -0.956, -0.788, -0.724, -0.712, -0.8 ] - } + }, + "createdAt": 1730111068366 }, { - "ID": 1729161989408, + "id": "30943b8c-0f57-449d-8cf5-7313793f2e57", "data": { "x": [ - 0.324, 0.228, 0.184, 0.096, 0.04, 0.028, 0.016, -0.032, 0.024, - 0.136, -0.332, -0.64, -0.648, -0.68, -0.836, -0.888, -0.604, -0.508, - -0.448, -0.392, -0.496, -0.616, -0.576, -0.516, -0.356, -0.248, - -0.388, -0.58, -0.52, -0.424, -0.264, -0.076, 0.044, 0.072, 0.12, - 0.06, 0.008, 0.088, 0.376, 0.708, 0.888, 0.76, 0.724, 0.532 + 0.26, 0.288, 0.28, 0.152, 0.124, 0.056, 0.04, 0.172, 0.248, 0.324, + 0.472, 0.484, 0.352, 0.256, 0.236, 0.28, 0.42, 0.424, 0.36, 0.332, + 0.424, 0.452, 0.372, 0.284, 0.296, 0.404, 0.476, 0.456, 0.456, + 0.464, 0.324, 0.34, 0.404, 0.428, 0.452, 0.472, 0.484, 0.384, 0.512, + 0.564, 0.508, 0.48, 0.284, 0.3, 0.832, 1.028, 0.78, 0.608, 0.588 ], "y": [ - -1.476, -1.26, -1.144, -1.012, -0.8, -0.672, -0.52, -0.504, -0.344, - -0.164, -0.244, -0.144, -0.016, 0.116, 0.072, 0.128, 0.152, 0.18, - 0.232, 0.34, 0.404, 0.472, 0.508, 0.532, 0.584, 0.724, 0.7, 0.608, - 0.564, 0.528, 0.576, 0.508, 0.456, 0.276, 0.06, -0.148, -0.36, - -0.584, -0.744, -0.868, -1.136, -1.432, -1.648, -1.776 + -1.348, -1.288, -1.3, -1.332, -1.356, -1.368, -1.368, -1.26, -1.18, + -1.06, -1.036, -0.952, -0.88, -0.788, -0.672, -0.5, -0.328, -0.172, + -0.12, 0, 0.084, 0.204, 0.316, 0.384, 0.464, 0.508, 0.56, 0.624, + 0.728, 0.768, 0.728, 0.668, 0.592, 0.516, 0.384, 0.328, 0.268, 0.18, + 0.064, 0.048, 0, -0.08, -0.232, -0.344, -0.38, -0.316, -0.4, -0.48, + -0.492 ], "z": [ - -1.036, -1.168, -1.176, -1.144, -1.184, -1.024, -0.896, -0.772, - -0.836, -1.168, -0.684, -0.608, -0.656, -0.748, -0.548, -0.636, - -0.724, -0.72, -0.744, -0.736, -0.668, -0.564, -0.584, -0.548, - -0.544, -0.516, -0.288, -0.24, -0.344, -0.268, -0.304, -0.396, - -0.476, -0.456, -0.448, -0.504, -0.54, -0.668, -0.744, -0.84, -1, - -0.932, -1.12, -1.032 + -0.492, -0.544, -0.568, -0.532, -0.664, -0.864, -0.852, -0.744, + -0.752, -0.68, -0.776, -0.792, -0.836, -0.772, -0.716, -0.564, + -0.576, -0.604, -0.604, -0.592, -0.684, -0.72, -0.732, -0.704, + -0.668, -0.636, -0.612, -0.516, -0.352, -0.34, -0.292, -0.416, + -0.568, -0.532, -0.632, -0.608, -0.652, -0.584, -0.76, -0.796, + -0.716, -0.744, -0.7, -0.636, -0.928, -1.024, -0.956, -0.98, -0.832 ] - } + }, + "createdAt": 1730111064260 }, { - "ID": 1729161985455, + "id": "65e35b65-3640-435c-b215-919d02ffbd1d", "data": { "x": [ - 0.28, 0.456, 0.532, 0.62, 0.652, 0.664, 0.764, 0.828, 0.856, 0.828, - 0.708, 0.608, 0.58, 0.472, 0.392, 0.288, 0.188, 0.084, 0.012, - -0.048, -0.196, -0.284, -0.304, -0.484, -0.564, -0.524, -0.496, - -0.572, -0.7, -0.812, -1.116, -1.104, -1.016, -0.872, -0.764, - -0.732, -0.692, -0.672, -0.652, -0.704, -0.76, -0.628, -0.516, - -0.444, -0.292 + 0.484, 0.276, 0.212, 0.408, 0.44, 0.304, 0.296, 0.404, 0.344, 0.204, + 0.276, 0.432, 0.456, 0.42, 0.432, 0.436, 0.36, 0.24, 0.2, 0.368, + 0.272, 0.144, 0.204, 0.212, 0.132, 0.064, 0.1, 0.156, 0.42, 0.412, + 0.132, -0.028, 0, 0.188, 0.308, 0.416, 0.516, 0.5, 0.396, 0.276, + 0.316, 0.38, 0.448, 0.424, 0.376, 0.316, 0.412, 0.504, 0.408 ], "y": [ - 0.376, 0.252, 0.188, 0.104, -0.064, -0.172, -0.208, -0.344, -0.552, - -0.692, -0.82, -0.932, -0.956, -1.008, -1, -0.944, -0.856, -0.876, - -0.824, -0.76, -0.684, -0.572, -0.464, -0.372, -0.3, -0.18, -0.08, - -0.056, 0.056, 0.148, 0.156, 0.2, 0.24, 0.308, 0.368, 0.436, 0.488, - 0.524, 0.612, 0.516, 0.5, 0.572, 0.428, 0.328, 0.304 + 0.512, 0.42, 0.356, 0.376, 0.3, 0.232, 0.188, 0.188, 0, -0.108, + -0.18, -0.196, -0.256, -0.38, -0.548, -0.584, -0.544, -0.752, + -0.856, -0.86, -0.864, -1.18, -1.252, -1.092, -1.04, -1.052, -1.164, + -1.212, -1.236, -1.192, -1.176, -1.076, -1.016, -0.956, -0.852, + -0.788, -0.704, -0.596, -0.536, -0.384, -0.272, -0.18, -0.068, + 0.008, 0, 0, -0.004, 0.072, 0.156 ], "z": [ - -0.592, -0.652, -0.624, -0.62, -0.68, -0.812, -0.988, -1.012, - -1.004, -1.116, -1.172, -1.14, -1.148, -1.072, -1.096, -1.124, - -1.16, -1.208, -1.172, -1.112, -1.004, -0.936, -0.96, -0.844, - -0.828, -0.884, -0.812, -0.62, -0.52, -0.416, -0.264, -0.292, - -0.352, -0.4, -0.384, -0.276, -0.184, -0.096, -0.268, -0.296, - -0.364, -0.572, -0.524, -0.48, -0.44 + -0.616, -0.688, -0.708, -0.744, -0.768, -0.768, -0.708, -0.656, + -0.752, -0.78, -0.752, -0.708, -0.76, -0.808, -0.844, -0.908, + -0.892, -0.776, -0.696, -0.948, -0.892, -0.732, -0.804, -0.792, + -0.796, -0.6, -0.6, -0.708, -0.968, -1.008, -0.944, -0.892, -0.784, + -0.808, -0.748, -0.776, -0.808, -0.768, -0.744, -0.612, -0.72, + -0.808, -0.828, -0.836, -0.792, -0.72, -0.86, -1.06, -1.108 ] - } + }, + "createdAt": 1730111060117 }, { - "ID": 1729161981858, + "id": "0609c195-c769-44bc-a401-a3a676629863", "data": { "x": [ - -0.432, -0.448, -0.336, -0.132, -0.008, 0.008, 0.088, 0.164, 0.208, - 0.352, 0.484, 0.584, 0.748, 0.964, 1.052, 0.848, 0.652, 0.54, 0.46, - 0.38, 0.316, 0.208, 0.152, 0.092, 0.004, -0.128, -0.284, -0.492, - -0.624, -0.504, -0.36, -0.272, -0.26, -0.288, -0.344, -0.444, - -0.592, -0.7, -0.672, -0.636, -0.52, -0.512, -0.604 + 0.032, 0.024, -0.044, -0.06, 0.12, 0.048, -0.024, 0.04, 0.192, + 0.296, 0.34, 0.252, 0.152, 0.1, 0.076, 0.364, 0.576, 0.412, 0.104, + 0.008, 0.232, 0.26, 0.204, 0.204, 0.256, 0.288, 0.34, 0.408, 0.376, + 0.276, 0.196, 0.272, 0.412, 0.344, 0.424, 0.552, 0.476, 0.26, 0.308, + 0.54, 0.464, 0.212, 0.3, 0.504, 0.396, 0.264, 0.424, 0.584, 0.672 ], "y": [ - 0.624, 0.588, 0.56, 0.52, 0.492, 0.28, 0.172, 0.044, -0.12, -0.212, - -0.3, -0.392, -0.384, -0.38, -0.524, -0.768, -0.916, -1.12, -1.26, - -1.336, -1.404, -1.4, -1.288, -1.276, -1.216, -1.06, -0.872, -0.732, - -0.584, -0.496, -0.416, -0.336, -0.22, -0.108, -0.052, -0.072, - -0.04, -0.008, 0, 0.048, 0.068, 0.104, 0.2 + -1.34, -1.288, -1.284, -1.284, -1.164, -1.116, -1.024, -0.936, + -0.78, -0.856, -0.668, -0.432, -0.244, -0.048, 0.084, 0.248, 0.384, + 0.404, 0.324, 0.424, 0.528, 0.568, 0.576, 0.64, 0.7, 0.732, 0.8, + 0.816, 0.8, 0.72, 0.644, 0.612, 0.516, 0.364, 0.272, 0.284, 0.184, + 0.068, 0.128, 0.236, 0.068, -0.176, -0.168, -0.08, -0.172, -0.42, + -0.552, -0.456, -0.384 ], "z": [ - -0.452, -0.456, -0.46, -0.528, -0.584, -0.568, -0.696, -0.78, - -0.804, -0.928, -0.952, -0.952, -0.94, -0.936, -0.928, -0.8, -0.764, - -0.836, -0.956, -1.008, -1.1, -1.1, -1.164, -1.136, -1.204, -1.188, - -1.012, -0.796, -0.548, -0.62, -0.752, -0.992, -1.136, -1.12, - -0.972, -0.868, -0.792, -0.728, -0.8, -0.808, -0.8, -0.696, -0.556 + -0.724, -0.696, -0.8, -0.876, -0.956, -0.876, -0.824, -0.828, + -0.932, -0.856, -0.74, -0.612, -0.4, -0.468, -0.516, -0.7, -0.812, + -0.664, -0.592, -0.636, -0.836, -0.772, -0.672, -0.632, -0.588, + -0.516, -0.356, -0.336, -0.428, -0.584, -0.632, -0.592, -0.692, + -0.732, -0.808, -0.78, -0.884, -0.992, -0.876, -0.632, -0.608, + -0.772, -0.824, -0.772, -0.572, -0.616, -0.896, -0.92, -1.048 ] - } + }, + "createdAt": 1730111055582 }, { - "ID": 1729161977644, + "id": "eab4ad7a-30a8-408d-b23c-e1ff2c779d8a", "data": { "x": [ - 0.376, 0.216, 0.208, 0.256, 0.212, 0.184, 0.2, 0.04, -0.092, -0.228, - -0.324, -0.372, -0.324, -0.244, -0.26, -0.244, -0.104, -0.036, - -0.224, -0.404, -0.508, -0.5, -0.452, -0.388, -0.34, -0.376, -0.416, - -0.5, -0.536, -0.5, -0.34, -0.248, -0.3, -0.272, -0.144, -0.06, - -0.096, 0.052, 0.232, 0.444, 0.656, 0.644, 0.604, 0.616 + -0.004, -0.164, 0.056, 0.14, 0.092, -0.004, -0.088, -0.192, -0.212, + -0.092, -0.156, -0.232, -0.232, -0.152, -0.004, -0.132, -0.28, + -0.292, -0.272, -0.292, -0.24, -0.116, -0.188, -0.372, -0.248, + -0.036, 0.068, 0.196, 0.236, 0.06, -0.052, -0.016, 0.084, 0.188, + 0.256, 0.32, 0.328, 0.272, 0.28, 0.352, 0.416, 0.344, 0.192, 0.112, + 0.128, 0.24, 0.3, 0.352, 0.34 ], "y": [ - -1.324, -1.46, -1.564, -1.556, -1.58, -1.504, -1.388, -1.336, - -1.208, -1.032, -0.86, -0.748, -0.652, -0.5, -0.376, -0.22, -0.104, - 0.08, 0.236, 0.432, 0.532, 0.572, 0.624, 0.676, 0.768, 0.86, 0.868, - 0.884, 0.904, 0.948, 0.98, 0.884, 0.74, 0.512, 0.348, 0.144, -0.1, - -0.216, -0.192, -0.248, -0.356, -0.556, -0.728, -0.816 + -0.64, -0.92, -0.988, -1.004, -0.856, -0.736, -0.828, -1.06, -1.152, + -1.14, -1.14, -1.032, -1.012, -1.116, -1.112, -1.068, -1.036, + -1.044, -0.996, -1.032, -1.02, -1.024, -0.92, -0.896, -0.808, -0.76, + -0.62, -0.436, -0.396, -0.4, -0.352, -0.328, -0.264, -0.196, -0.12, + -0.068, 0.008, 0.048, 0.104, 0.204, 0.272, 0.296, 0.292, 0.332, + 0.388, 0.504, 0.56, 0.596, 0.624 ], "z": [ - -0.784, -0.764, -0.936, -1.08, -1.152, -1.216, -1.252, -1.16, - -1.108, -0.996, -0.82, -0.752, -0.752, -0.856, -0.828, -0.852, - -0.808, -0.728, -0.468, -0.304, -0.224, -0.328, -0.424, -0.44, - -0.324, -0.148, -0.128, -0.12, -0.16, -0.116, -0.148, -0.24, -0.248, - -0.3, -0.412, -0.636, -0.792, -0.992, -1.164, -1.272, -1.308, - -1.152, -1.064, -1.196 + -0.932, -0.764, -0.988, -1.028, -1.028, -0.696, -0.488, -0.544, + -0.86, -1.032, -0.824, -0.552, -0.412, -0.46, -0.736, -0.752, + -0.688, -0.696, -0.692, -0.732, -0.856, -1.076, -1.072, -0.804, + -0.756, -0.828, -0.832, -0.72, -0.764, -0.696, -0.728, -0.808, + -0.928, -0.988, -0.984, -0.976, -0.96, -0.892, -0.892, -0.9, -0.856, + -0.832, -0.808, -0.852, -0.856, -0.884, -0.812, -0.724, -0.6 ] - } + }, + "createdAt": 1730111051003 }, { - "ID": 1729161973811, + "id": "1b72a86b-8c83-492f-9bd9-861418f71d19", "data": { "x": [ - 0.26, -0.076, -0.036, 0.208, 0.272, 0.064, 0.052, 0.324, 0.448, - 0.436, 0.476, 0.332, 0.068, 0.028, 0.004, 0.048, -0.044, -0.152, - -0.124, -0.248, -0.34, -0.444, -0.484, -0.52, -0.644, -0.68, -0.536, - -0.656, -0.86, -0.804, -0.644, -0.6, -0.708, -0.824, -0.752, -0.796, - -0.884, -0.78, -0.696, -0.756, -0.644, -0.484, -0.392, -0.316 + 0.692, 0.632, 0.68, 0.688, 0.596, 0.576, 0.7, 0.684, 0.656, 0.808, + 0.868, 0.836, 0.708, 0.44, 0.304, 0.444, 0.748, 0.984, 0.296, 0.148, + 0.68, 0.756, 0.364, -0.1, 0.28, 0.404, -0.004, 0.244, 0.276, 0.172, + 0.156, 0.376, 0.512, 0.516, 0.392, 0.072, 0.004, 0.368, 0.604, + 0.488, 0.212, 0.192, 0.268, 0.356, 0.4, 0.468, 0.492, 0.38 ], "y": [ - 0.68, 0.408, 0.168, -0.136, -0.38, -0.636, -0.688, -0.852, -0.776, - -0.912, -0.984, -1.112, -1.264, -1.352, -1.396, -1.408, -1.424, - -1.344, -1.22, -1.148, -1.108, -0.904, -0.728, -0.56, -0.388, - -0.264, -0.144, -0.06, -0.012, 0.16, 0.188, 0.316, 0.356, 0.404, - 0.548, 0.576, 0.6, 0.58, 0.708, 0.744, 0.764, 0.78, 0.768, 0.696 + 0.208, 0.064, 0.084, 0.176, 0.124, -0.124, -0.12, -0.116, -0.148, + -0.26, -0.392, -0.468, -0.432, -0.46, -0.476, -0.764, -0.94, -0.692, + -0.656, -0.752, -0.872, -0.908, -0.808, -0.916, -1.028, -1.024, + -1.152, -1.112, -1.128, -1.168, -1.016, -0.852, -0.724, -0.712, + -0.732, -0.668, -0.6, -0.376, -0.18, 0.1, 0.284, 0.452, 0.56, 0.548, + 0.5, 0.504, 0.48, 0.448 ], "z": [ - -0.552, -0.032, -0.116, -0.552, -0.92, -1.104, -1.384, -1.656, - -1.576, -1.232, -1.096, -1.056, -1.008, -1.172, -1.268, -1.308, - -1.2, -1.052, -1.124, -1.104, -1.08, -0.996, -0.852, -0.64, -0.384, - -0.308, -0.512, -0.392, -0.22, -0.288, -0.396, -0.376, -0.14, -0.02, - -0.212, -0.084, 0.12, 0.188, 0.184, 0.256, 0.156, 0.052, 0.04, 0.016 + -0.688, -0.764, -0.796, -0.688, -0.504, -0.52, -0.696, -0.672, + -0.58, -0.584, -0.6, -0.752, -0.74, -0.624, -0.428, -0.488, -0.744, + -1.224, -0.548, -0.18, -0.66, -0.86, -0.796, -0.496, -0.788, -1.016, + -0.768, -0.92, -0.984, -0.976, -0.94, -0.816, -0.756, -0.88, -1.18, + -1.068, -0.78, -0.78, -0.808, -0.756, -0.48, -0.372, -0.328, -0.456, + -0.656, -0.772, -0.752, -0.732 ] - } + }, + "createdAt": 1730111046637 }, { - "ID": 1729161969706, + "id": "ab5494a6-ff70-45fe-ae11-8fed15a4f5e9", "data": { "x": [ - 0.244, 0.004, -0.024, -0.256, -0.552, -0.692, -0.608, -0.62, -0.692, - -0.732, -0.692, -0.696, -0.652, -0.616, -0.468, -0.292, -0.184, - -0.212, -0.164, -0.224, -0.36, -0.452, -0.416, -0.376, -0.388, - -0.388, -0.336, -0.236, -0.004, 0.232, 0.328, 0.528, 0.56, 0.416, - 0.772, 0.968, 0.42, 0.224, 0.276, -0.108, -0.308, -0.688, -0.9, - -0.616 + 0.44, 0.388, 0.312, 0.268, 0.26, 0.304, 0.312, 0.308, 0.288, 0.34, + 0.408, 0.44, 0.38, 0.268, 0.416, 0.54, 0.552, 0.412, 0.432, 0.532, + 0.528, 0.404, 0.356, 0.352, 0.376, 0.492, 0.556, 0.504, 0.512, + 0.744, 0.6, 0.34, 0.248, 0.244, 0.268, 0.388, 0.504, 0.352, 0.34, + 0.252, 0.284, 0.192, 0.116, -0.048, -0.088, -0.144, -0.164, -0.096, + -0.06 ], "y": [ - -1.112, -1.232, -1.288, -1.232, -1.112, -0.932, -0.76, -0.524, - -0.444, -0.348, -0.224, -0.16, -0.044, 0.116, 0.244, 0.468, 0.612, - 0.864, 1.048, 1.088, 1.02, 0.948, 0.932, 0.844, 0.744, 0.66, 0.496, - 0.432, 0.252, 0.156, 0.056, -0.164, -0.4, -0.528, -0.436, -0.432, - -0.632, -0.808, -1.04, -1.36, -1.548, -1.4, -1.164, -0.912 + 0.624, 0.7, 0.736, 0.8, 0.864, 0.876, 0.836, 0.784, 0.74, 0.72, + 0.712, 0.624, 0.44, 0.392, 0.388, 0.44, 0.376, 0.296, 0.308, 0.364, + 0.284, 0.252, 0.26, 0.116, -0.064, -0.112, -0.084, -0.164, -0.372, + -0.368, -0.332, -0.46, -0.564, -0.584, -0.652, -0.764, -0.872, + -0.928, -0.784, -0.772, -0.868, -1.112, -1.204, -1.192, -1.104, + -1.096, -1.144, -1.236, -1.264 ], "z": [ - -1.392, -1.444, -1.72, -1.656, -1.376, -1.104, -1.012, -0.856, - -0.756, -0.788, -0.824, -0.724, -0.556, -0.084, 0.248, 0.24, 0.284, - 0.26, 0.188, 0.236, 0.256, 0.212, 0.136, 0.076, 0.068, 0.04, -0.028, - -0.132, -0.284, -0.632, -0.948, -1.312, -1.536, -1.508, -1.6, - -1.504, -0.82, -0.728, -1.256, -1.456, -1.632, -1.476, -1.312, - -1.432 + -0.788, -0.704, -0.608, -0.5, -0.356, -0.288, -0.352, -0.488, + -0.556, -0.532, -0.472, -0.472, -0.708, -0.724, -0.796, -0.776, + -0.896, -0.82, -0.772, -0.712, -0.712, -0.752, -0.848, -0.876, + -0.912, -0.708, -0.516, -0.58, -0.808, -1.024, -0.852, -0.624, + -0.772, -0.804, -0.776, -0.66, -0.888, -0.788, -0.756, -0.408, + -0.352, -0.52, -0.92, -0.84, -0.656, -0.42, -0.392, -0.568, -0.816 ] - } + }, + "createdAt": 1730111042105 } ] } diff --git a/src/utils/prediction.ts b/src/utils/prediction.ts index 39acf7413..24434f236 100644 --- a/src/utils/prediction.ts +++ b/src/utils/prediction.ts @@ -21,7 +21,7 @@ export const getDetectedAction = ( .map((action) => ({ action, thresholdDelta: - confidences[action.ID] - + confidences[action.id] - (action.requiredConfidence ?? mlSettings.defaultRequiredConfidence), })) .sort((left, right) => { diff --git a/vite.config.ts b/vite.config.ts index 8843e473c..05928841f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -78,6 +78,7 @@ export default defineConfig(async ({ mode }): Promise => { globals: true, environment: "jsdom", exclude: [...configDefaults.exclude, "**/e2e/**"], + setupFiles: ["fake-indexeddb/auto"], }, resolve: { alias: {