From 5d19f862fd0db190c1cba8d8016c19344dbbe4e5 Mon Sep 17 00:00:00 2001 From: Martin Staadecker Date: Sat, 9 Mar 2024 21:02:10 -0500 Subject: [PATCH] Fix swapping --- .env.development | 2 +- .env.production | 2 +- .eslintrc.cjs | 18 + .firebase/hosting.ZGlzdA.cache | 849 +----- .gitignore | 1 - .parcelrc | 4 - .postcssrc | 5 - .vscode/launch.json | 22 + LICENSE | 21 + firestore.rules | 2 +- index.html | 13 + package.json | 29 +- postcss.config.js | 6 + {images => public}/avatars/Alligator.png | Bin {images => public}/avatars/Anteater.png | Bin {images => public}/avatars/Armadillo.png | Bin {images => public}/avatars/Auroch.png | Bin {images => public}/avatars/Axolotl.png | Bin {images => public}/avatars/Badger.png | Bin {images => public}/avatars/Bat.png | Bin {images => public}/avatars/Beaver.png | Bin {images => public}/avatars/Buffalo.png | Bin {images => public}/avatars/Camel.png | Bin {images => public}/avatars/Capybara.png | Bin {images => public}/avatars/Chameleon.png | Bin {images => public}/avatars/Cheetah.png | Bin {images => public}/avatars/Chinchilla.png | Bin {images => public}/avatars/Chipmunk.png | Bin {images => public}/avatars/Chupacabra.png | Bin {images => public}/avatars/Cormorant.png | Bin {images => public}/avatars/Coyote.png | Bin {images => public}/avatars/Crow.png | Bin {images => public}/avatars/Dingo.png | Bin {images => public}/avatars/Dinosaur.png | Bin {images => public}/avatars/Dolphin.png | Bin {images => public}/avatars/Duck.png | Bin {images => public}/avatars/Elephant.png | Bin {images => public}/avatars/Ferret.png | Bin {images => public}/avatars/Fox.png | Bin {images => public}/avatars/Frog.png | Bin {images => public}/avatars/Giraffe.png | Bin {images => public}/avatars/Gopher.png | Bin {images => public}/avatars/Grizzly.png | Bin {images => public}/avatars/Hedgehog.png | Bin {images => public}/avatars/Hippo.png | Bin {images => public}/avatars/Hyena.png | Bin {images => public}/avatars/Ibex.png | Bin {images => public}/avatars/Ifrit.png | Bin {images => public}/avatars/Iguana.png | Bin {images => public}/avatars/Jackal.png | Bin {images => public}/avatars/Kangaroo.png | Bin {images => public}/avatars/Koala.png | Bin {images => public}/avatars/Kraken.png | Bin {images => public}/avatars/Lemur.png | Bin {images => public}/avatars/Leopard.png | Bin {images => public}/avatars/Liger.png | Bin {images => public}/avatars/Llama.png | Bin {images => public}/avatars/Manatee.png | Bin {images => public}/avatars/Mink.png | Bin {images => public}/avatars/Monkey.png | Bin {images => public}/avatars/Moose.png | Bin {images => public}/avatars/Narwhal.png | Bin {images => public}/avatars/Nyan Cat.png | Bin {images => public}/avatars/Orangutan.png | Bin {images => public}/avatars/Otter.png | Bin {images => public}/avatars/Panda.png | Bin {images => public}/avatars/Penguin.png | Bin {images => public}/avatars/Platypus.png | Bin {images => public}/avatars/Pumpkin.png | Bin {images => public}/avatars/Python.png | Bin {images => public}/avatars/Quagga.png | Bin {images => public}/avatars/Rabbit.png | Bin {images => public}/avatars/Raccoon.png | Bin {images => public}/avatars/Rhino.png | Bin {images => public}/avatars/Sheep.png | Bin {images => public}/avatars/Shrew.png | Bin {images => public}/avatars/Skunk.png | Bin {images => public}/avatars/Squirrel.png | Bin {images => public}/avatars/Tiger.png | Bin {images => public}/avatars/Turtle.png | Bin {images => public}/avatars/Walrus.png | Bin {images => public}/avatars/Wolf.png | Bin {images => public}/avatars/Wolverine.png | Bin {images => public}/avatars/Wombat.png | Bin {images => public}/cat-typing.gif | Bin {images => public}/emoji/1F600.png | Bin {images => public}/emoji/1F641.png | Bin {images => public}/emoji/1F642.png | Bin {images => public}/emoji/2764.png | Bin {images => public}/emoji/LICENSE.md | 0 {images => public}/icons/3-columns.svg | 0 {images => public}/icons/LICENSE.md | 0 {images => public}/icons/add-sign.svg | 0 {images => public}/icons/arrow-clockwise.svg | 0 .../icons/arrow-counterclockwise.svg | 0 {images => public}/icons/bg-color.svg | 0 {images => public}/icons/camera.svg | 0 {images => public}/icons/card-checklist.svg | 0 {images => public}/icons/caret-right-fill.svg | 0 {images => public}/icons/chat-left-text.svg | 0 {images => public}/icons/chat-right-dots.svg | 0 {images => public}/icons/chat-right-text.svg | 0 {images => public}/icons/chat-right.svg | 0 .../icons/chat-square-quote.svg | 0 {images => public}/icons/chevron-down.svg | 0 {images => public}/icons/clipboard.svg | 0 {images => public}/icons/close.svg | 0 {images => public}/icons/code.svg | 0 {images => public}/icons/comments.svg | 0 {images => public}/icons/copy.svg | 0 {images => public}/icons/diagram-2.svg | 0 {images => public}/icons/download.svg | 0 .../icons/draggable-block-menu.svg | 0 {images => public}/icons/dropdown-more.svg | 0 {images => public}/icons/figma.svg | 0 .../icons/file-earmark-text.svg | 0 {images => public}/icons/file-image.svg | 0 {images => public}/icons/filetype-gif.svg | 0 {images => public}/icons/font-color.svg | 0 {images => public}/icons/font-family.svg | 0 {images => public}/icons/gear.svg | 0 {images => public}/icons/horizontal-rule.svg | 0 {images => public}/icons/indent.svg | 0 {images => public}/icons/journal-code.svg | 0 {images => public}/icons/journal-text.svg | 0 {images => public}/icons/justify.svg | 0 {images => public}/icons/link.svg | 0 {images => public}/icons/list-ol.svg | 0 {images => public}/icons/list-ul.svg | 0 {images => public}/icons/lock-fill.svg | 0 {images => public}/icons/lock.svg | 0 {images => public}/icons/markdown.svg | 0 {images => public}/icons/mic.svg | 0 {images => public}/icons/minus-sign.svg | 0 {images => public}/icons/outdent.svg | 0 {images => public}/icons/paint-bucket.svg | 0 {images => public}/icons/palette.svg | 0 {images => public}/icons/pencil-fill.svg | 0 {images => public}/icons/play.svg | 0 {images => public}/icons/plug-fill.svg | 0 {images => public}/icons/plug.svg | 0 {images => public}/icons/plus-slash-minus.svg | 0 {images => public}/icons/plus.svg | 0 {images => public}/icons/prettier-error.svg | 0 {images => public}/icons/prettier.svg | 0 {images => public}/icons/scissors.svg | 0 {images => public}/icons/send.svg | 0 {images => public}/icons/square-check.svg | 0 {images => public}/icons/sticky.svg | 0 {images => public}/icons/success-alt.svg | 0 {images => public}/icons/success.svg | 0 {images => public}/icons/table.svg | 0 {images => public}/icons/text-center.svg | 0 {images => public}/icons/text-left.svg | 0 {images => public}/icons/text-paragraph.svg | 0 {images => public}/icons/text-right.svg | 0 {images => public}/icons/trash.svg | 0 {images => public}/icons/trash3.svg | 0 {images => public}/icons/tweet.svg | 0 {images => public}/icons/type-bold.svg | 0 {images => public}/icons/type-h1.svg | 0 {images => public}/icons/type-h2.svg | 0 {images => public}/icons/type-h3.svg | 0 {images => public}/icons/type-h4.svg | 0 {images => public}/icons/type-h5.svg | 0 {images => public}/icons/type-h6.svg | 0 {images => public}/icons/type-italic.svg | 0 .../icons/type-strikethrough.svg | 0 {images => public}/icons/type-subscript.svg | 0 {images => public}/icons/type-superscript.svg | 0 {images => public}/icons/type-underline.svg | 0 {images => public}/icons/upload.svg | 0 {images => public}/icons/user.svg | 0 {images => public}/icons/youtube.svg | 0 {images => public}/image/LICENSE.md | 0 {images => public}/landscape.jpg | Bin {images => public}/logo.svg | 0 {images => public}/yellow-flower-small.jpg | Bin {images => public}/yellow-flower.jpg | Bin src/components/CheckGameExists.tsx | 11 - src/components/EditorContext.tsx | 59 - src/components/Footer.tsx | 18 + src/components/GameInProgress.tsx | 112 +- src/components/GameStatus.tsx | 91 +- src/components/GameToolbar.tsx | 2 +- src/components/Loading.tsx | 16 + src/components/MessagePage.tsx | 13 + src/components/UserCard.tsx | 30 +- src/components/WaitGameLoad.tsx | 10 - src/components/WaitingRoom.tsx | 81 +- src/components/index.css | 211 +- src/components/lexical/Editor.tsx | 36 +- src/components/lexical/LICENSE | 21 + .../lexical/plugins/ActionsPlugin/index.tsx | 56 +- .../lexical/plugins/CommentPlugin/index.css | 8 +- .../plugins/DraggableBlockPlugin/index.css | 2 +- .../lexical/plugins/ImagesPlugin/index.tsx | 116 +- .../plugins/InlineImagePlugin/index.tsx | 96 +- .../plugins/ToolbarPlugin/fontSize.css | 12 +- .../lexical/themes/PlaygroundEditorTheme.css | 4 +- src/{logic => firebase}/FirebaseContext.tsx | 29 +- src/firebase/db_queries.ts | 149 + src/firebase/db_schema.ts | 16 + src/game_logic/EditorContext.tsx | 64 + src/game_logic/GameContext.tsx | 80 + src/game_logic/state_machine.ts | 205 ++ src/game_logic/util.ts | 13 + src/index.css | 2 + src/index.html | 14 - src/index.tsx | 33 +- src/logic/GameContext.tsx | 90 - src/logic/game_logic.ts | 284 -- src/router.tsx | 13 +- src/routes/CreateGame.tsx | 102 +- src/routes/GamePage.tsx | 69 +- src/routes/ManageGame.tsx | 92 +- tailwind.config.js | 14 - tailwind.config.ts | 21 + tsconfig.json | 29 +- tsconfig.node.json | 11 + vite.config.ts | 13 + yarn.lock | 2444 ++++++----------- 222 files changed, 2329 insertions(+), 3437 deletions(-) create mode 100644 .eslintrc.cjs delete mode 100644 .parcelrc delete mode 100644 .postcssrc create mode 100644 .vscode/launch.json create mode 100644 LICENSE create mode 100644 index.html create mode 100644 postcss.config.js rename {images => public}/avatars/Alligator.png (100%) rename {images => public}/avatars/Anteater.png (100%) rename {images => public}/avatars/Armadillo.png (100%) rename {images => public}/avatars/Auroch.png (100%) rename {images => public}/avatars/Axolotl.png (100%) rename {images => public}/avatars/Badger.png (100%) rename {images => public}/avatars/Bat.png (100%) rename {images => public}/avatars/Beaver.png (100%) rename {images => public}/avatars/Buffalo.png (100%) rename {images => public}/avatars/Camel.png (100%) rename {images => public}/avatars/Capybara.png (100%) rename {images => public}/avatars/Chameleon.png (100%) rename {images => public}/avatars/Cheetah.png (100%) rename {images => public}/avatars/Chinchilla.png (100%) rename {images => public}/avatars/Chipmunk.png (100%) rename {images => public}/avatars/Chupacabra.png (100%) rename {images => public}/avatars/Cormorant.png (100%) rename {images => public}/avatars/Coyote.png (100%) rename {images => public}/avatars/Crow.png (100%) rename {images => public}/avatars/Dingo.png (100%) rename {images => public}/avatars/Dinosaur.png (100%) rename {images => public}/avatars/Dolphin.png (100%) rename {images => public}/avatars/Duck.png (100%) rename {images => public}/avatars/Elephant.png (100%) rename {images => public}/avatars/Ferret.png (100%) rename {images => public}/avatars/Fox.png (100%) rename {images => public}/avatars/Frog.png (100%) rename {images => public}/avatars/Giraffe.png (100%) rename {images => public}/avatars/Gopher.png (100%) rename {images => public}/avatars/Grizzly.png (100%) rename {images => public}/avatars/Hedgehog.png (100%) rename {images => public}/avatars/Hippo.png (100%) rename {images => public}/avatars/Hyena.png (100%) rename {images => public}/avatars/Ibex.png (100%) rename {images => public}/avatars/Ifrit.png (100%) rename {images => public}/avatars/Iguana.png (100%) rename {images => public}/avatars/Jackal.png (100%) rename {images => public}/avatars/Kangaroo.png (100%) rename {images => public}/avatars/Koala.png (100%) rename {images => public}/avatars/Kraken.png (100%) rename {images => public}/avatars/Lemur.png (100%) rename {images => public}/avatars/Leopard.png (100%) rename {images => public}/avatars/Liger.png (100%) rename {images => public}/avatars/Llama.png (100%) rename {images => public}/avatars/Manatee.png (100%) rename {images => public}/avatars/Mink.png (100%) rename {images => public}/avatars/Monkey.png (100%) rename {images => public}/avatars/Moose.png (100%) rename {images => public}/avatars/Narwhal.png (100%) rename {images => public}/avatars/Nyan Cat.png (100%) rename {images => public}/avatars/Orangutan.png (100%) rename {images => public}/avatars/Otter.png (100%) rename {images => public}/avatars/Panda.png (100%) rename {images => public}/avatars/Penguin.png (100%) rename {images => public}/avatars/Platypus.png (100%) rename {images => public}/avatars/Pumpkin.png (100%) rename {images => public}/avatars/Python.png (100%) rename {images => public}/avatars/Quagga.png (100%) rename {images => public}/avatars/Rabbit.png (100%) rename {images => public}/avatars/Raccoon.png (100%) rename {images => public}/avatars/Rhino.png (100%) rename {images => public}/avatars/Sheep.png (100%) rename {images => public}/avatars/Shrew.png (100%) rename {images => public}/avatars/Skunk.png (100%) rename {images => public}/avatars/Squirrel.png (100%) rename {images => public}/avatars/Tiger.png (100%) rename {images => public}/avatars/Turtle.png (100%) rename {images => public}/avatars/Walrus.png (100%) rename {images => public}/avatars/Wolf.png (100%) rename {images => public}/avatars/Wolverine.png (100%) rename {images => public}/avatars/Wombat.png (100%) rename {images => public}/cat-typing.gif (100%) rename {images => public}/emoji/1F600.png (100%) rename {images => public}/emoji/1F641.png (100%) rename {images => public}/emoji/1F642.png (100%) rename {images => public}/emoji/2764.png (100%) rename {images => public}/emoji/LICENSE.md (100%) rename {images => public}/icons/3-columns.svg (100%) rename {images => public}/icons/LICENSE.md (100%) rename {images => public}/icons/add-sign.svg (100%) rename {images => public}/icons/arrow-clockwise.svg (100%) rename {images => public}/icons/arrow-counterclockwise.svg (100%) rename {images => public}/icons/bg-color.svg (100%) rename {images => public}/icons/camera.svg (100%) rename {images => public}/icons/card-checklist.svg (100%) rename {images => public}/icons/caret-right-fill.svg (100%) rename {images => public}/icons/chat-left-text.svg (100%) rename {images => public}/icons/chat-right-dots.svg (100%) rename {images => public}/icons/chat-right-text.svg (100%) rename {images => public}/icons/chat-right.svg (100%) rename {images => public}/icons/chat-square-quote.svg (100%) rename {images => public}/icons/chevron-down.svg (100%) rename {images => public}/icons/clipboard.svg (100%) rename {images => public}/icons/close.svg (100%) rename {images => public}/icons/code.svg (100%) rename {images => public}/icons/comments.svg (100%) rename {images => public}/icons/copy.svg (100%) rename {images => public}/icons/diagram-2.svg (100%) rename {images => public}/icons/download.svg (100%) rename {images => public}/icons/draggable-block-menu.svg (100%) rename {images => public}/icons/dropdown-more.svg (100%) rename {images => public}/icons/figma.svg (100%) rename {images => public}/icons/file-earmark-text.svg (100%) rename {images => public}/icons/file-image.svg (100%) rename {images => public}/icons/filetype-gif.svg (100%) rename {images => public}/icons/font-color.svg (100%) rename {images => public}/icons/font-family.svg (100%) rename {images => public}/icons/gear.svg (100%) rename {images => public}/icons/horizontal-rule.svg (100%) rename {images => public}/icons/indent.svg (100%) rename {images => public}/icons/journal-code.svg (100%) rename {images => public}/icons/journal-text.svg (100%) rename {images => public}/icons/justify.svg (100%) rename {images => public}/icons/link.svg (100%) rename {images => public}/icons/list-ol.svg (100%) rename {images => public}/icons/list-ul.svg (100%) rename {images => public}/icons/lock-fill.svg (100%) rename {images => public}/icons/lock.svg (100%) rename {images => public}/icons/markdown.svg (100%) rename {images => public}/icons/mic.svg (100%) rename {images => public}/icons/minus-sign.svg (100%) rename {images => public}/icons/outdent.svg (100%) rename {images => public}/icons/paint-bucket.svg (100%) rename {images => public}/icons/palette.svg (100%) rename {images => public}/icons/pencil-fill.svg (100%) rename {images => public}/icons/play.svg (100%) rename {images => public}/icons/plug-fill.svg (100%) rename {images => public}/icons/plug.svg (100%) rename {images => public}/icons/plus-slash-minus.svg (100%) rename {images => public}/icons/plus.svg (100%) rename {images => public}/icons/prettier-error.svg (100%) rename {images => public}/icons/prettier.svg (100%) rename {images => public}/icons/scissors.svg (100%) rename {images => public}/icons/send.svg (100%) rename {images => public}/icons/square-check.svg (100%) rename {images => public}/icons/sticky.svg (100%) rename {images => public}/icons/success-alt.svg (100%) rename {images => public}/icons/success.svg (100%) rename {images => public}/icons/table.svg (100%) rename {images => public}/icons/text-center.svg (100%) rename {images => public}/icons/text-left.svg (100%) rename {images => public}/icons/text-paragraph.svg (100%) rename {images => public}/icons/text-right.svg (100%) rename {images => public}/icons/trash.svg (100%) rename {images => public}/icons/trash3.svg (100%) rename {images => public}/icons/tweet.svg (100%) rename {images => public}/icons/type-bold.svg (100%) rename {images => public}/icons/type-h1.svg (100%) rename {images => public}/icons/type-h2.svg (100%) rename {images => public}/icons/type-h3.svg (100%) rename {images => public}/icons/type-h4.svg (100%) rename {images => public}/icons/type-h5.svg (100%) rename {images => public}/icons/type-h6.svg (100%) rename {images => public}/icons/type-italic.svg (100%) rename {images => public}/icons/type-strikethrough.svg (100%) rename {images => public}/icons/type-subscript.svg (100%) rename {images => public}/icons/type-superscript.svg (100%) rename {images => public}/icons/type-underline.svg (100%) rename {images => public}/icons/upload.svg (100%) rename {images => public}/icons/user.svg (100%) rename {images => public}/icons/youtube.svg (100%) rename {images => public}/image/LICENSE.md (100%) rename {images => public}/landscape.jpg (100%) rename {images => public}/logo.svg (100%) rename {images => public}/yellow-flower-small.jpg (100%) rename {images => public}/yellow-flower.jpg (100%) delete mode 100644 src/components/CheckGameExists.tsx delete mode 100644 src/components/EditorContext.tsx create mode 100644 src/components/Footer.tsx create mode 100644 src/components/Loading.tsx create mode 100644 src/components/MessagePage.tsx delete mode 100644 src/components/WaitGameLoad.tsx create mode 100644 src/components/lexical/LICENSE rename src/{logic => firebase}/FirebaseContext.tsx (62%) create mode 100644 src/firebase/db_queries.ts create mode 100644 src/firebase/db_schema.ts create mode 100644 src/game_logic/EditorContext.tsx create mode 100644 src/game_logic/GameContext.tsx create mode 100644 src/game_logic/state_machine.ts create mode 100644 src/game_logic/util.ts delete mode 100644 src/index.html delete mode 100644 src/logic/GameContext.tsx delete mode 100644 src/logic/game_logic.ts delete mode 100644 tailwind.config.js create mode 100644 tailwind.config.ts create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.env.development b/.env.development index 85e44aa..9f795ad 100644 --- a/.env.development +++ b/.env.development @@ -1 +1 @@ -DOMAIN="http://localhost:1234" +VITE_DOMAIN="http://localhost:5173" diff --git a/.env.production b/.env.production index 7bcc7f6..db03122 100644 --- a/.env.production +++ b/.env.production @@ -1 +1 @@ -DOMAIN="https://pop-uoft.web.app" \ No newline at end of file +VITE_DOMAIN="https://pop-uoft.web.app" \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..d6c9537 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/.firebase/hosting.ZGlzdA.cache b/.firebase/hosting.ZGlzdA.cache index 3b5eabb..5390255 100644 --- a/.firebase/hosting.ZGlzdA.cache +++ b/.firebase/hosting.ZGlzdA.cache @@ -1,755 +1,98 @@ -1F600.e39a35f7.png,1708394422918,0b4a0c4570670b068e676dbf2a5bff44f8dc503e5a7f0eaabdf5079f48dbd194 -1F600.7006aab2.png,1708376983708,1b555e577ecceb4139f0ff8739fc9784482bd1e48d2c82e158e5913ccd97c8f9 -1F600.94c2a46f.png,1708378196746,1b555e577ecceb4139f0ff8739fc9784482bd1e48d2c82e158e5913ccd97c8f9 -1F600.e2c7af0f.png,1708393363464,1b555e577ecceb4139f0ff8739fc9784482bd1e48d2c82e158e5913ccd97c8f9 -1F641.2e8a46d7.png,1708376983675,f96eb365aff24a1a8e2618930b8ed22f36a3155d46a9b277a9ca820cb0c5836c -1F641.7b965c6a.png,1708393363416,f96eb365aff24a1a8e2618930b8ed22f36a3155d46a9b277a9ca820cb0c5836c -1F641.49ca3901.png,1708378196763,f96eb365aff24a1a8e2618930b8ed22f36a3155d46a9b277a9ca820cb0c5836c -1F642.3b4643a8.png,1708393363406,834363eea40478d5057100653fc1e9dc6d9930d4d6269448375451d812a57208 -1F642.2f87eb60.png,1708378196764,834363eea40478d5057100653fc1e9dc6d9930d4d6269448375451d812a57208 -1F642.b8578c72.png,1708394423272,10a8679a39c67a464ecab3d350558d2a6372e9d75b8953359bb154088fb5e5c8 -1F642.d1f0c61b.png,1708376983738,834363eea40478d5057100653fc1e9dc6d9930d4d6269448375451d812a57208 -3-columns.7b7148fd.svg,1708393363339,f9780db205f60d772aa50b25ec5b1fea56af1797c3c5b8e25576511c9b931d01 -3-columns.86101262.svg,1708394425977,f5dca5a029bfa13ddb709eff416b86a02611c340b778c58017a9d9d4d1eb8dd5 -2764.4a2e9036.png,1708394422918,acf9821931aeb0f8b2ea28b1bdadc2b97c5d969473267022b68cfb27d905e6d6 -2764.b2b50a9f.png,1708376983706,9ec78afe3ea8eeeba51509e37fe1c182111bbf13af19d73870aea3c336104973 -1F641.9d57f9b6.png,1708394422926,60c8e77a8a0ecf5fc18fca5fcbf36f2f1f50db0a6730d717d3e6f6be59e644f8 -2764.cf12ad70.png,1708393363342,9ec78afe3ea8eeeba51509e37fe1c182111bbf13af19d73870aea3c336104973 -add-sign.5c8be341.svg,1708394425909,1a09dcd9b4594de2fae4576e222be8ce876e1b2a59eadb2947f8aedcb2e356b8 -3-columns.c577c51a.js,1708376983678,7138a4cee4941ce9369366fc482e1badc249ce621ecaef14cb1e3be6ad979dca -3-columns.c577c51a.js.map,1708376983767,dc17604c9dd8ac19623f5ee246bdd18a6f23d45c0e1be71c41ab0ebe63869ad0 -add-sign.cdd8215d.svg,1708393363418,8e67a0776dde3e8ab99061400749d5a6b6684ddc083871c8e5f3847df8c4ab0e -add-sign.3c154453.js,1708378196943,b2f917ed14d456630259f0be357bd554b5d500a19fb7ae250985bbcb395b8e6f -2764.d8c7648d.png,1708378196832,9ec78afe3ea8eeeba51509e37fe1c182111bbf13af19d73870aea3c336104973 -3-columns.d3f78beb.js,1708378196820,f1f35ec6b8968d4c8f67754d269b2d787f653e1f75fb8e9c2644c206836a64af -arrow-clockwise.8896c744.svg,1708394425908,e5b054811b3549b12db9c196e601e49ac9732728b0e7cc30458c8b37166f92e2 -add-sign.3c154453.js.map,1708378196947,d84f50673cdc077564097ae86a09abe5947ac616c5a5fd42d5d4848ca7adedd4 -arrow-clockwise.b328bd24.svg,1708393363377,c9d258f3b0d79ed6a9e670f5c9044dd6927546da2de8d3f763e7e6d3ce81a99a -add-sign.50570a62.js.map,1708376984182,bc57763a84f681dff25175a9572323d41a2bf138cd14ee2dd742b6283174f1cb -add-sign.50570a62.js,1708376984132,de7c8f6e8f664499e582baca46b90f3cfe97b3100536f2d836a2cb81e73a5fe0 -arrow-clockwise.5fd26819.js.map,1708376983741,6dcd15716bbf25b36159322a76c102cc38bcc29f7e6bf6956aed57d127fc77cb -3-columns.d3f78beb.js.map,1708378196866,e3b27b7330128728a367805d8608be55cfaafcd49b4b3c4a5668913c145193d3 -arrow-counterclockwise.117a91a2.svg,1708393363429,ae259ac34f333864e521cdceadf30bbd93e87ff58e1e9c3adf5322ca6931de78 -arrow-clockwise.5fd26819.js,1708376983641,45660129d3afc48c96e61a602b35da5c6f4c96a0063f6bf431a7c8a57ca19ae5 -arrow-clockwise.b83bd2cd.js,1708378196805,e4a4f7cf5cf14203119d05dc226038216f7abddf57baea061ab9260de0e0efc6 -arrow-counterclockwise.f5f857ef.svg,1708394423421,d78decd280ab384625745ba9078c8518f20a26b130dacfb49b81b969aba472b2 -arrow-counterclockwise.28e82409.js,1708376983680,c4b4cd7adffcbe3cdc86466830db394e48472332dace27551c18ddc7e3217921 -arrow-clockwise.b83bd2cd.js.map,1708378196853,90c4441f5d6433c17d275f4dec8262409155a6018fc4ba87237be4e87a7b25d0 -arrow-counterclockwise.28e82409.js.map,1708376983768,c6ab25ca67466f8d6c754cfdd15867f92c3ad8a465d757dcf4381be7d4f74bb1 -bg-color.ac495f73.svg,1708394423421,9327770b76ee4c9a991741bd124bbe482ed6e4bee094b806d1539cd58a31b46b -camera.8cbaee1e.svg,1708393363377,b5bc96041d26ea5c9914258496a0c065316aa75ea19f2cdf184be7f52c1607e4 -arrow-counterclockwise.bce5511d.js.map,1708378196892,18113d916ce1ecdeba83b03095a8b263fb6a1296af08af9e1cf09441a169f8d3 -camera.73808fa2.svg,1708394425908,66fdff12a4e83320a6bd1eb8e62a556cd83fac6db1297d37fae3f6e23da0bd63 -arrow-counterclockwise.bce5511d.js,1708378196865,26edaf580bb749b75d2015607158d9d35cb38ed199462251e1d8e3e9b809ca9e -bg-color.e9a901cf.svg,1708393363429,f58d8a24355b61ad82f693738f609fd81f3dcdace925236f7727ffeb0b560ec5 -bg-color.2afaa4a8.js.map,1708378196892,fd0f8c0802889a662d60c13298c769c42b57e7365d74651eb3d0fe3cd5a00eec -bg-color.2afaa4a8.js,1708378196865,82cce86d3861818760ed904895313aa178d7da8a19ccd6f7f47cd70d5ccea306 -bg-color.dcb90ea5.js.map,1708376983767,bc876c1bc8b26cefb1fec415b5f81d07a88cb7441825a5e7693f7fff7bf944c0 -bg-color.dcb90ea5.js,1708376983679,7f5e68d4107b78562ba300622d479066b18f1aa809b0faebc8c71e0682a67951 -camera.90405329.js,1708379025255,0c620198a7ad5f2ca0d3bdb6e089b571d72e5c1695ff65ce09ded0bb82829219 -camera.90405329.js.map,1708379025261,ed95dbacdb00f44b2168726dbe103c6f211ec2ea49b6ad1d2d63e7d51f2bfeae -camera.e6658529.js.map,1708379241692,d22a2c75d5a287ee80654156274a7d01170e66d08789a0448ad64b46daacf7d7 -camera.f795cbc6.js,1708376983641,5ce8d5d0f80e0f58c96457a9688342bb198a8ed5f33c944f4fb524176d113c84 -camera.e6658529.js,1708379241686,cbbd13c92681ddad6ff78992eb1fbfa7d1caee6c75439073d22e8b851e1c2ee5 -card-checklist.29184034.svg,1708394425908,2675ffd9f398ba9dab0a6b80b5fe6098d06c3b2160d4b9603dd9296408c5f928 -card-checklist.655a789d.svg,1708393363377,e4cb0cea2104e2b344ca1ffab3d2017e27823130d17ad08c35fb09523d17298e -camera.f795cbc6.js.map,1708376983740,5d3241fcf3d86b36f7902e9f28c0ef100b8ae58eb11df9e80df8b543411449c1 -card-checklist.c8e68501.js.map,1708376983741,699b3237958a1df6a625df7580a675001464a6d6250bd6f8dcfa3802aab8432e -card-checklist.c8e68501.js,1708376983641,5d7c452ba226fcdf311760ca3504d1dae48016d7cfb7d60c37c0010a4e647997 -card-checklist.ff2041a1.js.map,1708378196853,8d6cd7005584815a2e1d9fdc8db9c231fd3557628e66b7d9fe93692a34064763 -caret-right-fill.68dbbce1.js.map,1708376983767,fd49499b55e8a089700101be3b91242ba68f838c728989b343fd8930aa078588 -caret-right-fill.6ab3d649.svg,1708393363429,808c1a8c40cf29ba612ccb354e57511d953fc421dc07facc8bc4da1821cd2c9a -caret-right-fill.f043edbb.svg,1708394423420,1f9bbd83b323f7f5bbfea95b939776551b77ecbc39f6ac75ebf3d6f9e514409d -caret-right-fill.68dbbce1.js,1708376983679,ecafcdfe885a96e1f48667a4849fdcf4c36b842c1b2e4434eb349e960a99df1b -card-checklist.ff2041a1.js,1708378196805,b9d500518901d0f8f5c7c23cd7759a951d40eb4ab93d889be2e73e381b9ef39f -caret-right-fill.891cb55d.js,1708378196865,478aa79894c7e4c964a268742cb53231ebf85b081610caf09a93bbc6a9a955c5 -chat-left-text.4d76fcbd.svg,1708394423421,de44e6bf309a0b71bd244f2559c5beb0b68f88e0a9948f17d8763e52f7c1dd5a -caret-right-fill.891cb55d.js.map,1708378196892,fda45ecfb105aa60d6e308716b4d0296ec6ce34eb56d683db6f671fab2a3ee87 -chat-left-text.5c696c90.svg,1708393363430,33267f83908093060e1af9e754318aaedb4307d07493cae9fd48d2fdbba2df6c -chat-left-text.5c75d4f9.js,1708378196865,24685b68ea3431105bc971e3e1aee6c68a0943e1e64c77f694ba084b5d5eeff8 -chat-square-quote.1b3eac29.svg,1708394425982,24d16c1fc4159ec8f97eff2e76b3fb93c5e71517273d0874682e3cae9a215129 -chat-left-text.77c26b2e.js,1708376983680,1c4fa53d280b0c309744d7f1a35c8c64bdbadc8c3f8c9725ea7ac5ebd58600c5 -chat-left-text.5c75d4f9.js.map,1708378196892,a73832554c5436f4e20faf01e957f425651f594e3d3ad90848416a3fae9df6ff -chat-left-text.77c26b2e.js.map,1708376983769,a7950364095098661ef03b572a38bb146e67021ab82ec4c15f4a02ca059e2d3f -chat-square-quote.44127524.js,1708376983679,dd9850d6010173ab074530c58fcee5315916e2c144f6ea8deee3a1d3a605ce7f -chat-square-quote.3bcfb5d8.js,1708378196821,738676a60dd6d37ae0264546f5176af0d59e641a93b6aa4b23667bd908a40161 -chat-square-quote.94a55a21.svg,1708393363341,73b96ece8b3e5954169d15a9a69954a76ccb0a79c15d4a19551a5ef6e65786b8 -chat-square-quote.44127524.js.map,1708376983767,226a10ae2cc4c1803b2847db2995268ba5061124bb0400f3e7dc3928f7f826f0 -chevron-down.8964fb2a.svg,1708394423462,b1e8059e787ed4febc09da794b992d1b9e222294c4966c4c2acb1f4f8f080856 -chat-square-quote.3bcfb5d8.js.map,1708378196866,720aedd5bb95711776aec352e8dd78fb1b462d70012da35f57fc1a04498d1f29 -chevron-down.c3e265d7.svg,1708393363398,900a8f94e02e813fa914b596fbbb09982f13081ea1231c4152550b10d2267bed -chevron-down.5e979a48.js,1708378197058,3e73023d6991b79b2d4576a17c8158fdf66dd90aa230725b54fdb641a45b3e6c -chevron-down.6d0a3871.js,1708376983710,75ad37c7cf09c58da30bd400133ead0c9e343a7e8cb9241b663aa15349825be7 -chevron-down.5e979a48.js.map,1708378197080,643dcaa95835997d4c49d8f852aaa5b08998c073b861313c6a92b21da20d26ce -chevron-down.6d0a3871.js.map,1708376983787,1d7eed07feb3879763325a60390e5896c4046de40ec53ea7713aa9d3f4b0176a -clipboard.a73624f4.js,1708376983709,403ce1f04c10e352301030b96dd513b8d072003fc983aacb02dac0cee934a0df -clipboard.a9090a11.svg,1708393363397,0519566839ebc06b649abea59242f1a112c8cc007af44ea43efd6460bd0cfcbb -clipboard.56ff8fb0.js.map,1708378197079,c565e5fdeed53a018b8b55cd5eb192a323031c31c3bd25766e10efcfa2748001 -clipboard.56ff8fb0.js,1708378197057,d4827c763c72031f501e890fb29fe592359d4dace0b6d2140717421f997dd4b1 -clipboard.a73624f4.js.map,1708376983784,2b1147e493a6b145e9bab0913fcfaa0c3a16065d2cadeb3449a0290fe6a7bfa8 -clipboard.dc3968b5.svg,1708394423461,d6f92438ac433c2cabb7b6c5254468381b1bedb6140d18415054ee1beada2834 -close.1ce7e41d.js,1708378197058,a8b2ac0dad7954de9d0add07860ea6c46895371d11795733eb73e1e1df4288ea -close.97f69e55.svg,1708394423462,48f566ef8bfd1c15fbbe1fd71a1b3c9a8ec8eebcf03646c71255cd4e0b0a2801 -close.b3a354ff.js,1708376983710,86a7f33a7e8c08afc30aa59a51f5076d0071f920f0805fd7e48fa85e52cc943f -close.dc79e8a3.svg,1708393363397,f218a2b05d175dd73155b819d188b8e12fb2e05551ed0560ac99f11cfe7ded6e -close.1ce7e41d.js.map,1708378197080,46896adb49e9ef7daedf33879dfc27d09cdcfba14b1122376ad7759c55399a28 -code.35596b0f.svg,1708393363429,d86bf9d76eed50259985c855686e6b8efd5823be0887f09bc7ae563248ddbe1a -code.8f8aed73.svg,1708394423420,eaa43c49d33a371014c7ab69e8683a5b45cf87642b4feffa702ed72216627f96 -comments.00b46447.svg,1708393363378,97e4146c7f5454beaa02a723b5b63a9b3110b33d088955d496921bda8308bb9a -close.b3a354ff.js.map,1708376983784,61144b4d3fc94556fdb0d9a3d531c168111ec8802e58ad31c85b5faf2427c602 -code.01b6ed9b.js,1708376983679,23eefa9735bef8be17c94ca4961c744ecd204782e39888fd2db850aed729d57f -code.01b6ed9b.js.map,1708376983767,fc1145e1060c4c8a31d2dc25e44bc0fadfb84b126050e4c500ff79d9c1a8db78 -code.6a9d6576.js.map,1708378196892,b74e0ef7287b895cf981f769530a6bb2ba4519e95460e3a1d92bc8dd50347ecc -code.6a9d6576.js,1708378196865,5fb477fbcc5455bd1ca16f5a337be42fa84a5c58def5e9ab0125abc82b7f0ff4 -comments.234f80a7.js,1708376983641,ab8f931fb8b5a367f23d88f66f433a578659cba4716aa738b41399cec45ad6b3 -comments.234f80a7.js.map,1708376983748,6800b69259679ef6803f0835531c078dcab6ca8811de763e0386cacb315aaf3c -comments.e805dffa.svg,1708394425909,351975c143e18ce3a6dd52799f9328b9b61e1170610d2f425effa6db61c50eb9 -comments.95e15d32.js,1708378196806,aa8357964a56d3d36c54ef254a22f89a0fdaecce8779cd4993aa8d14cdb9906e -comments.95e15d32.js.map,1708378196863,40fa7c6431b1cff1e9bd1e156ce0468b9758569f093c54e050eca08a21293063 -copy.d79831d1.svg,1708394425908,94c72d670a78c0996f6d1bcd4d81fe02cf3a9ae4f802b25c68e3edcf4f4be3d5 -copy.e539ea1a.svg,1708393363378,7acda157933e70b3c40f44c8b4f575997a1fb4ac2876c0744230616c34ccb0af -copy.94a5125c.js,1708376983641,005930ee02dfb681f48a5debdcaadcb874efbb77e4b857d2e68a1e35512ad411 -diagram-2.247ee8f8.svg,1708394425908,703ad714167f1fc72343fee1f5c901bacaf6ad2658c339a5dfa375774bf79000 -copy.94a5125c.js.map,1708376983741,8442c738ededd4b3c0c9501a20fa629a418e13dab28cdd20ef27eb11082dcff8 -copy.a48ea587.js,1708378196805,a5556faef25704fde5f3939ca32ca1141e619bbb31b313ed53646702f4b902ab -copy.a48ea587.js.map,1708378196853,d6f53376f7f132b6db2727967b4fb207cd8fa88416ecd98a00e9b79a6d444414 -diagram-2.ac54fa73.js.map,1708376983741,b05884504422c7f9ac3a014f7299805323d6d8fdfe67c7a13fe94e8939787a48 -diagram-2.ac54fa73.js,1708376983641,480219e3d2e0c9d414496acddf2e18d1af162b5e688c9ada099d632812b6e6ae -diagram-2.c08fecab.svg,1708393363377,748092ce51aecb994d79bb9322f887aa7cf86cec9b5b0bf2092b92b9d35284ef -diagram-2.b003d307.js,1708378196805,40d369cfc7d6e5fd0587db5c08e32e5ffcf499506e0961b812afdb5887064e1a -download.24f10125.svg,1708393363339,823479e7f80b6e59578d458f0ab009aaea29fc65866b194b818873a8cea6f8b7 -diagram-2.b003d307.js.map,1708378196853,2ecba662594da3453dbdabed10577dade0381057122b92a00a575f8c5584b255 -download.0d868ef9.js,1708378196820,1f3b85ec8ff3495322ae469e15dcb89ca08d9e29c8fd20f4d575a9825ea6b184 -download.d53a281a.svg,1708394425977,de9b65d6248cc5e55e9e50f2e4400efdedb9532ded89145c58b29dfec549e885 -download.0d868ef9.js.map,1708378196866,4788ed6759cb152524b9a75687f311cacae75da261f086948d1274c0c2fb025e -download.c717c275.js,1708376983678,b7274b8fdf613073a052b0537f4d063a40e021ec688d9685cd30381655d46d27 -download.c717c275.js.map,1708376983766,f57082f04c840fe1417c89853e23e119ebb52edce37bc396b11cab0cc5c82e13 -draggable-block-menu.3d7255ac.js.map,1708376984181,6dad3263fa4cd06319cc25640661725a1bd571145a08a7545f94cba28394d48f -draggable-block-menu.3d7255ac.js,1708376984131,177bf0e18faf82372ede15d6e3a0d4882be4a175dac5889dd1e94f06e4b19955 -draggable-block-menu.3f026163.js,1708378196943,a2212b2885294e280890785bc68b1111482093d60f8faa79835dbccd06be9120 -draggable-block-menu.9429d0e2.svg,1708393363417,fec26d155b0d4c2fd2557fb6bdf79fde6ae6b81c6fddd823d8c4fc21671917c9 -draggable-block-menu.3f026163.js.map,1708378196947,8dd0e97d0599217da3ca40f66929dd5579c95aaaeb16fa5f7a0b685a05459caa -draggable-block-menu.9e4e095f.svg,1708394425909,fb24e4c5fc8713d3086c78441835565857d7e077ce3d271493761769feb8a2be -camera.ba3abeab.js,1708379241697,21c7bf152cbf3c71723cccf4699267c68a08acd1e0acb7dd8ffa93198827b067 -chat-left-text.ba3abeab.js,1708376802410,d7b77f0f770ca99f21312607487adeebb8bb1db07ddc5082cd9ebe13689895dc -dropdown-more.68e5378e.svg,1708393363377,3b10ce97eda07554d4cffccde1dcb0124c257aa5b9b2a200980e9c8dabd4e484 -dropdown-more.b3107773.svg,1708394425908,033ce4b1c60dddfdef84826051f54e905410d0747d259cb70f3ff4b38167b54e -dropdown-more.5da80270.js,1708378196805,6eab71d5a8ca365e5383b87e63d134340e35a3a9ecdcb90e96496853acbb4a99 -dropdown-more.5da80270.js.map,1708378196853,5f0f78e5f2dfa648949bf89cdb0e17ac1a6cc5dc0f326347d97ef5eba1b255f1 -dropdown-more.b544eae1.js,1708376983641,bed0eb0aaaadd3aedb4553a9b2a3dbf64c85c90d457206374d5a66b9458eed13 -dropdown-more.b544eae1.js.map,1708376983740,79bdfc9dab99d10bb72b99cd0ffa086f0831de361e4e64f337cf2df94a95fa60 -EquationComponent.448b5053.js,1708394427616,e055e87fb96a390626262458fad2150201b1a02de860862c8d0c620e017654a5 -EquationComponent.cc38d00f.css,1708394427613,7e385b303bab50aabb4a9153d2cc2b4c440ef39bbc0dd26820e91f4cebd2e271 -EquationComponent.448b5053.js.map,1708394427849,bbbd14f06a3bf35cfb13b2f7ab73012a51d9685423e52ad8a75a31d746602255 -EquationComponent.cc57cfa5.css,1708393363636,0b3d871984b9cc46bc881f5b01fa49d8d6237f696270edd2e899c1fedd8656b6 -EquationComponent.cc38d00f.css.map,1708394427709,3c15c3cecd40c68222cd0aa1d67eb6ef47c894c17cef2e0ff0e36075a4bd8992 -EquationComponent.cc57cfa5.css.map,1708393363639,85ff1dae1e7005b71e25936292afea0389f732c09b1161c717825060be52aad3 -EquationComponent.4409e0f2.js.map,1708393364010,3d686ae3432db43ca293ebb8db7deaab0f0ee01cb0100614b338710fa0a5c7fc -EquationComponent.f560de05.js,1708394427613,b9cd5ce87019586fb91b568d25569fc1d6f9f9d28977b1f4a2888bda2060e2a6 -EquationComponent.4409e0f2.js,1708393363994,f7866276bae77903a0d24bd368b248760ea29480e8d0ad3fdae7cf94b6c87e5a -EquationComponent.f560de05.js.map,1708394427843,017d1d8a4f09be5c357bbb8ea77276cee6a097829790588f0ae55d3b7de069be -ExcalidrawComponent.450caac5.css.map,1708393363477,31f3fb61cc741753f27d30ba0a5f589f132bc52788da799c9031f3371e07eca1 -camera.ba3abeab.js.map,1708379241701,81d0c9caf0cb45f7a6e5f93b0ecc4bae64b6b8c41514ad96d563bd5cc4b5eef3 -ExcalidrawComponent.450caac5.css,1708393363465,cc17bdad515986c8255d71d7386b56192ad3a96529c928eeb52022ee483d18a9 -ExcalidrawComponent.5e425e62.css,1708394427614,e3d687fa9921321de0a3bcc1e754882888044641a150dc272176472fd44cdfc3 -ExcalidrawComponent.5e425e62.css.map,1708394427723,b03b60c90cca9a607913bfeba2332c9905ce794bfd898201f03d0411ddbae58f -chat-left-text.ba3abeab.js.map,1708376802417,05a8a1174235eba080a5f77c84592d92843ba974ef74f3f472c750e248e24372 -figma.6592e70c.js.map,1708376983767,5b4d75350fb842d98f321ca08ddb62e830f952dfc2c1606b88bc19b4e1e39361 -figma.6592e70c.js,1708376983679,1b49a55ec24b0d8493b81cedf7eb7b0f48e433429a5e7163bac3e7e2348a4bd1 -figma.988c043c.svg,1708393363429,1bf480054cd512546f84ddd13f8cd75c7558800134e72cee2addc5a5a9d46464 -figma.99f45ad2.svg,1708394423421,9f76dc5130928b633e550dc352fbf902eeec94c1eb2ba37cef620f3ba4324897 -file-earmark-text.007f02ea.js,1708376983679,e2013192760b12a76d319c62dd69c9ddab147966694bd232fb87316d2194c74c -figma.a02a4842.js,1708378196865,c27c66149e724a5de3dba6362090dc24f56a38c0116bbc61db3aba4ad7def2d1 -figma.a02a4842.js.map,1708378196892,54d414589a361f7c6887e2eb22fadc9a9dde561d27a1db4f466cad8a0d8e7c27 -file-earmark-text.007f02ea.js.map,1708376983767,b6342faa77e83b9e24c3b2718639e121f50a35e75ea1f83ded0fe61b22e470a7 -file-earmark-text.ab7b4776.js,1708378196865,ff120b520019a63eb762899b046822e07b4cd2da7958f45d32d097742ed084ac -file-earmark-text.ab7b4776.js.map,1708378196892,fc23005d1a3081c9edf51f05f893931a9051295ab7396c3f2d5cc5d938618c46 -file-earmark-text.c7cf965d.svg,1708393363429,6996fd5eab4571558080200e12df0c8df66fa158b994588ceac64d3ed4f1e85b -file-earmark-text.c83929a0.svg,1708394423420,190ea38447670a52e27f6cb855bb68939e48b6c9b3612bd23d61c918a5d9d608 -file-image.18151548.js,1708378196820,fd7101ce903e61f77a69041c4c2b8fbd5d054613f698cb10eac1ef7a359d1799 -file-image.7bdf538d.svg,1708394425977,e20fc54c6d66bd27da3e0c758445a03d595957cecf3f532eb1d13daccf062d20 -file-image.452706aa.svg,1708393363339,4379d208c50df4edbade021e3db2122394e5ab712594bc558c687a6b7cc86782 -file-image.18151548.js.map,1708378196866,9abff2b2dff7b4803a6a8bf15bc8d23a8b5fe5ac1e1ba177c782f69d3dec3e68 -filetype-gif.0695daf4.svg,1708394423421,fc052d8f741218ca6d2e75ea9e501e89af42d268c5d162a1f8705eef73b95da5 -file-image.e23f473e.js,1708376983678,2995ab5e8577d39d28e5acb79c0c03db1d83e7400ca69525d2bde4d9908f1917 -filetype-gif.1a1270f4.svg,1708393363430,9cd61d1e346e169f4deb9e8bd85b3e39c44760f44d690d18addb1313ebb584df -file-image.e23f473e.js.map,1708376983766,71d174a3642b74ebdb633e3890713f048c5ef8830110e027915394900ac72d0d -filetype-gif.60cd8f5b.js,1708378196865,cb71d97405e6cab60a4b1fcc2c491424b25db7447cbd37fb8c5844e239a6777a -filetype-gif.60cd8f5b.js.map,1708378196892,f309fbd1c177a35b5c93d70d5ad1d4b3a0d42b2bbb351605ff3d5e2887dadd63 -font-color.998f8a76.svg,1708393363339,c504efcd248d976b90d4d26d9b15ef967953b730987de95c2db43b6850e9d856 -filetype-gif.f076d811.js,1708376983680,765c517c713e6934cc00526e05cd134b6ab0b80b126c93c1d9da24feb2e196c1 -filetype-gif.f076d811.js.map,1708376983768,3ab13e06b45a76d33bab9245ded457aa7053905abae1b1c4ae495abd681fa381 -font-color.b21f483c.js,1708376983678,e70aaca0f64f1ecede90d06448ee7a7de953afefaa63d6494cc21ceed4a54e78 -font-color.b21f483c.js.map,1708376983767,ee8cce82bb86b48ba8340c846663aab7df2361c094fb80a39b592c10a4f6a817 -font-color.d961d1d8.js,1708378196820,e127dfad506c043bb594b56e2a8f1d41da9e6eb201092d570d0f2e3f269eb0bd -font-color.d961d1d8.js.map,1708378196866,15667ae6a53dbfb6cab50bb59f497d28116839391e84b200be622e11c49e80f0 -font-color.f5d8157c.svg,1708394425977,879aa0ff929e243fa19a63f514c1c07443d2420ef5203d25131039fa40dfde22 -font-family.025e6874.js,1708378197058,89ae9665d3dcf08b06b82e87b17bea7720148ccb73c78506eec07b78e0ccb2fe -font-family.025e6874.js.map,1708378197080,9432cef8e06c2d573aeced9bdca9b04071da568a941a8b9511d4c1c1a0818708 -font-family.3b503d85.svg,1708393363397,cba16d23023faf5415b97db945caf80edc973201823a806b4804336a13f94f90 -font-family.3c579190.js,1708376983710,2cb35d4b0970a675438a77878005b0962a8c0c983bbbf538aea943fb1e78c7ae -font-family.c90a32b7.svg,1708394423462,9a0e64cc1df5b749f44966feb28196b3ea7459a90089b5fb51b41a95e2af78c6 -font-family.3c579190.js.map,1708376983784,29dba009e6e1e2d27ce6d3eff3f24c0203f3daaf6d513f4c153c8e0f1de46ca1 -gear.19dc1244.js,1708376983682,60272b7881418cfaae678b992a0a8d63ccc5fe22cf52825f2d44829efd64d8b9 -gear.5093559c.svg,1708393363378,f3167a6e44865afbb2d1402b17a2204d56e086a192f586bcbcdfb1e97828652e -gear.52fdd83e.svg,1708394425909,13a412396765c8aa896daea4bc979e7ec4eaf2b9d2e0590b83ccd15bca2f7893 -gear.19dc1244.js.map,1708376983770,1b8ff0fbc2e1088ba08eb040bd5ba9a5b57d8a2f4f2bd1b4da017949c3bb3a1e -gear.78b0516c.js,1708378196865,db8b75b004829df82f8ebe3d9849f9dc2084dd3b3ea5facb292bdf062e619680 -gear.78b0516c.js.map,1708378196892,500972b405c17618229d5e4dce4d79e404e93df67f810c253ec194a49ee5e6da -horizontal-rule.2205c6cc.svg,1708394425977,0f3d6c55c1929c445629c01e4b9b05a0b4204992367084e5fa330c1592b34e34 -horizontal-rule.4a7eef6a.svg,1708393363339,96cf59e30e84ca56879837edbc18d783a46eaf43ddbc50149a0d4d103dc9f4cf -emoji-list.00d819f1.js,1708394427617,7fd4438658609e5c09fc53cdf27ffd0b651eb5a7791e5afe10facde0cf01da0a -emoji-list.89e12915.js,1708394427617,2263aabbddc1f2d47cfe167a4a9a9fc37fe9a0558840299de3816d4137a3d718 -horizontal-rule.5f408eeb.js,1708376983678,a55aa18858e7f06bf975ba53d5f005d394556cb8e88ec2079263c529315cde14 -horizontal-rule.5f408eeb.js.map,1708376983766,9f2cd6bc320d968d4450ee2026c812754ea7d2cba0b00bb8d4818a93b6624f61 -ImageComponent.05c4b035.js,1708394427617,35bc7fd349880254457fd886148720d2adcdfe22f5d2e5399eb3e5801aac3823 -horizontal-rule.a240a2be.js,1708378196820,ac00f16d7ba67d97b43a3b79152ffc4a8a2095d8937f2b779281bfcaa3ec7f37 -horizontal-rule.a240a2be.js.map,1708378196866,fde1288ecaf6eaa74a4348029b201156844a6d461cfe0008014877df9c3064c6 -ImageComponent.65f46980.js,1708394427616,27f49d3e44006bacdd5efb53cd291ddd0d4f1901658fabd903c7635cfe1a3a26 -ImageComponent.bdef7ff0.css,1708394427614,d0af6b40fe82e8b4ba8dabb2a54911f6d9c9325526c658e1e814b47eb3145998 -ImageComponent.bdef7ff0.css.map,1708394427719,7cc51ec233fa0c08cac3a50ecb3a077dba4e1f9ca92d71c50eae238a496fc85c -ImageComponent.ed813378.css,1708393363465,cd14336b75895820e62c9980c64afe874d2167a94c4801619517494188cdce5d -ImageComponent.ed813378.css.map,1708393363477,ebc702f356d57b6b873e6638b1f4e9e009f0e21abaeb7927c21f939c357bb596 -ImageComponent.ed813378.css.map.32492.5zs,1708390739006,ebc702f356d57b6b873e6638b1f4e9e009f0e21abaeb7927c21f939c357bb596 -indent.3f99d75d.svg,1708394425908,05c56c41123df3a6ce9361d3f1087dfa19cb9c19d8cc1c066d3b69ad3abb5a65 -indent.a3cf8782.svg,1708393363378,97d89da627dc1c1d4330fb00921caec3a8472926d901a4bee24cc3a2c2cfbd6e -indent.3951c89a.js,1708378196805,3d409b4096d5ff45a2b7cc6a509969bc8139a129554e7d0650ce3b343be46d13 -indent.3951c89a.js.map,1708378196853,52d425e70bbd267022094c5c6f5c776e1acd00483a822404d31851c0c341d9d5 -indent.d0de8d49.js,1708376983641,a641d3391d226cc8aa60878124c42efa830cd47d24eefdbfbae21895e2d5a23a -indent.d0de8d49.js.map,1708376983741,68e87a1de932a39e74af963b5573d2d05319d7eee9053e72af455fef700b6045 -gear.ba3abeab.js,1708378196806,d8cf94fd30d01026d225a7432c631b6e3b6107be311e48f4c381df3e857818bc -ImageComponent.0eeb002e.js,1708393363466,1b41d608e2a6ebfa8667c821a15c78146016b6cf41f909d753436eaa16acf5bf -ImageComponent.05c4b035.js.map,1708394427859,c6eae83e751e4859621249fd2b6117291c25a35bc4ae6bc22487a617a8dc1caa -ImageComponent.0eeb002e.js.map,1708393363477,be4dd931dd253e2e305e9a86a4ec87ab57506878c58e0e8051bdaf735c98d25d -ImageComponent.65f46980.js.map,1708394427854,ef2cb01a56627a8d6c30fcb21021504643343d84d76c7057cad4e275537593d7 -index.61d3354a.css,1708393363451,02cdc7b83142b9b7f5a7f1080387cd2d6c60d9387f53e77230b4dc56ee894cd0 -index.61d3354a.css.map,1708393363476,b29488f5a7e1357a6e3c8cef7903954b4fc0242c08a9dddfe146cf14ce4cde6e -index.98126d70.css,1708394427616,d25e6f55d80229c3757ca93d5c2f133903e865136c961a2c00e6a5ad42ef758d -index.html,1708394759616,123ef43f5dc22e58546c13ad1308f07e889a5b460377653fd212050ed8e73835 -index.runtime.28c2297a.js,1708394759614,1c00199e9c108c4b0222b88bac3a46d96c08b2f07b3ebfd9238074a6e082eb83 -index.runtime.28c2297a.js.map,1708394759877,fbde6a70e88a4f51bba89402f74dc7c35118b4d5d7dc7eb4521f7e5bb93b8a80 -index.runtime.913aadb0.js,1708394427614,f4dae9f4085094cc6859c8ddb16949f81e109dd256ac1e1ee52602dfae1dea61 -index.runtime.913aadb0.js.map,1708394427811,768e442d0ef640c428aaf3a5df38d1de2a282712252103aed244206577f6a6be -index.runtime.d0f216ea.js,1708394427616,d3b0aef3488cbf9729487879da36cc18df2334b32d5e2cc46ed23b1b3966fb2d -index.runtime.d0f216ea.js.map,1708394427820,4146faccaecba7138b1aa1e72f39ed19ff8d9819cbd3a43e7465f803c4a22fd8 -index.runtime.e7406cfa.js,1708394759615,7f303349063e7ad14c24c1d59953869f5b512688170c961071d22b92979f58f9 -gear.ba3abeab.js.map,1708378196854,c8940eea55fbe0653ef1ed89b4fa988811326645b3c0ece28196a3c9c16abc79 -index.runtime.e7406cfa.js.map,1708394759877,78634aa7f1b768a12cbf84a19428475b09a1a83a8d1bff875037b7ee36f14296 -InlineImageComponent.11c96d97.css,1708393363465,32fd18e46914e2ab0ee403e70fe264807042faa7d32fbc5592b5f99a4d525780 -InlineImageComponent.11c96d97.css.map,1708393363477,3e40527613e7af8fe5087ac9c9882e7b3b74674f180aa0fb548bbc94ccda6e88 -InlineImageComponent.1333868d.css,1708393363466,f87dac21ab8308459e392fb259046948f480b60c05272b26aeb4885a94e354f6 -InlineImageComponent.1333868d.css.map,1708393363477,ab6c5a1f437e775fb45fe9f1dc58e769594e1bdee1d3e0504b6066be5090ba7d -InlineImageComponent.3459f228.js,1708394427616,6560c7eb72e5ea3604cf99da4c180bdd7ac7317fb77165d96ec72ec12d531c56 -InlineImageComponent.3459f228.js.map,1708394427849,2c9dbc425666202e80fd5bacb72102bffd718b80f1c7b392339c48ef7fac3b25 -index.98126d70.css.map,1708394427851,736851f6f1ef33453c542e7508b9fab1a0861eaa493cd2a6a4d1157fcf3a0e36 -InlineImageComponent.5fc06d62.css,1708394427614,593334320a07d725693d8b00a8f7aded3c4b718e2ca88b9b77e7be31971fefbf -InlineImageComponent.5fc06d62.css.map,1708394427723,78950e771501a261c2676b4ac6bcd71541b472f5372b5fb491184a692135708c -InlineImageComponent.7da97dac.js,1708394427614,6e4ad9b59d8ce78f45f8280bb32fca4e45357b1b6ff06abd1f66983d9acdc6cd -InlineImageComponent.7da97dac.js.map,1708394427847,4f0ec7d0e58f9bc1a9c43b495e7df24ab7092f2ba121357ff778729d86c1ae23 -InlineImageComponent.81d204f8.css,1708382442068,82b4db81e85962d551687792f0af90be7a199d97e21315b5bec9887c1674821b -InlineImageComponent.81d204f8.css.map,1708382442075,4d801d34ea600d803c48f20573134a3993137389158e76d7c43e4f5e0475b39f -InlineImageComponent.9ac36c20.css,1708394427614,4d987b182e161b27737beb584a19b2029431cc92cb0772a66391f289d9af19a0 -InlineImageComponent.9ac36c20.css.map,1708394427807,e8f2f27e0c8bff9861cf894d91067922294f43d0d3a622c768d571a401f014ca -InlineImageComponent.ceea2f98.js,1708393363466,e9d732026e6327afeddf32a0f61a13c2b11873cb1365f4949d575e66dce0203f -journal-code.201cd492.js,1708376983678,d774b19a183dd2c1aaf419761fabdc36934efc1da95695c831bad08132ee59c1 -InlineImageComponent.ceea2f98.js.map,1708393363477,b6e5ce19e62568090325ef6db8c4587daf834c0e08f0e273678c55329dc7c19e -journal-code.79b12408.svg,1708393363341,e7ddd537f27a963dfbae281a15eac3c27181b18766da07ca8b1f17e38068d913 -journal-code.201cd492.js.map,1708376983766,ee6a51ffe4a76464ced16bc52957d044944218b53cc7fc56818df543b001746c -journal-code.92bdf9b7.js,1708378196820,995210ef225eac865caf1164665100a9d76c2236b7ccf20b8e4eac2a60286a28 -journal-code.b90e3f7d.svg,1708394425982,35b2781aebfa447d964384c46a5bf859b2eb184768ce73b8dbaa2e7318c0420c -journal-code.92bdf9b7.js.map,1708378196866,05bad4fcad2da55183f8787d46cd7c0e05613f1e36dcd6aeca9e582c1f7af1ce -justify.08e04a7a.svg,1708394423421,19c338a857a38c7751c246dc0e1dcee766726bb18080a09734baa80d5abf21e2 -justify.47dd4ccd.js,1708376983680,50cd56c7961e5b78541856d016249b5b7a0d8bb3902137ef0b52ca037eaf395f -justify.60ec7efa.svg,1708393363429,37d691b1c33a395083c3d0f0b15d275c6cc6bf5fba31587a0a7386946ede71ea -justify.47dd4ccd.js.map,1708376983767,209b7ea907a547b23f7d813d8dad6af81e2caaf6fc933dd8f4ae13c7f13498ba -justify.d5786b73.js,1708378196865,d90acd5db75ffcbb3e70227fcf87a066bc911162fe64fe09b5f9c43ac5df3b2f -justify.d5786b73.js.map,1708378196892,efb6545e70339a1223730ea76da88d301ef6ede86d82712ecbe8cee71d83eec4 -KaTeX_Caligraphic-Bold.3909d637.woff,1708393363465,dcdde28187f39b42c539e562a29449045f583363b3d8f59c5e80e2ab3306a994 -KaTeX_Caligraphic-Bold.5d7c4d00.ttf,1708394422913,aa539facfbbe0d509e7406cb453984f343362bcc9710e3b4e7af0e916198938b -KaTeX_Caligraphic-Bold.7d84fcea.woff2,1708394422960,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 -KaTeX_AMS-Regular.20655e20.woff2,1708393363465,213f5068ac9f0d32d25406206f1b4b1d4bd9eba043da5d6fdad75f690b84d72d -KaTeX_AMS-Regular.4cd18550.woff2,1708394422925,213f5068ac9f0d32d25406206f1b4b1d4bd9eba043da5d6fdad75f690b84d72d -KaTeX_Caligraphic-Bold.8b718944.woff,1708394422925,dcdde28187f39b42c539e562a29449045f583363b3d8f59c5e80e2ab3306a994 -KaTeX_Caligraphic-Bold.bc52ccf2.ttf,1708393363417,aa539facfbbe0d509e7406cb453984f343362bcc9710e3b4e7af0e916198938b -KaTeX_AMS-Regular.0ed69bcc.woff,1708394422912,3d048b3ec94487840917c5b701de85b56f3c5b8b4cfaa770890ed5754d0a3237 -KaTeX_Caligraphic-Bold.d64862a9.woff2,1708393363405,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 -KaTeX_Caligraphic-Regular.39a887e0.ttf,1708393363465,8ae0a434dd97912a5b4212e0d645e3f50c4037179548f182196e89d6685a4f41 -KaTeX_Caligraphic-Regular.7e34eae2.woff2,1708394422895,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 -KaTeX_AMS-Regular.19ec1bb1.woff,1708393363417,3d048b3ec94487840917c5b701de85b56f3c5b8b4cfaa770890ed5754d0a3237 -KaTeX_Caligraphic-Regular.ab0f4493.woff,1708394422960,de72550f816b7aaf05733d796a9cd80d3fa75ac3e20d0c8270e5da150090afcd -KaTeX_Caligraphic-Regular.bc514062.woff2,1708393363342,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 -KaTeX_Caligraphic-Regular.d4de5f30.ttf,1708394422925,8ae0a434dd97912a5b4212e0d645e3f50c4037179548f182196e89d6685a4f41 -KaTeX_AMS-Regular.250082d1.ttf,1708394422895,1a93e0d55a17d94d29c40e1e74c4ea223c9b1984949d9f808d3b0895f0470ec5 -KaTeX_Caligraphic-Regular.e5155898.woff,1708393363405,de72550f816b7aaf05733d796a9cd80d3fa75ac3e20d0c8270e5da150090afcd -KaTeX_Fraktur-Bold.2feb3725.ttf,1708393363406,b897bdbaa5b2bd809b3cb5f8b58477f4d34ffec7da2f13dd0fcf36e6dd77849d -KaTeX_Fraktur-Bold.4d449c5d.ttf,1708394422961,b897bdbaa5b2bd809b3cb5f8b58477f4d34ffec7da2f13dd0fcf36e6dd77849d -KaTeX_Fraktur-Bold.53442276.woff,1708393363342,f55a188bc351f752febbb50bdb2768bd5a1cc664c43014e318c765769fac66bd -KaTeX_Fraktur-Bold.75fe0c6c.woff,1708394422895,f55a188bc351f752febbb50bdb2768bd5a1cc664c43014e318c765769fac66bd -KaTeX_Fraktur-Bold.d8434379.woff2,1708393363416,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd -KaTeX_AMS-Regular.9b4be648.ttf,1708393363342,1a93e0d55a17d94d29c40e1e74c4ea223c9b1984949d9f808d3b0895f0470ec5 -journal-code.ba3abeab.js,1708376933928,bd62e7cffe2b1467fab5cf18b3f1f8c12b18dfc593b9995b34759b2b385bc712 -KaTeX_Fraktur-Bold.db0fea8b.woff2,1708394422913,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd -KaTeX_Fraktur-Regular.1cce75f1.woff,1708394422913,e74ef2d20dc73cb68c97fc2f6dfca344b2c8deb49eb6ec4f6e1fe54bdd6668b7 -KaTeX_Fraktur-Regular.42c2342a.woff,1708393363417,e74ef2d20dc73cb68c97fc2f6dfca344b2c8deb49eb6ec4f6e1fe54bdd6668b7 -KaTeX_Fraktur-Regular.7a216293.woff2,1708394422925,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 -journal-code.ba3abeab.js.map,1708376933998,3121f161d18d716d4b3abf9860d345dc702ccdc1649369299e810bf873a6e004 -KaTeX_Fraktur-Regular.8b4ff2d3.woff2,1708393363465,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 -emoji-list.00d819f1.js.map,1708394427860,2ca51fc41617aa9e71c6281fc1d090d2bd9f1b1b0b99e336e65e3f9f72065438 -emoji-list.89e12915.js.map,1708394427856,8920f774f0834459986015adba5b98e56cfbb7054645311f32038f35f5876858 -KaTeX_Fraktur-Regular.ab0bff81.ttf,1708394422895,aa6b5105ac99633047ddc50e1028fd6faf3c72a1609fa9077b4ae771082fbbfe -KaTeX_Fraktur-Regular.f89589f7.ttf,1708393363342,aa6b5105ac99633047ddc50e1028fd6faf3c72a1609fa9077b4ae771082fbbfe -KaTeX_Main-Bold.08709b09.woff,1708394422925,39d43d83ed398afe7d71abee5e2ad090c2bb0f9eb6b6339d006dd2c42ae78fdd -KaTeX_Main-Bold.88cef7b1.woff2,1708394422960,e38b3cc40a6433adbc85cc5d07d5ad9c55528a1bb5e71419c9fd78c3983aadfd -KaTeX_Main-Bold.95836a30.ttf,1708394422913,3dc1e327211f011faf26ee99abdd9ab376b03144d7978462022b00ab15825dab -KaTeX_Main-Bold.a2e91e00.ttf,1708393363417,3dc1e327211f011faf26ee99abdd9ab376b03144d7978462022b00ab15825dab -KaTeX_Main-Bold.e3e64b47.woff,1708393363465,39d43d83ed398afe7d71abee5e2ad090c2bb0f9eb6b6339d006dd2c42ae78fdd -KaTeX_Main-Bold.fc597cda.woff2,1708393363406,e38b3cc40a6433adbc85cc5d07d5ad9c55528a1bb5e71419c9fd78c3983aadfd -KaTeX_Main-BoldItalic.26f3c4f3.ttf,1708394422925,ca92218418609bc1373be5633de3b940f5797c69ffc44e96c5826e7a870c9a8a -KaTeX_Main-BoldItalic.59add1b9.woff2,1708393363342,9af6829a796f56e31afa49f5e0efdd4649f1e80cfe35bcf19ef065aaa8fae9f6 -KaTeX_Main-BoldItalic.b74ea33d.woff,1708393363406,6c815b515b4d929e288017dd2ecf6f1fe337a256148160e05c4098bc4dfa7742 -KaTeX_Main-BoldItalic.c09d0cf1.woff2,1708394422895,9af6829a796f56e31afa49f5e0efdd4649f1e80cfe35bcf19ef065aaa8fae9f6 -KaTeX_Main-BoldItalic.c2d1eb41.ttf,1708393363465,ca92218418609bc1373be5633de3b940f5797c69ffc44e96c5826e7a870c9a8a -KaTeX_Main-BoldItalic.d122a512.woff,1708394422961,6c815b515b4d929e288017dd2ecf6f1fe337a256148160e05c4098bc4dfa7742 -KaTeX_Main-Italic.2534362e.woff2,1708393363417,389e6652f22c04bc64135ab613340af96ff88fd12f709c0bff9c7b60d587bc74 -KaTeX_Main-Italic.66e02c4c.woff,1708394422895,d527e1952a9fa6aa8015df9a03f7b641e0113350d620295b757a3f795f037988 -KaTeX_Main-Italic.c9f13147.ttf,1708393363406,2df16b36c649a5bc280a3954487fa70fb24233b2f100e5d95feac9bcd8f5fed9 -KaTeX_Main-Italic.c6e95937.ttf,1708394422961,2df16b36c649a5bc280a3954487fa70fb24233b2f100e5d95feac9bcd8f5fed9 -KaTeX_Main-Italic.de0e580d.woff2,1708394422913,389e6652f22c04bc64135ab613340af96ff88fd12f709c0bff9c7b60d587bc74 -KaTeX_Main-Italic.e8851a11.woff,1708393363342,d527e1952a9fa6aa8015df9a03f7b641e0113350d620295b757a3f795f037988 -KaTeX_Main-Regular.5a82f7eb.woff,1708394422913,e1c20ab685f5d104019298551db13977d9fb39ec996f23c38ba76d397472df41 -KaTeX_Main-Regular.6388a750.ttf,1708393363342,6a9b352cd096b45c66182ce95265748bc9cda8e07fe5d012d20f22310aba20b0 -KaTeX_Main-Regular.e2dbd876.woff2,1708394422925,e8271b72b575e15838ebcb47303929723034292f66f32a0e9516952a6608f5f2 -KaTeX_Main-Regular.e4193a5c.woff2,1708393363465,e8271b72b575e15838ebcb47303929723034292f66f32a0e9516952a6608f5f2 -KaTeX_Main-Regular.cd9ba532.ttf,1708394422895,6a9b352cd096b45c66182ce95265748bc9cda8e07fe5d012d20f22310aba20b0 -KaTeX_Main-Regular.fd0a875a.woff,1708393363417,e1c20ab685f5d104019298551db13977d9fb39ec996f23c38ba76d397472df41 -KaTeX_Math-BoldItalic.1f5a6954.woff2,1708393363406,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 -KaTeX_Math-BoldItalic.6cf39e99.woff2,1708394422961,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 -KaTeX_Math-BoldItalic.b0ed6322.woff,1708394422925,55068b8ee0a45d97be144f46954199291df07a326887a2e623e8b79fecec6fa9 -KaTeX_SansSerif-Bold.67d6f470.woff2,1708393363429,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 -KaTeX_SansSerif-Bold.1516bc0b.ttf,1708393363408,f74211ce4c80bf0054b8c8ce928dfc8519cb5d004c26c7413759d911fdf6f84c -KaTeX_SansSerif-Bold.67ea3185.ttf,1708394423270,f74211ce4c80bf0054b8c8ce928dfc8519cb5d004c26c7413759d911fdf6f84c -KaTeX_SansSerif-Bold.8e1222db.woff,1708394422895,b9eb1c7155e853e1b9c725ee1b74a18fde683331e366395231e573884a89f39d -KaTeX_SansSerif-Bold.8f54fb29.woff,1708393363379,b9eb1c7155e853e1b9c725ee1b74a18fde683331e366395231e573884a89f39d -KaTeX_SansSerif-Bold.b444b1f5.woff2,1708394422914,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 -KaTeX_SansSerif-Italic.0bf6cdce.woff,1708393363417,75eb7b0871ab678bd685cab5c734ffc6094ec82ebed1521fe27b7f2a29e5135f -KaTeX_SansSerif-Italic.6a451fb7.woff2,1708394422925,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae -KaTeX_Math-BoldItalic.bc0e226d.woff,1708393363465,55068b8ee0a45d97be144f46954199291df07a326887a2e623e8b79fecec6fa9 -KaTeX_Math-BoldItalic.df285d77.ttf,1708394422913,12943aa14861fe181b47ca81398cfb1a80e34b0cac92badb8d2d72c98f75b445 -KaTeX_Math-BoldItalic.f2cb3895.ttf,1708393363417,12943aa14861fe181b47ca81398cfb1a80e34b0cac92badb8d2d72c98f75b445 -KaTeX_Math-Italic.0470e72d.woff2,1708394422895,e4c73ea6c0d7aa81faf251e090e27d7fce1d5d0f4edc1f4ddddd5b1655af1ec0 -KaTeX_Math-Italic.5910fc08.woff,1708393363406,f6e7afa9e47274f5cabc40a7724df5b38209928a3e3eb0e60f7160eab0adbfb9 -KaTeX_Math-Italic.cfffd3c0.woff,1708394422961,f6e7afa9e47274f5cabc40a7724df5b38209928a3e3eb0e60f7160eab0adbfb9 -KaTeX_Math-Italic.f37a6540.woff2,1708393363379,e4c73ea6c0d7aa81faf251e090e27d7fce1d5d0f4edc1f4ddddd5b1655af1ec0 -KaTeX_Math-Italic.e41ea911.ttf,1708393363465,50e250538a6fcd5763e6d77f4a76d15b92fc77dd5f32e77b4fb49ecc99860648 -KaTeX_Math-Italic.ffea941f.ttf,1708394422925,50e250538a6fcd5763e6d77f4a76d15b92fc77dd5f32e77b4fb49ecc99860648 -KaTeX_SansSerif-Italic.75326218.ttf,1708394422895,5b58ce41c31297e642ecc9da3e2e87f71c164ef0abc1e95102a8fd0f657f858a -KaTeX_SansSerif-Italic.89019cca.woff2,1708393363465,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae -KaTeX_SansSerif-Italic.9c45fa75.ttf,1708393363379,5b58ce41c31297e642ecc9da3e2e87f71c164ef0abc1e95102a8fd0f657f858a -KaTeX_SansSerif-Italic.fb683703.woff,1708394422914,75eb7b0871ab678bd685cab5c734ffc6094ec82ebed1521fe27b7f2a29e5135f -KaTeX_SansSerif-Regular.51b8a34d.ttf,1708394422914,b7cd3c2ee97bdced3115bc917409f9e4b77b54c0d270858d05ad84f7d01a2787 -KaTeX_SansSerif-Regular.b2ace08d.woff,1708393363465,1f4bb4ab53209fc2119632b390b7cb039055e2aed96782b64423d31a08920da3 -KaTeX_SansSerif-Regular.94fae992.woff,1708394422925,1f4bb4ab53209fc2119632b390b7cb039055e2aed96782b64423d31a08920da3 -KaTeX_SansSerif-Regular.e52904c3.woff2,1708394423269,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b -KaTeX_SansSerif-Regular.e569893c.ttf,1708393363429,b7cd3c2ee97bdced3115bc917409f9e4b77b54c0d270858d05ad84f7d01a2787 -KaTeX_SansSerif-Regular.f7701510.woff2,1708393363379,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b -KaTeX_Script-Regular.06fa8968.woff,1708393363428,70522f23e790c0f429fe25d3a03f806af7d59d3b6ee95ea7e62e16091d8adb71 -KaTeX_Script-Regular.6205c9f9.woff,1708394422924,70522f23e790c0f429fe25d3a03f806af7d59d3b6ee95ea7e62e16091d8adb71 -KaTeX_Script-Regular.8865b297.woff2,1708393363408,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 -KaTeX_Script-Regular.964126b9.ttf,1708394422924,bf19a97dcf73e2739b4edde00c5fe128082aadb6c3c2c0a43cad6a518faee5e3 -KaTeX_Script-Regular.9f85c0f7.woff2,1708394422898,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 -KaTeX_Script-Regular.c2f58f07.ttf,1708393363428,bf19a97dcf73e2739b4edde00c5fe128082aadb6c3c2c0a43cad6a518faee5e3 -KaTeX_Size1-Regular.263f0826.woff2,1708394422924,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 -KaTeX_Size1-Regular.5e7a6e35.ttf,1708393363428,a0c9b437a592994578d005e666e275b56c892fca1c3a21b451e6cee19c5ffb44 -KaTeX_Size1-Regular.679bf7b5.woff,1708394422924,6fc5f90ad636ea10ac68d4f650a5fb58ce43af24a4439bacd7e98d5da1e0d46c -KaTeX_Size1-Regular.765ea51b.woff2,1708393363428,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 -KaTeX_Size1-Regular.9e7bb2db.ttf,1708394422924,a0c9b437a592994578d005e666e275b56c892fca1c3a21b451e6cee19c5ffb44 -KaTeX_Size1-Regular.b1ffa5ac.woff,1708393363441,6fc5f90ad636ea10ac68d4f650a5fb58ce43af24a4439bacd7e98d5da1e0d46c -KaTeX_Size2-Regular.10147978.woff,1708393363428,1589983b75429fab92bb3f578bb13e5a90e368c07031f059ea1e948b2f9b07aa -KaTeX_Size2-Regular.089bab6d.ttf,1708393363428,70c2cb5dd719ab96f42b69121a76b6f955ec898ecd356d2a44a812db400f8bc3 -KaTeX_Size2-Regular.16a5807b.ttf,1708394422924,70c2cb5dd719ab96f42b69121a76b6f955ec898ecd356d2a44a812db400f8bc3 -KaTeX_Size2-Regular.5b8d231a.woff2,1708393363428,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 -KaTeX_Size2-Regular.5c5b0f28.woff,1708394422924,1589983b75429fab92bb3f578bb13e5a90e368c07031f059ea1e948b2f9b07aa -KaTeX_Size2-Regular.7ddce1f2.woff2,1708394422924,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 -KaTeX_Size3-Regular.2a93ab93.woff,1708394422924,5beb4c17ed9ba9f4614b452de25dd1b20a0cb76c08faa5450a08be3958eac3be -KaTeX_Size3-Regular.347ba5e0.ttf,1708394422932,6b7585f1201f6c8b1d3d018bb1a76d0140156c5942a748f97644f90b06f3aa26 -KaTeX_Size3-Regular.3d616d63.woff,1708393363429,5beb4c17ed9ba9f4614b452de25dd1b20a0cb76c08faa5450a08be3958eac3be -KaTeX_Size3-Regular.4acbfd5b.woff2,1708393363428,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1 -KaTeX_Size3-Regular.8e605720.woff2,1708394422924,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1 -KaTeX_Size4-Regular.2488fb45.woff,1708394422932,a78d8097dae42b77417858ffc2f79912397cb4d27fe4510b6fbd755a5a79d0ff -KaTeX_Size3-Regular.c96d06b8.ttf,1708393363428,6b7585f1201f6c8b1d3d018bb1a76d0140156c5942a748f97644f90b06f3aa26 -KaTeX_Size4-Regular.595ce6e5.woff2,1708394422932,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 -KaTeX_Size4-Regular.b13cdb4d.ttf,1708393363441,684166ed1dcd75c1e61123d2dad4096cc400f3e84ebee225d76c3fad2189a28e -KaTeX_Size4-Regular.bbb7559b.woff,1708393363429,a78d8097dae42b77417858ffc2f79912397cb4d27fe4510b6fbd755a5a79d0ff -KaTeX_Size4-Regular.c0c8827c.woff2,1708393363429,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 -KaTeX_Size4-Regular.f41b14d6.ttf,1708394422932,684166ed1dcd75c1e61123d2dad4096cc400f3e84ebee225d76c3fad2189a28e -KaTeX_Typewriter-Regular.21beea8e.woff2,1708394422932,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 -KaTeX_Typewriter-Regular.662fc5b4.woff,1708394422932,1c96dd20fa943d9219857c532a496e344eb1b9f76a85a19ee58db75f3fd30a3b -KaTeX_Typewriter-Regular.b77624a6.ttf,1708393363452,42cbc125c20e9b06cb9db0b229794ea4d7fd90a0bc89404e4b472f3fe10ee554 -KaTeX_Typewriter-Regular.c2536c2d.woff2,1708393363452,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 -KaTeX_Typewriter-Regular.c32f3992.woff,1708393363452,1c96dd20fa943d9219857c532a496e344eb1b9f76a85a19ee58db75f3fd30a3b -KaTeX_Typewriter-Regular.ffbe21f7.ttf,1708394422932,42cbc125c20e9b06cb9db0b229794ea4d7fd90a0bc89404e4b472f3fe10ee554 -link.04ef8189.svg,1708393363377,f64aac25a88139bd41a47e03d617bfd32e3ff85e15cf2cc4582d878a4a2f1967 -link.1aa641a6.js,1708376983641,e88e00a9de5715b17cfbf54abf4af6a62352e615d24eba58e826276697a32ab1 -link.1aa641a6.js.map,1708376983740,e12b04e0de3d6b47409c99aaace702f53f01de41e6f77d2b7ba44a78d6fa2476 -ExcalidrawComponent.2a05f42c.js,1708394427618,77d81a72843bcf3a9624d6925f68083840640279a844e96d4e5a5ab0508c2bf8 -ExcalidrawComponent.c7bec807.js,1708394427617,ec7e50ab6e892c52b2a55f352d72b76371baf05b740925a8875c9e4489f84bff -link.268eebe7.js,1708378196805,d976f1b693354c4ca158fc33666608c900aab75bcc5c6cd9c6716ff1d120f7ea -link.f0b91a46.svg,1708394425908,39e71ff66150e94d01bb29f1315ff04d22df16ea347af9a68b20f48c7947999a -link.268eebe7.js.map,1708378196853,6ed877d1e682e87c32024e1dd19cc8b24e54b7917dc169a8e9b30831ec100c39 -list-ol.0e833cfc.svg,1708393363378,a8d04f2b02b9e310c61c363f24245d0572edde497ee381301f226efd38127dd7 -list-ol.6919f4bb.js.map,1708378196854,34ec41387322630e3cdd8b2530a2ee07a581ebb2752d2f2ce0d8cd0a97bb23ce -list-ol.6919f4bb.js,1708378196805,7b7682ff045f36f08e63f1d99de3aff9287da54656c07a253bb86c819bf97a0a -list-ol.da0bd3bd.svg,1708394425909,f6502f6bf0fdcbbbb888b9d191cb306e74191c09441c9f66ce69c75ac6b47b71 -list-ol.e4a43e5a.js,1708376983641,d79cd21586db505c7271df222cad2648fb6198fe4bbe16b26a0235b97efc0a3d -list-ol.e4a43e5a.js.map,1708376983741,823033e305a44ed32806c94debbc3b72e5b87d4ce1f6fda8df784679a337e9ad -list-ul.1448938d.js,1708378197058,d87686b6ff475105ba74ba713d6ae6433ddd6ea3668a73bf0af05845d4e8a835 -list-ul.1448938d.js.map,1708378197080,91ab84ab74c743b4aae3f0de1bc21790301d6b40e984c90f5e9960140fac7780 -list-ul.32d174ca.svg,1708394423462,95b7330012388bd90b5c9e61c2833fd97be079ed3fbcad8ad216c9afc0c90573 -list-ul.3f518d1c.js,1708376983710,5426bda1afff2d47c53d239ff37dae9b509555a037932b60250b7846fc4550e5 -list-ul.3f518d1c.js.map,1708376983786,2b3728423e0208cc880ca480e6748e888e0fe738a09cba2315be1ea2ea362313 -list-ul.da24fd7b.svg,1708393363398,2356b42182cecdb2735814f8df79eb8a68017ce808be40584be8a68c4c15a6e1 -lock-fill.62001d89.svg,1708394423462,0be409e568c86c499da1b6a124b9da5e775710d0691804ebf30dfc8579425b2b -lock-fill.7fa77c52.js,1708376983710,a7d69d66586f6641514b34d3f84b214a52054ebc8d14785a0c0a18a13941dffe -lock-fill.7fa77c52.js.map,1708376983786,7876a874353a8254f68da1788e4da6d4ba4af459364b967eca4c8ff66ee9e481 -lock-fill.af340d8c.js,1708378197058,f489aa90e859a9146a27baef1621f20fc315778736c51341efb1bbb27f459188 -lock-fill.af340d8c.js.map,1708378197081,45128c26436213458f4a97357c070e9f2779b9e7f6c921f9a7b41833a691e64d -lock-fill.cbcf4ce9.svg,1708393363398,5d7570a4bd0983fa4d73a4a0066980c3ac085cf8c39563159155786f603f4a11 -lock.1cf647cd.svg,1708394423421,5561efb243123eaf9e0009fb82b927baeaee114fa6807f583039b30d96f045fa -lock.4ecddd16.svg,1708393363430,817ff7b0d5b02457ed935551e39157af7172f981cf95863ef4cf898201d0a194 -lock.8a6848a0.js,1708378196865,4d77700e5f27d1f54935b7d54eda998e8ddc8ab371518b10574ddedc10706ed6 -lock.8a6848a0.js.map,1708378196892,e699fd9fe320dc0d445e924bec8eeef7edc99b6bc947a46d1966fa497f0c8e5c -lock.9e83a969.js,1708376983680,5d6fbe413d18a621c4cc6c80040ca3bd2d916de51ae032d6cc613b47202091e1 -lock.9e83a969.js.map,1708376983768,7405e0b688cafaf52f673f4714f23a1de6de4a1cf07f5deeb7c22f440f35ffd9 -logo.svg,1707172623754,0f2172deb32fe13ef78b568f663eadbc5ada6a267a7c080f4d868433d6a763fe -markdown.29483f64.js,1708378196820,6c0737f4d1de5ea4c351abf17af24d504aeeb07cd513a891371d91d858a7cb4b -markdown.29483f64.js.map,1708378196866,18217ad6cc904573b87c110ff028a7c81d9698dfb821cef0fd4d05d23eead3ab -markdown.7b6ae0a9.js,1708376983679,dc3f7549952c99005b17f46b9ba76417ef6d77813082d673c3b643334111d68b -markdown.7b6ae0a9.js.map,1708376983767,059f310352724830c92c03340f61aa347d3553183862233bd012c5430ea03612 -markdown.bbe94e0f.svg,1708393363339,66825260f84fd1969a8fb4bc82cde6ee8bccdd58d96c4fb2b80d2fe19fe9a83b -markdown.ce73bbb0.svg,1708394425978,3181abe900bbfc0da13fa2935c1f3744df8d290db44155d508c1fd050bcc254f -mic.1c960d21.svg,1708394423462,f0a653cfdb484e2974fd6a17af71144a4aec0ba2abae873eecab3877c150d088 -mic.4ccc7647.svg,1708393363398,7b1e3900c5ab3416153773b61e2e17a1a6e5609eabbbf647efab886f22d4847e -mic.88dcc5af.js,1708378197058,10ede1983e81236a1656933e4c06446a4c1a211f69cdef9ef86eaed229dec238 -mic.88dcc5af.js.map,1708378197080,e22f1e3f6f00e3e4f679b0346b9199bef35b3f62b8c62a0e65f828ea1f35e2d5 -mic.e1466eb1.js,1708376983710,04c26360d65df98dbc6ed8f1dfaec31a390573135f4353e35cb459fd94da4254 -mic.e1466eb1.js.map,1708376983786,4d35387d4a85da51943fa67481ed34d88c6bb183d9df0f7ba313f29dc9487daa -minus-sign.5c6cdc66.js,1708376984132,459ce412d1ab1670c2502c42649c07584e9f8fea7e0c9a6b785d88806c69dc0c -minus-sign.8e8039df.svg,1708393363418,b4d89b3ffa639df9f0f7f64daa70c625b02aae45657288b84c03af89f2353fcc -minus-sign.5c6cdc66.js.map,1708376984182,88092cef4ee445d849268e24bfe1fbb06fe052f377fe0580044a3393453c0f2d -minus-sign.a9c0ba6f.svg,1708394425909,22308424f91c358f0d155af2231e18dee495abc682acb1fcbd866f99c9dff972 -minus-sign.b2d25a47.js,1708378196943,44cba9ab0f4a356e4d6c33af27f9f0497524b9ac37fbb7d49e2a222f269bb5f3 -minus-sign.b2d25a47.js.map,1708378196946,96d3c2fe0465ff58cbf4945d9ac11a3e2c5fbe9f4d963b98cee15168e5a29a74 -outdent.2ff0e224.svg,1708393363398,899c60223d8a103d93f7c420eadeb96b7c878130520a89f105f3fffd2d00be43 -outdent.37dcd202.svg,1708394423462,79091c19cb581e6619a44b4d3216dd04888dd60041aa0d0bad0d14204ce0909b -outdent.72cc9f19.js,1708376983710,a4fa982faf3dba3f1c1a8f24c15b6f1c85fb1bb5eaf5691eb8e6e9c785bbd090 -outdent.72cc9f19.js.map,1708376983786,e8ae41ee023bb1077e8881520b16e446845fc0ee18558cbd6b3442970076d37f -outdent.c210acbf.js,1708378197058,668f723a5270c4bea7509deb8fca335ea417429c05f21ee76e2a83c59f10b551 -outdent.c210acbf.js.map,1708378197080,53c0bda38c7c65386e86f78567bcbd2b50f73054c355398d5259f187b7473539 -paint-bucket.030cc8b0.js,1708378196865,0335fa3aa75517bedb8b4f678c8d9ef8927960f93846ebf880c2927fd20d2b98 -paint-bucket.030cc8b0.js.map,1708378196892,2dc10f2e3303682cc380da97ad52b9c2278f3e6b5adcffdf80bb9c236093d338 -paint-bucket.2e3f3797.svg,1708394423420,24606b2be7067824cb0cc43d4a13e003f6f63f1b4c1ed8230240bfdae28399ad -paint-bucket.5f8cfff0.svg,1708393363429,a7a2f74003e40362d1d9e74c2c80f78d68cefe44d1186336ec25ebcb98051f39 -paint-bucket.bd083b62.js,1708376983679,8df919fae341d48af969a4759018b7b6be3a3c9b73d01d55f9d5bbaadc79b6dc -paint-bucket.bd083b62.js.map,1708376983767,82f201bf43d37d0aa19f8a0ef351e86466291e68ff69ac1e993155c10e4a1d21 -palette.2adc0fa1.svg,1708393363396,e8e3f75ea07dac35839aa900598270c98632a544168eb7e667e71fba05822833 -palette.2daae47f.js,1708376983709,a0c8d05294185fae9506829c1db9fbf83512dc1fae19634ff6e3fed6ed37c54f -palette.47a0810e.svg,1708394423461,0b9281a36fa5e10d5bf18af8c690b7bf2f4a5b785daccb7a769ff9ab40b351bb -palette.2daae47f.js.map,1708376983784,3a4307aca92744384604baf10c2e81d80878ebfde7cbd6ca3b9dc95c53a194c7 -palette.68930faf.js,1708378197058,5830136db2aef17ae1d25bcd547d59e690748bfd94f1e4e6c54795e7a06215a0 -palette.68930faf.js.map,1708378197079,a64d3c59ef94ed68376f6776e1c63efeaca4a4b95c1eabc92bba33a257ed66a7 -parser-html.d8b6ce86.js,1708394427616,7adac6307ab9edc485367dc9f0dadb4f63764f4f6017ab04b8cbccba21a1dec5 -parser-html.f8dad34b.js,1708394427617,8917a4ab9db1b1a751a032dd421a61756128eabba5c9fc72f778a3ed52241e8f -parser-postcss.b33cdce0.js,1708394427617,9033afe2a705db9f2980dc71482d97854f9a70ab2e662846ab44bc530f5d89c8 -parser-markdown.7a642054.js,1708394427617,fc788a093835a067c20c1170ae39e752e933811de1d5bea759c2bde9d67f31ae -parser-postcss.c3d1d20b.js,1708394427616,1f5bfcd6ea84ac8d1aea95b6fc268098d02d19b98bcce5454a004fcc95b915f0 -parser-markdown.9435a0a8.js,1708394427616,c421e1fd9ebe0bd2c3fe058b0f1b96b876ca2b272503063f75ce6ea28d9546a6 -parser-html.d6affdf1.js,1708393363993,16d05c0547f266f604842f2ff7654efeca3ca8a76032035af5402ffd326d0e52 -parser-babel.54b4fe40.js,1708394427616,5fe804a6c19765ee8634a45c26e0cb12de59dc98171bf38bc5d2e2dda3045d09 -parser-babel.6639dc1c.js,1708394427617,2d6fd92fd7d86713f6a28a09462ed74345a394d1b0500607e3dc12d9f8d2ff93 -pencil-fill.1987bc9c.js,1708376983679,4d20adc14812a382956b1df5fea8504235e7a7f83cf49c3b10b94a812bde8133 -pencil-fill.1987bc9c.js.map,1708376983767,bba6d6cf4b78dbdd2404e249eae755b9b9fb7a881f8c332ce73c42a33baebd50 -index.67ddba2f.js,1708394759616,7af954926b87bb18657acfcab578e98901fe61469fd8418dce5bfb6cf85f7f11 -pencil-fill.90b13471.svg,1708394425980,3a14b870e66fd09e37ddd7c3a5f0cde23c26cb9693558044b1fd96fc7ceae16e -pencil-fill.a4e5d585.svg,1708393363340,0c1e5f865cc63db1983189a0d384da6346768ea9e216fefa8c5604fbc2d3bb66 -parser-postcss.00422d01.js,1708393363994,90a37069ea329d17b1799f00c7bda770e649ff60fc75d54a1397d45a5ee0cd9e -parser-html.d6affdf1.js.map,1708393364006,f3c68d6b984abfaaefb71e7277e59591153c5c2868d19f40ebfd7076882804d6 -index.a0d3888d.js,1708394427616,f5414faec4b9d28e8ef7c218f4af435e84513be2586f171738f0da99d0749dee -parser-markdown.e4240654.js,1708393363994,ef9a8eee1c82f6b7bc5e42009fe4f5762f518d54593dc37eaa06fa5d2451530c -index.c74b3234.js,1708394759615,9116c711d60bce636f50173fa6731d0cec15d2048a4721aa0bc696ded3193f19 -pencil-fill.baed65ae.js,1708378196821,467cf1efc28fbffcf09da35ee39c62c828edcc207c780fb819788e3f69c30efe -index.975ef6c8.js,1708362219154,791e215f043e78343a00b7eae4af74bd470f6ae92850277e534655d144627780 -index.f2b5d7ac.js,1708394427617,2063cd9d84f2699c7b4470c7d36dc8066b684cbd780d1f895b087672c3deb0f5 -plug-fill.76ed3cee.svg,1708393363341,4153574fea5b97d38226d14ccb85e11ca9778247f17166d1fd6384b73fd58dcb -pencil-fill.baed65ae.js.map,1708378196866,7911a8084bef2d11f92844daf6c7582b20c8e4f5b5b7dbe2e7b3bc9efdde940c -plug-fill.a8abd579.js,1708378196821,dbb3b70d2344116f126d351cd28c77f88dad0d0e59e7732241757fa0bad8277b -plug-fill.a8abd579.js.map,1708378196866,e6b5d5835fafa3056c35f58e26b0ccbff19efe5a59085e5923fe03987dcd6c27 -plug-fill.acd69550.svg,1708394425982,bc28ea0786447bc80fc7e0e294e90705bb94615acc463e5476ea0029072f28ca -parser-markdown.e4240654.js.map,1708393364010,ef9aaa6053c8af30b88af1a5d227c531b05aca08d0d32f0a3b68d551978faaeb -plug-fill.be686889.js,1708376983679,6d1f87f8927782f6827bef9207ff498604ad99dc070e46662294cfef72cdb103 -plug-fill.be686889.js.map,1708376983767,20a40ab143258625cace9fb2e38ba2799668a3539bce4a52bc0ff3aacffac27f -parser-postcss.00422d01.js.map,1708393364007,6748ca2381955de5195fe7b92fa68b61d2ff306a6f14d710819a8ffbd160c83e -plug.925e6d31.svg,1708393363378,b607862cf1c9fa6d60bb831468abccc37712eb491c7ecd6a275727e05e2d0039 -plug.bd70256e.js,1708378196805,68af61f1fa8e7a6d9b994b461f8a27a385f36bdbfb11866784b3a796b73a5247 -plug.bd70256e.js.map,1708378196854,b04ae8e5c810a7d8b1070a55a1ff65824b4e37a51570bd474b0086546104a9a9 -pencil-fill.ba3abeab.js,1708376959162,64f73fb20f42d7e0e83eb2a19cc4c498e9939c60b48c1eed736b695d47955e2c -plug.d02e62d1.svg,1708394425909,00b9b038318ec8c8813e0109f9a33c7476428a5f85b6f469f0ba2d0d8af189ee -plug.e1c0f934.js,1708376983641,f85a9f985d7ea2d9fd381763d202402f052a366a3599655cec47674042f53cd7 -parser-babel.30b8443d.js,1708393363994,85162c77cf75c94029a8297ee5b0026379a6647677c1e2a25f6460bc59349c8d -plug.e1c0f934.js.map,1708376983741,d8c907ef30508571e551dd2b3934e52d8434bb3d85797dd4bba85f30721508a9 -plus-slash-minus.290f9e87.js,1708376983710,04c93ccc071f0ca0e142007b13d912d95e81eff84af4a00be3f5395ee0537ad9 -plus-slash-minus.290f9e87.js.map,1708376983786,595f95983381952f35f7c68c4c1b2b9ed35c0ff5a1fd453fde342686986e9d0e -plus-slash-minus.4cfb24ae.svg,1708393363398,b88420fc1089e2b0d954c0c4b3aa2e47ff7f9905420d59474c51aaf939498592 -plus-slash-minus.76cb16f7.svg,1708394423462,c0eff1222a3a99e7c605eaf41e743e3052643116bb6e339faa47c35149be49f7 -plus-slash-minus.ed7ac2fe.js,1708378197058,15583ee7563e7b9d878d1fecf918080d25eb8987bd42a941a362768b2bd29eeb -plus-slash-minus.ed7ac2fe.js.map,1708378197080,6b1d8cb340761d1ea2482bac74c5247cf4ab58e62d31cd6d9031513fda091582 -landscape.e5dca1ce.jpg,1708394423276,2aeff13fbad3d6ff7f617e8dc5ab72c3167e0149ece3995d710bf54bec242a38 -pencil-fill.ba3abeab.js.map,1708376959221,ca5febaea5ccc6cd6cd212b0258b7e65abc7435dd0363f7343681c32d4688a04 -plus.60b1cb07.svg,1708394423462,2533f2008f8db7fa78f1bdea40e85872519c627c184c275c9057f4a660ea9c41 -plus.bd1145d2.js,1708378197058,f07e3474a0bc0c25e4863a5791359fe240811a0028c0fbd29051db8511e263f0 -plus.bd1145d2.js.map,1708378197080,9f9c6fd794663c375370a9ad4ddeb319e8641540e03208228dd21c7529169634 -plus.c18402a6.svg,1708393363398,511f9c01d415007cc5f834cc1c88f36140aa3cc64469e6b20296b0b147ac950f -plus.fd7a46b6.js,1708376983709,c84322ac54062bf4960900c85d7615df14f0a6ddd14c4722b76ab2dc7f35c2c7 -plus.fd7a46b6.js.map,1708376983784,a4c4fe589142c2d8c2976033727c5d8ca70261c0acaa27fbd0bb49f9998d4626 -PollComponent.19aa0f57.css,1708393363465,926ca3fb624696be1a614991c928f4190525d9686845fdf76da12d8ec3809b61 -landscape.d3c6edb3.jpg,1708378196975,e1bbdeac7501cf7316a0f1bc824c71f7c75b4c533087c631775fe36352191314 -PollComponent.19aa0f57.css.map,1708393363477,4259ecd9790af1eab3a2f585f1740558aaafb7388dd99909241e147193ba9548 -landscape.a764c42c.jpg,1708393363477,e1bbdeac7501cf7316a0f1bc824c71f7c75b4c533087c631775fe36352191314 -landscape.e4fe7f07.jpg,1708376983913,e1bbdeac7501cf7316a0f1bc824c71f7c75b4c533087c631775fe36352191314 -PollComponent.248f70d4.js,1708393363466,40994ff9c3e4dc63b10315862c36e10ec27e3999ce8dd0441c203dd75ab13de3 -PollComponent.248f70d4.js.map,1708393363477,7fa41d46d82d3f5bbb9aa284be0e590f917105df5dae635e58a12ce2a5525c3e -PollComponent.56c8486d.css,1708394427614,bf71c005719f07e5bc6801b3c35d2d6daad1b375268e464d29489cd7fdf58f17 -landscape.jpg,1707172623754,e1bbdeac7501cf7316a0f1bc824c71f7c75b4c533087c631775fe36352191314 -PollComponent.56c8486d.css.map,1708394427723,35926927a9564a38f76f3a031ad9870e191e3fa50b4c177161f5567feb48b244 -PollComponent.882a6777.js,1708394427616,4d8c449b4a3a2ef51010bdcbd8f7135186879054d2d9eab4b86e4c1ff9783ea8 -PollComponent.bbc9420e.js,1708394427614,e48fad4e0b3d1d27ad34110bb3afc49c2080edd5a3790ed348fab3bd11116aa8 -PollComponent.882a6777.js.map,1708394427851,6b5ba9ece2872489f27d227a00795b9bde68f33ec89ddf8c811ecd0e27b41aa3 -PollComponent.bbc9420e.js.map,1708394427843,d0ed294052925081202237824bc37715f50017d91a63d44d99674b76ba129e9c -prettier-error.317577b4.js,1708378196865,4dd043ab02407a2f0b6cd53b3855feef7662f747150a7aa7c7bf1edb062a46ce -parser-html.d8b6ce86.js.map,1708394427851,1ab3ba5d63622373a70c5ca7b90f28d3a32b6cc42d2786bc4b486957262e9515 -prettier-error.317577b4.js.map,1708378196892,09b2a3ae8e7894ebdc262f96c9df8029f090457c9995e537f6b04a712958fd57 -prettier-error.4075fb22.svg,1708393363430,f718cab74be4eb92414b676e784ce7557225eaf97b6a6d7ef3fc6f086cc8c605 -prettier-error.4bc5c23e.svg,1708394423421,11fdc96d1f65acca9c52537e17cdad9ba26e7cacd57dd8a37a064656fccb4419 -parser-html.f8dad34b.js.map,1708394427856,abdedbae11f0a2ddd9eb1902c46aa5b13f790fc2d0011b2e5cab2c83ed3ba75f -prettier-error.ba6e8ae6.js,1708376983680,d1f3101dbf6718661d29011ba38bebe7f47cbfb7a6e1891c19b4640ec3fa72b4 -prettier-error.ba6e8ae6.js.map,1708376983768,e338f10dac3e24f38e8cada53a6eb57c3e2d21d3bbd32e51b9354d459ad87f1a -prettier.01c3906d.js,1708376983710,3b522f07fd556a90eaed8e62750dd7343cdbd32a1f2182a1de0448b9b9f34511 -parser-babel.30b8443d.js.map,1708393364010,9c5af51126cdbfb14934606401276a05c6861e6b14ef79bcf79a9aafff0d574f -prettier.0d8a7ccb.svg,1708393363398,accc8bedd42c4a06653bb65f43d16e797af368aaadcbe71a60c8ff9a7d6254cf -prettier.01c3906d.js.map,1708376983786,943a6754a28534ad64912fca7b6a8491108c3ba047348d1662cf3c361caadc15 -prettier.32099304.svg,1708394423462,a20da8558e5345ba66578003302d1b1932c0091b434736a61a0bfe1a0ac6da54 -prettier.f25c5073.js,1708378197058,df2d10b74f23394ec32c88f80d245ca1421641a95c6a589c5570e50826e1f3b6 -prettier.f25c5073.js.map,1708378197080,5c99c90001839a4536e02ee09e41a3f961a8d45da6c78d6cfe74dc71397d5138 -scissors.244ac89e.svg,1708393363378,a42dc1d241bc08eda976b7e94cf980b739a3f3a84c055d73134b92db5eeecb65 -scissors.52f06337.svg,1708394425909,8ffde136455a2dfe7d1f3edb2434ba9ddc526a6fcf892214505e2428a0c694d4 -scissors.77c49a91.js,1708378196805,bfda016398b7c6bc4d15e9d85d389cf113953b4c2bdcc91edae63ae675931801 -scissors.77c49a91.js.map,1708378196853,334cd149d45e12254362882f52a254fcfcf993b14edea886836caff09d8608e5 -scissors.bbc93da8.js,1708376983641,d9d2242cb1ed12fb70d1fd626d80ab63515858393eb67dcce026efeba470aae9 -scissors.bbc93da8.js.map,1708376983745,e0451746e095858f5562b7f271fc83fd2d2a826348fe67fe9d3f90fbda4e7bef -send.2ce28ed1.svg,1708393363341,3b7bc5caaceba0becff05ee467b17567df5d89de74a925ac0608c3fd636815dc -parser-postcss.b33cdce0.js.map,1708394427858,65926694aae8e8e6cda8f130ef0a4295c9d2367f104313add1919565f75f40f8 -send.38fbc104.js,1708378196821,1340eaa3eae05b78b62820a4d696ad2f7bcb266d2e885b3565a1c973d0981a9f -send.38fbc104.js.map,1708378196866,7c78dbba2772e0a788d103baf4af559961c3a72e27915ae4edb0c776fa374d44 -send.7a6b2c12.svg,1708394425982,563082202c7660f3e95504716a3b7831a75eef3ca3bde5ea8ce68bb6e74ebd2a -send.d8f28ead.js,1708376983679,9128ee6970705fba158e98883b955cce1b37892574de8585c4fb8d7ccc289cb1 -send.d8f28ead.js.map,1708376983767,76b07e0b5f99eaee60338d59a535e50d6941cdceebe20fa8ebf1207b95731e98 -parser-postcss.c3d1d20b.js.map,1708394427851,9e8a46f3c9380d424f83c59d6af6faddd39cbe5d2210e3eccc191c96995085a8 -square-check.0fff323a.js,1708378196865,ffd3d8a4622db47a0205d26f2117e46a808b8dacd9fd3ff36f9d6c65819c1ff0 -square-check.0fff323a.js.map,1708378196892,cdd99a9cf2ec8e09d179be238ca8cf79d8275894d567b9de3cdf6377bd7c86d9 -square-check.11c6c06f.svg,1708393363430,dffd873c9321133664f0d423827c05c55a3ab90e2c29413d5f23de1501011282 -square-check.216945ad.js,1708376983680,54e26fc37268d1a0384c76b480b8ba5b7f1414613dcc79d9f32f30e479280a8f -parser-markdown.7a642054.js.map,1708394427858,4adc0dc46087f32b1a2edaea506f06cf071a7d27ffdee713807a273cacb743e7 -square-check.216945ad.js.map,1708376983768,da49984fdc54d61835215719b33c60be6a9b348aea07dc291f4525bbbae070ae -square-check.2bdbca74.svg,1708394423421,f7131e547a8f5e8210dd1ef6c4a89ef58756c259a0e1046e2640d5409e0681ee -parser-markdown.9435a0a8.js.map,1708394427851,83b1f9a3d09d7c51ab93f683d11199c64a0e1de80b0fd7bc23ab92b0023446ac -sticky.2a96f774.svg,1708393363339,ba33d426daaf74826eff9946d89146e7c8f59db26a5df7f20c98ba90cbf8b9d5 -sticky.37be880e.js,1708378196821,481db6482044628bfc50742985ebb4bc437a67d972b1edded2934550ba828623 -sticky.37be880e.js.map,1708378196866,3ae24a8ed1045b2cb164f2161ce6bfb7c86ffa29a1416153bb42df2e5216ef86 -sticky.3c1997bb.js,1708376983679,3b9d4b0b4c445fbd528d9a983cf009f1cb791e7e0d4ab90fae48a869426c33f6 -sticky.3c1997bb.js.map,1708376983766,e17f90226d0b631219abf2472897dd7bbb248f268ec667afaf3f6453ad7a197e -sticky.3f2f66bd.svg,1708394425978,35dc7522dacf22aec9edeae9d49d83c97ecd6ad6d77d67d5a93bbb73e9eae603 -StickyComponent.85dc6e86.js,1708393363466,ef286d8d52317628c892913adfa3f51880e326e14eee044625f30ba71efaf6f3 -StickyComponent.a227d386.js,1708394427614,1802b519d13890d3de1061684495ab2a10e92ce40c232e13af35f036776da7e3 -StickyComponent.a227d386.js.map,1708394427849,2d2f788873ce3cfeb3e048da9b8dfc952c09cbb66dff697cade7e3329ff17c5c -StickyComponent.d0a4a618.css,1708394427614,d421b8bbd9ecde32eea1c687e961aa6292552202a42c0512cc4d4d9a04de3dc0 -StickyComponent.d0a4a618.css.map,1708394427811,2c5b79dddf741ec08ed9f050b77224f9aeb14e4d2cf70cc4dd03089ce326317d -StickyComponent.db164946.css,1708393363466,ba9a195cfc7c380aae62cc0543d71b14a5192c63c308f535e6a089b933bd0190 -StickyComponent.db164946.css.map,1708393363477,3463c247f164724386d0cfa632ab8747be74a257407eb951bc2bfc1d41bdfc68 -StickyComponent.f29ec1b6.js,1708394427616,1fcca4c508bc96e7e721e3ca229272b05db1171513ba07ffb3df47bf41b60565 -StickyComponent.f29ec1b6.js.map,1708394427851,83a39c41d73911be3246e4c2e0d3136e206460138878471dcd0965c658a14182 -success-alt.1c3ac1d7.js,1708378197058,54f8478edadb920b74d13887fe252338c1aa8945c7b2b410dd501bb4f1d4ad7f -success-alt.1c3ac1d7.js.map,1708378197080,1a17761a04693a97103f575927e29062c331185931d86d9525783249443bb660 -success-alt.43b71278.svg,1708394423462,2990cd13fb157ddd4a91c694a07b0b6477baf9ed582142c9b650653de7edd6f5 -success-alt.86791bd1.js,1708376983710,b9c09edbabd307b756bbdb7e22a5ae9e6716e032499d3bf55e8aa64e52ac6073 -success-alt.86791bd1.js.map,1708376983786,162f791ffd3f1056b991ef13c1b3d93fe07bd49045615bf361542416fe04dd47 -success-alt.e00be32b.svg,1708393363398,a8fcad73231ecfb9a0ccb3763d156c4a8c09fb86fbaec6aef5bf7a234b610644 -success.19ba8964.js,1708376983679,081d757b1972b313a1f99d24cdcc85e2a0f2a7a27b9e8aa3b0f8dca51d61e2d6 -success.19ba8964.js.map,1708376983767,edda3527105c3201c4c2bdf5a2ec3ea3bebfd5a3c12e1e6da22f8e1082ecab7e -success.70ba694f.js,1708378196821,fdb67be0b5522cc0dcd6cf619f7737638156b6ac964ab776b2978bde9939fc14 -StickyComponent.85dc6e86.js.map,1708393363478,1874666f553745e255cc4e057f7708677442418edb5b83133bf48c864eae4dd1 -success.70ba694f.js.map,1708378196866,9190cb907cfafd6616177e7a1e1dc2cf512ce217942710c2a5aab342084f9f83 -cat-typing.1da0c855.gif,1708393363482,1a4eaa8d7983deef2708a554c62c5879973405c4effc32f701de2a1aac5f60ce -index.975ef6c8.js.map,1708362219161,a56057e3c193b973a138e7a8b2db21a468f0d972b564afd9c5786ec4137f1411 cat-typing.gif,1707172623722,1a4eaa8d7983deef2708a554c62c5879973405c4effc32f701de2a1aac5f60ce -cat-typing.39e9a2ab.gif,1708378196901,1a4eaa8d7983deef2708a554c62c5879973405c4effc32f701de2a1aac5f60ce -cat-typing.3cb5f17a.gif,1708376983915,1a4eaa8d7983deef2708a554c62c5879973405c4effc32f701de2a1aac5f60ce -cat-typing.3a3fa582.gif,1708394423995,1a4eaa8d7983deef2708a554c62c5879973405c4effc32f701de2a1aac5f60ce -success.e70a020c.svg,1708393363340,ac19f8e373522d26093f97c0c552a53343b2224824a14e6c5f7e331b7206ad9d -success.fa01018a.svg,1708394425980,be1d0d52bf50e37bd5168017d6cc484e7de218aefbcf17ba32eebd0ce229372c -table.0e518029.js,1708376983641,7910e15633b6bc792ae04a98fa984d17037963cec1545ea09d667d0de30324ac -table.0e518029.js.map,1708376983740,851a349d24aa2a4561e9ca26bdd90519035bfdc3b31d30bd98c8c73c4ff16b68 -table.7c6d8b4c.js,1708378196805,18fbccce1448112eeba6402e1b93d04cbc9a5207d7bbe526865310eeec588132 -table.aa0ff872.svg,1708393363377,209789b14bf3243f111ac39aa739d7d77479b3420e4dab93ee469ccd2ba16ae7 -table.7c6d8b4c.js.map,1708378196853,249392e4cfa34ac5b412dea851f482dbb142ae1f4d6205f48b1c5d9277d7aabf -table.c8988c55.svg,1708394425908,02efd6a081bd08570dd4ad415fb2c157db1668652012f2e47a789c2fff73ed95 -text-center.40dc39d5.svg,1708394425977,dc137099b9f25f93380d1fa71194aa983be9ed98f94dc9c379862a659fa29fa4 -text-center.c333648e.js,1708376983679,c5edfc976ad3d5bc62eb3f1cfeaccabe6d8815c790e55b6bb46910d4b2c32fa8 -text-center.c333648e.js.map,1708376983767,d7c270af235f2b214adc6f9af71df277676621d6f4841c91259dbf76687221d2 -text-center.f9e50c03.js,1708378196820,dfd25372d070b317604b0b09d58d7591111c0c5e189d50ffeb22e6a10df08a3b -text-center.f9e50c03.js.map,1708378196866,1593316252896f3fe1e9750ccaccadd85996dca27e95ac806aa8cf002cd20e3c -text-center.fa673ca7.svg,1708393363339,1e7a0dd6620cb2cda80a7acc45a40d101dbe1e6c0f8de0c385ddbbf3ba871760 -text-left.1dbd8777.svg,1708393363377,cc2acb2436b86a10630ccf6aeab967c87461f9972a82bc8b6c8909a704f2f9fe -text-left.4439866a.svg,1708394425908,20a29dc09dc1d521004d317ee39fb5f80a61dce34d808b9f879fc2ccec44d7f6 -text-left.5919372f.js,1708376983641,54bbfde1e71eedcf73d7f3b02c5cd570fd131fd9f2dab5a15f344703fe24587f -text-left.5919372f.js.map,1708376983741,4ea65d1f7cb408907e2262a6bfa79037c4ee39137a4e1a97957241e29a9a94ae -text-left.bda5559b.js,1708378196805,43f50c213525e3aacbc1ff195e6d0bd359f662d12066b60d5d60b64654eb58fa -text-left.bda5559b.js.map,1708378196853,23009cf1d1ed5216eea2bc6e7714dc507bf4f3dde5a569ba60118bf5b44e3e3a -text-paragraph.32cbd16e.svg,1708393363430,a622361245b18c4369bdf9a1379b9f8b50e074e7cf2095c57b723daaf1e4031b -text-paragraph.884f7614.svg,1708394423421,21e610e44cc7d6bebc6a86aeabb2b2188c06be4c8db7e7d67aa108b35d174e6c -text-paragraph.cdaf22a1.js,1708376983680,99963102b894232e8e6d8729dd52713daaeb12a3d1a8cf73944a25c3ce430135 -text-paragraph.cdaf22a1.js.map,1708376983768,6c3621e3ec07dcca30c8e1f15c972c650a129d2b8c914fb9b5f4fab4fc08837b -text-paragraph.e472d246.js,1708378196865,5126782e89d4472350bad64e6951639ae62ce59ce4e9c11f8843850d21674660 -text-paragraph.e472d246.js.map,1708378196892,69c61f7ec7aed113ce24e503791faa4cdd06e03a3e95dd9b5f1bd4ccd5f8c5ca -text-right.6f488fda.svg,1708394423462,c4ad0ffb0ab9dbed87341b53626bc155a5589073a377a3e1078787661772dca2 -text-right.7c97ac2c.js,1708378197058,10c882feb9eab74ae123e52e7e71640466951bb5ef4d1f073798e8f54d5b7ee9 -text-right.7c97ac2c.js.map,1708378197080,4a09afc6d659673ee0bf224cce6b100ab20af3446f3933e83a1b4b947a6d6c8d -text-right.8a5b8de6.js,1708376983710,25232c8ddcdc387b200279c004888be8b88c2300df8e70adb91903eda9f1647f -text-right.8a5b8de6.js.map,1708376983784,50de6dad38e2a2b22e6c42d12d114f5eeb53ed93445af60015a4e4d642113989 -text-right.c508c249.svg,1708393363398,6e32d9fedc1bf2565ba6d1fa70c6a72f415d3be809f55fc484b6da034c31a057 -trash.2159a49d.js,1708376983710,ae8ac85b223e98923f12aefbdf26f91bf65a2b7990b4e2153413bb254a6b9a86 -trash.2159a49d.js.map,1708376983784,7e5162b3c00a55086b3cab1c59e2700aa8d650006621544ffaeb9fad71f4775b -trash.2f4380ce.svg,1708393363397,b4b9b8ab664b1553c1aa8d7fbffa1dbbb1e23256175031eb8f27ed34317a86bf -trash.5a41c71e.svg,1708394423461,2ecfdb6d4bb9204eebaa5db5088e129a5b79bbfa74a355b437732bcb3d54869e -trash.c3e0e008.js,1708378197057,5ce719e18d31555e465787d667ac26a74b72fc1611bd989c538dec6339b9f9be -trash.c3e0e008.js.map,1708378197079,0f4f5ad6dac956f8fa1ac697cfaa4ae29f84cd99d7445d5d49bf99c26a224998 -trash3.21183172.svg,1708393363398,7e65030075855ebc609db0e71033a450e3b877bc7e1eb1b955102d653e3367bc -trash3.59218061.js,1708376983710,e47d903340f3b3f8536220468a3777f4dca058ca2a2c223df7fae19f92bfd01d -trash3.59218061.js.map,1708376983786,2aea45ac14564126e61725e9f030d81f2642531dd03f76fa5c2f0075f57bde4d -trash3.affc9d74.js,1708378197058,260b524b5ec30f93051a1f8e1523682e25149e3ac1dca2d929217bc0d608368e -trash3.affc9d74.js.map,1708378197080,38d94ad49d46f62a2e535e5c4c3fd7e7786f9cbd8e77301f73505cbece4888d0 -trash3.df70a67d.svg,1708394423462,9d74697c2bb1423d941ad321cd40def417d732caf37cc8e3e9797588ea62a8d0 -tweet.3fa25cb9.js,1708378197058,39ae02a8585fa4b0fb5ef920716ad4a19fab8b49074e35cff6100d42ce3051e9 -tweet.3fa25cb9.js.map,1708378197080,3c9b00a47bedcd6b4d0087e27a6cbf8cfe23203d283f80aa572bb43a68c790dc -tweet.7e6d3bf8.js,1708376983710,6d60ae98f92cc19dfbb1c69176e6b51197c9a106703ac5426cdda5f793703f76 -tweet.7e6d3bf8.js.map,1708376983786,c8dd1c110d83321600aed991b281c9792c77876dc8fcf83a0bdf95df80eb1b3b -tweet.7fde114b.svg,1708393363398,16c245885cbda64640b4d82ab7ee04b14bb8fe297a7d9597de8b57d37e53c8cd -tweet.cd420405.svg,1708394423462,5683189134070ffecbe42a74de20449c87cc4bba7da4d402313943613996db92 -type-bold.96ad76d2.svg,1708394425908,68dbbaa778029de03b57d54f0953dc6cfc5db5620b2f47635f67621d39885260 -type-bold.b653613f.js,1708378196805,defcadc5a9529c0ce2aa229c9de02fa0bc315fd3fc25f9fc529a2e10d9f67334 -type-bold.b653613f.js.map,1708378196853,b962f564b2e37feb78f47f521ac2e5e29fd4140218d47c6928592a37b299ee9a -type-bold.bbee7157.js,1708376983641,9548785124c4b78e89f59924a5cf439e93f3c161776680b19428cb0ab5ee9bae -type-bold.bbee7157.js.map,1708376983740,91026c0cbca9448114044ab26931fc14e8662754c3eb60c591ced4c436f18b53 -type-bold.e99aa233.svg,1708393363377,51ed14f7933b42eefed5d6139dc46d07e6f2637fef1de332d555f4b411977822 -type-h1.0ed05952.svg,1708393363378,3a091321bdcb7496c0b38af87c803fad100a237390d9e57c6626009f35c6aae0 -type-h1.1d419f4c.js,1708378196805,f367546ea839632924607197018068c62e88d53a2ee1132c0ca6087f47325edd -type-h1.59c5e932.svg,1708394425909,10de5eb2e0dcbf5294ae4ceb634da9bcd65992773ba7e005f26de514528a886b -type-h1.1d419f4c.js.map,1708378196854,21c2e26af169f58c4210e7e29ec464557872836960e4844e88f0a54e902e85f9 -type-h1.a4d10896.js,1708376983641,2f19dc76519aed1e4ec2bdcbff544750bbdcab41a9429937278e3abd45bb36fe -type-h2.078f0d93.svg,1708393363341,619b3d7d42e9a2f6bab712435e75b915d24c54ec19ab9a405dae1f810ea535da -type-h1.a4d10896.js.map,1708376983741,e04f48f25d689176998de4cbb905d2c969d154c00c60ef041abf2724f6854a7f -type-h2.3840e21f.svg,1708394425980,fdd42b4d7d97e5d4bb33950950cf1d94650209f581784128be852deea81312f6 -type-h2.29c0ff65.js.map,1708378196866,d835d5d55bd024e4205be28174a5a4f6648d71cc65682febda7478de82db8487 -type-h2.29c0ff65.js,1708378196821,80a91594ce7422fbd106f5100fefe37de522115b6634604500f743783d2c6050 -type-h2.4d8c2fd0.js,1708376983679,0b3d0287a94f7644395ce5d6fc1c115849489bc0b1adabf38467e615504d36bc -type-h2.4d8c2fd0.js.map,1708376983767,03890f2721d88d9e23fc3d4ef8ba876fd34f40e45fb2522917170ae559542d19 -type-h3.0f086249.svg,1708394423462,fb4beb878acb2ae9419b9acd43e7791940843e025e344b786edd5d679fb4e94e -standalone.6b038acc.js,1708394427617,e3c3961c97448feae8c886ec27444b6da33cbc44db9067574cec9f79d4cb8f08 -type-h3.b1c40aea.js,1708378197058,92ea478a3f6a0da14a9ece04824d1888673d3829abae47472975542047598ae3 -type-h3.b1c40aea.js.map,1708378197080,b440dfb99b2e99b2d71fa5a50eefa633adce06bc56b9494d32a432103717a320 -type-h3.bdb76201.svg,1708393363398,6e2e1b4105dad045ad4baecc5ab1b251c80d799d332e339ec92222913b300aa7 -parser-babel.54b4fe40.js.map,1708394427851,326c80f0d1a4f42030bc0720bf0bc7d7cca0a3515dcbb75f6b369e713fb3bd87 -standalone.8727f49b.js,1708394427616,00dc3c6578deb9ffa457fbcb3b598c509a5b2881d5bd2bdf5d33e0ee8efd0ad5 -type-h3.e7dc987e.js,1708376983710,c54dbae82789302c5c4f063a4e6fe59f74b555d0518c2e19fdb9b4b94cf11225 -type-h4.27a528ca.svg,1708394423421,8a7d6ce4bcef82f9c176ea43c1117478262901eb6678cb1553565b0266736fcf -type-h3.e7dc987e.js.map,1708376983786,d26875cac42bd015d55ff6a73a6107c1d4dd1a974d921e399a33871653403e98 -type-h4.b4aebc17.js,1708378196865,97a19b6fa8dffe7aa7698ecc6f1bde92f5585a8ada5970dc1e181d5b0b8ad72f -type-h4.b4aebc17.js.map,1708378196892,da21aaeaca4ca1bf35c475880a971a7dcbde7a49faa9cd5347dd6add926e0d76 -type-h4.c2afd648.js,1708376983680,5b668ac14db49d318d5eb15faf31d23f38482f27a3aa7e863b6c4c315ba9d868 -type-h4.dc443e3a.svg,1708393363430,86aaf0ccd8b44edb7d9569b84cf1dd36d27ec12af9fa95593918317b23cc07b6 -type-h4.c2afd648.js.map,1708376983768,e9cfac77315809c68f32bf58bdaa4aeb3624404df25e19750bc545dcc29c2929 -type-h5.78e72e7c.js,1708376983641,16806da25e24133d1ec28dd6ad90e3de12691322f3a1d7c90bbb03c13e413485 -parser-babel.6639dc1c.js.map,1708394427856,8949b33d73167cc0307e6754e7bc3ea95dc2d89d1c890d50ce66668988e98b4e -type-h5.78e72e7c.js.map,1708376983741,697bafb9ac0f66b6bce67d452320b676f55b456dc1b09c8ed4ca7826c57b7b47 -type-h5.89c573db.svg,1708393363378,fae889cb27e3d87392b004b94c757445bcc7d9e67462d145db34111659c05abb -type-h5.8cd6c101.js,1708378196806,13d0d9ff4b9c73e8bc22f43f536f34a03e0ee7adcbe680ade9366cf59c0e797c -type-h5.8cd6c101.js.map,1708378196855,4914d39e71aedf348d6114a5b2b7e06d49993525db9736943554b27ef446dcd9 -type-h5.d7b7b2be.svg,1708394425909,e6b596d1d836fb7c526daf7e6093aa568574257227e5d75a8c1196da99b31ce1 -type-h6.3cce90cb.js,1708376983679,f715253dd4c459cc11f6b1717573814728f2c8feb59342798922ab12785954cf -type-h6.3cce90cb.js.map,1708376983767,e650cdf72aab7fff12a23e0d610b550db96dbfc9f4a14d92785ad436f2666fe7 -type-h6.525522b4.svg,1708393363341,ae92b145bbab970417abbee264559ad2d42652afe9863f9d739e73f078c57e1a -type-h6.b513db7e.svg,1708394425980,937683d76093c8ff8173e2d6afccca8dd563667badba5c5fc8fa7025736dae38 -type-h6.ca918cc4.js,1708378196821,9207bca703b6b981c1dda40f7cab629315228a20ce8f5ec133241d9dceaa32ea -type-h6.ca918cc4.js.map,1708378196866,727556b979ea90441226ae11472e633ad006063a946aef3527ab734e61356d18 -type-italic.28cbbe53.svg,1708393363339,a00065a7056466ba37940bfce85e522d7cfee5dd1cfd410676f04e6617240a89 -type-italic.86e0d618.svg,1708394425977,442f56c417996c1ce8e9e5a495639bab38a769359cb0070672c0704bcf8faa23 -type-italic.b6154cf9.js,1708378196820,1b100cf4e02f969d0018878e8a58022dd400e98f8f8bc9d80b7223ed80877f9d -type-italic.b6154cf9.js.map,1708378196866,ab1381a73647035f346e1d3e88eb7491472fe1698e7350d2379e3da0d8a861f7 -type-italic.bd38994f.js.map,1708376983766,88822d61aa62b1618ec07e98bb97db1dc7504d49e48c9f3c4c431190f0fd2834 -type-italic.bd38994f.js,1708376983678,a2353384a105a10ac12397ba3a9b49df54daa42e0abd502498bbdce470c49246 -type-strikethrough.b6a8ff1b.svg,1708394425977,9d3c4e968979e581411a502bd1cab2ce562ac3f1241bc0a2177e79abe54ad862 -type-strikethrough.c10e2db6.js,1708376983678,b4d6961222f0032d0563743bcfa81de841480e23973f9832b0674e16155e0d9e -type-strikethrough.c10e2db6.js.map,1708376983766,04f52ed5a7c3b33b5998821736d38ae2b014e6c2c2bccc888b1ae1c60fbba575 -type-strikethrough.ccb96f8f.js,1708378196820,51a4fc3d48bead9ef6ebd719219bf8e29ca7beb7b67a1c716e6290531e97f9c4 -type-strikethrough.ccb96f8f.js.map,1708378196866,1053c11ec1007961f591c74ae2c1d4d7233cf958a257c4e98b5d6eccdaa018a0 -type-strikethrough.e9994a59.svg,1708393363339,95cfb8d5d421f34f42b2cecd3d9492541c4dc772bf03d62e6468cb9fab768288 -type-subscript.6620741e.svg,1708393363397,3030ee33151fc485d819eb7119803457da746a4feb7e46a1076a7ccc63e54741 -type-subscript.800eb6b2.svg,1708394423462,c7f836c4b46a5ca3a4369852baf2ea917ddbed5dd0f9c178b6e5dfc111c5b2de -type-subscript.88a09c69.js,1708378197058,3b7eed8c6bd5b6025dbd916641b0c576cad8a665d05205bdf5a553461849fead -type-subscript.88a09c69.js.map,1708378197079,806280d5a096c6bf5c9d8de7983f99c59b06ffcc5982df1002b1ff36e996e0cc -type-subscript.ec43fed3.js,1708376983710,797532e62d8664e589e4999075454b0f0842e05df6745f76145ced86ef7d26e3 -type-subscript.ec43fed3.js.map,1708376983784,289d7a534321a68a6821433c45f64d876a082d73c3afc27877fd8b305bcd55d6 -type-superscript.00e328c3.js,1708376983679,0f894f0c58c5f5f1151dc7ec17f9f18cc0d24b7df93a35e930317b244b6ca2b7 -type-superscript.4aa2002f.svg,1708394423421,1094ad7048b196b5c1d4cdd685495e435395a444d70867fe505588feee2a1b68 -type-superscript.00e328c3.js.map,1708376983767,277f52ea89bdafb6b4491aa809fee8687fc47a477e2ead596f2c56f4d6bb34b0 -type-superscript.abd9b3ae.svg,1708393363429,1d6d191446e865e74771f3afa6ef5c0e7553d5b7c8243f6b9b9c76e84a75eaa9 -type-superscript.ad9ed2a9.js,1708378196865,66ebba66c26a8756c4d582f827ca13d722c8cdea220ae4b1dbe8092042a127b2 -type-superscript.ad9ed2a9.js.map,1708378196892,d4ded10f54a4008cfa2984e1898e604903dc172edfde1f58de7d87507b68a601 -type-underline.0f703ecd.js,1708376983641,7805ae9833c6351f54862d9e2b5aa5361446595bca39f48be2db85bdf13d9bcc -type-underline.736e7cea.svg,1708393363377,23d1e7aecfa0dc25a9cf59db481ab035204dbff062cad119fa575e12f5688bf8 -type-underline.0f703ecd.js.map,1708376983740,5f9a4e39b08ee1eeb0a3ca2725eb554e95fba34901c979fa02c3478730b0a0af -type-underline.ba9505d6.svg,1708394425908,b433abf142291674fced0e3d764ff61c96c06d7ad677218cf4b540d515d87788 -type-underline.d246ad95.js,1708378196805,e0afb1205ea17c691110141ec196f6ce3c6929022e6c0cf833e8b33abf212b98 -type-underline.d246ad95.js.map,1708378196853,cec34dcaaa89863768ce2e9a318d31cf06824a4302207c78f657d06887ff213f -upload.0ba99253.svg,1708394423421,bf0ec0f20f72b8ef824cc3d7c0afd4b6965b042f4573fd8dbfcd256f15884e36 -upload.5c175e02.js,1708376983680,e247bc095d1d251900223a6f4becc4f0a71c9ab8804c8216940ba8a2213105e9 -upload.5c175e02.js.map,1708376983768,f119939e9676a1fcdf5360b9d367601f008a0a22fc1c6d477f3ca66c68df06c3 -upload.5ca129c0.js,1708378196865,e6312e9b5591d315f45f900ffa8efb633c2ac59acbd0d8c4ea4118699c2d6afc -upload.ea61887a.svg,1708393363429,29e112d19007a96c6b1c6d9fbd63c42c0363bf7dd359e5fa265b55357451f02b -upload.5ca129c0.js.map,1708378196892,3aa01fa84a6361e912d2236a457a548f45353491bf03ba4a57d21cc8cef4c079 -user.74026af0.js,1708376983679,ee1ae81a84c1b245c3e0a63640b43b0941701e160f3e93687fbcd5ce937bcddb -user.74026af0.js.map,1708376983767,570768d836cfc39c381b6ccc8f60e5772abc4fe7310a53b18b99457b4f49fe8f -user.a4e97ccb.js,1708378196821,d9fdd8eda69cdbf723367c80e5ee387c5d6ee9e36f88f8c639e0d63a9e6d1b23 -user.a4e97ccb.js.map,1708378196866,e0568c84235c316188c559767de8673df358a4406ba34aed23db0e563b3244ec -user.c5efe438.svg,1708394425980,b24f06a3c44f2580ebd0ee86acc24a2d54bdd309c0a8d828db67246fd4a0ab09 -user.eb537d3f.svg,1708393363339,b7784b2ec1e25b2c7a373d1dff79f5a90888f0b60d32aa9adb4db5ac4745b88e +index.html,1709351480676,8841d48d7d0e1d209c6ffed63374667ded06f7ad536514cb6bbf5e9016eece9d +landscape.jpg,1707172623754,e1bbdeac7501cf7316a0f1bc824c71f7c75b4c533087c631775fe36352191314 +logo.svg,1707172623754,0f2172deb32fe13ef78b568f663eadbc5ada6a267a7c080f4d868433d6a763fe yellow-flower-small.jpg,1707172623754,e2346243e9bd16a3899e77ba4e4876df1fe8ce765eba6d2439bbb6907ccea76a -yellow-flower.ee9cba9b.jpg,1708394423276,01340994e921625aade9bb12dc7e3c8c8b4eda48343c5520992e7338ba52f330 -youtube.4b0b1d01.js,1708378196865,f982b60d7ef568aeb748809cb413cf8d99de82f9230200c86f72c46f08be9b90 -youtube.4b0b1d01.js.map,1708378196892,7f2edf0fef345492cbeb6ae0da47e0b982c3efe10b54f600ea721f9becfa13e4 -youtube.e26fe0e3.js,1708376983679,c4a4c94c1610f08dac13c827c8861572efcaed33a1454188a19446170ff9d0f9 -youtube.e80e1663.svg,1708393363429,63a55b4b2310c23da6286dbe46676e6a4c3767f9da9a8b3c77f8d606112f1e65 -youtube.f38907a9.svg,1708394423421,ae5ae6b7f87c8a1f5dadca0b544c7807162802a23b6dbc6bfffd9f3f09f4793d +yellow-flower.jpg,1707172623754,f2e19b4632a310b7c2935ea7af93f98e6b41af9932036c711013f3c188655087 +assets/emoji-list-D_N31RbD.js,1709351480667,62c437dd466a3d6ef41fefb85d21f36d8b17582005183fa624b11bbc3d72132b +assets/EquationComponent-552Fax7N.js,1709351480667,db5c705e2c98e144d30fc9de38207cab649ce9e2edb15da9d909a35f0fc2a7b1 +assets/EquationComponent-D5v0xPfU.css,1709351480666,afd698035228c29951e5f0814b82b94fd99eaa5930e25f79a6443e77afcc6f82 +assets/ExcalidrawComponent-4wE5rM2C.css,1709351480666,6797014f76f1b1179e23871f3d7d41fc92ab0dc63a83a30e376cc923e47f68d2 +assets/ExcalidrawComponent-CWdcYBET.js,1709351480677,7d6d31c8c27e39e6952634c17bb42350335cbe0c96389df9d6042266d0684d65 +assets/ImageComponent-BcOKrOJR.css,1709351480666,771ce5db687edd562ea2f37903a4dc4ba0bb43d8ba041345765e0df2080da03d +assets/ImageComponent-gbZA2Z2i.js,1709351480667,be7ff915634029f58edaea020e4b367c65d3c59537be8906444ea7843e2c7929 +assets/ImageResizer-D5E_9xYI.js,1709351480667,f087bb19002d2c84ad210ee4ba2afd805151cfdfd2fbb0f0c38addfc8da7cba0 +assets/index-C4woQ-9z.js,1709351480677,af3ebf3583cc790c4cafbadc7809ba0b5c6077821adc8718b4ce4ee65ef4f73a +assets/index-CE7Ypwor.css,1709351480663,5fc7d663929c4fd3b9bb998282f56933a0877095c3cff702478fc0adf0134b10 +assets/InlineImageComponent-BX5H0pL6.js,1709351480667,687dbd35e6232ae18638e1d49e68f603acb709d846bcf13e777ba34330576347 +assets/InlineImageComponent-Cq8ywys7.css,1709351480667,17111124cb4f8da124c73d3799ef885f3701c5845681185a0bec58580fb8e5cb +assets/KaTeX_AMS-Regular-BQhdFMY1.woff2,1709351480651,213f5068ac9f0d32d25406206f1b4b1d4bd9eba043da5d6fdad75f690b84d72d +assets/KaTeX_AMS-Regular-DMm9YOAa.woff,1709351480656,3d048b3ec94487840917c5b701de85b56f3c5b8b4cfaa770890ed5754d0a3237 +assets/KaTeX_AMS-Regular-DRggAlZN.ttf,1709351480661,1a93e0d55a17d94d29c40e1e74c4ea223c9b1984949d9f808d3b0895f0470ec5 +assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf,1709351480657,aa539facfbbe0d509e7406cb453984f343362bcc9710e3b4e7af0e916198938b +assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff,1709351480652,dcdde28187f39b42c539e562a29449045f583363b3d8f59c5e80e2ab3306a994 +assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2,1709351480649,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39 +assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff,1709351480657,de72550f816b7aaf05733d796a9cd80d3fa75ac3e20d0c8270e5da150090afcd +assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2,1709351480652,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8 +assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf,1709351480661,8ae0a434dd97912a5b4212e0d645e3f50c4037179548f182196e89d6685a4f41 +assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf,1709351480661,b897bdbaa5b2bd809b3cb5f8b58477f4d34ffec7da2f13dd0fcf36e6dd77849d +assets/KaTeX_Fraktur-Bold-BsDP51OF.woff,1709351480656,f55a188bc351f752febbb50bdb2768bd5a1cc664c43014e318c765769fac66bd +assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2,1709351480651,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd +assets/KaTeX_Fraktur-Regular-CB_wures.ttf,1709351480661,aa6b5105ac99633047ddc50e1028fd6faf3c72a1609fa9077b4ae771082fbbfe +assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2,1709351480651,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013 +assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff,1709351480656,e74ef2d20dc73cb68c97fc2f6dfca344b2c8deb49eb6ec4f6e1fe54bdd6668b7 +assets/KaTeX_Main-Bold-Cx986IdX.woff2,1709351480651,e38b3cc40a6433adbc85cc5d07d5ad9c55528a1bb5e71419c9fd78c3983aadfd +assets/KaTeX_Main-Bold-Jm3AIy58.woff,1709351480656,39d43d83ed398afe7d71abee5e2ad090c2bb0f9eb6b6339d006dd2c42ae78fdd +assets/KaTeX_Main-Bold-waoOVXN0.ttf,1709351480661,3dc1e327211f011faf26ee99abdd9ab376b03144d7978462022b00ab15825dab +assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2,1709351480651,9af6829a796f56e31afa49f5e0efdd4649f1e80cfe35bcf19ef065aaa8fae9f6 +assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf,1709351480662,ca92218418609bc1373be5633de3b940f5797c69ffc44e96c5826e7a870c9a8a +assets/KaTeX_Main-BoldItalic-SpSLRI95.woff,1709351480657,6c815b515b4d929e288017dd2ecf6f1fe337a256148160e05c4098bc4dfa7742 +assets/KaTeX_Main-Italic-3WenGoN9.ttf,1709351480662,2df16b36c649a5bc280a3954487fa70fb24233b2f100e5d95feac9bcd8f5fed9 +assets/KaTeX_Main-Italic-BMLOBm91.woff,1709351480657,d527e1952a9fa6aa8015df9a03f7b641e0113350d620295b757a3f795f037988 +assets/KaTeX_Main-Italic-NWA7e6Wa.woff2,1709351480651,389e6652f22c04bc64135ab613340af96ff88fd12f709c0bff9c7b60d587bc74 +assets/KaTeX_Main-Regular-B22Nviop.woff2,1709351480652,e8271b72b575e15838ebcb47303929723034292f66f32a0e9516952a6608f5f2 +assets/KaTeX_Main-Regular-Dr94JaBh.woff,1709351480657,e1c20ab685f5d104019298551db13977d9fb39ec996f23c38ba76d397472df41 +assets/KaTeX_Main-Regular-ypZvNtVU.ttf,1709351480662,6a9b352cd096b45c66182ce95265748bc9cda8e07fe5d012d20f22310aba20b0 +assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf,1709351480662,12943aa14861fe181b47ca81398cfb1a80e34b0cac92badb8d2d72c98f75b445 +assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2,1709351480652,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2 +assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff,1709351480657,55068b8ee0a45d97be144f46954199291df07a326887a2e623e8b79fecec6fa9 +assets/KaTeX_Math-Italic-DA0__PXp.woff,1709351480657,f6e7afa9e47274f5cabc40a7724df5b38209928a3e3eb0e60f7160eab0adbfb9 +assets/KaTeX_Math-Italic-flOr_0UB.ttf,1709351480662,50e250538a6fcd5763e6d77f4a76d15b92fc77dd5f32e77b4fb49ecc99860648 +assets/KaTeX_Math-Italic-t53AETM-.woff2,1709351480652,e4c73ea6c0d7aa81faf251e090e27d7fce1d5d0f4edc1f4ddddd5b1655af1ec0 +assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf,1709351480662,f74211ce4c80bf0054b8c8ce928dfc8519cb5d004c26c7413759d911fdf6f84c +assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2,1709351480652,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81 +assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff,1709351480657,b9eb1c7155e853e1b9c725ee1b74a18fde683331e366395231e573884a89f39d +assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2,1709351480652,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae +assets/KaTeX_SansSerif-Italic-DN2j7dab.woff,1709351480657,75eb7b0871ab678bd685cab5c734ffc6094ec82ebed1521fe27b7f2a29e5135f +assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf,1709351480662,5b58ce41c31297e642ecc9da3e2e87f71c164ef0abc1e95102a8fd0f657f858a +assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf,1709351480662,b7cd3c2ee97bdced3115bc917409f9e4b77b54c0d270858d05ad84f7d01a2787 +assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff,1709351480657,1f4bb4ab53209fc2119632b390b7cb039055e2aed96782b64423d31a08920da3 +assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2,1709351480652,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b +assets/KaTeX_Script-Regular-C5JkGWo-.ttf,1709351480662,bf19a97dcf73e2739b4edde00c5fe128082aadb6c3c2c0a43cad6a518faee5e3 +assets/KaTeX_Script-Regular-D3wIWfF6.woff2,1709351480652,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890 +assets/KaTeX_Script-Regular-D5yQViql.woff,1709351480657,70522f23e790c0f429fe25d3a03f806af7d59d3b6ee95ea7e62e16091d8adb71 +assets/KaTeX_Size1-Regular-C195tn64.woff,1709351480657,6fc5f90ad636ea10ac68d4f650a5fb58ce43af24a4439bacd7e98d5da1e0d46c +assets/KaTeX_Size1-Regular-Dbsnue_I.ttf,1709351480662,a0c9b437a592994578d005e666e275b56c892fca1c3a21b451e6cee19c5ffb44 +assets/KaTeX_Size1-Regular-mCD8mA8B.woff2,1709351480652,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48 +assets/KaTeX_Size2-Regular-B7gKUWhC.ttf,1709351480662,70c2cb5dd719ab96f42b69121a76b6f955ec898ecd356d2a44a812db400f8bc3 +assets/KaTeX_Size2-Regular-Dy4dx90m.woff2,1709351480652,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2 +assets/KaTeX_Size2-Regular-oD1tc_U0.woff,1709351480657,1589983b75429fab92bb3f578bb13e5a90e368c07031f059ea1e948b2f9b07aa +assets/KaTeX_Size3-Regular-CTq5MqoE.woff,1709351480657,5beb4c17ed9ba9f4614b452de25dd1b20a0cb76c08faa5450a08be3958eac3be +assets/KaTeX_Size3-Regular-DgpXs0kz.ttf,1709351480662,6b7585f1201f6c8b1d3d018bb1a76d0140156c5942a748f97644f90b06f3aa26 +assets/KaTeX_Size4-Regular-BF-4gkZK.woff,1709351480657,a78d8097dae42b77417858ffc2f79912397cb4d27fe4510b6fbd755a5a79d0ff +assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2,1709351480652,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8 +assets/KaTeX_Size4-Regular-DWFBv043.ttf,1709351480662,684166ed1dcd75c1e61123d2dad4096cc400f3e84ebee225d76c3fad2189a28e +assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff,1709351480658,1c96dd20fa943d9219857c532a496e344eb1b9f76a85a19ee58db75f3fd30a3b +assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2,1709351480652,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2 +assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf,1709351480662,42cbc125c20e9b06cb9db0b229794ea4d7fd90a0bc89404e4b472f3fe10ee554 +assets/LexicalCollaborationPlugin-DnWlbWMU.js,1709351480667,f9da128e66f2ab071ace4b06e93191f94bcaa8fe5c1c75fbcf45d3609ae10513 +assets/LexicalNestedComposer-Bk1SiBvW.js,1709351480667,0b73bc58ac59d6dbf779fdb1dc281e64276e516a9af3ccbaee01d5bf254da7ad +assets/parser-babel-DNX2Yr3a.js,1709351480667,fa3b50d0466f3ee9a9fe4af6cf3df1fcb0f8d7eeae3511c9168889aa470703b7 +assets/parser-html-CRACADy3.js,1709351480667,35734d6aae3d1c1d7c845158dc5016bd9a37c7d259cd01d5aae0a54e2a332d79 +assets/parser-markdown-Cz-hLs1-.js,1709351480667,7787ae812feedd152550c3c9d6f745e1bf2eb61becb129f4c7f07f3fdae66f1e +assets/parser-postcss-CB6OdXAp.js,1709351480667,c64d480e35fb772f4427d8048b7ee2649026b57903b22d303474d005c4a0bd17 +assets/PollComponent-BVS-UrBy.css,1709351480667,c7302ec1168c832f2d9206e19ac9e78bdcf60335c11b0ed0b919b638f8c63c50 +assets/PollComponent-CQQVx17q.js,1709351480667,e2ac5bed089040be379e0d7c64478edc6a6b9bb23fa94be6a4dc29e1fb97b7d9 +assets/standalone-CsLjc85H.js,1709351480668,640b138e618092d09150ea6d24b4974cc2169947b6304bff395dec7c07f968ba +assets/StickyComponent-BbsrOWz8.css,1709351480667,52f8d72f1580cc3c5c1b7239ca4aa5fda2f4ed2d3e6529ff2a2f0e92a3f763e4 +assets/StickyComponent-uDrC7VWQ.js,1709351480667,6a951d390f58cb570bcfc947fe1605e64dde512094e8482cb57ebf44296d9c16 avatars/Alligator.png,1704228970512,9b1c03ae9e3bc4fd03350af79de9d7d16ca0721e1adec2945adeb9cdc9169feb avatars/Anteater.png,1704228970512,e77ac73bae66e3c25eba535bbf56d2e25db5dfd710b087b7a7059e7d8e939066 avatars/Armadillo.png,1704228970512,e2ae0811e8085cd5f71afbcb3b958604248cdbbc5d4dbd7d5fa9170046290667 avatars/Auroch.png,1704228970512,c3624f8adb516ce082718898377808d7402101ca1fa416e2abd1c54f533f47fe -yellow-flower.3583ae9f.jpg,1708376983911,f2e19b4632a310b7c2935ea7af93f98e6b41af9932036c711013f3c188655087 -yellow-flower.4b079738.jpg,1708378196974,f2e19b4632a310b7c2935ea7af93f98e6b41af9932036c711013f3c188655087 avatars/Axolotl.png,1704228970513,e034c944de1c622fd5fee1e48eab84dbdeb8623f23f4c9752e8bedb56ccef02a -youtube.e26fe0e3.js.map,1708376983768,eb31b8cb15e7c56c09a2c81eaa2fc321e43b013302c6724cd3915971af80b443 avatars/Badger.png,1704228970513,8b0bb5e0b0dc70d679dc3a9f6121b6e9b585b2be08733285c61ad2deaec754e1 -yellow-flower.82702228.jpg,1708393363452,f2e19b4632a310b7c2935ea7af93f98e6b41af9932036c711013f3c188655087 avatars/Bat.png,1704228970514,fd784c25353a2e60d0bba08328203e46ba1c40d2424b17da47c1b0715d8a2b0d -yellow-flower.jpg,1707172623754,f2e19b4632a310b7c2935ea7af93f98e6b41af9932036c711013f3c188655087 avatars/Beaver.png,1704228970514,c09f1a1f427f640b907202cecbdee1d29d73974391c0fa7e7aa2c0d5611510eb avatars/Buffalo.png,1704228970514,2ae9e1d607ada441f20e58671c15cc4de43bfe4ba5eb6e4e5cca11c2b2e8e894 avatars/Camel.png,1704228970514,3474d921a773e725ae4a61f02fea40292acbb63fa00a45f2a5e7d65f9b29e934 @@ -791,7 +134,6 @@ avatars/Manatee.png,1704228970526,ac8b1a691e9b73428055cd0a00dd406e4f3d0a18a538d2 avatars/Mink.png,1704228970526,bbe1e834af6a139b19bf2afc13bc989c6fafc8de814a914fe9e93a96505a087f avatars/Monkey.png,1704228970526,bc526fa08b3b2160a9fe9849a64b480ba459e6c202c7dab37b539cd15c0d9df1 avatars/Moose.png,1704228970526,e247607874bccc3fc187e4c05e77f6d9904b1a528e76128909c3f1ab50f4b301 -standalone.abc8afdc.js,1708393363995,a4507cb1fb2ba41b172980275a9c9b683f7decd06d0544661434da027670c09e avatars/Narwhal.png,1704228970527,87af110132c2a343ed87eb15b010fbb5bd8f37e3737b787e4f79180584a08eeb avatars/Nyan Cat.png,1704228970527,38eece6dfab67b8fbdd9a75bfcd7c73aa3f360355973c202288edba8b4a3463e avatars/Orangutan.png,1704228970528,e63521a59097b4809834a7f0ff655821adea875bc59eb4ff06a678fc2f01c074 @@ -852,16 +194,16 @@ icons/font-family.svg,1707172623730,9a0e64cc1df5b749f44966feb28196b3ea7459a90089 icons/gear.svg,1707172623730,13a412396765c8aa896daea4bc979e7ec4eaf2b9d2e0590b83ccd15bca2f7893 icons/horizontal-rule.svg,1707172623730,0f3d6c55c1929c445629c01e4b9b05a0b4204992367084e5fa330c1592b34e34 icons/indent.svg,1707172623738,05c56c41123df3a6ce9361d3f1087dfa19cb9c19d8cc1c066d3b69ad3abb5a65 -icons/journal-text.svg,1707172623738,8b385afd13c848329156ff7b36168dd6d8ec9a887ecfd93f0e6983febd603549 icons/journal-code.svg,1707172623738,35b2781aebfa447d964384c46a5bf859b2eb184768ce73b8dbaa2e7318c0420c +icons/journal-text.svg,1707172623738,8b385afd13c848329156ff7b36168dd6d8ec9a887ecfd93f0e6983febd603549 icons/justify.svg,1707172623738,19c338a857a38c7751c246dc0e1dcee766726bb18080a09734baa80d5abf21e2 -icons/link.svg,1707172623739,39e71ff66150e94d01bb29f1315ff04d22df16ea347af9a68b20f48c7947999a icons/LICENSE.md,1707172623729,665cf6ccf9e057795abb138bed60b93f64ab885d7c5fd68c5d6d516e8551be09 +icons/link.svg,1707172623739,39e71ff66150e94d01bb29f1315ff04d22df16ea347af9a68b20f48c7947999a icons/list-ol.svg,1707172623739,f6502f6bf0fdcbbbb888b9d191cb306e74191c09441c9f66ce69c75ac6b47b71 icons/list-ul.svg,1707172623739,95b7330012388bd90b5c9e61c2833fd97be079ed3fbcad8ad216c9afc0c90573 icons/lock-fill.svg,1707172623739,0be409e568c86c499da1b6a124b9da5e775710d0691804ebf30dfc8579425b2b -icons/markdown.svg,1707172623739,3181abe900bbfc0da13fa2935c1f3744df8d290db44155d508c1fd050bcc254f icons/lock.svg,1707172623739,5561efb243123eaf9e0009fb82b927baeaee114fa6807f583039b30d96f045fa +icons/markdown.svg,1707172623739,3181abe900bbfc0da13fa2935c1f3744df8d290db44155d508c1fd050bcc254f icons/mic.svg,1707172623739,f0a653cfdb484e2974fd6a17af71144a4aec0ba2abae873eecab3877c150d088 icons/minus-sign.svg,1707172623739,0fef118656c5ebfb69b41387a3d041c113096f3d59a8dc7b94305b0f42fccaeb icons/outdent.svg,1707172623739,79091c19cb581e6619a44b4d3216dd04888dd60041aa0d0bad0d14204ce0909b @@ -879,7 +221,6 @@ icons/scissors.svg,1707172623739,e1efc73c9eb00ab98c0e84a233f0983c0388bef44716cfe icons/send.svg,1707172623739,563082202c7660f3e95504716a3b7831a75eef3ca3bde5ea8ce68bb6e74ebd2a icons/square-check.svg,1707172623739,f7131e547a8f5e8210dd1ef6c4a89ef58756c259a0e1046e2640d5409e0681ee icons/sticky.svg,1707172623739,35dc7522dacf22aec9edeae9d49d83c97ecd6ad6d77d67d5a93bbb73e9eae603 -standalone.abc8afdc.js.map,1708393364011,dd1bf69e3bb2889b6fe241906b61b41cff9431142cf5d5dc981b4a8559749eb4 icons/success-alt.svg,1707172623739,df89aa79a4c9f0d930ef6e347f4399394963318c79935af0919a295f3b1f96a0 icons/success.svg,1707172623739,be1d0d52bf50e37bd5168017d6cc484e7de218aefbcf17ba32eebd0ce229372c icons/table.svg,1707172623746,02efd6a081bd08570dd4ad415fb2c157db1668652012f2e47a789c2fff73ed95 @@ -906,15 +247,3 @@ icons/upload.svg,1707172623748,bf0ec0f20f72b8ef824cc3d7c0afd4b6965b042f4573fd8db icons/user.svg,1707172623748,b24f06a3c44f2580ebd0ee86acc24a2d54bdd309c0a8d828db67246fd4a0ab09 icons/youtube.svg,1707172623748,ae5ae6b7f87c8a1f5dadca0b544c7807162802a23b6dbc6bfffd9f3f09f4793d image/LICENSE.md,1707172623748,8454fee5c409a6d6d3e8989040ce8422b5e2eae5351172b535c1afe0de8a07b4 -standalone.6b038acc.js.map,1708394427859,c3ca6d18747a4aca15e222effa2c81d9841f1a103af03a2e1b6ba59794949aab -standalone.8727f49b.js.map,1708394427856,7a9c546ca0c0aca45850e8586593ce6f11fca120a3cca150bf4b9c8086ae9ec1 -ExcalidrawComponent.2a05f42c.js.map,1708394427860,322c3607f8fe2cafd76ff1be21fea2d011dbef80d5518bbfe38f16608a7c548d -ExcalidrawComponent.c7bec807.js.map,1708394427859,abf3e787e6119b1bbc7a33046530730ccb81d4714c7070aa4765d4e82a81f5c6 -index.2d3ace14.js,1708393363998,0604ad142d25ff33a2bbc53f8357eb240e9afac6a9a284e9ede3a05761b5f612 -ExcalidrawComponent.36afeab1.js,1708393363999,100c9aa575d6008efef2e5fd4cb57f65ca87d03301c775a90fda8d2f3f287164 -ExcalidrawComponent.36afeab1.js.map,1708393364050,da0bd231b51c70735260398bff03951cc727c33fa469046d4965f963eb08241c -index.2d3ace14.js.map,1708393364051,bb40dd2893a41254bca91a68a98b878ea0970e930061e592a15813e52dcddf13 -index.a0d3888d.js.map,1708394427861,d9e86de91066460a8b15d855c4146133aa9722c3a6784bb93a7b61a50c0e0e6b -index.67ddba2f.js.map,1708394759885,95d3e35b6dbf1040ecd63680cdfdacfe2e48322e2ccb7e7f5f72a5d9f31b910a -index.f2b5d7ac.js.map,1708394427864,76c821f8222f4b5784194e4c98042514b23db21d21cb2bc8d650ab5154b60727 -index.c74b3234.js.map,1708394759885,55a3e83042936a040d0b2383526fe8ce4a8a49826f3532ac1204a4c60c21e35a diff --git a/.gitignore b/.gitignore index 2610592..76add87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ node_modules -.parcel-cache dist \ No newline at end of file diff --git a/.parcelrc b/.parcelrc deleted file mode 100644 index d2977a9..0000000 --- a/.parcelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "@parcel/config-default", - "reporters": ["...", "parcel-reporter-static-files-copy"] -} \ No newline at end of file diff --git a/.postcssrc b/.postcssrc deleted file mode 100644 index d42c370..0000000 --- a/.postcssrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "plugins": { - "tailwindcss": {} - } -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..500b01e --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Chrome", + "port": 9222, + "request": "attach", + "type": "chrome", + "webRoot": "${workspaceFolder}" + }, + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:5173/create_game", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..54b7aa0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Martin Staadecker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/firestore.rules b/firestore.rules index 43141d1..dbbf11f 100644 --- a/firestore.rules +++ b/firestore.rules @@ -4,7 +4,7 @@ service cloud.firestore { match /databases/{database}/documents { allow read, write: if false; match /games/{gameId} { - allow read: if true; + allow read,write: if true; // Remove write permission for logged out users } match /games/{gameId}/users/{userId=**} { allow read, write: if true; diff --git a/index.html b/index.html new file mode 100644 index 0000000..881d3f8 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Pop UofT + + +
+ + + diff --git a/package.json b/package.json index 51868b2..65de637 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,21 @@ { "name": "pop-uoft", - "version": "1.0.0", + "version": "0.0.0", "repository": "https://github.com/staadecker/pop-uoft", "author": "Martin Staadecker", "license": "MIT", "private": true, - "source": "src/index.html", + "type": "module", "browserslist": "defaults", "scripts": { - "start": "parcel", - "build": "parcel build", + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview", "deploy": "yarn build && firebase deploy" }, "dependencies": { + "@cassiozen/usestatemachine": "^1.0.1", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", "@excalidraw/excalidraw": "^0.17.3", @@ -32,7 +35,6 @@ "@material-ui/core": "^4.12.4", "@mui/lab": "^5.0.0-alpha.166", "@mui/material": "^5.15.11", - "@xstate/react": "^4.1.0", "firebase": "^10.8.0", "katex": "^0.16.9", "lexical": "^0.13.1", @@ -43,22 +45,25 @@ "react-dom": "^18.2.0", "react-error-boundary": "^4.0.12", "react-router-dom": "^6.22.1", - "xstate": "^5.8.0", "yjs": "^13.6.12" }, "devDependencies": { - "@parcel/optimizer-data-url": "2.11.0", - "@parcel/transformer-inline-string": "2.11.0", - "@parcel/transformer-svg-react": "^2.11.0", "@types/react": "^18.2.56", "@types/react-dom": "^18.2.19", "@types/react-router-dom": "^5.3.3", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vitejs/plugin-react-swc": "^3.5.0", + "autoprefixer": "^10.4.18", "buffer": "^5.5.0||^6.0.0", - "parcel": "^2.11.0", - "parcel-reporter-static-files-copy": "^1.5.3", + "eslint": "^8.56.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", "postcss": "^8.4.35", "process": "^0.11.10", - "tailwindcss": "^3.4.1" + "tailwindcss": "^3.4.1", + "typescript": "^5.2.2", + "vite": "^5.1.4" }, "engines": { "npm": "please-use-yarn" diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/images/avatars/Alligator.png b/public/avatars/Alligator.png similarity index 100% rename from images/avatars/Alligator.png rename to public/avatars/Alligator.png diff --git a/images/avatars/Anteater.png b/public/avatars/Anteater.png similarity index 100% rename from images/avatars/Anteater.png rename to public/avatars/Anteater.png diff --git a/images/avatars/Armadillo.png b/public/avatars/Armadillo.png similarity index 100% rename from images/avatars/Armadillo.png rename to public/avatars/Armadillo.png diff --git a/images/avatars/Auroch.png b/public/avatars/Auroch.png similarity index 100% rename from images/avatars/Auroch.png rename to public/avatars/Auroch.png diff --git a/images/avatars/Axolotl.png b/public/avatars/Axolotl.png similarity index 100% rename from images/avatars/Axolotl.png rename to public/avatars/Axolotl.png diff --git a/images/avatars/Badger.png b/public/avatars/Badger.png similarity index 100% rename from images/avatars/Badger.png rename to public/avatars/Badger.png diff --git a/images/avatars/Bat.png b/public/avatars/Bat.png similarity index 100% rename from images/avatars/Bat.png rename to public/avatars/Bat.png diff --git a/images/avatars/Beaver.png b/public/avatars/Beaver.png similarity index 100% rename from images/avatars/Beaver.png rename to public/avatars/Beaver.png diff --git a/images/avatars/Buffalo.png b/public/avatars/Buffalo.png similarity index 100% rename from images/avatars/Buffalo.png rename to public/avatars/Buffalo.png diff --git a/images/avatars/Camel.png b/public/avatars/Camel.png similarity index 100% rename from images/avatars/Camel.png rename to public/avatars/Camel.png diff --git a/images/avatars/Capybara.png b/public/avatars/Capybara.png similarity index 100% rename from images/avatars/Capybara.png rename to public/avatars/Capybara.png diff --git a/images/avatars/Chameleon.png b/public/avatars/Chameleon.png similarity index 100% rename from images/avatars/Chameleon.png rename to public/avatars/Chameleon.png diff --git a/images/avatars/Cheetah.png b/public/avatars/Cheetah.png similarity index 100% rename from images/avatars/Cheetah.png rename to public/avatars/Cheetah.png diff --git a/images/avatars/Chinchilla.png b/public/avatars/Chinchilla.png similarity index 100% rename from images/avatars/Chinchilla.png rename to public/avatars/Chinchilla.png diff --git a/images/avatars/Chipmunk.png b/public/avatars/Chipmunk.png similarity index 100% rename from images/avatars/Chipmunk.png rename to public/avatars/Chipmunk.png diff --git a/images/avatars/Chupacabra.png b/public/avatars/Chupacabra.png similarity index 100% rename from images/avatars/Chupacabra.png rename to public/avatars/Chupacabra.png diff --git a/images/avatars/Cormorant.png b/public/avatars/Cormorant.png similarity index 100% rename from images/avatars/Cormorant.png rename to public/avatars/Cormorant.png diff --git a/images/avatars/Coyote.png b/public/avatars/Coyote.png similarity index 100% rename from images/avatars/Coyote.png rename to public/avatars/Coyote.png diff --git a/images/avatars/Crow.png b/public/avatars/Crow.png similarity index 100% rename from images/avatars/Crow.png rename to public/avatars/Crow.png diff --git a/images/avatars/Dingo.png b/public/avatars/Dingo.png similarity index 100% rename from images/avatars/Dingo.png rename to public/avatars/Dingo.png diff --git a/images/avatars/Dinosaur.png b/public/avatars/Dinosaur.png similarity index 100% rename from images/avatars/Dinosaur.png rename to public/avatars/Dinosaur.png diff --git a/images/avatars/Dolphin.png b/public/avatars/Dolphin.png similarity index 100% rename from images/avatars/Dolphin.png rename to public/avatars/Dolphin.png diff --git a/images/avatars/Duck.png b/public/avatars/Duck.png similarity index 100% rename from images/avatars/Duck.png rename to public/avatars/Duck.png diff --git a/images/avatars/Elephant.png b/public/avatars/Elephant.png similarity index 100% rename from images/avatars/Elephant.png rename to public/avatars/Elephant.png diff --git a/images/avatars/Ferret.png b/public/avatars/Ferret.png similarity index 100% rename from images/avatars/Ferret.png rename to public/avatars/Ferret.png diff --git a/images/avatars/Fox.png b/public/avatars/Fox.png similarity index 100% rename from images/avatars/Fox.png rename to public/avatars/Fox.png diff --git a/images/avatars/Frog.png b/public/avatars/Frog.png similarity index 100% rename from images/avatars/Frog.png rename to public/avatars/Frog.png diff --git a/images/avatars/Giraffe.png b/public/avatars/Giraffe.png similarity index 100% rename from images/avatars/Giraffe.png rename to public/avatars/Giraffe.png diff --git a/images/avatars/Gopher.png b/public/avatars/Gopher.png similarity index 100% rename from images/avatars/Gopher.png rename to public/avatars/Gopher.png diff --git a/images/avatars/Grizzly.png b/public/avatars/Grizzly.png similarity index 100% rename from images/avatars/Grizzly.png rename to public/avatars/Grizzly.png diff --git a/images/avatars/Hedgehog.png b/public/avatars/Hedgehog.png similarity index 100% rename from images/avatars/Hedgehog.png rename to public/avatars/Hedgehog.png diff --git a/images/avatars/Hippo.png b/public/avatars/Hippo.png similarity index 100% rename from images/avatars/Hippo.png rename to public/avatars/Hippo.png diff --git a/images/avatars/Hyena.png b/public/avatars/Hyena.png similarity index 100% rename from images/avatars/Hyena.png rename to public/avatars/Hyena.png diff --git a/images/avatars/Ibex.png b/public/avatars/Ibex.png similarity index 100% rename from images/avatars/Ibex.png rename to public/avatars/Ibex.png diff --git a/images/avatars/Ifrit.png b/public/avatars/Ifrit.png similarity index 100% rename from images/avatars/Ifrit.png rename to public/avatars/Ifrit.png diff --git a/images/avatars/Iguana.png b/public/avatars/Iguana.png similarity index 100% rename from images/avatars/Iguana.png rename to public/avatars/Iguana.png diff --git a/images/avatars/Jackal.png b/public/avatars/Jackal.png similarity index 100% rename from images/avatars/Jackal.png rename to public/avatars/Jackal.png diff --git a/images/avatars/Kangaroo.png b/public/avatars/Kangaroo.png similarity index 100% rename from images/avatars/Kangaroo.png rename to public/avatars/Kangaroo.png diff --git a/images/avatars/Koala.png b/public/avatars/Koala.png similarity index 100% rename from images/avatars/Koala.png rename to public/avatars/Koala.png diff --git a/images/avatars/Kraken.png b/public/avatars/Kraken.png similarity index 100% rename from images/avatars/Kraken.png rename to public/avatars/Kraken.png diff --git a/images/avatars/Lemur.png b/public/avatars/Lemur.png similarity index 100% rename from images/avatars/Lemur.png rename to public/avatars/Lemur.png diff --git a/images/avatars/Leopard.png b/public/avatars/Leopard.png similarity index 100% rename from images/avatars/Leopard.png rename to public/avatars/Leopard.png diff --git a/images/avatars/Liger.png b/public/avatars/Liger.png similarity index 100% rename from images/avatars/Liger.png rename to public/avatars/Liger.png diff --git a/images/avatars/Llama.png b/public/avatars/Llama.png similarity index 100% rename from images/avatars/Llama.png rename to public/avatars/Llama.png diff --git a/images/avatars/Manatee.png b/public/avatars/Manatee.png similarity index 100% rename from images/avatars/Manatee.png rename to public/avatars/Manatee.png diff --git a/images/avatars/Mink.png b/public/avatars/Mink.png similarity index 100% rename from images/avatars/Mink.png rename to public/avatars/Mink.png diff --git a/images/avatars/Monkey.png b/public/avatars/Monkey.png similarity index 100% rename from images/avatars/Monkey.png rename to public/avatars/Monkey.png diff --git a/images/avatars/Moose.png b/public/avatars/Moose.png similarity index 100% rename from images/avatars/Moose.png rename to public/avatars/Moose.png diff --git a/images/avatars/Narwhal.png b/public/avatars/Narwhal.png similarity index 100% rename from images/avatars/Narwhal.png rename to public/avatars/Narwhal.png diff --git a/images/avatars/Nyan Cat.png b/public/avatars/Nyan Cat.png similarity index 100% rename from images/avatars/Nyan Cat.png rename to public/avatars/Nyan Cat.png diff --git a/images/avatars/Orangutan.png b/public/avatars/Orangutan.png similarity index 100% rename from images/avatars/Orangutan.png rename to public/avatars/Orangutan.png diff --git a/images/avatars/Otter.png b/public/avatars/Otter.png similarity index 100% rename from images/avatars/Otter.png rename to public/avatars/Otter.png diff --git a/images/avatars/Panda.png b/public/avatars/Panda.png similarity index 100% rename from images/avatars/Panda.png rename to public/avatars/Panda.png diff --git a/images/avatars/Penguin.png b/public/avatars/Penguin.png similarity index 100% rename from images/avatars/Penguin.png rename to public/avatars/Penguin.png diff --git a/images/avatars/Platypus.png b/public/avatars/Platypus.png similarity index 100% rename from images/avatars/Platypus.png rename to public/avatars/Platypus.png diff --git a/images/avatars/Pumpkin.png b/public/avatars/Pumpkin.png similarity index 100% rename from images/avatars/Pumpkin.png rename to public/avatars/Pumpkin.png diff --git a/images/avatars/Python.png b/public/avatars/Python.png similarity index 100% rename from images/avatars/Python.png rename to public/avatars/Python.png diff --git a/images/avatars/Quagga.png b/public/avatars/Quagga.png similarity index 100% rename from images/avatars/Quagga.png rename to public/avatars/Quagga.png diff --git a/images/avatars/Rabbit.png b/public/avatars/Rabbit.png similarity index 100% rename from images/avatars/Rabbit.png rename to public/avatars/Rabbit.png diff --git a/images/avatars/Raccoon.png b/public/avatars/Raccoon.png similarity index 100% rename from images/avatars/Raccoon.png rename to public/avatars/Raccoon.png diff --git a/images/avatars/Rhino.png b/public/avatars/Rhino.png similarity index 100% rename from images/avatars/Rhino.png rename to public/avatars/Rhino.png diff --git a/images/avatars/Sheep.png b/public/avatars/Sheep.png similarity index 100% rename from images/avatars/Sheep.png rename to public/avatars/Sheep.png diff --git a/images/avatars/Shrew.png b/public/avatars/Shrew.png similarity index 100% rename from images/avatars/Shrew.png rename to public/avatars/Shrew.png diff --git a/images/avatars/Skunk.png b/public/avatars/Skunk.png similarity index 100% rename from images/avatars/Skunk.png rename to public/avatars/Skunk.png diff --git a/images/avatars/Squirrel.png b/public/avatars/Squirrel.png similarity index 100% rename from images/avatars/Squirrel.png rename to public/avatars/Squirrel.png diff --git a/images/avatars/Tiger.png b/public/avatars/Tiger.png similarity index 100% rename from images/avatars/Tiger.png rename to public/avatars/Tiger.png diff --git a/images/avatars/Turtle.png b/public/avatars/Turtle.png similarity index 100% rename from images/avatars/Turtle.png rename to public/avatars/Turtle.png diff --git a/images/avatars/Walrus.png b/public/avatars/Walrus.png similarity index 100% rename from images/avatars/Walrus.png rename to public/avatars/Walrus.png diff --git a/images/avatars/Wolf.png b/public/avatars/Wolf.png similarity index 100% rename from images/avatars/Wolf.png rename to public/avatars/Wolf.png diff --git a/images/avatars/Wolverine.png b/public/avatars/Wolverine.png similarity index 100% rename from images/avatars/Wolverine.png rename to public/avatars/Wolverine.png diff --git a/images/avatars/Wombat.png b/public/avatars/Wombat.png similarity index 100% rename from images/avatars/Wombat.png rename to public/avatars/Wombat.png diff --git a/images/cat-typing.gif b/public/cat-typing.gif similarity index 100% rename from images/cat-typing.gif rename to public/cat-typing.gif diff --git a/images/emoji/1F600.png b/public/emoji/1F600.png similarity index 100% rename from images/emoji/1F600.png rename to public/emoji/1F600.png diff --git a/images/emoji/1F641.png b/public/emoji/1F641.png similarity index 100% rename from images/emoji/1F641.png rename to public/emoji/1F641.png diff --git a/images/emoji/1F642.png b/public/emoji/1F642.png similarity index 100% rename from images/emoji/1F642.png rename to public/emoji/1F642.png diff --git a/images/emoji/2764.png b/public/emoji/2764.png similarity index 100% rename from images/emoji/2764.png rename to public/emoji/2764.png diff --git a/images/emoji/LICENSE.md b/public/emoji/LICENSE.md similarity index 100% rename from images/emoji/LICENSE.md rename to public/emoji/LICENSE.md diff --git a/images/icons/3-columns.svg b/public/icons/3-columns.svg similarity index 100% rename from images/icons/3-columns.svg rename to public/icons/3-columns.svg diff --git a/images/icons/LICENSE.md b/public/icons/LICENSE.md similarity index 100% rename from images/icons/LICENSE.md rename to public/icons/LICENSE.md diff --git a/images/icons/add-sign.svg b/public/icons/add-sign.svg similarity index 100% rename from images/icons/add-sign.svg rename to public/icons/add-sign.svg diff --git a/images/icons/arrow-clockwise.svg b/public/icons/arrow-clockwise.svg similarity index 100% rename from images/icons/arrow-clockwise.svg rename to public/icons/arrow-clockwise.svg diff --git a/images/icons/arrow-counterclockwise.svg b/public/icons/arrow-counterclockwise.svg similarity index 100% rename from images/icons/arrow-counterclockwise.svg rename to public/icons/arrow-counterclockwise.svg diff --git a/images/icons/bg-color.svg b/public/icons/bg-color.svg similarity index 100% rename from images/icons/bg-color.svg rename to public/icons/bg-color.svg diff --git a/images/icons/camera.svg b/public/icons/camera.svg similarity index 100% rename from images/icons/camera.svg rename to public/icons/camera.svg diff --git a/images/icons/card-checklist.svg b/public/icons/card-checklist.svg similarity index 100% rename from images/icons/card-checklist.svg rename to public/icons/card-checklist.svg diff --git a/images/icons/caret-right-fill.svg b/public/icons/caret-right-fill.svg similarity index 100% rename from images/icons/caret-right-fill.svg rename to public/icons/caret-right-fill.svg diff --git a/images/icons/chat-left-text.svg b/public/icons/chat-left-text.svg similarity index 100% rename from images/icons/chat-left-text.svg rename to public/icons/chat-left-text.svg diff --git a/images/icons/chat-right-dots.svg b/public/icons/chat-right-dots.svg similarity index 100% rename from images/icons/chat-right-dots.svg rename to public/icons/chat-right-dots.svg diff --git a/images/icons/chat-right-text.svg b/public/icons/chat-right-text.svg similarity index 100% rename from images/icons/chat-right-text.svg rename to public/icons/chat-right-text.svg diff --git a/images/icons/chat-right.svg b/public/icons/chat-right.svg similarity index 100% rename from images/icons/chat-right.svg rename to public/icons/chat-right.svg diff --git a/images/icons/chat-square-quote.svg b/public/icons/chat-square-quote.svg similarity index 100% rename from images/icons/chat-square-quote.svg rename to public/icons/chat-square-quote.svg diff --git a/images/icons/chevron-down.svg b/public/icons/chevron-down.svg similarity index 100% rename from images/icons/chevron-down.svg rename to public/icons/chevron-down.svg diff --git a/images/icons/clipboard.svg b/public/icons/clipboard.svg similarity index 100% rename from images/icons/clipboard.svg rename to public/icons/clipboard.svg diff --git a/images/icons/close.svg b/public/icons/close.svg similarity index 100% rename from images/icons/close.svg rename to public/icons/close.svg diff --git a/images/icons/code.svg b/public/icons/code.svg similarity index 100% rename from images/icons/code.svg rename to public/icons/code.svg diff --git a/images/icons/comments.svg b/public/icons/comments.svg similarity index 100% rename from images/icons/comments.svg rename to public/icons/comments.svg diff --git a/images/icons/copy.svg b/public/icons/copy.svg similarity index 100% rename from images/icons/copy.svg rename to public/icons/copy.svg diff --git a/images/icons/diagram-2.svg b/public/icons/diagram-2.svg similarity index 100% rename from images/icons/diagram-2.svg rename to public/icons/diagram-2.svg diff --git a/images/icons/download.svg b/public/icons/download.svg similarity index 100% rename from images/icons/download.svg rename to public/icons/download.svg diff --git a/images/icons/draggable-block-menu.svg b/public/icons/draggable-block-menu.svg similarity index 100% rename from images/icons/draggable-block-menu.svg rename to public/icons/draggable-block-menu.svg diff --git a/images/icons/dropdown-more.svg b/public/icons/dropdown-more.svg similarity index 100% rename from images/icons/dropdown-more.svg rename to public/icons/dropdown-more.svg diff --git a/images/icons/figma.svg b/public/icons/figma.svg similarity index 100% rename from images/icons/figma.svg rename to public/icons/figma.svg diff --git a/images/icons/file-earmark-text.svg b/public/icons/file-earmark-text.svg similarity index 100% rename from images/icons/file-earmark-text.svg rename to public/icons/file-earmark-text.svg diff --git a/images/icons/file-image.svg b/public/icons/file-image.svg similarity index 100% rename from images/icons/file-image.svg rename to public/icons/file-image.svg diff --git a/images/icons/filetype-gif.svg b/public/icons/filetype-gif.svg similarity index 100% rename from images/icons/filetype-gif.svg rename to public/icons/filetype-gif.svg diff --git a/images/icons/font-color.svg b/public/icons/font-color.svg similarity index 100% rename from images/icons/font-color.svg rename to public/icons/font-color.svg diff --git a/images/icons/font-family.svg b/public/icons/font-family.svg similarity index 100% rename from images/icons/font-family.svg rename to public/icons/font-family.svg diff --git a/images/icons/gear.svg b/public/icons/gear.svg similarity index 100% rename from images/icons/gear.svg rename to public/icons/gear.svg diff --git a/images/icons/horizontal-rule.svg b/public/icons/horizontal-rule.svg similarity index 100% rename from images/icons/horizontal-rule.svg rename to public/icons/horizontal-rule.svg diff --git a/images/icons/indent.svg b/public/icons/indent.svg similarity index 100% rename from images/icons/indent.svg rename to public/icons/indent.svg diff --git a/images/icons/journal-code.svg b/public/icons/journal-code.svg similarity index 100% rename from images/icons/journal-code.svg rename to public/icons/journal-code.svg diff --git a/images/icons/journal-text.svg b/public/icons/journal-text.svg similarity index 100% rename from images/icons/journal-text.svg rename to public/icons/journal-text.svg diff --git a/images/icons/justify.svg b/public/icons/justify.svg similarity index 100% rename from images/icons/justify.svg rename to public/icons/justify.svg diff --git a/images/icons/link.svg b/public/icons/link.svg similarity index 100% rename from images/icons/link.svg rename to public/icons/link.svg diff --git a/images/icons/list-ol.svg b/public/icons/list-ol.svg similarity index 100% rename from images/icons/list-ol.svg rename to public/icons/list-ol.svg diff --git a/images/icons/list-ul.svg b/public/icons/list-ul.svg similarity index 100% rename from images/icons/list-ul.svg rename to public/icons/list-ul.svg diff --git a/images/icons/lock-fill.svg b/public/icons/lock-fill.svg similarity index 100% rename from images/icons/lock-fill.svg rename to public/icons/lock-fill.svg diff --git a/images/icons/lock.svg b/public/icons/lock.svg similarity index 100% rename from images/icons/lock.svg rename to public/icons/lock.svg diff --git a/images/icons/markdown.svg b/public/icons/markdown.svg similarity index 100% rename from images/icons/markdown.svg rename to public/icons/markdown.svg diff --git a/images/icons/mic.svg b/public/icons/mic.svg similarity index 100% rename from images/icons/mic.svg rename to public/icons/mic.svg diff --git a/images/icons/minus-sign.svg b/public/icons/minus-sign.svg similarity index 100% rename from images/icons/minus-sign.svg rename to public/icons/minus-sign.svg diff --git a/images/icons/outdent.svg b/public/icons/outdent.svg similarity index 100% rename from images/icons/outdent.svg rename to public/icons/outdent.svg diff --git a/images/icons/paint-bucket.svg b/public/icons/paint-bucket.svg similarity index 100% rename from images/icons/paint-bucket.svg rename to public/icons/paint-bucket.svg diff --git a/images/icons/palette.svg b/public/icons/palette.svg similarity index 100% rename from images/icons/palette.svg rename to public/icons/palette.svg diff --git a/images/icons/pencil-fill.svg b/public/icons/pencil-fill.svg similarity index 100% rename from images/icons/pencil-fill.svg rename to public/icons/pencil-fill.svg diff --git a/images/icons/play.svg b/public/icons/play.svg similarity index 100% rename from images/icons/play.svg rename to public/icons/play.svg diff --git a/images/icons/plug-fill.svg b/public/icons/plug-fill.svg similarity index 100% rename from images/icons/plug-fill.svg rename to public/icons/plug-fill.svg diff --git a/images/icons/plug.svg b/public/icons/plug.svg similarity index 100% rename from images/icons/plug.svg rename to public/icons/plug.svg diff --git a/images/icons/plus-slash-minus.svg b/public/icons/plus-slash-minus.svg similarity index 100% rename from images/icons/plus-slash-minus.svg rename to public/icons/plus-slash-minus.svg diff --git a/images/icons/plus.svg b/public/icons/plus.svg similarity index 100% rename from images/icons/plus.svg rename to public/icons/plus.svg diff --git a/images/icons/prettier-error.svg b/public/icons/prettier-error.svg similarity index 100% rename from images/icons/prettier-error.svg rename to public/icons/prettier-error.svg diff --git a/images/icons/prettier.svg b/public/icons/prettier.svg similarity index 100% rename from images/icons/prettier.svg rename to public/icons/prettier.svg diff --git a/images/icons/scissors.svg b/public/icons/scissors.svg similarity index 100% rename from images/icons/scissors.svg rename to public/icons/scissors.svg diff --git a/images/icons/send.svg b/public/icons/send.svg similarity index 100% rename from images/icons/send.svg rename to public/icons/send.svg diff --git a/images/icons/square-check.svg b/public/icons/square-check.svg similarity index 100% rename from images/icons/square-check.svg rename to public/icons/square-check.svg diff --git a/images/icons/sticky.svg b/public/icons/sticky.svg similarity index 100% rename from images/icons/sticky.svg rename to public/icons/sticky.svg diff --git a/images/icons/success-alt.svg b/public/icons/success-alt.svg similarity index 100% rename from images/icons/success-alt.svg rename to public/icons/success-alt.svg diff --git a/images/icons/success.svg b/public/icons/success.svg similarity index 100% rename from images/icons/success.svg rename to public/icons/success.svg diff --git a/images/icons/table.svg b/public/icons/table.svg similarity index 100% rename from images/icons/table.svg rename to public/icons/table.svg diff --git a/images/icons/text-center.svg b/public/icons/text-center.svg similarity index 100% rename from images/icons/text-center.svg rename to public/icons/text-center.svg diff --git a/images/icons/text-left.svg b/public/icons/text-left.svg similarity index 100% rename from images/icons/text-left.svg rename to public/icons/text-left.svg diff --git a/images/icons/text-paragraph.svg b/public/icons/text-paragraph.svg similarity index 100% rename from images/icons/text-paragraph.svg rename to public/icons/text-paragraph.svg diff --git a/images/icons/text-right.svg b/public/icons/text-right.svg similarity index 100% rename from images/icons/text-right.svg rename to public/icons/text-right.svg diff --git a/images/icons/trash.svg b/public/icons/trash.svg similarity index 100% rename from images/icons/trash.svg rename to public/icons/trash.svg diff --git a/images/icons/trash3.svg b/public/icons/trash3.svg similarity index 100% rename from images/icons/trash3.svg rename to public/icons/trash3.svg diff --git a/images/icons/tweet.svg b/public/icons/tweet.svg similarity index 100% rename from images/icons/tweet.svg rename to public/icons/tweet.svg diff --git a/images/icons/type-bold.svg b/public/icons/type-bold.svg similarity index 100% rename from images/icons/type-bold.svg rename to public/icons/type-bold.svg diff --git a/images/icons/type-h1.svg b/public/icons/type-h1.svg similarity index 100% rename from images/icons/type-h1.svg rename to public/icons/type-h1.svg diff --git a/images/icons/type-h2.svg b/public/icons/type-h2.svg similarity index 100% rename from images/icons/type-h2.svg rename to public/icons/type-h2.svg diff --git a/images/icons/type-h3.svg b/public/icons/type-h3.svg similarity index 100% rename from images/icons/type-h3.svg rename to public/icons/type-h3.svg diff --git a/images/icons/type-h4.svg b/public/icons/type-h4.svg similarity index 100% rename from images/icons/type-h4.svg rename to public/icons/type-h4.svg diff --git a/images/icons/type-h5.svg b/public/icons/type-h5.svg similarity index 100% rename from images/icons/type-h5.svg rename to public/icons/type-h5.svg diff --git a/images/icons/type-h6.svg b/public/icons/type-h6.svg similarity index 100% rename from images/icons/type-h6.svg rename to public/icons/type-h6.svg diff --git a/images/icons/type-italic.svg b/public/icons/type-italic.svg similarity index 100% rename from images/icons/type-italic.svg rename to public/icons/type-italic.svg diff --git a/images/icons/type-strikethrough.svg b/public/icons/type-strikethrough.svg similarity index 100% rename from images/icons/type-strikethrough.svg rename to public/icons/type-strikethrough.svg diff --git a/images/icons/type-subscript.svg b/public/icons/type-subscript.svg similarity index 100% rename from images/icons/type-subscript.svg rename to public/icons/type-subscript.svg diff --git a/images/icons/type-superscript.svg b/public/icons/type-superscript.svg similarity index 100% rename from images/icons/type-superscript.svg rename to public/icons/type-superscript.svg diff --git a/images/icons/type-underline.svg b/public/icons/type-underline.svg similarity index 100% rename from images/icons/type-underline.svg rename to public/icons/type-underline.svg diff --git a/images/icons/upload.svg b/public/icons/upload.svg similarity index 100% rename from images/icons/upload.svg rename to public/icons/upload.svg diff --git a/images/icons/user.svg b/public/icons/user.svg similarity index 100% rename from images/icons/user.svg rename to public/icons/user.svg diff --git a/images/icons/youtube.svg b/public/icons/youtube.svg similarity index 100% rename from images/icons/youtube.svg rename to public/icons/youtube.svg diff --git a/images/image/LICENSE.md b/public/image/LICENSE.md similarity index 100% rename from images/image/LICENSE.md rename to public/image/LICENSE.md diff --git a/images/landscape.jpg b/public/landscape.jpg similarity index 100% rename from images/landscape.jpg rename to public/landscape.jpg diff --git a/images/logo.svg b/public/logo.svg similarity index 100% rename from images/logo.svg rename to public/logo.svg diff --git a/images/yellow-flower-small.jpg b/public/yellow-flower-small.jpg similarity index 100% rename from images/yellow-flower-small.jpg rename to public/yellow-flower-small.jpg diff --git a/images/yellow-flower.jpg b/public/yellow-flower.jpg similarity index 100% rename from images/yellow-flower.jpg rename to public/yellow-flower.jpg diff --git a/src/components/CheckGameExists.tsx b/src/components/CheckGameExists.tsx deleted file mode 100644 index 073c594..0000000 --- a/src/components/CheckGameExists.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { Status } from "../logic/game_logic"; -import { useGame } from "../logic/GameContext"; - - -export const CheckGameExists = ({ children }) => { - const { status } = useGame(); - if (status === Status.DOES_NOT_EXIST) { - return

Game does not exist

; - } - return children; -}; diff --git a/src/components/EditorContext.tsx b/src/components/EditorContext.tsx deleted file mode 100644 index b6cbae0..0000000 --- a/src/components/EditorContext.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { LexicalComposer } from "@lexical/react/LexicalComposer"; -import { SettingsContext } from "./lexical/context/SettingsContext"; -import PlaygroundNodes from "./lexical/nodes/PlaygroundNodes"; -import { SharedHistoryContext } from "./lexical/context/SharedHistoryContext"; -import { TableContext } from "./lexical/plugins/TablePlugin"; -import { SharedAutocompleteContext } from "./lexical/context/SharedAutocompleteContext"; -import PlaygroundEditorTheme from "./lexical/themes/PlaygroundEditorTheme"; -import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; -import { useEffect } from "react"; -import { useGameDispatch } from "../logic/GameContext"; -import { GameDispatchActionType } from "../logic/game_logic"; - -export function EditorContext({ children }): JSX.Element { - const initialConfig = { - editorState: undefined, - namespace: "Playground", - nodes: [...PlaygroundNodes], - onError: (error: Error) => { - throw error; - }, - theme: PlaygroundEditorTheme, - }; - - return ( - - - - - - {children} - - - - - - ); -} - -export function RegisterEditor({ id, children }) { - const dispatch = useGameDispatch(); - const [editor] = useLexicalComposerContext(); - - useEffect(() => { - dispatch({ type: GameDispatchActionType.ADD_EDITOR, payload: { id, editor } }); - return () => { - dispatch({ type: GameDispatchActionType.REMOVE_EDITOR, payload: id }); - }; - }, [id, editor, dispatch]); - - return children; -} - -export function getEditorState(editor): string { - return JSON.stringify(editor.getEditorState().toJSON()); -} - -export function setEditorState(editor, state: string) { - editor.setEditorState(editor.parseEditorState(JSON.parse(state))); -} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx new file mode 100644 index 0000000..521eb55 --- /dev/null +++ b/src/components/Footer.tsx @@ -0,0 +1,18 @@ +export default function Footer() { + return ( + + ); +} diff --git a/src/components/GameInProgress.tsx b/src/components/GameInProgress.tsx index 0b7496b..b0ebe3c 100644 --- a/src/components/GameInProgress.tsx +++ b/src/components/GameInProgress.tsx @@ -1,98 +1,50 @@ import "./index.css"; import Editor from "./lexical/Editor"; -import { useEffect, useState } from "react"; -import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; -import { Work } from "../logic/game_logic"; -import { loadExistingWork } from "../logic/game_logic"; -import { saveProgress } from "../logic/game_logic"; -import { - EditorContext, - RegisterEditor, - getEditorState, - setEditorState, -} from "./EditorContext"; -import { useFirebase } from "../logic/FirebaseContext"; -import { useGame } from "../logic/GameContext"; + +import { EditorContext, RegisterEditor } from "../game_logic/EditorContext"; +import { useGame } from "../game_logic/GameContext"; import { GameToolbar } from "./GameToolbar"; +import { UserCard } from "./UserCard"; +import { Works } from "../firebase/db_queries"; + +export const PROFS_KEY = "__prof"; export function GameWrapper() { - const { db, currentUser } = useFirebase(); - const { gameId, meta, users } = useGame(); - const [work, setWork] = useState(undefined); + const { state } = useGame(); - useEffect(() => { - const fetch = async () => { - const work = { - _: { - state: meta.prompt, - name: "Professor's question", - }, - ...(await loadExistingWork(db, gameId, currentUser.uid, users)), - }; - if (!(currentUser.uid in work)) - work[currentUser.uid] = { state: undefined, name: "Your answer" }; - setWork(work); - }; - fetch(); - }, [db, currentUser, gameId, users]); + const works: Works = ( + [{ userId: PROFS_KEY, state: state.context.meta!.question }] as Works + ).concat(state.context.priorWorks); return (
- {work && - Object.entries(work).map(([userId, { state, name }]) => { - return ( -
-

{name}

- - - - - -
- ); - })} + {works.map(({ userId, state: editorState }) => { + return ( +
+ + + + + + +
+ ); + })}
); } -function EditorBlock({ - startingState, - editable, -}: { - startingState: string | undefined; - editable: boolean; -}) { - const { db, currentUser } = useFirebase(); - const { gameId } = useGame(); - const [editor] = useLexicalComposerContext(); - - const saveGame = () => { - saveProgress( - db, - gameId, - currentUser.uid, - currentUser.uid, - getEditorState(editor) - ); - }; - - useEffect(() => { - if (startingState) { - setEditorState(editor, startingState); - } - }, [editor, startingState]); +const EditorLabel = ({ userId }: { userId: string }) => { + if (userId === PROFS_KEY) return

Question for students:

; - return ( - <> - - {editable && } - - ); -} + return ; +}; diff --git a/src/components/GameStatus.tsx b/src/components/GameStatus.tsx index 075918f..cdb440c 100644 --- a/src/components/GameStatus.tsx +++ b/src/components/GameStatus.tsx @@ -1,43 +1,82 @@ import { useEffect, useState } from "react"; -import { useGame } from "../logic/GameContext"; -import { Status, getNextEventTime } from "../logic/game_logic"; -import WaitGameLoad from "./WaitGameLoad"; +import { Context, useGame } from "../game_logic/GameContext"; +import { getExpectedState } from "../game_logic/state_machine"; +import Loading from "./Loading"; -function GameStatusUnwrapper() { - const { meta, status } = useGame(); +const getTimeInfo = (context: Context): string => { + const { state, timeToChange } = getExpectedState(context); - const [timeInfo, setTimeInfo] = useState(getNextEventTime(meta)); + let prefix = ""; + switch (state) { + case "waiting": + prefix = "Game starts in %s"; + break; + case "in_progress": + prefix = "Swap in %s"; + break; + case "saving_work": + prefix = "Saving your work %s"; + break; + case "finished": + return "Game ended"; + default: + throw new Error("Don't know how to handle status: " + state); + } + + const minutes = Math.floor(timeToChange! / 60000); + const seconds = ((timeToChange! % 60000) / 1000).toFixed(0).padStart(2, "0"); + return prefix.replace("%s", `${minutes}:${seconds}`); +}; + +function GameStatusText() { + const { state } = useGame(); + + const [timeInfo, setTimeInfo] = useState(getTimeInfo(state.context)); useEffect(() => { + if ( + !["waiting", "in_progress", "loaded", "wait_for_save"].includes( + state.value + ) + ) { + setTimeInfo(getTimeInfo(state.context)); + console.log("Avoiding interval because state is " + state.value); + return; + } + const timer = setInterval(() => { - setTimeInfo(getNextEventTime(meta)); + setTimeInfo(getTimeInfo(state.context)); }, 500); - return () => clearInterval(timer); - }); - - switch (status) { - case Status.UNKNOWN: - return

Loading...

; - case Status.WAITING: - return

Game starts in {timeInfo.timeRemaining}

- case Status.IN_PROGRESS: - return

Swap in {timeInfo.timeRemaining}

- case Status.FINISHED: - return

Game ended

+ }, [state.value, state.context.meta]); + + switch (state.value) { + case "game_not_found": + return

Game not found!

; + case "loading_game": + case "loading_work": + return ; + case "loaded": + case "waiting": + case "in_progress": + case "finished": + case "saving_work": + return ( +

+ {timeInfo} +

+ ); default: - throw new Error("Don't know how to handle status: " + status); + throw new Error("Don't know how to handle status: " + state.value); } } const GameStatus = () => { return ( - -
- -
-
+
+ +
); -} +}; export default GameStatus; diff --git a/src/components/GameToolbar.tsx b/src/components/GameToolbar.tsx index 6693612..a2eb87d 100644 --- a/src/components/GameToolbar.tsx +++ b/src/components/GameToolbar.tsx @@ -2,7 +2,7 @@ import Status from "./GameStatus"; export const GameToolbar = () => { return ( -
+
); diff --git a/src/components/Loading.tsx b/src/components/Loading.tsx new file mode 100644 index 0000000..880864a --- /dev/null +++ b/src/components/Loading.tsx @@ -0,0 +1,16 @@ +import CircularProgress from "@mui/material/CircularProgress"; +export default function Loading({ + fullScreen = false, +}: { + fullScreen?: boolean; +}) { + return ( +
+ +
+ ); +} diff --git a/src/components/MessagePage.tsx b/src/components/MessagePage.tsx new file mode 100644 index 0000000..6828e7e --- /dev/null +++ b/src/components/MessagePage.tsx @@ -0,0 +1,13 @@ +const MessagePage = ({ msg, error }: { msg: string; error?: boolean }) => { + return ( +
+

+ {msg} +

+
+ ); +}; + +MessagePage.defaultProps = { error: false }; + +export default MessagePage; diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index 54582ad..c653420 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -1,15 +1,24 @@ -import { GameUser } from "../logic/game_logic"; +import { useGame } from "../game_logic/GameContext"; -export const UserCard = ({ displayName, displayColor }: GameUser) => ( -
-
- -
-
- Anonymous {displayName} +export const UserCard = ({ userId }: { userId: string }) => { + const { state } = useGame(); + const user = state.context.users[userId]; + const you = userId === state.context.currentUserUid; + + return ( +
+
+ +
+
+ Anonymous {user.displayName} {you ? "(You)" : ""} +
-
-);export const avatar_colors = [ + ); +}; +export const avatar_colors = [ "bg-[#3f00ff]", "bg-[#00FF00]", "bg-[#FF1300]", @@ -98,4 +107,3 @@ export const avatars = [ "Wolverine", "Wombat", ]; - diff --git a/src/components/WaitGameLoad.tsx b/src/components/WaitGameLoad.tsx deleted file mode 100644 index 53a5b70..0000000 --- a/src/components/WaitGameLoad.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useGame } from "../logic/GameContext"; -import { Status } from "../logic/game_logic"; - -export default function WaitGameLoad({ children }) { - const { status } = useGame(); - if (status === Status.UNKNOWN) { - return

Loading...

; - } - return children; -} diff --git a/src/components/WaitingRoom.tsx b/src/components/WaitingRoom.tsx index a227d47..3155249 100644 --- a/src/components/WaitingRoom.tsx +++ b/src/components/WaitingRoom.tsx @@ -1,23 +1,18 @@ -import { useGame } from "../logic/GameContext"; -import { addUserToDb } from "../logic/game_logic"; +import { useGame } from "../game_logic/GameContext"; +import { addUserToDb } from "../firebase/db_queries"; import { UserCard } from "./UserCard"; import { useState } from "react"; -import Status from "./GameStatus"; -import { useFirebase } from "../logic/FirebaseContext"; +import GameStatus from "./GameStatus"; +import { LoadingButton } from "@mui/lab"; -export function GameWaitingRoom({ - joinGameCallback, - joined, -}: { - joinGameCallback: () => void; - joined: boolean; -}) { +export function GameWaitingRoom() { return ( -
+
+
-
+
- +
@@ -25,53 +20,55 @@ export function GameWaitingRoom({ } export const UserList = () => { - const { users } = useGame(); + const { state } = useGame(); + const users = Object.keys(state.context.users); return ( -
-

- {Object.keys(users!).length}{" "} - {Object.keys(users!).length == 1 ? "player has" : "players have"} joined +

+

+ {users.length} {users.length == 1 ? "player has" : "players have"}{" "} + joined

- {Object.keys(users!).map((userKey) => ( - + {users.map((userId) => ( + ))}
); }; -export const JoinButton = ({ joined, joinGameCallback }) => { - const { db, auth } = useFirebase(); - const { gameId } = useGame(); +export const JoinButton = () => { + const { state } = useGame(); const [joining, setJoining] = useState(false); const joinGame = async () => { setJoining(true); - // TODO autogenerate name - await addUserToDb(db, gameId, auth.currentUser!.uid); - joinGameCallback(); + await addUserToDb(state.context); + setJoining(false); }; + const joined = state.context.currentUserUid in state.context.users; + return ( <> - {joined ? ( - - ) : ( -
- -
- )} + )} +
+ {joined ? "You're in!" : "Join Game"} +
+ +
); }; diff --git a/src/components/index.css b/src/components/index.css index 4599133..8148485 100644 --- a/src/components/index.css +++ b/src/components/index.css @@ -9,40 +9,11 @@ @import "https://fonts.googleapis.com/css?family=Reenie+Beanie"; body { - margin: 0; font-family: system-ui, -apple-system, BlinkMacSystemFont, ".SFNSText-Regular", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - background: #eee; - padding: 0 20px; -} - -header { - max-width: 580px; - margin: auto; - position: relative; - display: flex; - justify-content: center; -} -header a { - max-width: 220px; - margin: 20px 0 0 0; - display: block; -} - -header img { - display: block; - height: 100%; - width: 100%; -} - -header h1 { - text-align: left; - color: #333; - display: inline-block; - margin: 20px 0 0 0; } .editor-shell { @@ -227,19 +198,19 @@ pre::-webkit-scrollbar-thumb { } #options-button::after { - background-image: url(/images/icons/gear.svg); + background-image: url(/icons/gear.svg); } #test-recorder-button::after { - background-image: url(/images/icons/journal-code.svg); + background-image: url(/icons/journal-code.svg); } #paste-log-button::after { - background-image: url(/images/icons/clipboard.svg); + background-image: url(/icons/clipboard.svg); } #docs-button::after { - background-image: url(/images/icons/file-earmark-text.svg); + background-image: url(/icons/file-earmark-text.svg); } #test-recorder-button-snapshot { @@ -247,15 +218,15 @@ pre::-webkit-scrollbar-thumb { } #test-recorder-button-snapshot::after { - background-image: url(/images/icons/camera.svg); + background-image: url(/icons/camera.svg); } #test-recorder-button-copy::after { - background-image: url(/images/icons/clipboard.svg); + background-image: url(/icons/clipboard.svg); } #test-recorder-button-download::after { - background-image: url(/images/icons/download.svg); + background-image: url(/icons/download.svg); } .typeahead-popover { @@ -367,81 +338,81 @@ pre::-webkit-scrollbar-thumb { } i.palette { - background-image: url(/images/icons/palette.svg); + background-image: url(/icons/palette.svg); } i.bucket { - background-image: url(/images/icons/paint-bucket.svg); + background-image: url(/icons/paint-bucket.svg); } i.bold { - background-image: url(/images/icons/type-bold.svg); + background-image: url(/icons/type-bold.svg); } i.italic { - background-image: url(/images/icons/type-italic.svg); + background-image: url(/icons/type-italic.svg); } i.clear { - background-image: url(/images/icons/trash.svg); + background-image: url(/icons/trash.svg); } i.code { - background-image: url(/images/icons/code.svg); + background-image: url(/icons/code.svg); } i.underline { - background-image: url(/images/icons/type-underline.svg); + background-image: url(/icons/type-underline.svg); } i.strikethrough { - background-image: url(/images/icons/type-strikethrough.svg); + background-image: url(/icons/type-strikethrough.svg); } i.subscript { - background-image: url(/images/icons/type-subscript.svg); + background-image: url(/icons/type-subscript.svg); } i.superscript { - background-image: url(/images/icons/type-superscript.svg); + background-image: url(/icons/type-superscript.svg); } i.link { - background-image: url(/images/icons/link.svg); + background-image: url(/icons/link.svg); } i.horizontal-rule { - background-image: url(/images/icons/horizontal-rule.svg); + background-image: url(/icons/horizontal-rule.svg); } .icon.plus { - background-image: url(/images/icons/plus.svg); + background-image: url(/icons/plus.svg); } .icon.caret-right { - background-image: url(/images/icons/caret-right-fill.svg); + background-image: url(/icons/caret-right-fill.svg); } .icon.dropdown-more { - background-image: url(/images/icons/dropdown-more.svg); + background-image: url(/icons/dropdown-more.svg); } .icon.font-color { - background-image: url(/images/icons/font-color.svg); + background-image: url(/icons/font-color.svg); } .icon.font-family { - background-image: url(/images/icons/font-family.svg); + background-image: url(/icons/font-family.svg); } .icon.bg-color { - background-image: url(/images/icons/bg-color.svg); + background-image: url(/icons/bg-color.svg); } .icon.table { background-color: #6c757d; - mask-image: url(/images/icons/table.svg); - -webkit-mask-image: url(/images/icons/table.svg); + mask-image: url(/icons/table.svg); + -webkit-mask-image: url(/icons/table.svg); mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat; mask-size: contain; @@ -449,128 +420,128 @@ i.horizontal-rule { } i.image { - background-image: url(/images/icons/file-image.svg); + background-image: url(/icons/file-image.svg); } i.table { - background-image: url(/images/icons/table.svg); + background-image: url(/icons/table.svg); } i.close { - background-image: url(/images/icons/close.svg); + background-image: url(/icons/close.svg); } i.figma { - background-image: url(/images/icons/figma.svg); + background-image: url(/icons/figma.svg); } i.poll { - background-image: url(/images/icons/card-checklist.svg); + background-image: url(/icons/card-checklist.svg); } i.columns { - background-image: url(/images/icons/3-columns.svg); + background-image: url(/icons/3-columns.svg); } i.tweet { - background-image: url(/images/icons/tweet.svg); + background-image: url(/icons/tweet.svg); } i.youtube { - background-image: url(/images/icons/youtube.svg); + background-image: url(/icons/youtube.svg); } .icon.left-align, i.left-align { - background-image: url(/images/icons/text-left.svg); + background-image: url(/icons/text-left.svg); } .icon.center-align, i.center-align { - background-image: url(/images/icons/text-center.svg); + background-image: url(/icons/text-center.svg); } .icon.right-align, i.right-align { - background-image: url(/images/icons/text-right.svg); + background-image: url(/icons/text-right.svg); } .icon.justify-align, i.justify-align { - background-image: url(/images/icons/justify.svg); + background-image: url(/icons/justify.svg); } i.indent { - background-image: url(/images/icons/indent.svg); + background-image: url(/icons/indent.svg); } i.markdown { - background-image: url(/images/icons/markdown.svg); + background-image: url(/icons/markdown.svg); } i.outdent { - background-image: url(/images/icons/outdent.svg); + background-image: url(/icons/outdent.svg); } i.undo { - background-image: url(/images/icons/arrow-counterclockwise.svg); + background-image: url(/icons/arrow-counterclockwise.svg); } i.redo { - background-image: url(/images/icons/arrow-clockwise.svg); + background-image: url(/icons/arrow-clockwise.svg); } i.sticky { - background-image: url(/images/icons/sticky.svg); + background-image: url(/icons/sticky.svg); } i.mic { - background-image: url(/images/icons/mic.svg); + background-image: url(/icons/mic.svg); } i.import { - background-image: url(/images/icons/upload.svg); + background-image: url(/icons/upload.svg); } i.export { - background-image: url(/images/icons/download.svg); + background-image: url(/icons/download.svg); } i.diagram-2 { - background-image: url(/images/icons/diagram-2.svg); + background-image: url(/icons/diagram-2.svg); } i.user { - background-image: url(/images/icons/user.svg); + background-image: url(/icons/user.svg); } i.equation { - background-image: url(/images/icons/plus-slash-minus.svg); + background-image: url(/icons/plus-slash-minus.svg); } i.gif { - background-image: url(/images/icons/filetype-gif.svg); + background-image: url(/icons/filetype-gif.svg); } i.copy { - background-image: url(/images/icons/copy.svg); + background-image: url(/icons/copy.svg); } i.success { - background-image: url(/images/icons/success.svg); + background-image: url(/icons/success.svg); } i.prettier { - background-image: url(/images/icons/prettier.svg); + background-image: url(/icons/prettier.svg); } i.prettier-error { - background-image: url(/images/icons/prettier-error.svg); + background-image: url(/icons/prettier-error.svg); } i.page-break, .icon.page-break { - background-image: url(/images/icons/scissors.svg); + background-image: url(/icons/scissors.svg); } .link-editor .button.active, @@ -615,7 +586,7 @@ i.page-break, } .link-editor div.link-edit { - background-image: url(/images/icons/pencil-fill.svg); + background-image: url(/icons/pencil-fill.svg); background-size: 16px; background-position: center; background-repeat: no-repeat; @@ -629,7 +600,7 @@ i.page-break, } .link-editor div.link-trash { - background-image: url(/images/icons/trash.svg); + background-image: url(/icons/trash.svg); background-size: 16px; background-position: center; background-repeat: no-repeat; @@ -643,7 +614,7 @@ i.page-break, } .link-editor div.link-cancel { - background-image: url(/images/icons/close.svg); + background-image: url(/icons/close.svg); background-size: 16px; background-position: center; background-repeat: no-repeat; @@ -658,7 +629,7 @@ i.page-break, } .link-editor div.link-confirm { - background-image: url(/images/icons/success-alt.svg); + background-image: url(/icons/success-alt.svg); background-size: 16px; background-position: center; background-repeat: no-repeat; @@ -816,54 +787,54 @@ i.page-break, } .icon.paragraph { - background-image: url(/images/icons/text-paragraph.svg); + background-image: url(/icons/text-paragraph.svg); } .icon.h1 { - background-image: url(/images/icons/type-h1.svg); + background-image: url(/icons/type-h1.svg); } .icon.h2 { - background-image: url(/images/icons/type-h2.svg); + background-image: url(/icons/type-h2.svg); } .icon.h3 { - background-image: url(/images/icons/type-h3.svg); + background-image: url(/icons/type-h3.svg); } .icon.h4 { - background-image: url(/images/icons/type-h4.svg); + background-image: url(/icons/type-h4.svg); } .icon.h5 { - background-image: url(/images/icons/type-h5.svg); + background-image: url(/icons/type-h5.svg); } .icon.h6 { - background-image: url(/images/icons/type-h6.svg); + background-image: url(/icons/type-h6.svg); } .icon.bullet-list, .icon.bullet { - background-image: url(/images/icons/list-ul.svg); + background-image: url(/icons/list-ul.svg); } .icon.check-list, .icon.check { - background-image: url(/images/icons/square-check.svg); + background-image: url(/icons/square-check.svg); } .icon.numbered-list, .icon.number { - background-image: url(/images/icons/list-ol.svg); + background-image: url(/icons/list-ol.svg); } .icon.quote { - background-image: url(/images/icons/chat-square-quote.svg); + background-image: url(/icons/chat-square-quote.svg); } .icon.code { - background-image: url(/images/icons/code.svg); + background-image: url(/icons/code.svg); } .switches { @@ -1021,7 +992,7 @@ i.page-break, .editor-shell .editor-image .image-edit-button { border: 1px solid rgba(0, 0, 0, 0.3); border-radius: 5px; - background-image: url(/images/icons/pencil-fill.svg); + background-image: url(/icons/pencil-fill.svg); background-size: 16px; background-position: center; background-repeat: no-repeat; @@ -1194,19 +1165,19 @@ i.page-break, } .emoji.happysmile { - background-image: url(/images/emoji/1F642.png); + background-image: url(/emoji/1F642.png); } .emoji.veryhappysmile { - background-image: url(/images/emoji/1F600.png); + background-image: url(/emoji/1F600.png); } .emoji.unhappysmile { - background-image: url(/images/emoji/1F641.png); + background-image: url(/emoji/1F641.png); } .emoji.heart { - background-image: url(/images/emoji/2764.png); + background-image: url(/emoji/2764.png); } .keyword { @@ -1236,51 +1207,51 @@ i.page-break, } .actions i.indent { - background-image: url(/images/icons/indent.svg); + background-image: url(/icons/indent.svg); } .actions i.outdent { - background-image: url(/images/icons/outdent.svg); + background-image: url(/icons/outdent.svg); } .actions i.lock { - background-image: url(/images/icons/lock-fill.svg); + background-image: url(/icons/lock-fill.svg); } .actions i.image { - background-image: url(/images/icons/file-image.svg); + background-image: url(/icons/file-image.svg); } .actions i.table { - background-image: url(/images/icons/table.svg); + background-image: url(/icons/table.svg); } .actions i.unlock { - background-image: url(/images/icons/lock.svg); + background-image: url(/icons/lock.svg); } .actions i.left-align { - background-image: url(/images/icons/text-left.svg); + background-image: url(/icons/text-left.svg); } .actions i.center-align { - background-image: url(/images/icons/text-center.svg); + background-image: url(/icons/text-center.svg); } .actions i.right-align { - background-image: url(/images/icons/text-right.svg); + background-image: url(/icons/text-right.svg); } .actions i.justify-align { - background-image: url(/images/icons/justify.svg); + background-image: url(/icons/justify.svg); } .actions i.disconnect { - background-image: url(/images/icons/plug.svg); + background-image: url(/icons/plug.svg); } .actions i.connect { - background-image: url(/images/icons/plug-fill.svg); + background-image: url(/icons/plug-fill.svg); } .table-cell-action-button-container { @@ -1309,7 +1280,7 @@ i.chevron-down { display: inline-block; height: 8px; width: 8px; - background-image: url(/images/icons/chevron-down.svg); + background-image: url(/icons/chevron-down.svg); } .action-button { diff --git a/src/components/lexical/Editor.tsx b/src/components/lexical/Editor.tsx index e35b962..6123400 100644 --- a/src/components/lexical/Editor.tsx +++ b/src/components/lexical/Editor.tsx @@ -11,13 +11,10 @@ import { CharacterLimitPlugin } from "@lexical/react/LexicalCharacterLimitPlugin // import {CheckListPlugin} from '@lexical/react/LexicalCheckListPlugin'; import { ClearEditorPlugin } from "@lexical/react/LexicalClearEditorPlugin"; import LexicalClickableLinkPlugin from "@lexical/react/LexicalClickableLinkPlugin"; -// import {CollaborationPlugin} from '@lexical/react/LexicalCollaborationPlugin'; import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary"; -// import {HashtagPlugin} from '@lexical/react/LexicalHashtagPlugin'; import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin"; import { HorizontalRulePlugin } from "@lexical/react/LexicalHorizontalRulePlugin"; import { ListPlugin } from "@lexical/react/LexicalListPlugin"; -// import {PlainTextPlugin} from '@lexical/react/LexicalPlainTextPlugin'; import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin"; import { TabIndentationPlugin } from "@lexical/react/LexicalTabIndentationPlugin"; import { TablePlugin } from "@lexical/react/LexicalTablePlugin"; @@ -25,6 +22,7 @@ import { useEffect, useState } from "react"; import { useSettings } from "./context/SettingsContext"; import { useSharedHistoryContext } from "./context/SharedHistoryContext"; +import ActionsPlugin from "./plugins/ActionsPlugin"; import AutocompletePlugin from "./plugins/AutocompletePlugin"; import AutoLinkPlugin from "./plugins/AutoLinkPlugin"; import CodeActionMenuPlugin from "./plugins/CodeActionMenuPlugin"; @@ -59,8 +57,21 @@ import TreeViewPlugin from "./plugins/TreeViewPlugin"; import ContentEditable from "./ui/ContentEditable"; import Placeholder from "./ui/Placeholder"; import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; +import { setEditorState } from "../../game_logic/EditorContext"; -export default function Editor({ editable: isEditable }): JSX.Element { +export default function Editor({ + editable = true, + startingState, + placeholderText = "Enter some text...", + comments = false, + fileIO = false, +}: { + editable?: boolean; + startingState?: string; + placeholderText?: string; + comments?: boolean; + fileIO?: boolean; +}): JSX.Element { const { historyState } = useSharedHistoryContext(); const { settings: { @@ -79,10 +90,13 @@ export default function Editor({ editable: isEditable }): JSX.Element { const [editor] = useLexicalComposerContext(); useEffect(() => { - editor.setEditable(isEditable); - }, [isEditable, editor]); + editor.setEditable(editable); + }, [editable, editor]); + useEffect(() => { + if (startingState) setEditorState(editor, startingState); + }, [startingState, editor]); const placeholder = ( - {isEditable ? "Enter some text..." : ""} + {editable ? placeholderText : ""} ); const [floatingAnchorElem, setFloatingAnchorElem] = useState(null); @@ -116,7 +130,7 @@ export default function Editor({ editable: isEditable }): JSX.Element { return (
- {isRichText && isEditable && ( + {isRichText && editable && ( )}
- + {comments && } { <> {} @@ -169,7 +183,7 @@ export default function Editor({ editable: isEditable }): JSX.Element { {/* */} {/* */} {/* */} - {!isEditable && } + {!editable && } @@ -206,7 +220,7 @@ export default function Editor({ editable: isEditable }): JSX.Element { {isAutocomplete && }
{showTableOfContents && }
{shouldUseLexicalContextMenu && } - {/* */} + {editable && }
{showTreeView && }
diff --git a/src/components/lexical/LICENSE b/src/components/lexical/LICENSE new file mode 100644 index 0000000..a45a376 --- /dev/null +++ b/src/components/lexical/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/src/components/lexical/plugins/ActionsPlugin/index.tsx b/src/components/lexical/plugins/ActionsPlugin/index.tsx index b21f6b6..62d05c4 100644 --- a/src/components/lexical/plugins/ActionsPlugin/index.tsx +++ b/src/components/lexical/plugins/ActionsPlugin/index.tsx @@ -71,9 +71,9 @@ async function validateEditorState(editor: LexicalEditor): Promise { } export default function ActionsPlugin({ - isRichText, + supportFileIO, }: { - isRichText: boolean; + supportFileIO: boolean; }): JSX.Element { const [editor] = useLexicalComposerContext(); const [isEditable, setIsEditable] = useState(() => editor.isEditable()); @@ -134,7 +134,7 @@ export default function ActionsPlugin({ return (
- {SUPPORT_SPEECH_RECOGNITION && ( + {/* {SUPPORT_SPEECH_RECOGNITION && ( + )} */} + {supportFileIO && ( + <> + + + )} - - - + */} {isCollabActive && ( @@ -92,18 +91,18 @@ export function InsertImageUploadedDialogBody({ }: { onClick: (payload: InsertImagePayload) => void; }) { - const [src, setSrc] = useState(''); - const [altText, setAltText] = useState(''); + const [src, setSrc] = useState(""); + const [altText, setAltText] = useState(""); - const isDisabled = src === ''; + const isDisabled = src === ""; const loadImage = (files: FileList | null) => { const reader = new FileReader(); reader.onload = function () { - if (typeof reader.result === 'string') { + if (typeof reader.result === "string") { setSrc(reader.result); } - return ''; + return ""; }; if (files !== null) { reader.readAsDataURL(files[0]); @@ -129,7 +128,8 @@ export function InsertImageUploadedDialogBody({ @@ -144,7 +144,7 @@ export function InsertImageDialog({ activeEditor: LexicalEditor; onClose: () => void; }): JSX.Element { - const [mode, setMode] = useState(null); + const [mode, setMode] = useState(null); const hasModifier = useRef(false); useEffect(() => { @@ -152,9 +152,9 @@ export function InsertImageDialog({ const handler = (e: KeyboardEvent) => { hasModifier.current = e.altKey; }; - document.addEventListener('keydown', handler); + document.addEventListener("keydown", handler); return () => { - document.removeEventListener('keydown', handler); + document.removeEventListener("keydown", handler); }; }, [activeEditor]); @@ -167,38 +167,22 @@ export function InsertImageDialog({ <> {!mode && ( - )} - {mode === 'url' && } - {mode === 'file' && } + {mode === "url" && } + {mode === "file" && } ); } @@ -212,7 +196,7 @@ export default function ImagesPlugin({ useEffect(() => { if (!editor.hasNodes([ImageNode])) { - throw new Error('ImagesPlugin: ImageNode not registered on editor'); + throw new Error("ImagesPlugin: ImageNode not registered on editor"); } return mergeRegister( @@ -227,29 +211,29 @@ export default function ImagesPlugin({ return true; }, - COMMAND_PRIORITY_EDITOR, + COMMAND_PRIORITY_EDITOR ), editor.registerCommand( DRAGSTART_COMMAND, (event) => { return onDragStart(event); }, - COMMAND_PRIORITY_HIGH, + COMMAND_PRIORITY_HIGH ), editor.registerCommand( DRAGOVER_COMMAND, (event) => { return onDragover(event); }, - COMMAND_PRIORITY_LOW, + COMMAND_PRIORITY_LOW ), editor.registerCommand( DROP_COMMAND, (event) => { return onDrop(event, editor); }, - COMMAND_PRIORITY_HIGH, - ), + COMMAND_PRIORITY_HIGH + ) ); }, [captionsEnabled, editor]); @@ -257,8 +241,8 @@ export default function ImagesPlugin({ } const TRANSPARENT_IMAGE = - 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; -const img = document.createElement('img'); + "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"; +const img = document.createElement("img"); img.src = TRANSPARENT_IMAGE; function onDragStart(event: DragEvent): boolean { @@ -270,10 +254,10 @@ function onDragStart(event: DragEvent): boolean { if (!dataTransfer) { return false; } - dataTransfer.setData('text/plain', '_'); + dataTransfer.setData("text/plain", "_"); dataTransfer.setDragImage(img, 0, 0); dataTransfer.setData( - 'application/x-lexical-drag', + "application/x-lexical-drag", JSON.stringify({ data: { altText: node.__altText, @@ -285,8 +269,8 @@ function onDragStart(event: DragEvent): boolean { src: node.__src, width: node.__width, }, - type: 'image', - }), + type: "image", + }) ); return true; @@ -337,12 +321,12 @@ function getImageNodeInSelection(): ImageNode | null { } function getDragImageData(event: DragEvent): null | InsertImagePayload { - const dragData = event.dataTransfer?.getData('application/x-lexical-drag'); + const dragData = event.dataTransfer?.getData("application/x-lexical-drag"); if (!dragData) { return null; } - const {type, data} = JSON.parse(dragData); - if (type !== 'image') { + const { type, data } = JSON.parse(dragData); + if (type !== "image") { return null; } @@ -361,9 +345,9 @@ function canDropImage(event: DragEvent): boolean { return !!( target && target instanceof HTMLElement && - !target.closest('code, span.editor-image') && + !target.closest("code, span.editor-image") && target.parentElement && - target.parentElement.closest('div.ContentEditable__root') + target.parentElement.closest("div.ContentEditable__root") ); } diff --git a/src/components/lexical/plugins/InlineImagePlugin/index.tsx b/src/components/lexical/plugins/InlineImagePlugin/index.tsx index 0f1a311..9666a88 100644 --- a/src/components/lexical/plugins/InlineImagePlugin/index.tsx +++ b/src/components/lexical/plugins/InlineImagePlugin/index.tsx @@ -5,12 +5,12 @@ * LICENSE file in the root directory of this source tree. * */ -import type {Position} from '../../nodes/InlineImageNode'; +import type { Position } from "../../nodes/InlineImageNode"; -import '../../nodes/InlineImageNode.css'; +import "../../nodes/InlineImageNode.css"; -import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'; -import {$wrapNodeInElement, mergeRegister} from '@lexical/utils'; +import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"; +import { $wrapNodeInElement, mergeRegister } from "@lexical/utils"; import { $createParagraphNode, $createRangeSelection, @@ -28,29 +28,29 @@ import { DROP_COMMAND, LexicalCommand, LexicalEditor, -} from 'lexical'; -import * as React from 'react'; -import {useEffect, useRef, useState} from 'react'; +} from "lexical"; +import * as React from "react"; +import { useEffect, useRef, useState } from "react"; import { $createInlineImageNode, $isInlineImageNode, InlineImageNode, InlineImagePayload, -} from '../../nodes/InlineImageNode'; -import Button from '../../ui/Button'; -import {DialogActions} from '../../ui/Dialog'; -import FileInput from '../../ui/FileInput'; -import Select from '../../ui/Select'; -import TextInput from '../../ui/TextInput'; +} from "../../nodes/InlineImageNode"; +import Button from "../../ui/Button"; +import { DialogActions } from "../../ui/Dialog"; +import FileInput from "../../ui/FileInput"; +import Select from "../../ui/Select"; +import TextInput from "../../ui/TextInput"; export type InsertInlineImagePayload = Readonly; const getDOMSelection = (targetWindow: Window | null): Selection | null => - targetWindow.getSelection() : null; + (targetWindow || window).getSelection(); export const INSERT_INLINE_IMAGE_COMMAND: LexicalCommand = - createCommand('INSERT_INLINE_IMAGE_COMMAND'); + createCommand("INSERT_INLINE_IMAGE_COMMAND"); export function InsertInlineImageDialog({ activeEditor, @@ -61,12 +61,12 @@ export function InsertInlineImageDialog({ }): JSX.Element { const hasModifier = useRef(false); - const [src, setSrc] = useState(''); - const [altText, setAltText] = useState(''); + const [src, setSrc] = useState(""); + const [altText, setAltText] = useState(""); const [showCaption, setShowCaption] = useState(false); - const [position, setPosition] = useState('left'); + const [position, setPosition] = useState("left"); - const isDisabled = src === ''; + const isDisabled = src === ""; const handleShowCaptionChange = (e: React.ChangeEvent) => { setShowCaption(e.target.checked); @@ -79,10 +79,10 @@ export function InsertInlineImageDialog({ const loadImage = (files: FileList | null) => { const reader = new FileReader(); reader.onload = function () { - if (typeof reader.result === 'string') { + if (typeof reader.result === "string") { setSrc(reader.result); } - return ''; + return ""; }; if (files !== null) { reader.readAsDataURL(files[0]); @@ -94,21 +94,21 @@ export function InsertInlineImageDialog({ const handler = (e: KeyboardEvent) => { hasModifier.current = e.altKey; }; - document.addEventListener('keydown', handler); + document.addEventListener("keydown", handler); return () => { - document.removeEventListener('keydown', handler); + document.removeEventListener("keydown", handler); }; }, [activeEditor]); const handleOnClick = () => { - const payload = {altText, position, showCaption, src}; + const payload = { altText, position, showCaption, src }; activeEditor.dispatchCommand(INSERT_INLINE_IMAGE_COMMAND, payload); onClose(); }; return ( <> -
+
-
+