diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a25e2e7 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,70 @@ +name: Build +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build-server: + name: Server + runs-on: ubuntu-latest + container: golang:alpine + steps: + - uses: actions/checkout@v4 + - uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/setup-go@v5 + - run: task server:build + - uses: actions/upload-artifact@v4 + with: + path: server/build/botw-iss + name: server + retention-days: 3 + + build-manual: + name: Manual + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: cargo-bins/cargo-binstall@main + - run: cargo-binstall --no-confirm mdbook + - run: task manual:build + - uses: actions/upload-artifact@v4 + with: + path: manual/book + name: manual + retention-days: 3 + + build-legacy: + name: Legacy App + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - uses: actions/setup-node@v4 + with: + node-version: 18.x + - run: task leg:ci + - run: task leg:build + - uses: actions/upload-artifact@v4 + with: + path: legacy/dist + name: legacy + retention-days: 3 + + diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..a05d4e9 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,40 @@ +name: Check +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + check-server: + name: Server + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/setup-go@v5 + - run: task server:check + + check-legacy: + name: Legacy App + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + - uses: actions/setup-node@v4 + with: + node-version: 18.x + - run: task leg:ci + - run: task leg:test + - run: task leg:check diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..8137878 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,54 @@ +name: Docker +on: + workflow_dispatch: + inputs: + version: + description: "Version tag of the image (e.g. 4.0.0-alpha)" + required: true + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-docker: + name: Publish Docker Image + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + - uses: arduino/setup-task@v2 + with: + version: 3.x + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: dawidd6/action-download-artifact@v2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + workflow: build.yml + commit: ${{ github.sha }} + path: server/dist + # - run: task make-version-ci -- ${{ github.event.inputs.version }} ${{ github.sha }} + # working-directory: docker + - uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - uses: docker/setup-buildx-action@v3 + - uses: docker/metadata-action@v5 + id: meta + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha + type=sha,format=long + type=raw,value=${{ github.event.inputs.version }} + type=raw,value=latest + - uses: docker/build-push-action@v5 + with: + push: true + context: server + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 65af9fa..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: IST Simulator - CI - -on: - push: - tags: - - "v*.*.*" - branches: - - main - pull_request: - branches: - - main - workflow_dispatch: - -jobs: - lint: - name: Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: arduino/setup-task@v2 - with: - version: 3.x - repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - uses: actions/setup-node@v4 - with: - node-version: 18.x - - run: npm ci - - run: task check - - test: - name: Test - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: arduino/setup-task@v2 - with: - version: 3.x - repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - uses: actions/setup-node@v4 - with: - node-version: 18.x - - run: npm ci - - run: task test - - build: - name: Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: arduino/setup-task@v2 - with: - version: 3.x - repo-token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - uses: actions/setup-node@v4 - with: - node-version: 18.x - - run: npm ci - - run: task build - - uses: actions/upload-pages-artifact@v3 - with: - path: dist - retention-days: 3 - - deploy: - name: Deploy - needs: - - build - - test - if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/v') - permissions: - pages: write - id-token: write - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 3877c49..5d89c61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,35 +1,17 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local -.eslintcache - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -debug.ast.json -ast.generated.ts - # Dev certificates /cert *.pem *.pfx +*.key + +# Task runner +.task + +# Cache +.eslintcache + +# (temporary) +/next -/.task +# Cargo +/target diff --git a/.prettierrc.cjs b/.prettierrc.cjs deleted file mode 100644 index a5f0337..0000000 --- a/.prettierrc.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - tabWidth: 4, - endOfLine: "auto", -}; diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..0030ad8 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,550 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + +[[package]] +name = "botw-ist-command" +version = "0.0.0" +dependencies = [ + "logos", + "phf", + "teleparse", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "deref-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4255bb7dd538590188bd0aea52e48bd699b19bd90b0d069ec2ced8461fe23273" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "ist-parser" +version = "0.0.0" +dependencies = [ + "logos", + "teleparse", +] + +[[package]] +name = "ist-runtime" +version = "0.0.0" +dependencies = [ + "ist-parser", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "logos" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6b6e02facda28ca5fb8dbe4b152496ba3b1bd5a4b40bb2b1b2d8ad74e0f39b" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32eb6b5f26efacd015b000bfc562186472cd9b34bdba3f6b264e2a052676d10" +dependencies = [ + "beef", + "fnv", + "lazy_static", + "proc-macro2", + "quote", + "regex-syntax", + "syn 2.0.79", +] + +[[package]] +name = "logos-derive" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5d0c5463c911ef55624739fc353238b4e310f0144be1f875dc42fec6bfd5ec" +dependencies = [ + "logos-codegen", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "regex" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "sim" +version = "0.0.0" +dependencies = [ + "ist-parser", + "ist-runtime", + "wasm-bindgen", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "teleparse" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80436d09591939259a48971e0958fa1f448ccfc52cd866aa6e3a2ac22f453a7a" +dependencies = [ + "deref-derive", + "derivative", + "itertools", + "logos", + "num", + "teleparse-macros", + "thiserror", +] + +[[package]] +name = "teleparse-macros" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806cb698e390e3ab8f6748c38431cc72c6484e70e80480d78e2d564fc9e99a47" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "syn 2.0.79", +] + +[[package]] +name = "thiserror" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.79", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..51af651 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[workspace] +resolver = "2" +members = [ "app/src/sim", + "sim/parser", + "sim/runtime", + "next/botw-ist-command", +] diff --git a/README.md b/README.md index 34e5eb0..0506538 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,4 @@ # botw-ist Simulator for Inventory Slot Transfer in BOTW -Visit the app at https://ist.itntpiston.app - -**Notice** - -Bug fixes and improvements for the current simulation core will not be continued because of the intrinsic difficulty with the core -to accurately simulate the remaining cases. A rewrite of the core is actively being developed and should be expected to be ready by June 2025 - - -## Contribute -Contributions are welcomed. For small issues, you can open PRs directly. For big issues contact me on discord (username: Pistonight) - -## Development -[task](https://taskfile.dev) is recommended to run provided scripts. You can also look at `Taskfile.yml` -and run the scripts manually. - -Node v18 and Python 3 are required. - -### Install -Run `task install` to install dependencies - -### Local -Run `task dev` to start vite dev server. Some features require secure context. -The dev server is configured to look for `cert/cert.pem` and `cert/cert.pfx` for HTTPS certificates. - -### Grammar -The simulator uses a LL parser with infinite look ahead to generate an Abstract Syntax Tree from which commands are parsed. - -The grammar is at `src/core/command/ast/grammar.txt` and the ast parser is generated with `npm run generate` (Python needed) - -If you want to introduce new commands, most of the heavy lifting for the parsers is already done. You should be able to define a new derivation in the grammar and implement the parser by looking at one of the `parse.cmd.*` files. However, you should probably contact the maintainer to have a discussion about the new command. - -### Test -Run `task test --watch` to run tests in watch mode - -### PR -Run `task check` and `task test` before PR. +**Simulator v4 is under active development!** diff --git a/Taskfile.yml b/Taskfile.yml index 93bd204..cc40716 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,65 +1,27 @@ version: '3' -tasks: - install: - desc: Install dependencies - cmds: - - npm i - - ast: - desc: Generate AST parser (needs `python3`) - cmds: - - python3 generate_parser.py src/core/command/ast/grammar.txt src/core/command/ast/ast.generated.ts - sources: - - generate_parser.py - - src/core/command/ast/grammar.txt - generates: - - src/core/command/ast/ast.generated.ts - - dev: - desc: Run dev server - deps: [ast] - cmds: - - npx vite --host - - check: - desc: Check for errors - cmds: - - task: eslint - vars: - ESLINT_ARGS: "" - - task: prettier - vars: - PRETTIER_ARGS: --check - - fix: - desc: Fix errors - cmds: - - task: prettier - vars: - PRETTIER_ARGS: --write - - task: eslint - vars: - ESLINT_ARGS: --fix +includes: + app: + taskfile: ./app + dir: ./app - test: - desc: Run tests (Jest arguments apply) - deps: [ast] - cmds: - - npx jest --config tools/test/jest.config.cjs {{.ARGS}} + manual: + aliases: [man] + taskfile: ./manual + dir: ./manual - build: - desc: Build production bundle - deps: [ast] - cmds: - - npx tsc - - npx vite build + legacy: + aliases: [leg] + taskfile: ./legacy + dir: ./legacy - eslint: - cmds: - - npx eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --cache {{.ESLINT_ARGS}} + server: + taskfile: ./server + dir: ./server - prettier: +tasks: + install: + desc: Install tools cmds: - - npx prettier "./**/*.{ts,tsx,json,js,jsx,cjs,css}" {{.PRETTIER_ARGS}} + - cargo install mdbook live-server cargo-watch wasm-pack diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/app/README.md b/app/README.md new file mode 100644 index 0000000..74872fd --- /dev/null +++ b/app/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/app/Taskfile.yml b/app/Taskfile.yml new file mode 100644 index 0000000..5f05bce --- /dev/null +++ b/app/Taskfile.yml @@ -0,0 +1,42 @@ +version: '3' + +tasks: + dev: + desc: Run frontend app in watch mode + cmds: + - npx vite --host + + build: + desc: Build production bundle + cmds: + - npx tsc + - npx vite build + + check: + desc: Check for errors + cmds: + - task: eslint + vars: + ESLINT_ARGS: "" + - task: prettier + vars: + PRETTIER_ARGS: --check + + fix: + desc: Fix errors + cmds: + - task: prettier + vars: + PRETTIER_ARGS: --write + - task: eslint + vars: + ESLINT_ARGS: --fix + + eslint: + cmds: + - npx eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --cache {{.ESLINT_ARGS}} + + prettier: + cmds: + - npx prettier "./**/*.{mts,ts,tsx,json,js,jsx,cjs,mjs,css,html}" {{.PRETTIER_ARGS}} + diff --git a/app/eslint.config.js b/app/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/app/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/app/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..c251228 --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,3063 @@ +{ + "name": "botw-ist", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "botw-ist", + "version": "0.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.9.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "prettier": "^3.3.3", + "typescript": "^5.5.3", + "typescript-eslint": "^8.0.1", + "vite": "^5.4.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz", + "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz", + "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz", + "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz", + "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz", + "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz", + "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz", + "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz", + "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz", + "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz", + "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz", + "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz", + "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz", + "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz", + "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz", + "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz", + "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.10.tgz", + "integrity": "sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz", + "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/type-utils": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz", + "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz", + "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz", + "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.7.0", + "@typescript-eslint/utils": "8.7.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz", + "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz", + "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/visitor-keys": "8.7.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.7.0", + "@typescript-eslint/types": "8.7.0", + "@typescript-eslint/typescript-estree": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz", + "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.7.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", + "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001664", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", + "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", + "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0-rc-fb9a90fa48-20240614", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", + "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz", + "integrity": "sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", + "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.5", + "@rollup/rollup-android-arm64": "4.22.5", + "@rollup/rollup-darwin-arm64": "4.22.5", + "@rollup/rollup-darwin-x64": "4.22.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.5", + "@rollup/rollup-linux-arm-musleabihf": "4.22.5", + "@rollup/rollup-linux-arm64-gnu": "4.22.5", + "@rollup/rollup-linux-arm64-musl": "4.22.5", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5", + "@rollup/rollup-linux-riscv64-gnu": "4.22.5", + "@rollup/rollup-linux-s390x-gnu": "4.22.5", + "@rollup/rollup-linux-x64-gnu": "4.22.5", + "@rollup/rollup-linux-x64-musl": "4.22.5", + "@rollup/rollup-win32-arm64-msvc": "4.22.5", + "@rollup/rollup-win32-ia32-msvc": "4.22.5", + "@rollup/rollup-win32-x64-msvc": "4.22.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.7.0.tgz", + "integrity": "sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.7.0", + "@typescript-eslint/parser": "8.7.0", + "@typescript-eslint/utils": "8.7.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 0000000..0e21f2e --- /dev/null +++ b/app/package.json @@ -0,0 +1,34 @@ +{ + "name": "botw-ist", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.9.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "prettier": "^3.3.3", + "typescript": "^5.5.3", + "typescript-eslint": "^8.0.1", + "vite": "^5.4.1" + }, + "prettier": { + "tabWidth": 4, + "endOfLine": "auto" + } +} diff --git a/app/public/vite.svg b/app/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/app/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/App.css b/app/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/app/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/app/src/App.tsx b/app/src/App.tsx new file mode 100644 index 0000000..afe48ac --- /dev/null +++ b/app/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> +
+ + Vite logo + + + React logo + +
+

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/app/src/assets/react.svg b/app/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/app/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/index.css b/app/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/app/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/app/src/main.tsx b/app/src/main.tsx new file mode 100644 index 0000000..6f4ac9b --- /dev/null +++ b/app/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/app/src/sim/Cargo.toml b/app/src/sim/Cargo.toml new file mode 100644 index 0000000..8fc2eb0 --- /dev/null +++ b/app/src/sim/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "sim" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies] +ist-parser = { path = "../../../sim/parser" } +ist-runtime = { path = "../../../sim/runtime" } +wasm-bindgen = "0.2.93" diff --git a/app/src/sim/src/lib.rs b/app/src/sim/src/lib.rs new file mode 100644 index 0000000..b93cf3f --- /dev/null +++ b/app/src/sim/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/app/src/vite-env.d.ts b/app/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/app/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/app/tsconfig.app.json b/app/tsconfig.app.json new file mode 100644 index 0000000..f0a2350 --- /dev/null +++ b/app/tsconfig.app.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/app/tsconfig.json b/app/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/app/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/app/tsconfig.node.json b/app/tsconfig.node.json new file mode 100644 index 0000000..0d3d714 --- /dev/null +++ b/app/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/app/vite.config.ts b/app/vite.config.ts new file mode 100644 index 0000000..5a33944 --- /dev/null +++ b/app/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/go.work b/go.work new file mode 100644 index 0000000..79904be --- /dev/null +++ b/go.work @@ -0,0 +1,3 @@ +go 1.23.1 + +use ./server diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 0000000..447e299 --- /dev/null +++ b/go.work.sum @@ -0,0 +1,6 @@ +github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= diff --git a/.eslintrc.cjs b/legacy/.eslintrc.cjs similarity index 100% rename from .eslintrc.cjs rename to legacy/.eslintrc.cjs diff --git a/legacy/.gitignore b/legacy/.gitignore new file mode 100644 index 0000000..3877c49 --- /dev/null +++ b/legacy/.gitignore @@ -0,0 +1,35 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +.eslintcache + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +debug.ast.json +ast.generated.ts + +# Dev certificates +/cert +*.pem +*.pfx + +/.task diff --git a/legacy/README.md b/legacy/README.md new file mode 100644 index 0000000..5922644 --- /dev/null +++ b/legacy/README.md @@ -0,0 +1,40 @@ +# botw-ist +Simulator for Inventory Slot Transfer in BOTW + +Visit the app at https://ist.itntpiston.app + +**Notice** + +Bug fixes and improvements for the current simulation core will not be continued because of the intrinsic difficulty with the core +to accurately simulate the remaining cases. A rewrite of the core is actively being developed and should be expected to be ready by June 2025 + + +## Contribute +Contributions are welcomed. For small issues, you can open PRs directly. For big issues contact me on discord (username: Pistonight) + +## Development +[task](https://taskfile.dev) is recommended to run provided scripts. You can also look at `Taskfile.yml` +and run the scripts manually. + +Node v18 and Python 3 are required. + +### Install +Run `task install` to install dependencies + +### Local +Run `task dev` to start vite dev server. Some features require secure context. +The dev server is configured to look for `cert/cert.pem` and `cert/cert.pfx` for HTTPS certificates. + +### Grammar +The simulator uses a LL parser with infinite look ahead to generate an Abstract Syntax Tree from which commands are parsed. + +The grammar is at `src/core/command/ast/grammar.txt` and the ast parser is generated with `npm run generate` (Python needed) + +If you want to introduce new commands, most of the heavy lifting for the parsers is already done. You should be able to define a new derivation in the grammar and implement the parser by looking at one of the `parse.cmd.*` files. However, you should probably contact the maintainer to have a discussion about the new command. + +### Test +Run `task test --watch` to run tests in watch mode + +### PR +Run `task check` and `task test` before PR. + diff --git a/legacy/Taskfile.yml b/legacy/Taskfile.yml new file mode 100644 index 0000000..c3162c9 --- /dev/null +++ b/legacy/Taskfile.yml @@ -0,0 +1,68 @@ +version: '3' + +tasks: + install: + cmds: + - npm i + + ci: + cmds: + - npm ci + + ast: + desc: Generate AST parser (needs `python3`) + cmds: + - python3 generate_parser.py src/core/command/ast/grammar.txt src/core/command/ast/ast.generated.ts + sources: + - generate_parser.py + - src/core/command/ast/grammar.txt + generates: + - src/core/command/ast/ast.generated.ts + + dev: + desc: Run dev server + deps: [ast] + cmds: + - npx vite --host + + check: + desc: Check for errors + cmds: + - task: eslint + vars: + ESLINT_ARGS: "" + - task: prettier + vars: + PRETTIER_ARGS: --check + + fix: + desc: Fix errors + cmds: + - task: prettier + vars: + PRETTIER_ARGS: --write + - task: eslint + vars: + ESLINT_ARGS: --fix + + test: + desc: Run tests (Jest arguments apply) + deps: [ast] + cmds: + - npx jest --config tools/test/jest.config.cjs {{.ARGS}} + + build: + desc: Build production bundle + deps: [ast] + cmds: + - npx tsc + - npx vite build + + eslint: + cmds: + - npx eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0 --cache {{.ESLINT_ARGS}} + + prettier: + cmds: + - npx prettier "./**/*.{ts,tsx,json,js,jsx,cjs,css}" {{.PRETTIER_ARGS}} + diff --git a/generate_parser.py b/legacy/generate_parser.py similarity index 100% rename from generate_parser.py rename to legacy/generate_parser.py diff --git a/index.html b/legacy/index.html similarity index 72% rename from index.html rename to legacy/index.html index 60f9ad4..dde05be 100644 --- a/index.html +++ b/legacy/index.html @@ -8,13 +8,14 @@ name="description" content="for Breath of the Wild" /> - - + + - + - IST Simulator + + IST Simulator (Legacy)
diff --git a/package-lock.json b/legacy/package-lock.json similarity index 100% rename from package-lock.json rename to legacy/package-lock.json diff --git a/package.json b/legacy/package.json similarity index 92% rename from package.json rename to legacy/package.json index 844e3d2..34924ff 100644 --- a/package.json +++ b/legacy/package.json @@ -3,9 +3,6 @@ "private": true, "version": "0.0.0", "type": "module", - "scripts": { - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0" - }, "dependencies": { "@fluentui/react-icons": "^2.0.234", "buffer": "^6.0.3", @@ -41,5 +38,9 @@ "vite": "^5.2.0", "vite-tsconfig-paths": "^4.3.2", "yaml": "^2.4.1" + }, + "prettier": { + "tabWidth": 4, + "endOfLine": "auto" } } diff --git a/public/assets/Background.png b/legacy/public/assets/Background.png similarity index 100% rename from public/assets/Background.png rename to legacy/public/assets/Background.png diff --git a/public/assets/InGame.png b/legacy/public/assets/InGame.png similarity index 100% rename from public/assets/InGame.png rename to legacy/public/assets/InGame.png diff --git a/public/assets/font/Calamity-Regular.otf b/legacy/public/assets/font/Calamity-Regular.otf similarity index 100% rename from public/assets/font/Calamity-Regular.otf rename to legacy/public/assets/font/Calamity-Regular.otf diff --git a/public/assets/font/DejaVuSansMono.ttf b/legacy/public/assets/font/DejaVuSansMono.ttf similarity index 100% rename from public/assets/font/DejaVuSansMono.ttf rename to legacy/public/assets/font/DejaVuSansMono.ttf diff --git a/public/assets/img/Armor/AmberEarrings.png b/legacy/public/assets/img/Armor/AmberEarrings.png similarity index 100% rename from public/assets/img/Armor/AmberEarrings.png rename to legacy/public/assets/img/Armor/AmberEarrings.png diff --git a/public/assets/img/Armor/AncientCuirass.png b/legacy/public/assets/img/Armor/AncientCuirass.png similarity index 100% rename from public/assets/img/Armor/AncientCuirass.png rename to legacy/public/assets/img/Armor/AncientCuirass.png diff --git a/public/assets/img/Armor/AncientGreaves.png b/legacy/public/assets/img/Armor/AncientGreaves.png similarity index 100% rename from public/assets/img/Armor/AncientGreaves.png rename to legacy/public/assets/img/Armor/AncientGreaves.png diff --git a/public/assets/img/Armor/AncientHelm.png b/legacy/public/assets/img/Armor/AncientHelm.png similarity index 100% rename from public/assets/img/Armor/AncientHelm.png rename to legacy/public/assets/img/Armor/AncientHelm.png diff --git a/public/assets/img/Armor/BarbarianArmor.png b/legacy/public/assets/img/Armor/BarbarianArmor.png similarity index 100% rename from public/assets/img/Armor/BarbarianArmor.png rename to legacy/public/assets/img/Armor/BarbarianArmor.png diff --git a/public/assets/img/Armor/BarbarianHelm.png b/legacy/public/assets/img/Armor/BarbarianHelm.png similarity index 100% rename from public/assets/img/Armor/BarbarianHelm.png rename to legacy/public/assets/img/Armor/BarbarianHelm.png diff --git a/public/assets/img/Armor/BarbarianLegWraps.png b/legacy/public/assets/img/Armor/BarbarianLegWraps.png similarity index 100% rename from public/assets/img/Armor/BarbarianLegWraps.png rename to legacy/public/assets/img/Armor/BarbarianLegWraps.png diff --git a/public/assets/img/Armor/BokoblinMask.png b/legacy/public/assets/img/Armor/BokoblinMask.png similarity index 100% rename from public/assets/img/Armor/BokoblinMask.png rename to legacy/public/assets/img/Armor/BokoblinMask.png diff --git a/public/assets/img/Armor/CapOfTheHero.png b/legacy/public/assets/img/Armor/CapOfTheHero.png similarity index 100% rename from public/assets/img/Armor/CapOfTheHero.png rename to legacy/public/assets/img/Armor/CapOfTheHero.png diff --git a/public/assets/img/Armor/CapOfTheSky.png b/legacy/public/assets/img/Armor/CapOfTheSky.png similarity index 100% rename from public/assets/img/Armor/CapOfTheSky.png rename to legacy/public/assets/img/Armor/CapOfTheSky.png diff --git a/public/assets/img/Armor/CapOfTheWild.png b/legacy/public/assets/img/Armor/CapOfTheWild.png similarity index 100% rename from public/assets/img/Armor/CapOfTheWild.png rename to legacy/public/assets/img/Armor/CapOfTheWild.png diff --git a/public/assets/img/Armor/CapOfTheWind.png b/legacy/public/assets/img/Armor/CapOfTheWind.png similarity index 100% rename from public/assets/img/Armor/CapOfTheWind.png rename to legacy/public/assets/img/Armor/CapOfTheWind.png diff --git a/public/assets/img/Armor/CapOfTime.png b/legacy/public/assets/img/Armor/CapOfTime.png similarity index 100% rename from public/assets/img/Armor/CapOfTime.png rename to legacy/public/assets/img/Armor/CapOfTime.png diff --git a/public/assets/img/Armor/CapOfTwilight.png b/legacy/public/assets/img/Armor/CapOfTwilight.png similarity index 100% rename from public/assets/img/Armor/CapOfTwilight.png rename to legacy/public/assets/img/Armor/CapOfTwilight.png diff --git a/public/assets/img/Armor/ChampionsTunic.png b/legacy/public/assets/img/Armor/ChampionsTunic.png similarity index 100% rename from public/assets/img/Armor/ChampionsTunic.png rename to legacy/public/assets/img/Armor/ChampionsTunic.png diff --git a/public/assets/img/Armor/ClimbersBandanna.png b/legacy/public/assets/img/Armor/ClimbersBandanna.png similarity index 100% rename from public/assets/img/Armor/ClimbersBandanna.png rename to legacy/public/assets/img/Armor/ClimbersBandanna.png diff --git a/public/assets/img/Armor/ClimbingBoots.png b/legacy/public/assets/img/Armor/ClimbingBoots.png similarity index 100% rename from public/assets/img/Armor/ClimbingBoots.png rename to legacy/public/assets/img/Armor/ClimbingBoots.png diff --git a/public/assets/img/Armor/ClimbingGear.png b/legacy/public/assets/img/Armor/ClimbingGear.png similarity index 100% rename from public/assets/img/Armor/ClimbingGear.png rename to legacy/public/assets/img/Armor/ClimbingGear.png diff --git a/public/assets/img/Armor/DarkHood.png b/legacy/public/assets/img/Armor/DarkHood.png similarity index 100% rename from public/assets/img/Armor/DarkHood.png rename to legacy/public/assets/img/Armor/DarkHood.png diff --git a/public/assets/img/Armor/DarkTrousers.png b/legacy/public/assets/img/Armor/DarkTrousers.png similarity index 100% rename from public/assets/img/Armor/DarkTrousers.png rename to legacy/public/assets/img/Armor/DarkTrousers.png diff --git a/public/assets/img/Armor/DarkTunic.png b/legacy/public/assets/img/Armor/DarkTunic.png similarity index 100% rename from public/assets/img/Armor/DarkTunic.png rename to legacy/public/assets/img/Armor/DarkTunic.png diff --git a/public/assets/img/Armor/DesertVoeHeadband.png b/legacy/public/assets/img/Armor/DesertVoeHeadband.png similarity index 100% rename from public/assets/img/Armor/DesertVoeHeadband.png rename to legacy/public/assets/img/Armor/DesertVoeHeadband.png diff --git a/public/assets/img/Armor/DesertVoeSpaulder.png b/legacy/public/assets/img/Armor/DesertVoeSpaulder.png similarity index 100% rename from public/assets/img/Armor/DesertVoeSpaulder.png rename to legacy/public/assets/img/Armor/DesertVoeSpaulder.png diff --git a/public/assets/img/Armor/DesertVoeTrousers.png b/legacy/public/assets/img/Armor/DesertVoeTrousers.png similarity index 100% rename from public/assets/img/Armor/DesertVoeTrousers.png rename to legacy/public/assets/img/Armor/DesertVoeTrousers.png diff --git a/public/assets/img/Armor/DiamondCirclet.png b/legacy/public/assets/img/Armor/DiamondCirclet.png similarity index 100% rename from public/assets/img/Armor/DiamondCirclet.png rename to legacy/public/assets/img/Armor/DiamondCirclet.png diff --git a/public/assets/img/Armor/FierceDeityArmor.png b/legacy/public/assets/img/Armor/FierceDeityArmor.png similarity index 100% rename from public/assets/img/Armor/FierceDeityArmor.png rename to legacy/public/assets/img/Armor/FierceDeityArmor.png diff --git a/public/assets/img/Armor/FierceDeityBoots.png b/legacy/public/assets/img/Armor/FierceDeityBoots.png similarity index 100% rename from public/assets/img/Armor/FierceDeityBoots.png rename to legacy/public/assets/img/Armor/FierceDeityBoots.png diff --git a/public/assets/img/Armor/FierceDeityMask.png b/legacy/public/assets/img/Armor/FierceDeityMask.png similarity index 100% rename from public/assets/img/Armor/FierceDeityMask.png rename to legacy/public/assets/img/Armor/FierceDeityMask.png diff --git a/public/assets/img/Armor/FlamebreakerArmor.png b/legacy/public/assets/img/Armor/FlamebreakerArmor.png similarity index 100% rename from public/assets/img/Armor/FlamebreakerArmor.png rename to legacy/public/assets/img/Armor/FlamebreakerArmor.png diff --git a/public/assets/img/Armor/FlamebreakerBoots.png b/legacy/public/assets/img/Armor/FlamebreakerBoots.png similarity index 100% rename from public/assets/img/Armor/FlamebreakerBoots.png rename to legacy/public/assets/img/Armor/FlamebreakerBoots.png diff --git a/public/assets/img/Armor/FlamebreakerHelm.png b/legacy/public/assets/img/Armor/FlamebreakerHelm.png similarity index 100% rename from public/assets/img/Armor/FlamebreakerHelm.png rename to legacy/public/assets/img/Armor/FlamebreakerHelm.png diff --git a/public/assets/img/Armor/GerudoSirwal.png b/legacy/public/assets/img/Armor/GerudoSirwal.png similarity index 100% rename from public/assets/img/Armor/GerudoSirwal.png rename to legacy/public/assets/img/Armor/GerudoSirwal.png diff --git a/public/assets/img/Armor/GerudoTop.png b/legacy/public/assets/img/Armor/GerudoTop.png similarity index 100% rename from public/assets/img/Armor/GerudoTop.png rename to legacy/public/assets/img/Armor/GerudoTop.png diff --git a/public/assets/img/Armor/GerudoVeil.png b/legacy/public/assets/img/Armor/GerudoVeil.png similarity index 100% rename from public/assets/img/Armor/GerudoVeil.png rename to legacy/public/assets/img/Armor/GerudoVeil.png diff --git a/public/assets/img/Armor/HylianHood.png b/legacy/public/assets/img/Armor/HylianHood.png similarity index 100% rename from public/assets/img/Armor/HylianHood.png rename to legacy/public/assets/img/Armor/HylianHood.png diff --git a/public/assets/img/Armor/HylianTrousers.png b/legacy/public/assets/img/Armor/HylianTrousers.png similarity index 100% rename from public/assets/img/Armor/HylianTrousers.png rename to legacy/public/assets/img/Armor/HylianTrousers.png diff --git a/public/assets/img/Armor/HylianTunic.png b/legacy/public/assets/img/Armor/HylianTunic.png similarity index 100% rename from public/assets/img/Armor/HylianTunic.png rename to legacy/public/assets/img/Armor/HylianTunic.png diff --git a/public/assets/img/Armor/IslandLobsterShirt.png b/legacy/public/assets/img/Armor/IslandLobsterShirt.png similarity index 100% rename from public/assets/img/Armor/IslandLobsterShirt.png rename to legacy/public/assets/img/Armor/IslandLobsterShirt.png diff --git a/public/assets/img/Armor/KorokMask.png b/legacy/public/assets/img/Armor/KorokMask.png similarity index 100% rename from public/assets/img/Armor/KorokMask.png rename to legacy/public/assets/img/Armor/KorokMask.png diff --git a/public/assets/img/Armor/LizalfosMask.png b/legacy/public/assets/img/Armor/LizalfosMask.png similarity index 100% rename from public/assets/img/Armor/LizalfosMask.png rename to legacy/public/assets/img/Armor/LizalfosMask.png diff --git a/public/assets/img/Armor/LynelMask.png b/legacy/public/assets/img/Armor/LynelMask.png similarity index 100% rename from public/assets/img/Armor/LynelMask.png rename to legacy/public/assets/img/Armor/LynelMask.png diff --git a/public/assets/img/Armor/MajorasMask.png b/legacy/public/assets/img/Armor/MajorasMask.png similarity index 100% rename from public/assets/img/Armor/MajorasMask.png rename to legacy/public/assets/img/Armor/MajorasMask.png diff --git a/public/assets/img/Armor/MidnasHelmet.png b/legacy/public/assets/img/Armor/MidnasHelmet.png similarity index 100% rename from public/assets/img/Armor/MidnasHelmet.png rename to legacy/public/assets/img/Armor/MidnasHelmet.png diff --git a/public/assets/img/Armor/MoblinMask.png b/legacy/public/assets/img/Armor/MoblinMask.png similarity index 100% rename from public/assets/img/Armor/MoblinMask.png rename to legacy/public/assets/img/Armor/MoblinMask.png diff --git a/public/assets/img/Armor/NintendoSwitchShirt.png b/legacy/public/assets/img/Armor/NintendoSwitchShirt.png similarity index 100% rename from public/assets/img/Armor/NintendoSwitchShirt.png rename to legacy/public/assets/img/Armor/NintendoSwitchShirt.png diff --git a/public/assets/img/Armor/OldShirt.png b/legacy/public/assets/img/Armor/OldShirt.png similarity index 100% rename from public/assets/img/Armor/OldShirt.png rename to legacy/public/assets/img/Armor/OldShirt.png diff --git a/public/assets/img/Armor/OpalEarrings.png b/legacy/public/assets/img/Armor/OpalEarrings.png similarity index 100% rename from public/assets/img/Armor/OpalEarrings.png rename to legacy/public/assets/img/Armor/OpalEarrings.png diff --git a/public/assets/img/Armor/PhantomArmor.png b/legacy/public/assets/img/Armor/PhantomArmor.png similarity index 100% rename from public/assets/img/Armor/PhantomArmor.png rename to legacy/public/assets/img/Armor/PhantomArmor.png diff --git a/public/assets/img/Armor/PhantomGanonArmor.png b/legacy/public/assets/img/Armor/PhantomGanonArmor.png similarity index 100% rename from public/assets/img/Armor/PhantomGanonArmor.png rename to legacy/public/assets/img/Armor/PhantomGanonArmor.png diff --git a/public/assets/img/Armor/PhantomGanonGreaves.png b/legacy/public/assets/img/Armor/PhantomGanonGreaves.png similarity index 100% rename from public/assets/img/Armor/PhantomGanonGreaves.png rename to legacy/public/assets/img/Armor/PhantomGanonGreaves.png diff --git a/public/assets/img/Armor/PhantomGanonSkull.png b/legacy/public/assets/img/Armor/PhantomGanonSkull.png similarity index 100% rename from public/assets/img/Armor/PhantomGanonSkull.png rename to legacy/public/assets/img/Armor/PhantomGanonSkull.png diff --git a/public/assets/img/Armor/PhantomGreaves.png b/legacy/public/assets/img/Armor/PhantomGreaves.png similarity index 100% rename from public/assets/img/Armor/PhantomGreaves.png rename to legacy/public/assets/img/Armor/PhantomGreaves.png diff --git a/public/assets/img/Armor/PhantomHelmet.png b/legacy/public/assets/img/Armor/PhantomHelmet.png similarity index 100% rename from public/assets/img/Armor/PhantomHelmet.png rename to legacy/public/assets/img/Armor/PhantomHelmet.png diff --git a/public/assets/img/Armor/RadiantMask.png b/legacy/public/assets/img/Armor/RadiantMask.png similarity index 100% rename from public/assets/img/Armor/RadiantMask.png rename to legacy/public/assets/img/Armor/RadiantMask.png diff --git a/public/assets/img/Armor/RadiantShirt.png b/legacy/public/assets/img/Armor/RadiantShirt.png similarity index 100% rename from public/assets/img/Armor/RadiantShirt.png rename to legacy/public/assets/img/Armor/RadiantShirt.png diff --git a/public/assets/img/Armor/RadiantTights.png b/legacy/public/assets/img/Armor/RadiantTights.png similarity index 100% rename from public/assets/img/Armor/RadiantTights.png rename to legacy/public/assets/img/Armor/RadiantTights.png diff --git a/public/assets/img/Armor/RaviosHood.png b/legacy/public/assets/img/Armor/RaviosHood.png similarity index 100% rename from public/assets/img/Armor/RaviosHood.png rename to legacy/public/assets/img/Armor/RaviosHood.png diff --git a/public/assets/img/Armor/RoyalGuardBoots.png b/legacy/public/assets/img/Armor/RoyalGuardBoots.png similarity index 100% rename from public/assets/img/Armor/RoyalGuardBoots.png rename to legacy/public/assets/img/Armor/RoyalGuardBoots.png diff --git a/public/assets/img/Armor/RoyalGuardCap.png b/legacy/public/assets/img/Armor/RoyalGuardCap.png similarity index 100% rename from public/assets/img/Armor/RoyalGuardCap.png rename to legacy/public/assets/img/Armor/RoyalGuardCap.png diff --git a/public/assets/img/Armor/RoyalGuardUniform.png b/legacy/public/assets/img/Armor/RoyalGuardUniform.png similarity index 100% rename from public/assets/img/Armor/RoyalGuardUniform.png rename to legacy/public/assets/img/Armor/RoyalGuardUniform.png diff --git a/public/assets/img/Armor/RubberArmor.png b/legacy/public/assets/img/Armor/RubberArmor.png similarity index 100% rename from public/assets/img/Armor/RubberArmor.png rename to legacy/public/assets/img/Armor/RubberArmor.png diff --git a/public/assets/img/Armor/RubberHelm.png b/legacy/public/assets/img/Armor/RubberHelm.png similarity index 100% rename from public/assets/img/Armor/RubberHelm.png rename to legacy/public/assets/img/Armor/RubberHelm.png diff --git a/public/assets/img/Armor/RubberTights.png b/legacy/public/assets/img/Armor/RubberTights.png similarity index 100% rename from public/assets/img/Armor/RubberTights.png rename to legacy/public/assets/img/Armor/RubberTights.png diff --git a/public/assets/img/Armor/RubyCirclet.png b/legacy/public/assets/img/Armor/RubyCirclet.png similarity index 100% rename from public/assets/img/Armor/RubyCirclet.png rename to legacy/public/assets/img/Armor/RubyCirclet.png diff --git a/public/assets/img/Armor/SalvagerHeadwear.png b/legacy/public/assets/img/Armor/SalvagerHeadwear.png similarity index 100% rename from public/assets/img/Armor/SalvagerHeadwear.png rename to legacy/public/assets/img/Armor/SalvagerHeadwear.png diff --git a/public/assets/img/Armor/SalvagerTrousers.png b/legacy/public/assets/img/Armor/SalvagerTrousers.png similarity index 100% rename from public/assets/img/Armor/SalvagerTrousers.png rename to legacy/public/assets/img/Armor/SalvagerTrousers.png diff --git a/public/assets/img/Armor/SalvagerVest.png b/legacy/public/assets/img/Armor/SalvagerVest.png similarity index 100% rename from public/assets/img/Armor/SalvagerVest.png rename to legacy/public/assets/img/Armor/SalvagerVest.png diff --git a/public/assets/img/Armor/SandBoots.png b/legacy/public/assets/img/Armor/SandBoots.png similarity index 100% rename from public/assets/img/Armor/SandBoots.png rename to legacy/public/assets/img/Armor/SandBoots.png diff --git a/public/assets/img/Armor/SapphireCirclet.png b/legacy/public/assets/img/Armor/SapphireCirclet.png similarity index 100% rename from public/assets/img/Armor/SapphireCirclet.png rename to legacy/public/assets/img/Armor/SapphireCirclet.png diff --git a/public/assets/img/Armor/SheiksMask.png b/legacy/public/assets/img/Armor/SheiksMask.png similarity index 100% rename from public/assets/img/Armor/SheiksMask.png rename to legacy/public/assets/img/Armor/SheiksMask.png diff --git a/public/assets/img/Armor/SnowBoots.png b/legacy/public/assets/img/Armor/SnowBoots.png similarity index 100% rename from public/assets/img/Armor/SnowBoots.png rename to legacy/public/assets/img/Armor/SnowBoots.png diff --git a/public/assets/img/Armor/SnowquillHeaddress.png b/legacy/public/assets/img/Armor/SnowquillHeaddress.png similarity index 100% rename from public/assets/img/Armor/SnowquillHeaddress.png rename to legacy/public/assets/img/Armor/SnowquillHeaddress.png diff --git a/public/assets/img/Armor/SnowquillTrousers.png b/legacy/public/assets/img/Armor/SnowquillTrousers.png similarity index 100% rename from public/assets/img/Armor/SnowquillTrousers.png rename to legacy/public/assets/img/Armor/SnowquillTrousers.png diff --git a/public/assets/img/Armor/SnowquillTunic.png b/legacy/public/assets/img/Armor/SnowquillTunic.png similarity index 100% rename from public/assets/img/Armor/SnowquillTunic.png rename to legacy/public/assets/img/Armor/SnowquillTunic.png diff --git a/public/assets/img/Armor/SoldiersArmor.png b/legacy/public/assets/img/Armor/SoldiersArmor.png similarity index 100% rename from public/assets/img/Armor/SoldiersArmor.png rename to legacy/public/assets/img/Armor/SoldiersArmor.png diff --git a/public/assets/img/Armor/SoldiersGreaves.png b/legacy/public/assets/img/Armor/SoldiersGreaves.png similarity index 100% rename from public/assets/img/Armor/SoldiersGreaves.png rename to legacy/public/assets/img/Armor/SoldiersGreaves.png diff --git a/public/assets/img/Armor/SoldiersHelm.png b/legacy/public/assets/img/Armor/SoldiersHelm.png similarity index 100% rename from public/assets/img/Armor/SoldiersHelm.png rename to legacy/public/assets/img/Armor/SoldiersHelm.png diff --git a/public/assets/img/Armor/StealthChestGuard.png b/legacy/public/assets/img/Armor/StealthChestGuard.png similarity index 100% rename from public/assets/img/Armor/StealthChestGuard.png rename to legacy/public/assets/img/Armor/StealthChestGuard.png diff --git a/public/assets/img/Armor/StealthMask.png b/legacy/public/assets/img/Armor/StealthMask.png similarity index 100% rename from public/assets/img/Armor/StealthMask.png rename to legacy/public/assets/img/Armor/StealthMask.png diff --git a/public/assets/img/Armor/StealthTights.png b/legacy/public/assets/img/Armor/StealthTights.png similarity index 100% rename from public/assets/img/Armor/StealthTights.png rename to legacy/public/assets/img/Armor/StealthTights.png diff --git a/public/assets/img/Armor/ThunderHelm.png b/legacy/public/assets/img/Armor/ThunderHelm.png similarity index 100% rename from public/assets/img/Armor/ThunderHelm.png rename to legacy/public/assets/img/Armor/ThunderHelm.png diff --git a/public/assets/img/Armor/TinglesHood.png b/legacy/public/assets/img/Armor/TinglesHood.png similarity index 100% rename from public/assets/img/Armor/TinglesHood.png rename to legacy/public/assets/img/Armor/TinglesHood.png diff --git a/public/assets/img/Armor/TinglesShirt.png b/legacy/public/assets/img/Armor/TinglesShirt.png similarity index 100% rename from public/assets/img/Armor/TinglesShirt.png rename to legacy/public/assets/img/Armor/TinglesShirt.png diff --git a/public/assets/img/Armor/TinglesTights.png b/legacy/public/assets/img/Armor/TinglesTights.png similarity index 100% rename from public/assets/img/Armor/TinglesTights.png rename to legacy/public/assets/img/Armor/TinglesTights.png diff --git a/public/assets/img/Armor/TopazEarrings.png b/legacy/public/assets/img/Armor/TopazEarrings.png similarity index 100% rename from public/assets/img/Armor/TopazEarrings.png rename to legacy/public/assets/img/Armor/TopazEarrings.png diff --git a/public/assets/img/Armor/TrousersOfTheHero.png b/legacy/public/assets/img/Armor/TrousersOfTheHero.png similarity index 100% rename from public/assets/img/Armor/TrousersOfTheHero.png rename to legacy/public/assets/img/Armor/TrousersOfTheHero.png diff --git a/public/assets/img/Armor/TrousersOfTheSky.png b/legacy/public/assets/img/Armor/TrousersOfTheSky.png similarity index 100% rename from public/assets/img/Armor/TrousersOfTheSky.png rename to legacy/public/assets/img/Armor/TrousersOfTheSky.png diff --git a/public/assets/img/Armor/TrousersOfTheWild.png b/legacy/public/assets/img/Armor/TrousersOfTheWild.png similarity index 100% rename from public/assets/img/Armor/TrousersOfTheWild.png rename to legacy/public/assets/img/Armor/TrousersOfTheWild.png diff --git a/public/assets/img/Armor/TrousersOfTheWind.png b/legacy/public/assets/img/Armor/TrousersOfTheWind.png similarity index 100% rename from public/assets/img/Armor/TrousersOfTheWind.png rename to legacy/public/assets/img/Armor/TrousersOfTheWind.png diff --git a/public/assets/img/Armor/TrousersOfTime.png b/legacy/public/assets/img/Armor/TrousersOfTime.png similarity index 100% rename from public/assets/img/Armor/TrousersOfTime.png rename to legacy/public/assets/img/Armor/TrousersOfTime.png diff --git a/public/assets/img/Armor/TrousersOfTwilight.png b/legacy/public/assets/img/Armor/TrousersOfTwilight.png similarity index 100% rename from public/assets/img/Armor/TrousersOfTwilight.png rename to legacy/public/assets/img/Armor/TrousersOfTwilight.png diff --git a/public/assets/img/Armor/TunicOfTheHero.png b/legacy/public/assets/img/Armor/TunicOfTheHero.png similarity index 100% rename from public/assets/img/Armor/TunicOfTheHero.png rename to legacy/public/assets/img/Armor/TunicOfTheHero.png diff --git a/public/assets/img/Armor/TunicOfTheSky.png b/legacy/public/assets/img/Armor/TunicOfTheSky.png similarity index 100% rename from public/assets/img/Armor/TunicOfTheSky.png rename to legacy/public/assets/img/Armor/TunicOfTheSky.png diff --git a/public/assets/img/Armor/TunicOfTheWild.png b/legacy/public/assets/img/Armor/TunicOfTheWild.png similarity index 100% rename from public/assets/img/Armor/TunicOfTheWild.png rename to legacy/public/assets/img/Armor/TunicOfTheWild.png diff --git a/public/assets/img/Armor/TunicOfTheWind.png b/legacy/public/assets/img/Armor/TunicOfTheWind.png similarity index 100% rename from public/assets/img/Armor/TunicOfTheWind.png rename to legacy/public/assets/img/Armor/TunicOfTheWind.png diff --git a/public/assets/img/Armor/TunicOfTime.png b/legacy/public/assets/img/Armor/TunicOfTime.png similarity index 100% rename from public/assets/img/Armor/TunicOfTime.png rename to legacy/public/assets/img/Armor/TunicOfTime.png diff --git a/public/assets/img/Armor/TunicOfTwilight.png b/legacy/public/assets/img/Armor/TunicOfTwilight.png similarity index 100% rename from public/assets/img/Armor/TunicOfTwilight.png rename to legacy/public/assets/img/Armor/TunicOfTwilight.png diff --git a/public/assets/img/Armor/VahMedohDivineHelm.png b/legacy/public/assets/img/Armor/VahMedohDivineHelm.png similarity index 100% rename from public/assets/img/Armor/VahMedohDivineHelm.png rename to legacy/public/assets/img/Armor/VahMedohDivineHelm.png diff --git a/public/assets/img/Armor/VahNaborisDivineHelm.png b/legacy/public/assets/img/Armor/VahNaborisDivineHelm.png similarity index 100% rename from public/assets/img/Armor/VahNaborisDivineHelm.png rename to legacy/public/assets/img/Armor/VahNaborisDivineHelm.png diff --git a/public/assets/img/Armor/VahRudaniaDivineHelm.png b/legacy/public/assets/img/Armor/VahRudaniaDivineHelm.png similarity index 100% rename from public/assets/img/Armor/VahRudaniaDivineHelm.png rename to legacy/public/assets/img/Armor/VahRudaniaDivineHelm.png diff --git a/public/assets/img/Armor/VahRutaDivineHelm.png b/legacy/public/assets/img/Armor/VahRutaDivineHelm.png similarity index 100% rename from public/assets/img/Armor/VahRutaDivineHelm.png rename to legacy/public/assets/img/Armor/VahRutaDivineHelm.png diff --git a/public/assets/img/Armor/WarmDoublet.png b/legacy/public/assets/img/Armor/WarmDoublet.png similarity index 100% rename from public/assets/img/Armor/WarmDoublet.png rename to legacy/public/assets/img/Armor/WarmDoublet.png diff --git a/public/assets/img/Armor/WellWornTrousers.png b/legacy/public/assets/img/Armor/WellWornTrousers.png similarity index 100% rename from public/assets/img/Armor/WellWornTrousers.png rename to legacy/public/assets/img/Armor/WellWornTrousers.png diff --git a/public/assets/img/Armor/ZantsHelmet.png b/legacy/public/assets/img/Armor/ZantsHelmet.png similarity index 100% rename from public/assets/img/Armor/ZantsHelmet.png rename to legacy/public/assets/img/Armor/ZantsHelmet.png diff --git a/public/assets/img/Armor/ZoraArmor.png b/legacy/public/assets/img/Armor/ZoraArmor.png similarity index 100% rename from public/assets/img/Armor/ZoraArmor.png rename to legacy/public/assets/img/Armor/ZoraArmor.png diff --git a/public/assets/img/Armor/ZoraGreaves.png b/legacy/public/assets/img/Armor/ZoraGreaves.png similarity index 100% rename from public/assets/img/Armor/ZoraGreaves.png rename to legacy/public/assets/img/Armor/ZoraGreaves.png diff --git a/public/assets/img/Armor/ZoraHelm.png b/legacy/public/assets/img/Armor/ZoraHelm.png similarity index 100% rename from public/assets/img/Armor/ZoraHelm.png rename to legacy/public/assets/img/Armor/ZoraHelm.png diff --git a/public/assets/img/Arrow/AncientArrow.png b/legacy/public/assets/img/Arrow/AncientArrow.png similarity index 100% rename from public/assets/img/Arrow/AncientArrow.png rename to legacy/public/assets/img/Arrow/AncientArrow.png diff --git a/public/assets/img/Arrow/BombArrow.png b/legacy/public/assets/img/Arrow/BombArrow.png similarity index 100% rename from public/assets/img/Arrow/BombArrow.png rename to legacy/public/assets/img/Arrow/BombArrow.png diff --git a/public/assets/img/Arrow/FireArrow.png b/legacy/public/assets/img/Arrow/FireArrow.png similarity index 100% rename from public/assets/img/Arrow/FireArrow.png rename to legacy/public/assets/img/Arrow/FireArrow.png diff --git a/public/assets/img/Arrow/IceArrow.png b/legacy/public/assets/img/Arrow/IceArrow.png similarity index 100% rename from public/assets/img/Arrow/IceArrow.png rename to legacy/public/assets/img/Arrow/IceArrow.png diff --git a/public/assets/img/Arrow/NormalArrow.png b/legacy/public/assets/img/Arrow/NormalArrow.png similarity index 100% rename from public/assets/img/Arrow/NormalArrow.png rename to legacy/public/assets/img/Arrow/NormalArrow.png diff --git a/public/assets/img/Arrow/ShockArrow.png b/legacy/public/assets/img/Arrow/ShockArrow.png similarity index 100% rename from public/assets/img/Arrow/ShockArrow.png rename to legacy/public/assets/img/Arrow/ShockArrow.png diff --git a/public/assets/img/Bow/AncientBow.png b/legacy/public/assets/img/Bow/AncientBow.png similarity index 100% rename from public/assets/img/Bow/AncientBow.png rename to legacy/public/assets/img/Bow/AncientBow.png diff --git a/public/assets/img/Bow/BokoBow.png b/legacy/public/assets/img/Bow/BokoBow.png similarity index 100% rename from public/assets/img/Bow/BokoBow.png rename to legacy/public/assets/img/Bow/BokoBow.png diff --git a/public/assets/img/Bow/Bow.png b/legacy/public/assets/img/Bow/Bow.png similarity index 100% rename from public/assets/img/Bow/Bow.png rename to legacy/public/assets/img/Bow/Bow.png diff --git a/public/assets/img/Bow/BowOfLight.png b/legacy/public/assets/img/Bow/BowOfLight.png similarity index 100% rename from public/assets/img/Bow/BowOfLight.png rename to legacy/public/assets/img/Bow/BowOfLight.png diff --git a/public/assets/img/Bow/DragonBoneBokoBow.png b/legacy/public/assets/img/Bow/DragonBoneBokoBow.png similarity index 100% rename from public/assets/img/Bow/DragonBoneBokoBow.png rename to legacy/public/assets/img/Bow/DragonBoneBokoBow.png diff --git a/public/assets/img/Bow/DuplexBow.png b/legacy/public/assets/img/Bow/DuplexBow.png similarity index 100% rename from public/assets/img/Bow/DuplexBow.png rename to legacy/public/assets/img/Bow/DuplexBow.png diff --git a/public/assets/img/Bow/FalconBow.png b/legacy/public/assets/img/Bow/FalconBow.png similarity index 100% rename from public/assets/img/Bow/FalconBow.png rename to legacy/public/assets/img/Bow/FalconBow.png diff --git a/public/assets/img/Bow/ForestDwellersBow.png b/legacy/public/assets/img/Bow/ForestDwellersBow.png similarity index 100% rename from public/assets/img/Bow/ForestDwellersBow.png rename to legacy/public/assets/img/Bow/ForestDwellersBow.png diff --git a/public/assets/img/Bow/GoldenBow.png b/legacy/public/assets/img/Bow/GoldenBow.png similarity index 100% rename from public/assets/img/Bow/GoldenBow.png rename to legacy/public/assets/img/Bow/GoldenBow.png diff --git a/public/assets/img/Bow/GreatEagleBow.png b/legacy/public/assets/img/Bow/GreatEagleBow.png similarity index 100% rename from public/assets/img/Bow/GreatEagleBow.png rename to legacy/public/assets/img/Bow/GreatEagleBow.png diff --git a/public/assets/img/Bow/KnightsBow.png b/legacy/public/assets/img/Bow/KnightsBow.png similarity index 100% rename from public/assets/img/Bow/KnightsBow.png rename to legacy/public/assets/img/Bow/KnightsBow.png diff --git a/public/assets/img/Bow/LizalBow.png b/legacy/public/assets/img/Bow/LizalBow.png similarity index 100% rename from public/assets/img/Bow/LizalBow.png rename to legacy/public/assets/img/Bow/LizalBow.png diff --git a/public/assets/img/Bow/LynelBow.png b/legacy/public/assets/img/Bow/LynelBow.png similarity index 100% rename from public/assets/img/Bow/LynelBow.png rename to legacy/public/assets/img/Bow/LynelBow.png diff --git a/public/assets/img/Bow/MightyLynelBow.png b/legacy/public/assets/img/Bow/MightyLynelBow.png similarity index 100% rename from public/assets/img/Bow/MightyLynelBow.png rename to legacy/public/assets/img/Bow/MightyLynelBow.png diff --git a/public/assets/img/Bow/PhrenicBow.png b/legacy/public/assets/img/Bow/PhrenicBow.png similarity index 100% rename from public/assets/img/Bow/PhrenicBow.png rename to legacy/public/assets/img/Bow/PhrenicBow.png diff --git a/public/assets/img/Bow/RoyalBow.png b/legacy/public/assets/img/Bow/RoyalBow.png similarity index 100% rename from public/assets/img/Bow/RoyalBow.png rename to legacy/public/assets/img/Bow/RoyalBow.png diff --git a/public/assets/img/Bow/RoyalGuardsBow.png b/legacy/public/assets/img/Bow/RoyalGuardsBow.png similarity index 100% rename from public/assets/img/Bow/RoyalGuardsBow.png rename to legacy/public/assets/img/Bow/RoyalGuardsBow.png diff --git a/public/assets/img/Bow/SavageLynelBow.png b/legacy/public/assets/img/Bow/SavageLynelBow.png similarity index 100% rename from public/assets/img/Bow/SavageLynelBow.png rename to legacy/public/assets/img/Bow/SavageLynelBow.png diff --git a/public/assets/img/Bow/SilverBow.png b/legacy/public/assets/img/Bow/SilverBow.png similarity index 100% rename from public/assets/img/Bow/SilverBow.png rename to legacy/public/assets/img/Bow/SilverBow.png diff --git a/public/assets/img/Bow/SoldiersBow.png b/legacy/public/assets/img/Bow/SoldiersBow.png similarity index 100% rename from public/assets/img/Bow/SoldiersBow.png rename to legacy/public/assets/img/Bow/SoldiersBow.png diff --git a/public/assets/img/Bow/SpikedBokoBow.png b/legacy/public/assets/img/Bow/SpikedBokoBow.png similarity index 100% rename from public/assets/img/Bow/SpikedBokoBow.png rename to legacy/public/assets/img/Bow/SpikedBokoBow.png diff --git a/public/assets/img/Bow/SteelLizalBow.png b/legacy/public/assets/img/Bow/SteelLizalBow.png similarity index 100% rename from public/assets/img/Bow/SteelLizalBow.png rename to legacy/public/assets/img/Bow/SteelLizalBow.png diff --git a/public/assets/img/Bow/StrengthenedLizalBow.png b/legacy/public/assets/img/Bow/StrengthenedLizalBow.png similarity index 100% rename from public/assets/img/Bow/StrengthenedLizalBow.png rename to legacy/public/assets/img/Bow/StrengthenedLizalBow.png diff --git a/public/assets/img/Bow/SwallowBow.png b/legacy/public/assets/img/Bow/SwallowBow.png similarity index 100% rename from public/assets/img/Bow/SwallowBow.png rename to legacy/public/assets/img/Bow/SwallowBow.png diff --git a/public/assets/img/Bow/TravelersBow.png b/legacy/public/assets/img/Bow/TravelersBow.png similarity index 100% rename from public/assets/img/Bow/TravelersBow.png rename to legacy/public/assets/img/Bow/TravelersBow.png diff --git a/public/assets/img/Bow/TwilightBow.png b/legacy/public/assets/img/Bow/TwilightBow.png similarity index 100% rename from public/assets/img/Bow/TwilightBow.png rename to legacy/public/assets/img/Bow/TwilightBow.png diff --git a/public/assets/img/Bow/WoodenBow.png b/legacy/public/assets/img/Bow/WoodenBow.png similarity index 100% rename from public/assets/img/Bow/WoodenBow.png rename to legacy/public/assets/img/Bow/WoodenBow.png diff --git a/public/assets/img/Food/ApplePie.png b/legacy/public/assets/img/Food/ApplePie.png similarity index 100% rename from public/assets/img/Food/ApplePie.png rename to legacy/public/assets/img/Food/ApplePie.png diff --git a/public/assets/img/Food/BakedApple.png b/legacy/public/assets/img/Food/BakedApple.png similarity index 100% rename from public/assets/img/Food/BakedApple.png rename to legacy/public/assets/img/Food/BakedApple.png diff --git a/public/assets/img/Food/BakedFortifiedPumpkin.png b/legacy/public/assets/img/Food/BakedFortifiedPumpkin.png similarity index 100% rename from public/assets/img/Food/BakedFortifiedPumpkin.png rename to legacy/public/assets/img/Food/BakedFortifiedPumpkin.png diff --git a/public/assets/img/Food/BakedPalmFruit.png b/legacy/public/assets/img/Food/BakedPalmFruit.png similarity index 100% rename from public/assets/img/Food/BakedPalmFruit.png rename to legacy/public/assets/img/Food/BakedPalmFruit.png diff --git a/public/assets/img/Food/BlackenedCrab.png b/legacy/public/assets/img/Food/BlackenedCrab.png similarity index 100% rename from public/assets/img/Food/BlackenedCrab.png rename to legacy/public/assets/img/Food/BlackenedCrab.png diff --git a/public/assets/img/Food/BlueshellEscargot.png b/legacy/public/assets/img/Food/BlueshellEscargot.png similarity index 100% rename from public/assets/img/Food/BlueshellEscargot.png rename to legacy/public/assets/img/Food/BlueshellEscargot.png diff --git a/public/assets/img/Food/CampfireEgg.png b/legacy/public/assets/img/Food/CampfireEgg.png similarity index 100% rename from public/assets/img/Food/CampfireEgg.png rename to legacy/public/assets/img/Food/CampfireEgg.png diff --git a/public/assets/img/Food/CarrotCake.png b/legacy/public/assets/img/Food/CarrotCake.png similarity index 100% rename from public/assets/img/Food/CarrotCake.png rename to legacy/public/assets/img/Food/CarrotCake.png diff --git a/public/assets/img/Food/CarrotStew.png b/legacy/public/assets/img/Food/CarrotStew.png similarity index 100% rename from public/assets/img/Food/CarrotStew.png rename to legacy/public/assets/img/Food/CarrotStew.png diff --git a/public/assets/img/Food/CharredPepper.png b/legacy/public/assets/img/Food/CharredPepper.png similarity index 100% rename from public/assets/img/Food/CharredPepper.png rename to legacy/public/assets/img/Food/CharredPepper.png diff --git a/public/assets/img/Food/ChillyElixir.png b/legacy/public/assets/img/Food/ChillyElixir.png similarity index 100% rename from public/assets/img/Food/ChillyElixir.png rename to legacy/public/assets/img/Food/ChillyElixir.png diff --git a/public/assets/img/Food/ClamChowder.png b/legacy/public/assets/img/Food/ClamChowder.png similarity index 100% rename from public/assets/img/Food/ClamChowder.png rename to legacy/public/assets/img/Food/ClamChowder.png diff --git a/public/assets/img/Food/CopiousFriedWildGreens.png b/legacy/public/assets/img/Food/CopiousFriedWildGreens.png similarity index 100% rename from public/assets/img/Food/CopiousFriedWildGreens.png rename to legacy/public/assets/img/Food/CopiousFriedWildGreens.png diff --git a/public/assets/img/Food/CopiousMeatSkewers.png b/legacy/public/assets/img/Food/CopiousMeatSkewers.png similarity index 100% rename from public/assets/img/Food/CopiousMeatSkewers.png rename to legacy/public/assets/img/Food/CopiousMeatSkewers.png diff --git a/public/assets/img/Food/CopiousMushroomSkewers.png b/legacy/public/assets/img/Food/CopiousMushroomSkewers.png similarity index 100% rename from public/assets/img/Food/CopiousMushroomSkewers.png rename to legacy/public/assets/img/Food/CopiousMushroomSkewers.png diff --git a/public/assets/img/Food/CopiousSeafoodSkewers.png b/legacy/public/assets/img/Food/CopiousSeafoodSkewers.png similarity index 100% rename from public/assets/img/Food/CopiousSeafoodSkewers.png rename to legacy/public/assets/img/Food/CopiousSeafoodSkewers.png diff --git a/public/assets/img/Food/CopiousSimmeredFruit.png b/legacy/public/assets/img/Food/CopiousSimmeredFruit.png similarity index 100% rename from public/assets/img/Food/CopiousSimmeredFruit.png rename to legacy/public/assets/img/Food/CopiousSimmeredFruit.png diff --git a/public/assets/img/Food/CrabOmeletWithRice.png b/legacy/public/assets/img/Food/CrabOmeletWithRice.png similarity index 100% rename from public/assets/img/Food/CrabOmeletWithRice.png rename to legacy/public/assets/img/Food/CrabOmeletWithRice.png diff --git a/public/assets/img/Food/CrabRisotto.png b/legacy/public/assets/img/Food/CrabRisotto.png similarity index 100% rename from public/assets/img/Food/CrabRisotto.png rename to legacy/public/assets/img/Food/CrabRisotto.png diff --git a/public/assets/img/Food/CrabStirFry.png b/legacy/public/assets/img/Food/CrabStirFry.png similarity index 100% rename from public/assets/img/Food/CrabStirFry.png rename to legacy/public/assets/img/Food/CrabStirFry.png diff --git a/public/assets/img/Food/CreamOfMushroomSoup.png b/legacy/public/assets/img/Food/CreamOfMushroomSoup.png similarity index 100% rename from public/assets/img/Food/CreamOfMushroomSoup.png rename to legacy/public/assets/img/Food/CreamOfMushroomSoup.png diff --git a/public/assets/img/Food/CreamOfVegetableSoup.png b/legacy/public/assets/img/Food/CreamOfVegetableSoup.png similarity index 100% rename from public/assets/img/Food/CreamOfVegetableSoup.png rename to legacy/public/assets/img/Food/CreamOfVegetableSoup.png diff --git a/public/assets/img/Food/CreamyHeartSoup.png b/legacy/public/assets/img/Food/CreamyHeartSoup.png similarity index 100% rename from public/assets/img/Food/CreamyHeartSoup.png rename to legacy/public/assets/img/Food/CreamyHeartSoup.png diff --git a/public/assets/img/Food/CreamyMeatSoup.png b/legacy/public/assets/img/Food/CreamyMeatSoup.png similarity index 100% rename from public/assets/img/Food/CreamyMeatSoup.png rename to legacy/public/assets/img/Food/CreamyMeatSoup.png diff --git a/public/assets/img/Food/CreamySeafoodSoup.png b/legacy/public/assets/img/Food/CreamySeafoodSoup.png similarity index 100% rename from public/assets/img/Food/CreamySeafoodSoup.png rename to legacy/public/assets/img/Food/CreamySeafoodSoup.png diff --git a/public/assets/img/Food/CurryPilaf.png b/legacy/public/assets/img/Food/CurryPilaf.png similarity index 100% rename from public/assets/img/Food/CurryPilaf.png rename to legacy/public/assets/img/Food/CurryPilaf.png diff --git a/public/assets/img/Food/CurryRice.png b/legacy/public/assets/img/Food/CurryRice.png similarity index 100% rename from public/assets/img/Food/CurryRice.png rename to legacy/public/assets/img/Food/CurryRice.png diff --git a/public/assets/img/Food/DubiousFood.png b/legacy/public/assets/img/Food/DubiousFood.png similarity index 100% rename from public/assets/img/Food/DubiousFood.png rename to legacy/public/assets/img/Food/DubiousFood.png diff --git a/public/assets/img/Food/EggPudding.png b/legacy/public/assets/img/Food/EggPudding.png similarity index 100% rename from public/assets/img/Food/EggPudding.png rename to legacy/public/assets/img/Food/EggPudding.png diff --git a/public/assets/img/Food/EggTart.png b/legacy/public/assets/img/Food/EggTart.png similarity index 100% rename from public/assets/img/Food/EggTart.png rename to legacy/public/assets/img/Food/EggTart.png diff --git a/public/assets/img/Food/ElectroElixir.png b/legacy/public/assets/img/Food/ElectroElixir.png similarity index 100% rename from public/assets/img/Food/ElectroElixir.png rename to legacy/public/assets/img/Food/ElectroElixir.png diff --git a/public/assets/img/Food/Elixir.png b/legacy/public/assets/img/Food/Elixir.png similarity index 100% rename from public/assets/img/Food/Elixir.png rename to legacy/public/assets/img/Food/Elixir.png diff --git a/public/assets/img/Food/EnduringElixir.png b/legacy/public/assets/img/Food/EnduringElixir.png similarity index 100% rename from public/assets/img/Food/EnduringElixir.png rename to legacy/public/assets/img/Food/EnduringElixir.png diff --git a/public/assets/img/Food/EnergizingElixir.png b/legacy/public/assets/img/Food/EnergizingElixir.png similarity index 100% rename from public/assets/img/Food/EnergizingElixir.png rename to legacy/public/assets/img/Food/EnergizingElixir.png diff --git a/public/assets/img/Food/FairyTonic.png b/legacy/public/assets/img/Food/FairyTonic.png similarity index 100% rename from public/assets/img/Food/FairyTonic.png rename to legacy/public/assets/img/Food/FairyTonic.png diff --git a/public/assets/img/Food/FireproofElixir.png b/legacy/public/assets/img/Food/FireproofElixir.png similarity index 100% rename from public/assets/img/Food/FireproofElixir.png rename to legacy/public/assets/img/Food/FireproofElixir.png diff --git a/public/assets/img/Food/FishAndMushroomSkewer.png b/legacy/public/assets/img/Food/FishAndMushroomSkewer.png similarity index 100% rename from public/assets/img/Food/FishAndMushroomSkewer.png rename to legacy/public/assets/img/Food/FishAndMushroomSkewer.png diff --git a/public/assets/img/Food/FishPie.png b/legacy/public/assets/img/Food/FishPie.png similarity index 100% rename from public/assets/img/Food/FishPie.png rename to legacy/public/assets/img/Food/FishPie.png diff --git a/public/assets/img/Food/FishSkewer.png b/legacy/public/assets/img/Food/FishSkewer.png similarity index 100% rename from public/assets/img/Food/FishSkewer.png rename to legacy/public/assets/img/Food/FishSkewer.png diff --git a/public/assets/img/Food/FragrantMushroomSaute.png b/legacy/public/assets/img/Food/FragrantMushroomSaute.png similarity index 100% rename from public/assets/img/Food/FragrantMushroomSaute.png rename to legacy/public/assets/img/Food/FragrantMushroomSaute.png diff --git a/public/assets/img/Food/FriedBananas.png b/legacy/public/assets/img/Food/FriedBananas.png similarity index 100% rename from public/assets/img/Food/FriedBananas.png rename to legacy/public/assets/img/Food/FriedBananas.png diff --git a/public/assets/img/Food/FriedEggAndRice.png b/legacy/public/assets/img/Food/FriedEggAndRice.png similarity index 100% rename from public/assets/img/Food/FriedEggAndRice.png rename to legacy/public/assets/img/Food/FriedEggAndRice.png diff --git a/public/assets/img/Food/FriedWildGreens.png b/legacy/public/assets/img/Food/FriedWildGreens.png similarity index 100% rename from public/assets/img/Food/FriedWildGreens.png rename to legacy/public/assets/img/Food/FriedWildGreens.png diff --git a/public/assets/img/Food/FrozenBass.png b/legacy/public/assets/img/Food/FrozenBass.png similarity index 100% rename from public/assets/img/Food/FrozenBass.png rename to legacy/public/assets/img/Food/FrozenBass.png diff --git a/public/assets/img/Food/FrozenBirdDrumstick.png b/legacy/public/assets/img/Food/FrozenBirdDrumstick.png similarity index 100% rename from public/assets/img/Food/FrozenBirdDrumstick.png rename to legacy/public/assets/img/Food/FrozenBirdDrumstick.png diff --git a/public/assets/img/Food/FrozenBirdThigh.png b/legacy/public/assets/img/Food/FrozenBirdThigh.png similarity index 100% rename from public/assets/img/Food/FrozenBirdThigh.png rename to legacy/public/assets/img/Food/FrozenBirdThigh.png diff --git a/public/assets/img/Food/FrozenCarp.png b/legacy/public/assets/img/Food/FrozenCarp.png similarity index 100% rename from public/assets/img/Food/FrozenCarp.png rename to legacy/public/assets/img/Food/FrozenCarp.png diff --git a/public/assets/img/Food/FrozenCrab.png b/legacy/public/assets/img/Food/FrozenCrab.png similarity index 100% rename from public/assets/img/Food/FrozenCrab.png rename to legacy/public/assets/img/Food/FrozenCrab.png diff --git a/public/assets/img/Food/FrozenHeartyBass.png b/legacy/public/assets/img/Food/FrozenHeartyBass.png similarity index 100% rename from public/assets/img/Food/FrozenHeartyBass.png rename to legacy/public/assets/img/Food/FrozenHeartyBass.png diff --git a/public/assets/img/Food/FrozenHeartySalmon.png b/legacy/public/assets/img/Food/FrozenHeartySalmon.png similarity index 100% rename from public/assets/img/Food/FrozenHeartySalmon.png rename to legacy/public/assets/img/Food/FrozenHeartySalmon.png diff --git a/public/assets/img/Food/FrozenPorgy.png b/legacy/public/assets/img/Food/FrozenPorgy.png similarity index 100% rename from public/assets/img/Food/FrozenPorgy.png rename to legacy/public/assets/img/Food/FrozenPorgy.png diff --git a/public/assets/img/Food/FrozenRiverSnail.png b/legacy/public/assets/img/Food/FrozenRiverSnail.png similarity index 100% rename from public/assets/img/Food/FrozenRiverSnail.png rename to legacy/public/assets/img/Food/FrozenRiverSnail.png diff --git a/public/assets/img/Food/FrozenTrout.png b/legacy/public/assets/img/Food/FrozenTrout.png similarity index 100% rename from public/assets/img/Food/FrozenTrout.png rename to legacy/public/assets/img/Food/FrozenTrout.png diff --git a/public/assets/img/Food/FrozenWholeBird.png b/legacy/public/assets/img/Food/FrozenWholeBird.png similarity index 100% rename from public/assets/img/Food/FrozenWholeBird.png rename to legacy/public/assets/img/Food/FrozenWholeBird.png diff --git a/public/assets/img/Food/FruitAndMushroomMix.png b/legacy/public/assets/img/Food/FruitAndMushroomMix.png similarity index 100% rename from public/assets/img/Food/FruitAndMushroomMix.png rename to legacy/public/assets/img/Food/FruitAndMushroomMix.png diff --git a/public/assets/img/Food/FruitPie.png b/legacy/public/assets/img/Food/FruitPie.png similarity index 100% rename from public/assets/img/Food/FruitPie.png rename to legacy/public/assets/img/Food/FruitPie.png diff --git a/public/assets/img/Food/Fruitcake.png b/legacy/public/assets/img/Food/Fruitcake.png similarity index 100% rename from public/assets/img/Food/Fruitcake.png rename to legacy/public/assets/img/Food/Fruitcake.png diff --git a/public/assets/img/Food/GlazedMeat.png b/legacy/public/assets/img/Food/GlazedMeat.png similarity index 100% rename from public/assets/img/Food/GlazedMeat.png rename to legacy/public/assets/img/Food/GlazedMeat.png diff --git a/public/assets/img/Food/GlazedMushrooms.png b/legacy/public/assets/img/Food/GlazedMushrooms.png similarity index 100% rename from public/assets/img/Food/GlazedMushrooms.png rename to legacy/public/assets/img/Food/GlazedMushrooms.png diff --git a/public/assets/img/Food/GlazedSeafood.png b/legacy/public/assets/img/Food/GlazedSeafood.png similarity index 100% rename from public/assets/img/Food/GlazedSeafood.png rename to legacy/public/assets/img/Food/GlazedSeafood.png diff --git a/public/assets/img/Food/GlazedVeggies.png b/legacy/public/assets/img/Food/GlazedVeggies.png similarity index 100% rename from public/assets/img/Food/GlazedVeggies.png rename to legacy/public/assets/img/Food/GlazedVeggies.png diff --git a/public/assets/img/Food/GourmetMeatAndRiceBowl.png b/legacy/public/assets/img/Food/GourmetMeatAndRiceBowl.png similarity index 100% rename from public/assets/img/Food/GourmetMeatAndRiceBowl.png rename to legacy/public/assets/img/Food/GourmetMeatAndRiceBowl.png diff --git a/public/assets/img/Food/GourmetMeatAndSeafoodFry.png b/legacy/public/assets/img/Food/GourmetMeatAndSeafoodFry.png similarity index 100% rename from public/assets/img/Food/GourmetMeatAndSeafoodFry.png rename to legacy/public/assets/img/Food/GourmetMeatAndSeafoodFry.png diff --git a/public/assets/img/Food/GourmetMeatCurry.png b/legacy/public/assets/img/Food/GourmetMeatCurry.png similarity index 100% rename from public/assets/img/Food/GourmetMeatCurry.png rename to legacy/public/assets/img/Food/GourmetMeatCurry.png diff --git a/public/assets/img/Food/GourmetMeatStew.png b/legacy/public/assets/img/Food/GourmetMeatStew.png similarity index 100% rename from public/assets/img/Food/GourmetMeatStew.png rename to legacy/public/assets/img/Food/GourmetMeatStew.png diff --git a/public/assets/img/Food/GourmetPoultryCurry.png b/legacy/public/assets/img/Food/GourmetPoultryCurry.png similarity index 100% rename from public/assets/img/Food/GourmetPoultryCurry.png rename to legacy/public/assets/img/Food/GourmetPoultryCurry.png diff --git a/public/assets/img/Food/GourmetPoultryPilaf.png b/legacy/public/assets/img/Food/GourmetPoultryPilaf.png similarity index 100% rename from public/assets/img/Food/GourmetPoultryPilaf.png rename to legacy/public/assets/img/Food/GourmetPoultryPilaf.png diff --git a/public/assets/img/Food/GourmetSpicedMeatSkewer.png b/legacy/public/assets/img/Food/GourmetSpicedMeatSkewer.png similarity index 100% rename from public/assets/img/Food/GourmetSpicedMeatSkewer.png rename to legacy/public/assets/img/Food/GourmetSpicedMeatSkewer.png diff --git a/public/assets/img/Food/HardBoiledEgg.png b/legacy/public/assets/img/Food/HardBoiledEgg.png similarity index 100% rename from public/assets/img/Food/HardBoiledEgg.png rename to legacy/public/assets/img/Food/HardBoiledEgg.png diff --git a/public/assets/img/Food/HastyElixir.png b/legacy/public/assets/img/Food/HastyElixir.png similarity index 100% rename from public/assets/img/Food/HastyElixir.png rename to legacy/public/assets/img/Food/HastyElixir.png diff --git a/public/assets/img/Food/HeartyElixir.png b/legacy/public/assets/img/Food/HeartyElixir.png similarity index 100% rename from public/assets/img/Food/HeartyElixir.png rename to legacy/public/assets/img/Food/HeartyElixir.png diff --git a/public/assets/img/Food/HerbSaute.png b/legacy/public/assets/img/Food/HerbSaute.png similarity index 100% rename from public/assets/img/Food/HerbSaute.png rename to legacy/public/assets/img/Food/HerbSaute.png diff --git a/public/assets/img/Food/HoneyCandy.png b/legacy/public/assets/img/Food/HoneyCandy.png similarity index 100% rename from public/assets/img/Food/HoneyCandy.png rename to legacy/public/assets/img/Food/HoneyCandy.png diff --git a/public/assets/img/Food/HoneyCrepe.png b/legacy/public/assets/img/Food/HoneyCrepe.png similarity index 100% rename from public/assets/img/Food/HoneyCrepe.png rename to legacy/public/assets/img/Food/HoneyCrepe.png diff --git a/public/assets/img/Food/HoneyedApple.png b/legacy/public/assets/img/Food/HoneyedApple.png similarity index 100% rename from public/assets/img/Food/HoneyedApple.png rename to legacy/public/assets/img/Food/HoneyedApple.png diff --git a/public/assets/img/Food/HoneyedFruits.png b/legacy/public/assets/img/Food/HoneyedFruits.png similarity index 100% rename from public/assets/img/Food/HoneyedFruits.png rename to legacy/public/assets/img/Food/HoneyedFruits.png diff --git a/public/assets/img/Food/HotButteredApple.png b/legacy/public/assets/img/Food/HotButteredApple.png similarity index 100% rename from public/assets/img/Food/HotButteredApple.png rename to legacy/public/assets/img/Food/HotButteredApple.png diff --git a/public/assets/img/Food/IcyGourmetMeat.png b/legacy/public/assets/img/Food/IcyGourmetMeat.png similarity index 100% rename from public/assets/img/Food/IcyGourmetMeat.png rename to legacy/public/assets/img/Food/IcyGourmetMeat.png diff --git a/public/assets/img/Food/IcyHeartyBlueshellSnail.png b/legacy/public/assets/img/Food/IcyHeartyBlueshellSnail.png similarity index 100% rename from public/assets/img/Food/IcyHeartyBlueshellSnail.png rename to legacy/public/assets/img/Food/IcyHeartyBlueshellSnail.png diff --git a/public/assets/img/Food/IcyMeat.png b/legacy/public/assets/img/Food/IcyMeat.png similarity index 100% rename from public/assets/img/Food/IcyMeat.png rename to legacy/public/assets/img/Food/IcyMeat.png diff --git a/public/assets/img/Food/IcyPrimeMeat.png b/legacy/public/assets/img/Food/IcyPrimeMeat.png similarity index 100% rename from public/assets/img/Food/IcyPrimeMeat.png rename to legacy/public/assets/img/Food/IcyPrimeMeat.png diff --git a/public/assets/img/Food/MeatAndMushroomSkewer.png b/legacy/public/assets/img/Food/MeatAndMushroomSkewer.png similarity index 100% rename from public/assets/img/Food/MeatAndMushroomSkewer.png rename to legacy/public/assets/img/Food/MeatAndMushroomSkewer.png diff --git a/public/assets/img/Food/MeatAndRiceBowl.png b/legacy/public/assets/img/Food/MeatAndRiceBowl.png similarity index 100% rename from public/assets/img/Food/MeatAndRiceBowl.png rename to legacy/public/assets/img/Food/MeatAndRiceBowl.png diff --git a/public/assets/img/Food/MeatAndSeafoodFry.png b/legacy/public/assets/img/Food/MeatAndSeafoodFry.png similarity index 100% rename from public/assets/img/Food/MeatAndSeafoodFry.png rename to legacy/public/assets/img/Food/MeatAndSeafoodFry.png diff --git a/public/assets/img/Food/MeatCurry.png b/legacy/public/assets/img/Food/MeatCurry.png similarity index 100% rename from public/assets/img/Food/MeatCurry.png rename to legacy/public/assets/img/Food/MeatCurry.png diff --git a/public/assets/img/Food/MeatPie.png b/legacy/public/assets/img/Food/MeatPie.png similarity index 100% rename from public/assets/img/Food/MeatPie.png rename to legacy/public/assets/img/Food/MeatPie.png diff --git a/public/assets/img/Food/MeatSkewer.png b/legacy/public/assets/img/Food/MeatSkewer.png similarity index 100% rename from public/assets/img/Food/MeatSkewer.png rename to legacy/public/assets/img/Food/MeatSkewer.png diff --git a/public/assets/img/Food/MeatStew.png b/legacy/public/assets/img/Food/MeatStew.png similarity index 100% rename from public/assets/img/Food/MeatStew.png rename to legacy/public/assets/img/Food/MeatStew.png diff --git a/public/assets/img/Food/MeatStuffedPumpkin.png b/legacy/public/assets/img/Food/MeatStuffedPumpkin.png similarity index 100% rename from public/assets/img/Food/MeatStuffedPumpkin.png rename to legacy/public/assets/img/Food/MeatStuffedPumpkin.png diff --git a/public/assets/img/Food/MeatyRiceBalls.png b/legacy/public/assets/img/Food/MeatyRiceBalls.png similarity index 100% rename from public/assets/img/Food/MeatyRiceBalls.png rename to legacy/public/assets/img/Food/MeatyRiceBalls.png diff --git a/public/assets/img/Food/MightyElixir.png b/legacy/public/assets/img/Food/MightyElixir.png similarity index 100% rename from public/assets/img/Food/MightyElixir.png rename to legacy/public/assets/img/Food/MightyElixir.png diff --git a/public/assets/img/Food/MonsterCake.png b/legacy/public/assets/img/Food/MonsterCake.png similarity index 100% rename from public/assets/img/Food/MonsterCake.png rename to legacy/public/assets/img/Food/MonsterCake.png diff --git a/public/assets/img/Food/MonsterCurry.png b/legacy/public/assets/img/Food/MonsterCurry.png similarity index 100% rename from public/assets/img/Food/MonsterCurry.png rename to legacy/public/assets/img/Food/MonsterCurry.png diff --git a/public/assets/img/Food/MonsterRiceBalls.png b/legacy/public/assets/img/Food/MonsterRiceBalls.png similarity index 100% rename from public/assets/img/Food/MonsterRiceBalls.png rename to legacy/public/assets/img/Food/MonsterRiceBalls.png diff --git a/public/assets/img/Food/MonsterSoup.png b/legacy/public/assets/img/Food/MonsterSoup.png similarity index 100% rename from public/assets/img/Food/MonsterSoup.png rename to legacy/public/assets/img/Food/MonsterSoup.png diff --git a/public/assets/img/Food/MonsterStew.png b/legacy/public/assets/img/Food/MonsterStew.png similarity index 100% rename from public/assets/img/Food/MonsterStew.png rename to legacy/public/assets/img/Food/MonsterStew.png diff --git a/public/assets/img/Food/MushroomOmelet.png b/legacy/public/assets/img/Food/MushroomOmelet.png similarity index 100% rename from public/assets/img/Food/MushroomOmelet.png rename to legacy/public/assets/img/Food/MushroomOmelet.png diff --git a/public/assets/img/Food/MushroomRiceBalls.png b/legacy/public/assets/img/Food/MushroomRiceBalls.png similarity index 100% rename from public/assets/img/Food/MushroomRiceBalls.png rename to legacy/public/assets/img/Food/MushroomRiceBalls.png diff --git a/public/assets/img/Food/MushroomRisotto.png b/legacy/public/assets/img/Food/MushroomRisotto.png similarity index 100% rename from public/assets/img/Food/MushroomRisotto.png rename to legacy/public/assets/img/Food/MushroomRisotto.png diff --git a/public/assets/img/Food/MushroomSkewer.png b/legacy/public/assets/img/Food/MushroomSkewer.png similarity index 100% rename from public/assets/img/Food/MushroomSkewer.png rename to legacy/public/assets/img/Food/MushroomSkewer.png diff --git a/public/assets/img/Food/Nutcake.png b/legacy/public/assets/img/Food/Nutcake.png similarity index 100% rename from public/assets/img/Food/Nutcake.png rename to legacy/public/assets/img/Food/Nutcake.png diff --git a/public/assets/img/Food/Omelet.png b/legacy/public/assets/img/Food/Omelet.png similarity index 100% rename from public/assets/img/Food/Omelet.png rename to legacy/public/assets/img/Food/Omelet.png diff --git a/public/assets/img/Food/PepperSeafood.png b/legacy/public/assets/img/Food/PepperSeafood.png similarity index 100% rename from public/assets/img/Food/PepperSeafood.png rename to legacy/public/assets/img/Food/PepperSeafood.png diff --git a/public/assets/img/Food/PepperSteak.png b/legacy/public/assets/img/Food/PepperSteak.png similarity index 100% rename from public/assets/img/Food/PepperSteak.png rename to legacy/public/assets/img/Food/PepperSteak.png diff --git a/public/assets/img/Food/PlainCrepe.png b/legacy/public/assets/img/Food/PlainCrepe.png similarity index 100% rename from public/assets/img/Food/PlainCrepe.png rename to legacy/public/assets/img/Food/PlainCrepe.png diff --git a/public/assets/img/Food/PorgyMeuniere.png b/legacy/public/assets/img/Food/PorgyMeuniere.png similarity index 100% rename from public/assets/img/Food/PorgyMeuniere.png rename to legacy/public/assets/img/Food/PorgyMeuniere.png diff --git a/public/assets/img/Food/PoultryCurry.png b/legacy/public/assets/img/Food/PoultryCurry.png similarity index 100% rename from public/assets/img/Food/PoultryCurry.png rename to legacy/public/assets/img/Food/PoultryCurry.png diff --git a/public/assets/img/Food/PoultryPilaf.png b/legacy/public/assets/img/Food/PoultryPilaf.png similarity index 100% rename from public/assets/img/Food/PoultryPilaf.png rename to legacy/public/assets/img/Food/PoultryPilaf.png diff --git a/public/assets/img/Food/PrimeMeatAndRiceBowl.png b/legacy/public/assets/img/Food/PrimeMeatAndRiceBowl.png similarity index 100% rename from public/assets/img/Food/PrimeMeatAndRiceBowl.png rename to legacy/public/assets/img/Food/PrimeMeatAndRiceBowl.png diff --git a/public/assets/img/Food/PrimeMeatAndSeafoodFry.png b/legacy/public/assets/img/Food/PrimeMeatAndSeafoodFry.png similarity index 100% rename from public/assets/img/Food/PrimeMeatAndSeafoodFry.png rename to legacy/public/assets/img/Food/PrimeMeatAndSeafoodFry.png diff --git a/public/assets/img/Food/PrimeMeatCurry.png b/legacy/public/assets/img/Food/PrimeMeatCurry.png similarity index 100% rename from public/assets/img/Food/PrimeMeatCurry.png rename to legacy/public/assets/img/Food/PrimeMeatCurry.png diff --git a/public/assets/img/Food/PrimeMeatStew.png b/legacy/public/assets/img/Food/PrimeMeatStew.png similarity index 100% rename from public/assets/img/Food/PrimeMeatStew.png rename to legacy/public/assets/img/Food/PrimeMeatStew.png diff --git a/public/assets/img/Food/PrimePoultryCurry.png b/legacy/public/assets/img/Food/PrimePoultryCurry.png similarity index 100% rename from public/assets/img/Food/PrimePoultryCurry.png rename to legacy/public/assets/img/Food/PrimePoultryCurry.png diff --git a/public/assets/img/Food/PrimePoultryPilaf.png b/legacy/public/assets/img/Food/PrimePoultryPilaf.png similarity index 100% rename from public/assets/img/Food/PrimePoultryPilaf.png rename to legacy/public/assets/img/Food/PrimePoultryPilaf.png diff --git a/public/assets/img/Food/PrimeSpicedMeatSkewer.png b/legacy/public/assets/img/Food/PrimeSpicedMeatSkewer.png similarity index 100% rename from public/assets/img/Food/PrimeSpicedMeatSkewer.png rename to legacy/public/assets/img/Food/PrimeSpicedMeatSkewer.png diff --git a/public/assets/img/Food/PumpkinPie.png b/legacy/public/assets/img/Food/PumpkinPie.png similarity index 100% rename from public/assets/img/Food/PumpkinPie.png rename to legacy/public/assets/img/Food/PumpkinPie.png diff --git a/public/assets/img/Food/PumpkinStew.png b/legacy/public/assets/img/Food/PumpkinStew.png similarity index 100% rename from public/assets/img/Food/PumpkinStew.png rename to legacy/public/assets/img/Food/PumpkinStew.png diff --git a/public/assets/img/Food/RoastedAcorn.png b/legacy/public/assets/img/Food/RoastedAcorn.png similarity index 100% rename from public/assets/img/Food/RoastedAcorn.png rename to legacy/public/assets/img/Food/RoastedAcorn.png diff --git a/public/assets/img/Food/RoastedArmoranth.png b/legacy/public/assets/img/Food/RoastedArmoranth.png similarity index 100% rename from public/assets/img/Food/RoastedArmoranth.png rename to legacy/public/assets/img/Food/RoastedArmoranth.png diff --git a/public/assets/img/Food/RoastedBass.png b/legacy/public/assets/img/Food/RoastedBass.png similarity index 100% rename from public/assets/img/Food/RoastedBass.png rename to legacy/public/assets/img/Food/RoastedBass.png diff --git a/public/assets/img/Food/RoastedBigRadish.png b/legacy/public/assets/img/Food/RoastedBigRadish.png similarity index 100% rename from public/assets/img/Food/RoastedBigRadish.png rename to legacy/public/assets/img/Food/RoastedBigRadish.png diff --git a/public/assets/img/Food/RoastedBirdDrumstick.png b/legacy/public/assets/img/Food/RoastedBirdDrumstick.png similarity index 100% rename from public/assets/img/Food/RoastedBirdDrumstick.png rename to legacy/public/assets/img/Food/RoastedBirdDrumstick.png diff --git a/public/assets/img/Food/RoastedBirdThigh.png b/legacy/public/assets/img/Food/RoastedBirdThigh.png similarity index 100% rename from public/assets/img/Food/RoastedBirdThigh.png rename to legacy/public/assets/img/Food/RoastedBirdThigh.png diff --git a/public/assets/img/Food/RoastedCarp.png b/legacy/public/assets/img/Food/RoastedCarp.png similarity index 100% rename from public/assets/img/Food/RoastedCarp.png rename to legacy/public/assets/img/Food/RoastedCarp.png diff --git a/public/assets/img/Food/RoastedEnduraCarrot.png b/legacy/public/assets/img/Food/RoastedEnduraCarrot.png similarity index 100% rename from public/assets/img/Food/RoastedEnduraCarrot.png rename to legacy/public/assets/img/Food/RoastedEnduraCarrot.png diff --git a/public/assets/img/Food/RoastedHeartyBass.png b/legacy/public/assets/img/Food/RoastedHeartyBass.png similarity index 100% rename from public/assets/img/Food/RoastedHeartyBass.png rename to legacy/public/assets/img/Food/RoastedHeartyBass.png diff --git a/public/assets/img/Food/RoastedHeartyDurian.png b/legacy/public/assets/img/Food/RoastedHeartyDurian.png similarity index 100% rename from public/assets/img/Food/RoastedHeartyDurian.png rename to legacy/public/assets/img/Food/RoastedHeartyDurian.png diff --git a/public/assets/img/Food/RoastedHeartySalmon.png b/legacy/public/assets/img/Food/RoastedHeartySalmon.png similarity index 100% rename from public/assets/img/Food/RoastedHeartySalmon.png rename to legacy/public/assets/img/Food/RoastedHeartySalmon.png diff --git a/public/assets/img/Food/RoastedHydromelon.png b/legacy/public/assets/img/Food/RoastedHydromelon.png similarity index 100% rename from public/assets/img/Food/RoastedHydromelon.png rename to legacy/public/assets/img/Food/RoastedHydromelon.png diff --git a/public/assets/img/Food/RoastedLotusSeeds.png b/legacy/public/assets/img/Food/RoastedLotusSeeds.png similarity index 100% rename from public/assets/img/Food/RoastedLotusSeeds.png rename to legacy/public/assets/img/Food/RoastedLotusSeeds.png diff --git a/public/assets/img/Food/RoastedMightyBananas.png b/legacy/public/assets/img/Food/RoastedMightyBananas.png similarity index 100% rename from public/assets/img/Food/RoastedMightyBananas.png rename to legacy/public/assets/img/Food/RoastedMightyBananas.png diff --git a/public/assets/img/Food/RoastedMightyThistle.png b/legacy/public/assets/img/Food/RoastedMightyThistle.png similarity index 100% rename from public/assets/img/Food/RoastedMightyThistle.png rename to legacy/public/assets/img/Food/RoastedMightyThistle.png diff --git a/public/assets/img/Food/RoastedPorgy.png b/legacy/public/assets/img/Food/RoastedPorgy.png similarity index 100% rename from public/assets/img/Food/RoastedPorgy.png rename to legacy/public/assets/img/Food/RoastedPorgy.png diff --git a/public/assets/img/Food/RoastedRadish.png b/legacy/public/assets/img/Food/RoastedRadish.png similarity index 100% rename from public/assets/img/Food/RoastedRadish.png rename to legacy/public/assets/img/Food/RoastedRadish.png diff --git a/public/assets/img/Food/RoastedSwiftCarrot.png b/legacy/public/assets/img/Food/RoastedSwiftCarrot.png similarity index 100% rename from public/assets/img/Food/RoastedSwiftCarrot.png rename to legacy/public/assets/img/Food/RoastedSwiftCarrot.png diff --git a/public/assets/img/Food/RoastedTreeNut.png b/legacy/public/assets/img/Food/RoastedTreeNut.png similarity index 100% rename from public/assets/img/Food/RoastedTreeNut.png rename to legacy/public/assets/img/Food/RoastedTreeNut.png diff --git a/public/assets/img/Food/RoastedTrout.png b/legacy/public/assets/img/Food/RoastedTrout.png similarity index 100% rename from public/assets/img/Food/RoastedTrout.png rename to legacy/public/assets/img/Food/RoastedTrout.png diff --git a/public/assets/img/Food/RoastedVoltfruit.png b/legacy/public/assets/img/Food/RoastedVoltfruit.png similarity index 100% rename from public/assets/img/Food/RoastedVoltfruit.png rename to legacy/public/assets/img/Food/RoastedVoltfruit.png diff --git a/public/assets/img/Food/RoastedWholeBird.png b/legacy/public/assets/img/Food/RoastedWholeBird.png similarity index 100% rename from public/assets/img/Food/RoastedWholeBird.png rename to legacy/public/assets/img/Food/RoastedWholeBird.png diff --git a/public/assets/img/Food/RoastedWildberry.png b/legacy/public/assets/img/Food/RoastedWildberry.png similarity index 100% rename from public/assets/img/Food/RoastedWildberry.png rename to legacy/public/assets/img/Food/RoastedWildberry.png diff --git a/public/assets/img/Food/RockHardFood.png b/legacy/public/assets/img/Food/RockHardFood.png similarity index 100% rename from public/assets/img/Food/RockHardFood.png rename to legacy/public/assets/img/Food/RockHardFood.png diff --git a/public/assets/img/Food/SalmonMeuniere.png b/legacy/public/assets/img/Food/SalmonMeuniere.png similarity index 100% rename from public/assets/img/Food/SalmonMeuniere.png rename to legacy/public/assets/img/Food/SalmonMeuniere.png diff --git a/public/assets/img/Food/SalmonRisotto.png b/legacy/public/assets/img/Food/SalmonRisotto.png similarity index 100% rename from public/assets/img/Food/SalmonRisotto.png rename to legacy/public/assets/img/Food/SalmonRisotto.png diff --git a/public/assets/img/Food/SaltGrilledCrab.png b/legacy/public/assets/img/Food/SaltGrilledCrab.png similarity index 100% rename from public/assets/img/Food/SaltGrilledCrab.png rename to legacy/public/assets/img/Food/SaltGrilledCrab.png diff --git a/public/assets/img/Food/SaltGrilledFish.png b/legacy/public/assets/img/Food/SaltGrilledFish.png similarity index 100% rename from public/assets/img/Food/SaltGrilledFish.png rename to legacy/public/assets/img/Food/SaltGrilledFish.png diff --git a/public/assets/img/Food/SaltGrilledGourmetMeat.png b/legacy/public/assets/img/Food/SaltGrilledGourmetMeat.png similarity index 100% rename from public/assets/img/Food/SaltGrilledGourmetMeat.png rename to legacy/public/assets/img/Food/SaltGrilledGourmetMeat.png diff --git a/public/assets/img/Food/SaltGrilledGreens.png b/legacy/public/assets/img/Food/SaltGrilledGreens.png similarity index 100% rename from public/assets/img/Food/SaltGrilledGreens.png rename to legacy/public/assets/img/Food/SaltGrilledGreens.png diff --git a/public/assets/img/Food/SaltGrilledMeat.png b/legacy/public/assets/img/Food/SaltGrilledMeat.png similarity index 100% rename from public/assets/img/Food/SaltGrilledMeat.png rename to legacy/public/assets/img/Food/SaltGrilledMeat.png diff --git a/public/assets/img/Food/SaltGrilledMushrooms.png b/legacy/public/assets/img/Food/SaltGrilledMushrooms.png similarity index 100% rename from public/assets/img/Food/SaltGrilledMushrooms.png rename to legacy/public/assets/img/Food/SaltGrilledMushrooms.png diff --git a/public/assets/img/Food/SaltGrilledPrimeMeat.png b/legacy/public/assets/img/Food/SaltGrilledPrimeMeat.png similarity index 100% rename from public/assets/img/Food/SaltGrilledPrimeMeat.png rename to legacy/public/assets/img/Food/SaltGrilledPrimeMeat.png diff --git a/public/assets/img/Food/SauteedNuts.png b/legacy/public/assets/img/Food/SauteedNuts.png similarity index 100% rename from public/assets/img/Food/SauteedNuts.png rename to legacy/public/assets/img/Food/SauteedNuts.png diff --git a/public/assets/img/Food/SauteedPeppers.png b/legacy/public/assets/img/Food/SauteedPeppers.png similarity index 100% rename from public/assets/img/Food/SauteedPeppers.png rename to legacy/public/assets/img/Food/SauteedPeppers.png diff --git a/public/assets/img/Food/SeafoodCurry.png b/legacy/public/assets/img/Food/SeafoodCurry.png similarity index 100% rename from public/assets/img/Food/SeafoodCurry.png rename to legacy/public/assets/img/Food/SeafoodCurry.png diff --git a/public/assets/img/Food/SeafoodFriedRice.png b/legacy/public/assets/img/Food/SeafoodFriedRice.png similarity index 100% rename from public/assets/img/Food/SeafoodFriedRice.png rename to legacy/public/assets/img/Food/SeafoodFriedRice.png diff --git a/public/assets/img/Food/SeafoodMeuniere.png b/legacy/public/assets/img/Food/SeafoodMeuniere.png similarity index 100% rename from public/assets/img/Food/SeafoodMeuniere.png rename to legacy/public/assets/img/Food/SeafoodMeuniere.png diff --git a/public/assets/img/Food/SeafoodPaella.png b/legacy/public/assets/img/Food/SeafoodPaella.png similarity index 100% rename from public/assets/img/Food/SeafoodPaella.png rename to legacy/public/assets/img/Food/SeafoodPaella.png diff --git a/public/assets/img/Food/SeafoodRiceBalls.png b/legacy/public/assets/img/Food/SeafoodRiceBalls.png similarity index 100% rename from public/assets/img/Food/SeafoodRiceBalls.png rename to legacy/public/assets/img/Food/SeafoodRiceBalls.png diff --git a/public/assets/img/Food/SeafoodSkewer.png b/legacy/public/assets/img/Food/SeafoodSkewer.png similarity index 100% rename from public/assets/img/Food/SeafoodSkewer.png rename to legacy/public/assets/img/Food/SeafoodSkewer.png diff --git a/public/assets/img/Food/SearedGourmetSteak.png b/legacy/public/assets/img/Food/SearedGourmetSteak.png similarity index 100% rename from public/assets/img/Food/SearedGourmetSteak.png rename to legacy/public/assets/img/Food/SearedGourmetSteak.png diff --git a/public/assets/img/Food/SearedPrimeSteak.png b/legacy/public/assets/img/Food/SearedPrimeSteak.png similarity index 100% rename from public/assets/img/Food/SearedPrimeSteak.png rename to legacy/public/assets/img/Food/SearedPrimeSteak.png diff --git a/public/assets/img/Food/SearedSteak.png b/legacy/public/assets/img/Food/SearedSteak.png similarity index 100% rename from public/assets/img/Food/SearedSteak.png rename to legacy/public/assets/img/Food/SearedSteak.png diff --git a/public/assets/img/Food/SimmeredFruit.png b/legacy/public/assets/img/Food/SimmeredFruit.png similarity index 100% rename from public/assets/img/Food/SimmeredFruit.png rename to legacy/public/assets/img/Food/SimmeredFruit.png diff --git a/public/assets/img/Food/SneakyElixir.png b/legacy/public/assets/img/Food/SneakyElixir.png similarity index 100% rename from public/assets/img/Food/SneakyElixir.png rename to legacy/public/assets/img/Food/SneakyElixir.png diff --git a/public/assets/img/Food/SneakyRiverEscargot.png b/legacy/public/assets/img/Food/SneakyRiverEscargot.png similarity index 100% rename from public/assets/img/Food/SneakyRiverEscargot.png rename to legacy/public/assets/img/Food/SneakyRiverEscargot.png diff --git a/public/assets/img/Food/SpicedMeatSkewer.png b/legacy/public/assets/img/Food/SpicedMeatSkewer.png similarity index 100% rename from public/assets/img/Food/SpicedMeatSkewer.png rename to legacy/public/assets/img/Food/SpicedMeatSkewer.png diff --git a/public/assets/img/Food/SpicyElixir.png b/legacy/public/assets/img/Food/SpicyElixir.png similarity index 100% rename from public/assets/img/Food/SpicyElixir.png rename to legacy/public/assets/img/Food/SpicyElixir.png diff --git a/public/assets/img/Food/SteamedFish.png b/legacy/public/assets/img/Food/SteamedFish.png similarity index 100% rename from public/assets/img/Food/SteamedFish.png rename to legacy/public/assets/img/Food/SteamedFish.png diff --git a/public/assets/img/Food/SteamedFruit.png b/legacy/public/assets/img/Food/SteamedFruit.png similarity index 100% rename from public/assets/img/Food/SteamedFruit.png rename to legacy/public/assets/img/Food/SteamedFruit.png diff --git a/public/assets/img/Food/SteamedMeat.png b/legacy/public/assets/img/Food/SteamedMeat.png similarity index 100% rename from public/assets/img/Food/SteamedMeat.png rename to legacy/public/assets/img/Food/SteamedMeat.png diff --git a/public/assets/img/Food/SteamedMushrooms.png b/legacy/public/assets/img/Food/SteamedMushrooms.png similarity index 100% rename from public/assets/img/Food/SteamedMushrooms.png rename to legacy/public/assets/img/Food/SteamedMushrooms.png diff --git a/public/assets/img/Food/ToastedBigHeartyTruffle.png b/legacy/public/assets/img/Food/ToastedBigHeartyTruffle.png similarity index 100% rename from public/assets/img/Food/ToastedBigHeartyTruffle.png rename to legacy/public/assets/img/Food/ToastedBigHeartyTruffle.png diff --git a/public/assets/img/Food/ToastedHeartyTruffle.png b/legacy/public/assets/img/Food/ToastedHeartyTruffle.png similarity index 100% rename from public/assets/img/Food/ToastedHeartyTruffle.png rename to legacy/public/assets/img/Food/ToastedHeartyTruffle.png diff --git a/public/assets/img/Food/ToastyChillshroom.png b/legacy/public/assets/img/Food/ToastyChillshroom.png similarity index 100% rename from public/assets/img/Food/ToastyChillshroom.png rename to legacy/public/assets/img/Food/ToastyChillshroom.png diff --git a/public/assets/img/Food/ToastyEnduraShroom.png b/legacy/public/assets/img/Food/ToastyEnduraShroom.png similarity index 100% rename from public/assets/img/Food/ToastyEnduraShroom.png rename to legacy/public/assets/img/Food/ToastyEnduraShroom.png diff --git a/public/assets/img/Food/ToastyHylianShroom.png b/legacy/public/assets/img/Food/ToastyHylianShroom.png similarity index 100% rename from public/assets/img/Food/ToastyHylianShroom.png rename to legacy/public/assets/img/Food/ToastyHylianShroom.png diff --git a/public/assets/img/Food/ToastyIronshroom.png b/legacy/public/assets/img/Food/ToastyIronshroom.png similarity index 100% rename from public/assets/img/Food/ToastyIronshroom.png rename to legacy/public/assets/img/Food/ToastyIronshroom.png diff --git a/public/assets/img/Food/ToastyRazorshroom.png b/legacy/public/assets/img/Food/ToastyRazorshroom.png similarity index 100% rename from public/assets/img/Food/ToastyRazorshroom.png rename to legacy/public/assets/img/Food/ToastyRazorshroom.png diff --git a/public/assets/img/Food/ToastyRushroom.png b/legacy/public/assets/img/Food/ToastyRushroom.png similarity index 100% rename from public/assets/img/Food/ToastyRushroom.png rename to legacy/public/assets/img/Food/ToastyRushroom.png diff --git a/public/assets/img/Food/ToastySilentShroom.png b/legacy/public/assets/img/Food/ToastySilentShroom.png similarity index 100% rename from public/assets/img/Food/ToastySilentShroom.png rename to legacy/public/assets/img/Food/ToastySilentShroom.png diff --git a/public/assets/img/Food/ToastyStamellaShroom.png b/legacy/public/assets/img/Food/ToastyStamellaShroom.png similarity index 100% rename from public/assets/img/Food/ToastyStamellaShroom.png rename to legacy/public/assets/img/Food/ToastyStamellaShroom.png diff --git a/public/assets/img/Food/ToastySunshroom.png b/legacy/public/assets/img/Food/ToastySunshroom.png similarity index 100% rename from public/assets/img/Food/ToastySunshroom.png rename to legacy/public/assets/img/Food/ToastySunshroom.png diff --git a/public/assets/img/Food/ToastyZapshroom.png b/legacy/public/assets/img/Food/ToastyZapshroom.png similarity index 100% rename from public/assets/img/Food/ToastyZapshroom.png rename to legacy/public/assets/img/Food/ToastyZapshroom.png diff --git a/public/assets/img/Food/ToughElixir.png b/legacy/public/assets/img/Food/ToughElixir.png similarity index 100% rename from public/assets/img/Food/ToughElixir.png rename to legacy/public/assets/img/Food/ToughElixir.png diff --git a/public/assets/img/Food/VegetableCurry.png b/legacy/public/assets/img/Food/VegetableCurry.png similarity index 100% rename from public/assets/img/Food/VegetableCurry.png rename to legacy/public/assets/img/Food/VegetableCurry.png diff --git a/public/assets/img/Food/VegetableOmelet.png b/legacy/public/assets/img/Food/VegetableOmelet.png similarity index 100% rename from public/assets/img/Food/VegetableOmelet.png rename to legacy/public/assets/img/Food/VegetableOmelet.png diff --git a/public/assets/img/Food/VegetableRisotto.png b/legacy/public/assets/img/Food/VegetableRisotto.png similarity index 100% rename from public/assets/img/Food/VegetableRisotto.png rename to legacy/public/assets/img/Food/VegetableRisotto.png diff --git a/public/assets/img/Food/VeggieCreamSoup.png b/legacy/public/assets/img/Food/VeggieCreamSoup.png similarity index 100% rename from public/assets/img/Food/VeggieCreamSoup.png rename to legacy/public/assets/img/Food/VeggieCreamSoup.png diff --git a/public/assets/img/Food/VeggieRiceBalls.png b/legacy/public/assets/img/Food/VeggieRiceBalls.png similarity index 100% rename from public/assets/img/Food/VeggieRiceBalls.png rename to legacy/public/assets/img/Food/VeggieRiceBalls.png diff --git a/public/assets/img/Food/WarmMilk.png b/legacy/public/assets/img/Food/WarmMilk.png similarity index 100% rename from public/assets/img/Food/WarmMilk.png rename to legacy/public/assets/img/Food/WarmMilk.png diff --git a/public/assets/img/Food/WheatBread.png b/legacy/public/assets/img/Food/WheatBread.png similarity index 100% rename from public/assets/img/Food/WheatBread.png rename to legacy/public/assets/img/Food/WheatBread.png diff --git a/public/assets/img/Food/WildberryCrepe.png b/legacy/public/assets/img/Food/WildberryCrepe.png similarity index 100% rename from public/assets/img/Food/WildberryCrepe.png rename to legacy/public/assets/img/Food/WildberryCrepe.png diff --git a/public/assets/img/Key/AncientBridle.png b/legacy/public/assets/img/Key/AncientBridle.png similarity index 100% rename from public/assets/img/Key/AncientBridle.png rename to legacy/public/assets/img/Key/AncientBridle.png diff --git a/public/assets/img/Key/AncientSaddle.png b/legacy/public/assets/img/Key/AncientSaddle.png similarity index 100% rename from public/assets/img/Key/AncientSaddle.png rename to legacy/public/assets/img/Key/AncientSaddle.png diff --git a/public/assets/img/Key/ClassifiedEnvelope.png b/legacy/public/assets/img/Key/ClassifiedEnvelope.png similarity index 100% rename from public/assets/img/Key/ClassifiedEnvelope.png rename to legacy/public/assets/img/Key/ClassifiedEnvelope.png diff --git a/public/assets/img/Key/DaruksProtection.png b/legacy/public/assets/img/Key/DaruksProtection.png similarity index 100% rename from public/assets/img/Key/DaruksProtection.png rename to legacy/public/assets/img/Key/DaruksProtection.png diff --git a/public/assets/img/Key/DaruksProtectionDisabled.png b/legacy/public/assets/img/Key/DaruksProtectionDisabled.png similarity index 100% rename from public/assets/img/Key/DaruksProtectionDisabled.png rename to legacy/public/assets/img/Key/DaruksProtectionDisabled.png diff --git a/public/assets/img/Key/DaruksProtectionPlus.png b/legacy/public/assets/img/Key/DaruksProtectionPlus.png similarity index 100% rename from public/assets/img/Key/DaruksProtectionPlus.png rename to legacy/public/assets/img/Key/DaruksProtectionPlus.png diff --git a/public/assets/img/Key/DaruksProtectionPlusDisabled.png b/legacy/public/assets/img/Key/DaruksProtectionPlusDisabled.png similarity index 100% rename from public/assets/img/Key/DaruksProtectionPlusDisabled.png rename to legacy/public/assets/img/Key/DaruksProtectionPlusDisabled.png diff --git a/public/assets/img/Key/ExtravagantBridle.png b/legacy/public/assets/img/Key/ExtravagantBridle.png similarity index 100% rename from public/assets/img/Key/ExtravagantBridle.png rename to legacy/public/assets/img/Key/ExtravagantBridle.png diff --git a/public/assets/img/Key/ExtravagantSaddle.png b/legacy/public/assets/img/Key/ExtravagantSaddle.png similarity index 100% rename from public/assets/img/Key/ExtravagantSaddle.png rename to legacy/public/assets/img/Key/ExtravagantSaddle.png diff --git a/public/assets/img/Key/HestusGift.png b/legacy/public/assets/img/Key/HestusGift.png similarity index 100% rename from public/assets/img/Key/HestusGift.png rename to legacy/public/assets/img/Key/HestusGift.png diff --git a/public/assets/img/Key/HestusMaracas.png b/legacy/public/assets/img/Key/HestusMaracas.png similarity index 100% rename from public/assets/img/Key/HestusMaracas.png rename to legacy/public/assets/img/Key/HestusMaracas.png diff --git a/public/assets/img/Key/KnightsBridle.png b/legacy/public/assets/img/Key/KnightsBridle.png similarity index 100% rename from public/assets/img/Key/KnightsBridle.png rename to legacy/public/assets/img/Key/KnightsBridle.png diff --git a/public/assets/img/Key/KnightsSaddle.png b/legacy/public/assets/img/Key/KnightsSaddle.png similarity index 100% rename from public/assets/img/Key/KnightsSaddle.png rename to legacy/public/assets/img/Key/KnightsSaddle.png diff --git a/public/assets/img/Key/KorokSeed.png b/legacy/public/assets/img/Key/KorokSeed.png similarity index 100% rename from public/assets/img/Key/KorokSeed.png rename to legacy/public/assets/img/Key/KorokSeed.png diff --git a/public/assets/img/Key/MedalOfHonorHinox.png b/legacy/public/assets/img/Key/MedalOfHonorHinox.png similarity index 100% rename from public/assets/img/Key/MedalOfHonorHinox.png rename to legacy/public/assets/img/Key/MedalOfHonorHinox.png diff --git a/public/assets/img/Key/MedalOfHonorMolduga.png b/legacy/public/assets/img/Key/MedalOfHonorMolduga.png similarity index 100% rename from public/assets/img/Key/MedalOfHonorMolduga.png rename to legacy/public/assets/img/Key/MedalOfHonorMolduga.png diff --git a/public/assets/img/Key/MedalOfHonorTalus.png b/legacy/public/assets/img/Key/MedalOfHonorTalus.png similarity index 100% rename from public/assets/img/Key/MedalOfHonorTalus.png rename to legacy/public/assets/img/Key/MedalOfHonorTalus.png diff --git a/public/assets/img/Key/MedohsEmblem.png b/legacy/public/assets/img/Key/MedohsEmblem.png similarity index 100% rename from public/assets/img/Key/MedohsEmblem.png rename to legacy/public/assets/img/Key/MedohsEmblem.png diff --git a/public/assets/img/Key/MiphasGrace.png b/legacy/public/assets/img/Key/MiphasGrace.png similarity index 100% rename from public/assets/img/Key/MiphasGrace.png rename to legacy/public/assets/img/Key/MiphasGrace.png diff --git a/public/assets/img/Key/MiphasGraceDisabled.png b/legacy/public/assets/img/Key/MiphasGraceDisabled.png similarity index 100% rename from public/assets/img/Key/MiphasGraceDisabled.png rename to legacy/public/assets/img/Key/MiphasGraceDisabled.png diff --git a/public/assets/img/Key/MiphasGracePlus.png b/legacy/public/assets/img/Key/MiphasGracePlus.png similarity index 100% rename from public/assets/img/Key/MiphasGracePlus.png rename to legacy/public/assets/img/Key/MiphasGracePlus.png diff --git a/public/assets/img/Key/MiphasGracePlusDisabled.png b/legacy/public/assets/img/Key/MiphasGracePlusDisabled.png similarity index 100% rename from public/assets/img/Key/MiphasGracePlusDisabled.png rename to legacy/public/assets/img/Key/MiphasGracePlusDisabled.png diff --git a/public/assets/img/Key/MonsterBridle.png b/legacy/public/assets/img/Key/MonsterBridle.png similarity index 100% rename from public/assets/img/Key/MonsterBridle.png rename to legacy/public/assets/img/Key/MonsterBridle.png diff --git a/public/assets/img/Key/MonsterSaddle.png b/legacy/public/assets/img/Key/MonsterSaddle.png similarity index 100% rename from public/assets/img/Key/MonsterSaddle.png rename to legacy/public/assets/img/Key/MonsterSaddle.png diff --git a/public/assets/img/Key/NaborissEmblem.png b/legacy/public/assets/img/Key/NaborissEmblem.png similarity index 100% rename from public/assets/img/Key/NaborissEmblem.png rename to legacy/public/assets/img/Key/NaborissEmblem.png diff --git a/public/assets/img/Key/Paraglider.png b/legacy/public/assets/img/Key/Paraglider.png similarity index 100% rename from public/assets/img/Key/Paraglider.png rename to legacy/public/assets/img/Key/Paraglider.png diff --git a/public/assets/img/Key/PictureOfTheChampions.png b/legacy/public/assets/img/Key/PictureOfTheChampions.png similarity index 100% rename from public/assets/img/Key/PictureOfTheChampions.png rename to legacy/public/assets/img/Key/PictureOfTheChampions.png diff --git a/public/assets/img/Key/RevalisGale.png b/legacy/public/assets/img/Key/RevalisGale.png similarity index 100% rename from public/assets/img/Key/RevalisGale.png rename to legacy/public/assets/img/Key/RevalisGale.png diff --git a/public/assets/img/Key/RevalisGaleDisabled.png b/legacy/public/assets/img/Key/RevalisGaleDisabled.png similarity index 100% rename from public/assets/img/Key/RevalisGaleDisabled.png rename to legacy/public/assets/img/Key/RevalisGaleDisabled.png diff --git a/public/assets/img/Key/RevalisGalePlus.png b/legacy/public/assets/img/Key/RevalisGalePlus.png similarity index 100% rename from public/assets/img/Key/RevalisGalePlus.png rename to legacy/public/assets/img/Key/RevalisGalePlus.png diff --git a/public/assets/img/Key/RevalisGalePlusDisabled.png b/legacy/public/assets/img/Key/RevalisGalePlusDisabled.png similarity index 100% rename from public/assets/img/Key/RevalisGalePlusDisabled.png rename to legacy/public/assets/img/Key/RevalisGalePlusDisabled.png diff --git a/public/assets/img/Key/RoyalBridle.png b/legacy/public/assets/img/Key/RoyalBridle.png similarity index 100% rename from public/assets/img/Key/RoyalBridle.png rename to legacy/public/assets/img/Key/RoyalBridle.png diff --git a/public/assets/img/Key/RoyalSaddle.png b/legacy/public/assets/img/Key/RoyalSaddle.png similarity index 100% rename from public/assets/img/Key/RoyalSaddle.png rename to legacy/public/assets/img/Key/RoyalSaddle.png diff --git a/public/assets/img/Key/RudaniasEmblem.png b/legacy/public/assets/img/Key/RudaniasEmblem.png similarity index 100% rename from public/assets/img/Key/RudaniasEmblem.png rename to legacy/public/assets/img/Key/RudaniasEmblem.png diff --git a/public/assets/img/Key/RutasEmblem.png b/legacy/public/assets/img/Key/RutasEmblem.png similarity index 100% rename from public/assets/img/Key/RutasEmblem.png rename to legacy/public/assets/img/Key/RutasEmblem.png diff --git a/public/assets/img/Key/SheikahSlate.png b/legacy/public/assets/img/Key/SheikahSlate.png similarity index 100% rename from public/assets/img/Key/SheikahSlate.png rename to legacy/public/assets/img/Key/SheikahSlate.png diff --git a/public/assets/img/Key/SpiritOrb.png b/legacy/public/assets/img/Key/SpiritOrb.png similarity index 100% rename from public/assets/img/Key/SpiritOrb.png rename to legacy/public/assets/img/Key/SpiritOrb.png diff --git a/public/assets/img/Key/SpiritOrbAnimated.webp b/legacy/public/assets/img/Key/SpiritOrbAnimated.webp similarity index 100% rename from public/assets/img/Key/SpiritOrbAnimated.webp rename to legacy/public/assets/img/Key/SpiritOrbAnimated.webp diff --git a/public/assets/img/Key/ThunderHelmKey.png b/legacy/public/assets/img/Key/ThunderHelmKey.png similarity index 100% rename from public/assets/img/Key/ThunderHelmKey.png rename to legacy/public/assets/img/Key/ThunderHelmKey.png diff --git a/public/assets/img/Key/TravelMedallion.png b/legacy/public/assets/img/Key/TravelMedallion.png similarity index 100% rename from public/assets/img/Key/TravelMedallion.png rename to legacy/public/assets/img/Key/TravelMedallion.png diff --git a/public/assets/img/Key/TravelMedallionAnimated.webp b/legacy/public/assets/img/Key/TravelMedallionAnimated.webp similarity index 100% rename from public/assets/img/Key/TravelMedallionAnimated.webp rename to legacy/public/assets/img/Key/TravelMedallionAnimated.webp diff --git a/public/assets/img/Key/TravelersBridle.png b/legacy/public/assets/img/Key/TravelersBridle.png similarity index 100% rename from public/assets/img/Key/TravelersBridle.png rename to legacy/public/assets/img/Key/TravelersBridle.png diff --git a/public/assets/img/Key/TravelersSaddle.png b/legacy/public/assets/img/Key/TravelersSaddle.png similarity index 100% rename from public/assets/img/Key/TravelersSaddle.png rename to legacy/public/assets/img/Key/TravelersSaddle.png diff --git a/public/assets/img/Key/UrbosasFury.png b/legacy/public/assets/img/Key/UrbosasFury.png similarity index 100% rename from public/assets/img/Key/UrbosasFury.png rename to legacy/public/assets/img/Key/UrbosasFury.png diff --git a/public/assets/img/Key/UrbosasFuryDisabled.png b/legacy/public/assets/img/Key/UrbosasFuryDisabled.png similarity index 100% rename from public/assets/img/Key/UrbosasFuryDisabled.png rename to legacy/public/assets/img/Key/UrbosasFuryDisabled.png diff --git a/public/assets/img/Key/UrbosasFuryPlus.png b/legacy/public/assets/img/Key/UrbosasFuryPlus.png similarity index 100% rename from public/assets/img/Key/UrbosasFuryPlus.png rename to legacy/public/assets/img/Key/UrbosasFuryPlus.png diff --git a/public/assets/img/Key/UrbosasFuryPlusDisabled.png b/legacy/public/assets/img/Key/UrbosasFuryPlusDisabled.png similarity index 100% rename from public/assets/img/Key/UrbosasFuryPlusDisabled.png rename to legacy/public/assets/img/Key/UrbosasFuryPlusDisabled.png diff --git a/public/assets/img/Material/Acorn.png b/legacy/public/assets/img/Material/Acorn.png similarity index 100% rename from public/assets/img/Material/Acorn.png rename to legacy/public/assets/img/Material/Acorn.png diff --git a/public/assets/img/Material/Amber.png b/legacy/public/assets/img/Material/Amber.png similarity index 100% rename from public/assets/img/Material/Amber.png rename to legacy/public/assets/img/Material/Amber.png diff --git a/public/assets/img/Material/AncientCore.png b/legacy/public/assets/img/Material/AncientCore.png similarity index 100% rename from public/assets/img/Material/AncientCore.png rename to legacy/public/assets/img/Material/AncientCore.png diff --git a/public/assets/img/Material/AncientGear.png b/legacy/public/assets/img/Material/AncientGear.png similarity index 100% rename from public/assets/img/Material/AncientGear.png rename to legacy/public/assets/img/Material/AncientGear.png diff --git a/public/assets/img/Material/AncientScrew.png b/legacy/public/assets/img/Material/AncientScrew.png similarity index 100% rename from public/assets/img/Material/AncientScrew.png rename to legacy/public/assets/img/Material/AncientScrew.png diff --git a/public/assets/img/Material/AncientShaft.png b/legacy/public/assets/img/Material/AncientShaft.png similarity index 100% rename from public/assets/img/Material/AncientShaft.png rename to legacy/public/assets/img/Material/AncientShaft.png diff --git a/public/assets/img/Material/AncientSpring.png b/legacy/public/assets/img/Material/AncientSpring.png similarity index 100% rename from public/assets/img/Material/AncientSpring.png rename to legacy/public/assets/img/Material/AncientSpring.png diff --git a/public/assets/img/Material/Apple.png b/legacy/public/assets/img/Material/Apple.png similarity index 100% rename from public/assets/img/Material/Apple.png rename to legacy/public/assets/img/Material/Apple.png diff --git a/public/assets/img/Material/Armoranth.png b/legacy/public/assets/img/Material/Armoranth.png similarity index 100% rename from public/assets/img/Material/Armoranth.png rename to legacy/public/assets/img/Material/Armoranth.png diff --git a/public/assets/img/Material/ArmoredCarp.png b/legacy/public/assets/img/Material/ArmoredCarp.png similarity index 100% rename from public/assets/img/Material/ArmoredCarp.png rename to legacy/public/assets/img/Material/ArmoredCarp.png diff --git a/public/assets/img/Material/ArmoredPorgy.png b/legacy/public/assets/img/Material/ArmoredPorgy.png similarity index 100% rename from public/assets/img/Material/ArmoredPorgy.png rename to legacy/public/assets/img/Material/ArmoredPorgy.png diff --git a/public/assets/img/Material/BigHeartyRadish.png b/legacy/public/assets/img/Material/BigHeartyRadish.png similarity index 100% rename from public/assets/img/Material/BigHeartyRadish.png rename to legacy/public/assets/img/Material/BigHeartyRadish.png diff --git a/public/assets/img/Material/BigHeartyTruffle.png b/legacy/public/assets/img/Material/BigHeartyTruffle.png similarity index 100% rename from public/assets/img/Material/BigHeartyTruffle.png rename to legacy/public/assets/img/Material/BigHeartyTruffle.png diff --git a/public/assets/img/Material/BirdEgg.png b/legacy/public/assets/img/Material/BirdEgg.png similarity index 100% rename from public/assets/img/Material/BirdEgg.png rename to legacy/public/assets/img/Material/BirdEgg.png diff --git a/public/assets/img/Material/BladedRhinoBeetle.png b/legacy/public/assets/img/Material/BladedRhinoBeetle.png similarity index 100% rename from public/assets/img/Material/BladedRhinoBeetle.png rename to legacy/public/assets/img/Material/BladedRhinoBeetle.png diff --git a/public/assets/img/Material/BlueNightshade.png b/legacy/public/assets/img/Material/BlueNightshade.png similarity index 100% rename from public/assets/img/Material/BlueNightshade.png rename to legacy/public/assets/img/Material/BlueNightshade.png diff --git a/public/assets/img/Material/BokoblinFang.png b/legacy/public/assets/img/Material/BokoblinFang.png similarity index 100% rename from public/assets/img/Material/BokoblinFang.png rename to legacy/public/assets/img/Material/BokoblinFang.png diff --git a/public/assets/img/Material/BokoblinGuts.png b/legacy/public/assets/img/Material/BokoblinGuts.png similarity index 100% rename from public/assets/img/Material/BokoblinGuts.png rename to legacy/public/assets/img/Material/BokoblinGuts.png diff --git a/public/assets/img/Material/BokoblinHorn.png b/legacy/public/assets/img/Material/BokoblinHorn.png similarity index 100% rename from public/assets/img/Material/BokoblinHorn.png rename to legacy/public/assets/img/Material/BokoblinHorn.png diff --git a/public/assets/img/Material/BrightEyedCrab.png b/legacy/public/assets/img/Material/BrightEyedCrab.png similarity index 100% rename from public/assets/img/Material/BrightEyedCrab.png rename to legacy/public/assets/img/Material/BrightEyedCrab.png diff --git a/public/assets/img/Material/CaneSugar.png b/legacy/public/assets/img/Material/CaneSugar.png similarity index 100% rename from public/assets/img/Material/CaneSugar.png rename to legacy/public/assets/img/Material/CaneSugar.png diff --git a/public/assets/img/Material/ChickalooTreeNut.png b/legacy/public/assets/img/Material/ChickalooTreeNut.png similarity index 100% rename from public/assets/img/Material/ChickalooTreeNut.png rename to legacy/public/assets/img/Material/ChickalooTreeNut.png diff --git a/public/assets/img/Material/ChillfinTrout.png b/legacy/public/assets/img/Material/ChillfinTrout.png similarity index 100% rename from public/assets/img/Material/ChillfinTrout.png rename to legacy/public/assets/img/Material/ChillfinTrout.png diff --git a/public/assets/img/Material/Chillshroom.png b/legacy/public/assets/img/Material/Chillshroom.png similarity index 100% rename from public/assets/img/Material/Chillshroom.png rename to legacy/public/assets/img/Material/Chillshroom.png diff --git a/public/assets/img/Material/ChuchuJelly.png b/legacy/public/assets/img/Material/ChuchuJelly.png similarity index 100% rename from public/assets/img/Material/ChuchuJelly.png rename to legacy/public/assets/img/Material/ChuchuJelly.png diff --git a/public/assets/img/Material/ColdDarner.png b/legacy/public/assets/img/Material/ColdDarner.png similarity index 100% rename from public/assets/img/Material/ColdDarner.png rename to legacy/public/assets/img/Material/ColdDarner.png diff --git a/public/assets/img/Material/CoolSafflina.png b/legacy/public/assets/img/Material/CoolSafflina.png similarity index 100% rename from public/assets/img/Material/CoolSafflina.png rename to legacy/public/assets/img/Material/CoolSafflina.png diff --git a/public/assets/img/Material/CourserBeeHoney.png b/legacy/public/assets/img/Material/CourserBeeHoney.png similarity index 100% rename from public/assets/img/Material/CourserBeeHoney.png rename to legacy/public/assets/img/Material/CourserBeeHoney.png diff --git a/public/assets/img/Material/Diamond.png b/legacy/public/assets/img/Material/Diamond.png similarity index 100% rename from public/assets/img/Material/Diamond.png rename to legacy/public/assets/img/Material/Diamond.png diff --git a/public/assets/img/Material/DinraalsClaw.png b/legacy/public/assets/img/Material/DinraalsClaw.png similarity index 100% rename from public/assets/img/Material/DinraalsClaw.png rename to legacy/public/assets/img/Material/DinraalsClaw.png diff --git a/public/assets/img/Material/DinraalsScale.png b/legacy/public/assets/img/Material/DinraalsScale.png similarity index 100% rename from public/assets/img/Material/DinraalsScale.png rename to legacy/public/assets/img/Material/DinraalsScale.png diff --git a/public/assets/img/Material/ElectricDarner.png b/legacy/public/assets/img/Material/ElectricDarner.png similarity index 100% rename from public/assets/img/Material/ElectricDarner.png rename to legacy/public/assets/img/Material/ElectricDarner.png diff --git a/public/assets/img/Material/ElectricKeeseWing.png b/legacy/public/assets/img/Material/ElectricKeeseWing.png similarity index 100% rename from public/assets/img/Material/ElectricKeeseWing.png rename to legacy/public/assets/img/Material/ElectricKeeseWing.png diff --git a/public/assets/img/Material/ElectricSafflina.png b/legacy/public/assets/img/Material/ElectricSafflina.png similarity index 100% rename from public/assets/img/Material/ElectricSafflina.png rename to legacy/public/assets/img/Material/ElectricSafflina.png diff --git a/public/assets/img/Material/EnduraCarrot.png b/legacy/public/assets/img/Material/EnduraCarrot.png similarity index 100% rename from public/assets/img/Material/EnduraCarrot.png rename to legacy/public/assets/img/Material/EnduraCarrot.png diff --git a/public/assets/img/Material/EnduraShroom.png b/legacy/public/assets/img/Material/EnduraShroom.png similarity index 100% rename from public/assets/img/Material/EnduraShroom.png rename to legacy/public/assets/img/Material/EnduraShroom.png diff --git a/public/assets/img/Material/EnergeticRhinoBeetle.png b/legacy/public/assets/img/Material/EnergeticRhinoBeetle.png similarity index 100% rename from public/assets/img/Material/EnergeticRhinoBeetle.png rename to legacy/public/assets/img/Material/EnergeticRhinoBeetle.png diff --git a/public/assets/img/Material/Fairy.png b/legacy/public/assets/img/Material/Fairy.png similarity index 100% rename from public/assets/img/Material/Fairy.png rename to legacy/public/assets/img/Material/Fairy.png diff --git a/public/assets/img/Material/FaroshsClaw.png b/legacy/public/assets/img/Material/FaroshsClaw.png similarity index 100% rename from public/assets/img/Material/FaroshsClaw.png rename to legacy/public/assets/img/Material/FaroshsClaw.png diff --git a/public/assets/img/Material/FaroshsScale.png b/legacy/public/assets/img/Material/FaroshsScale.png similarity index 100% rename from public/assets/img/Material/FaroshsScale.png rename to legacy/public/assets/img/Material/FaroshsScale.png diff --git a/public/assets/img/Material/FireKeeseWing.png b/legacy/public/assets/img/Material/FireKeeseWing.png similarity index 100% rename from public/assets/img/Material/FireKeeseWing.png rename to legacy/public/assets/img/Material/FireKeeseWing.png diff --git a/public/assets/img/Material/FireproofLizard.png b/legacy/public/assets/img/Material/FireproofLizard.png similarity index 100% rename from public/assets/img/Material/FireproofLizard.png rename to legacy/public/assets/img/Material/FireproofLizard.png diff --git a/public/assets/img/Material/FleetLotusSeeds.png b/legacy/public/assets/img/Material/FleetLotusSeeds.png similarity index 100% rename from public/assets/img/Material/FleetLotusSeeds.png rename to legacy/public/assets/img/Material/FleetLotusSeeds.png diff --git a/public/assets/img/Material/Flint.png b/legacy/public/assets/img/Material/Flint.png similarity index 100% rename from public/assets/img/Material/Flint.png rename to legacy/public/assets/img/Material/Flint.png diff --git a/public/assets/img/Material/FortifiedPumpkin.png b/legacy/public/assets/img/Material/FortifiedPumpkin.png similarity index 100% rename from public/assets/img/Material/FortifiedPumpkin.png rename to legacy/public/assets/img/Material/FortifiedPumpkin.png diff --git a/public/assets/img/Material/FreshMilk.png b/legacy/public/assets/img/Material/FreshMilk.png similarity index 100% rename from public/assets/img/Material/FreshMilk.png rename to legacy/public/assets/img/Material/FreshMilk.png diff --git a/public/assets/img/Material/GiantAncientCore.png b/legacy/public/assets/img/Material/GiantAncientCore.png similarity index 100% rename from public/assets/img/Material/GiantAncientCore.png rename to legacy/public/assets/img/Material/GiantAncientCore.png diff --git a/public/assets/img/Material/GoatButter.png b/legacy/public/assets/img/Material/GoatButter.png similarity index 100% rename from public/assets/img/Material/GoatButter.png rename to legacy/public/assets/img/Material/GoatButter.png diff --git a/public/assets/img/Material/GoronSpice.png b/legacy/public/assets/img/Material/GoronSpice.png similarity index 100% rename from public/assets/img/Material/GoronSpice.png rename to legacy/public/assets/img/Material/GoronSpice.png diff --git a/public/assets/img/Material/HeartyBass.png b/legacy/public/assets/img/Material/HeartyBass.png similarity index 100% rename from public/assets/img/Material/HeartyBass.png rename to legacy/public/assets/img/Material/HeartyBass.png diff --git a/public/assets/img/Material/HeartyBlueshellSnail.png b/legacy/public/assets/img/Material/HeartyBlueshellSnail.png similarity index 100% rename from public/assets/img/Material/HeartyBlueshellSnail.png rename to legacy/public/assets/img/Material/HeartyBlueshellSnail.png diff --git a/public/assets/img/Material/HeartyDurian.png b/legacy/public/assets/img/Material/HeartyDurian.png similarity index 100% rename from public/assets/img/Material/HeartyDurian.png rename to legacy/public/assets/img/Material/HeartyDurian.png diff --git a/public/assets/img/Material/HeartyLizard.png b/legacy/public/assets/img/Material/HeartyLizard.png similarity index 100% rename from public/assets/img/Material/HeartyLizard.png rename to legacy/public/assets/img/Material/HeartyLizard.png diff --git a/public/assets/img/Material/HeartyRadish.png b/legacy/public/assets/img/Material/HeartyRadish.png similarity index 100% rename from public/assets/img/Material/HeartyRadish.png rename to legacy/public/assets/img/Material/HeartyRadish.png diff --git a/public/assets/img/Material/HeartySalmon.png b/legacy/public/assets/img/Material/HeartySalmon.png similarity index 100% rename from public/assets/img/Material/HeartySalmon.png rename to legacy/public/assets/img/Material/HeartySalmon.png diff --git a/public/assets/img/Material/HeartyTruffle.png b/legacy/public/assets/img/Material/HeartyTruffle.png similarity index 100% rename from public/assets/img/Material/HeartyTruffle.png rename to legacy/public/assets/img/Material/HeartyTruffle.png diff --git a/public/assets/img/Material/HightailLizard.png b/legacy/public/assets/img/Material/HightailLizard.png similarity index 100% rename from public/assets/img/Material/HightailLizard.png rename to legacy/public/assets/img/Material/HightailLizard.png diff --git a/public/assets/img/Material/HinoxGuts.png b/legacy/public/assets/img/Material/HinoxGuts.png similarity index 100% rename from public/assets/img/Material/HinoxGuts.png rename to legacy/public/assets/img/Material/HinoxGuts.png diff --git a/public/assets/img/Material/HinoxToenail.png b/legacy/public/assets/img/Material/HinoxToenail.png similarity index 100% rename from public/assets/img/Material/HinoxToenail.png rename to legacy/public/assets/img/Material/HinoxToenail.png diff --git a/public/assets/img/Material/HinoxTooth.png b/legacy/public/assets/img/Material/HinoxTooth.png similarity index 100% rename from public/assets/img/Material/HinoxTooth.png rename to legacy/public/assets/img/Material/HinoxTooth.png diff --git a/public/assets/img/Material/HotFootedFrog.png b/legacy/public/assets/img/Material/HotFootedFrog.png similarity index 100% rename from public/assets/img/Material/HotFootedFrog.png rename to legacy/public/assets/img/Material/HotFootedFrog.png diff --git a/public/assets/img/Material/Hydromelon.png b/legacy/public/assets/img/Material/Hydromelon.png similarity index 100% rename from public/assets/img/Material/Hydromelon.png rename to legacy/public/assets/img/Material/Hydromelon.png diff --git a/public/assets/img/Material/HylianRice.png b/legacy/public/assets/img/Material/HylianRice.png similarity index 100% rename from public/assets/img/Material/HylianRice.png rename to legacy/public/assets/img/Material/HylianRice.png diff --git a/public/assets/img/Material/HylianShroom.png b/legacy/public/assets/img/Material/HylianShroom.png similarity index 100% rename from public/assets/img/Material/HylianShroom.png rename to legacy/public/assets/img/Material/HylianShroom.png diff --git a/public/assets/img/Material/HyruleBass.png b/legacy/public/assets/img/Material/HyruleBass.png similarity index 100% rename from public/assets/img/Material/HyruleBass.png rename to legacy/public/assets/img/Material/HyruleBass.png diff --git a/public/assets/img/Material/HyruleHerb.png b/legacy/public/assets/img/Material/HyruleHerb.png similarity index 100% rename from public/assets/img/Material/HyruleHerb.png rename to legacy/public/assets/img/Material/HyruleHerb.png diff --git a/public/assets/img/Material/IceKeeseWing.png b/legacy/public/assets/img/Material/IceKeeseWing.png similarity index 100% rename from public/assets/img/Material/IceKeeseWing.png rename to legacy/public/assets/img/Material/IceKeeseWing.png diff --git a/public/assets/img/Material/IcyLizalfosTail.png b/legacy/public/assets/img/Material/IcyLizalfosTail.png similarity index 100% rename from public/assets/img/Material/IcyLizalfosTail.png rename to legacy/public/assets/img/Material/IcyLizalfosTail.png diff --git a/public/assets/img/Material/IronshellCrab.png b/legacy/public/assets/img/Material/IronshellCrab.png similarity index 100% rename from public/assets/img/Material/IronshellCrab.png rename to legacy/public/assets/img/Material/IronshellCrab.png diff --git a/public/assets/img/Material/Ironshroom.png b/legacy/public/assets/img/Material/Ironshroom.png similarity index 100% rename from public/assets/img/Material/Ironshroom.png rename to legacy/public/assets/img/Material/Ironshroom.png diff --git a/public/assets/img/Material/KeeseEyeball.png b/legacy/public/assets/img/Material/KeeseEyeball.png similarity index 100% rename from public/assets/img/Material/KeeseEyeball.png rename to legacy/public/assets/img/Material/KeeseEyeball.png diff --git a/public/assets/img/Material/KeeseWing.png b/legacy/public/assets/img/Material/KeeseWing.png similarity index 100% rename from public/assets/img/Material/KeeseWing.png rename to legacy/public/assets/img/Material/KeeseWing.png diff --git a/public/assets/img/Material/LizalfosHorn.png b/legacy/public/assets/img/Material/LizalfosHorn.png similarity index 100% rename from public/assets/img/Material/LizalfosHorn.png rename to legacy/public/assets/img/Material/LizalfosHorn.png diff --git a/public/assets/img/Material/LizalfosTail.png b/legacy/public/assets/img/Material/LizalfosTail.png similarity index 100% rename from public/assets/img/Material/LizalfosTail.png rename to legacy/public/assets/img/Material/LizalfosTail.png diff --git a/public/assets/img/Material/LizalfosTalon.png b/legacy/public/assets/img/Material/LizalfosTalon.png similarity index 100% rename from public/assets/img/Material/LizalfosTalon.png rename to legacy/public/assets/img/Material/LizalfosTalon.png diff --git a/public/assets/img/Material/LuminousStone.png b/legacy/public/assets/img/Material/LuminousStone.png similarity index 100% rename from public/assets/img/Material/LuminousStone.png rename to legacy/public/assets/img/Material/LuminousStone.png diff --git a/public/assets/img/Material/LynelGuts.png b/legacy/public/assets/img/Material/LynelGuts.png similarity index 100% rename from public/assets/img/Material/LynelGuts.png rename to legacy/public/assets/img/Material/LynelGuts.png diff --git a/public/assets/img/Material/LynelHoof.png b/legacy/public/assets/img/Material/LynelHoof.png similarity index 100% rename from public/assets/img/Material/LynelHoof.png rename to legacy/public/assets/img/Material/LynelHoof.png diff --git a/public/assets/img/Material/LynelHorn.png b/legacy/public/assets/img/Material/LynelHorn.png similarity index 100% rename from public/assets/img/Material/LynelHorn.png rename to legacy/public/assets/img/Material/LynelHorn.png diff --git a/public/assets/img/Material/MightyBananas.png b/legacy/public/assets/img/Material/MightyBananas.png similarity index 100% rename from public/assets/img/Material/MightyBananas.png rename to legacy/public/assets/img/Material/MightyBananas.png diff --git a/public/assets/img/Material/MightyCarp.png b/legacy/public/assets/img/Material/MightyCarp.png similarity index 100% rename from public/assets/img/Material/MightyCarp.png rename to legacy/public/assets/img/Material/MightyCarp.png diff --git a/public/assets/img/Material/MightyPorgy.png b/legacy/public/assets/img/Material/MightyPorgy.png similarity index 100% rename from public/assets/img/Material/MightyPorgy.png rename to legacy/public/assets/img/Material/MightyPorgy.png diff --git a/public/assets/img/Material/MightyThistle.png b/legacy/public/assets/img/Material/MightyThistle.png similarity index 100% rename from public/assets/img/Material/MightyThistle.png rename to legacy/public/assets/img/Material/MightyThistle.png diff --git a/public/assets/img/Material/MoblinFang.png b/legacy/public/assets/img/Material/MoblinFang.png similarity index 100% rename from public/assets/img/Material/MoblinFang.png rename to legacy/public/assets/img/Material/MoblinFang.png diff --git a/public/assets/img/Material/MoblinGuts.png b/legacy/public/assets/img/Material/MoblinGuts.png similarity index 100% rename from public/assets/img/Material/MoblinGuts.png rename to legacy/public/assets/img/Material/MoblinGuts.png diff --git a/public/assets/img/Material/MoblinHorn.png b/legacy/public/assets/img/Material/MoblinHorn.png similarity index 100% rename from public/assets/img/Material/MoblinHorn.png rename to legacy/public/assets/img/Material/MoblinHorn.png diff --git a/public/assets/img/Material/MoldugaFin.png b/legacy/public/assets/img/Material/MoldugaFin.png similarity index 100% rename from public/assets/img/Material/MoldugaFin.png rename to legacy/public/assets/img/Material/MoldugaFin.png diff --git a/public/assets/img/Material/MoldugaGuts.png b/legacy/public/assets/img/Material/MoldugaGuts.png similarity index 100% rename from public/assets/img/Material/MoldugaGuts.png rename to legacy/public/assets/img/Material/MoldugaGuts.png diff --git a/public/assets/img/Material/MonsterExtract.png b/legacy/public/assets/img/Material/MonsterExtract.png similarity index 100% rename from public/assets/img/Material/MonsterExtract.png rename to legacy/public/assets/img/Material/MonsterExtract.png diff --git a/public/assets/img/Material/NaydrasClaw.png b/legacy/public/assets/img/Material/NaydrasClaw.png similarity index 100% rename from public/assets/img/Material/NaydrasClaw.png rename to legacy/public/assets/img/Material/NaydrasClaw.png diff --git a/public/assets/img/Material/NaydrasScale.png b/legacy/public/assets/img/Material/NaydrasScale.png similarity index 100% rename from public/assets/img/Material/NaydrasScale.png rename to legacy/public/assets/img/Material/NaydrasScale.png diff --git a/public/assets/img/Material/OctoBalloon.png b/legacy/public/assets/img/Material/OctoBalloon.png similarity index 100% rename from public/assets/img/Material/OctoBalloon.png rename to legacy/public/assets/img/Material/OctoBalloon.png diff --git a/public/assets/img/Material/OctorokEyeball.png b/legacy/public/assets/img/Material/OctorokEyeball.png similarity index 100% rename from public/assets/img/Material/OctorokEyeball.png rename to legacy/public/assets/img/Material/OctorokEyeball.png diff --git a/public/assets/img/Material/OctorokTentacle.png b/legacy/public/assets/img/Material/OctorokTentacle.png similarity index 100% rename from public/assets/img/Material/OctorokTentacle.png rename to legacy/public/assets/img/Material/OctorokTentacle.png diff --git a/public/assets/img/Material/Opal.png b/legacy/public/assets/img/Material/Opal.png similarity index 100% rename from public/assets/img/Material/Opal.png rename to legacy/public/assets/img/Material/Opal.png diff --git a/public/assets/img/Material/PalmFruit.png b/legacy/public/assets/img/Material/PalmFruit.png similarity index 100% rename from public/assets/img/Material/PalmFruit.png rename to legacy/public/assets/img/Material/PalmFruit.png diff --git a/public/assets/img/Material/RawBirdDrumstick.png b/legacy/public/assets/img/Material/RawBirdDrumstick.png similarity index 100% rename from public/assets/img/Material/RawBirdDrumstick.png rename to legacy/public/assets/img/Material/RawBirdDrumstick.png diff --git a/public/assets/img/Material/RawBirdThigh.png b/legacy/public/assets/img/Material/RawBirdThigh.png similarity index 100% rename from public/assets/img/Material/RawBirdThigh.png rename to legacy/public/assets/img/Material/RawBirdThigh.png diff --git a/public/assets/img/Material/RawGourmetMeat.png b/legacy/public/assets/img/Material/RawGourmetMeat.png similarity index 100% rename from public/assets/img/Material/RawGourmetMeat.png rename to legacy/public/assets/img/Material/RawGourmetMeat.png diff --git a/public/assets/img/Material/RawMeat.png b/legacy/public/assets/img/Material/RawMeat.png similarity index 100% rename from public/assets/img/Material/RawMeat.png rename to legacy/public/assets/img/Material/RawMeat.png diff --git a/public/assets/img/Material/RawPrimeMeat.png b/legacy/public/assets/img/Material/RawPrimeMeat.png similarity index 100% rename from public/assets/img/Material/RawPrimeMeat.png rename to legacy/public/assets/img/Material/RawPrimeMeat.png diff --git a/public/assets/img/Material/RawWholeBird.png b/legacy/public/assets/img/Material/RawWholeBird.png similarity index 100% rename from public/assets/img/Material/RawWholeBird.png rename to legacy/public/assets/img/Material/RawWholeBird.png diff --git a/public/assets/img/Material/RazorclawCrab.png b/legacy/public/assets/img/Material/RazorclawCrab.png similarity index 100% rename from public/assets/img/Material/RazorclawCrab.png rename to legacy/public/assets/img/Material/RazorclawCrab.png diff --git a/public/assets/img/Material/Razorshroom.png b/legacy/public/assets/img/Material/Razorshroom.png similarity index 100% rename from public/assets/img/Material/Razorshroom.png rename to legacy/public/assets/img/Material/Razorshroom.png diff --git a/public/assets/img/Material/RedChuchuJelly.png b/legacy/public/assets/img/Material/RedChuchuJelly.png similarity index 100% rename from public/assets/img/Material/RedChuchuJelly.png rename to legacy/public/assets/img/Material/RedChuchuJelly.png diff --git a/public/assets/img/Material/RedLizalfosTail.png b/legacy/public/assets/img/Material/RedLizalfosTail.png similarity index 100% rename from public/assets/img/Material/RedLizalfosTail.png rename to legacy/public/assets/img/Material/RedLizalfosTail.png diff --git a/public/assets/img/Material/RestlessCricket.png b/legacy/public/assets/img/Material/RestlessCricket.png similarity index 100% rename from public/assets/img/Material/RestlessCricket.png rename to legacy/public/assets/img/Material/RestlessCricket.png diff --git a/public/assets/img/Material/RockSalt.png b/legacy/public/assets/img/Material/RockSalt.png similarity index 100% rename from public/assets/img/Material/RockSalt.png rename to legacy/public/assets/img/Material/RockSalt.png diff --git a/public/assets/img/Material/Ruby.png b/legacy/public/assets/img/Material/Ruby.png similarity index 100% rename from public/assets/img/Material/Ruby.png rename to legacy/public/assets/img/Material/Ruby.png diff --git a/public/assets/img/Material/RuggedRhinoBeetle.png b/legacy/public/assets/img/Material/RuggedRhinoBeetle.png similarity index 100% rename from public/assets/img/Material/RuggedRhinoBeetle.png rename to legacy/public/assets/img/Material/RuggedRhinoBeetle.png diff --git a/public/assets/img/Material/Rushroom.png b/legacy/public/assets/img/Material/Rushroom.png similarity index 100% rename from public/assets/img/Material/Rushroom.png rename to legacy/public/assets/img/Material/Rushroom.png diff --git a/public/assets/img/Material/SankeCarp.png b/legacy/public/assets/img/Material/SankeCarp.png similarity index 100% rename from public/assets/img/Material/SankeCarp.png rename to legacy/public/assets/img/Material/SankeCarp.png diff --git a/public/assets/img/Material/Sapphire.png b/legacy/public/assets/img/Material/Sapphire.png similarity index 100% rename from public/assets/img/Material/Sapphire.png rename to legacy/public/assets/img/Material/Sapphire.png diff --git a/public/assets/img/Material/ShardOfDinraalsFang.png b/legacy/public/assets/img/Material/ShardOfDinraalsFang.png similarity index 100% rename from public/assets/img/Material/ShardOfDinraalsFang.png rename to legacy/public/assets/img/Material/ShardOfDinraalsFang.png diff --git a/public/assets/img/Material/ShardOfDinraalsHorn.png b/legacy/public/assets/img/Material/ShardOfDinraalsHorn.png similarity index 100% rename from public/assets/img/Material/ShardOfDinraalsHorn.png rename to legacy/public/assets/img/Material/ShardOfDinraalsHorn.png diff --git a/public/assets/img/Material/ShardOfFaroshsFang.png b/legacy/public/assets/img/Material/ShardOfFaroshsFang.png similarity index 100% rename from public/assets/img/Material/ShardOfFaroshsFang.png rename to legacy/public/assets/img/Material/ShardOfFaroshsFang.png diff --git a/public/assets/img/Material/ShardOfFaroshsHorn.png b/legacy/public/assets/img/Material/ShardOfFaroshsHorn.png similarity index 100% rename from public/assets/img/Material/ShardOfFaroshsHorn.png rename to legacy/public/assets/img/Material/ShardOfFaroshsHorn.png diff --git a/public/assets/img/Material/ShardOfNaydrasFang.png b/legacy/public/assets/img/Material/ShardOfNaydrasFang.png similarity index 100% rename from public/assets/img/Material/ShardOfNaydrasFang.png rename to legacy/public/assets/img/Material/ShardOfNaydrasFang.png diff --git a/public/assets/img/Material/ShardOfNaydrasHorn.png b/legacy/public/assets/img/Material/ShardOfNaydrasHorn.png similarity index 100% rename from public/assets/img/Material/ShardOfNaydrasHorn.png rename to legacy/public/assets/img/Material/ShardOfNaydrasHorn.png diff --git a/public/assets/img/Material/SilentPrincess.png b/legacy/public/assets/img/Material/SilentPrincess.png similarity index 100% rename from public/assets/img/Material/SilentPrincess.png rename to legacy/public/assets/img/Material/SilentPrincess.png diff --git a/public/assets/img/Material/SilentShroom.png b/legacy/public/assets/img/Material/SilentShroom.png similarity index 100% rename from public/assets/img/Material/SilentShroom.png rename to legacy/public/assets/img/Material/SilentShroom.png diff --git a/public/assets/img/Material/SizzlefinTrout.png b/legacy/public/assets/img/Material/SizzlefinTrout.png similarity index 100% rename from public/assets/img/Material/SizzlefinTrout.png rename to legacy/public/assets/img/Material/SizzlefinTrout.png diff --git a/public/assets/img/Material/SmotherwingButterfly.png b/legacy/public/assets/img/Material/SmotherwingButterfly.png similarity index 100% rename from public/assets/img/Material/SmotherwingButterfly.png rename to legacy/public/assets/img/Material/SmotherwingButterfly.png diff --git a/public/assets/img/Material/SneakyRiverSnail.png b/legacy/public/assets/img/Material/SneakyRiverSnail.png similarity index 100% rename from public/assets/img/Material/SneakyRiverSnail.png rename to legacy/public/assets/img/Material/SneakyRiverSnail.png diff --git a/public/assets/img/Material/SpicyPepper.png b/legacy/public/assets/img/Material/SpicyPepper.png similarity index 100% rename from public/assets/img/Material/SpicyPepper.png rename to legacy/public/assets/img/Material/SpicyPepper.png diff --git a/public/assets/img/Material/StamellaShroom.png b/legacy/public/assets/img/Material/StamellaShroom.png similarity index 100% rename from public/assets/img/Material/StamellaShroom.png rename to legacy/public/assets/img/Material/StamellaShroom.png diff --git a/public/assets/img/Material/StaminokaBass.png b/legacy/public/assets/img/Material/StaminokaBass.png similarity index 100% rename from public/assets/img/Material/StaminokaBass.png rename to legacy/public/assets/img/Material/StaminokaBass.png diff --git a/public/assets/img/Material/StarFragment.png b/legacy/public/assets/img/Material/StarFragment.png similarity index 100% rename from public/assets/img/Material/StarFragment.png rename to legacy/public/assets/img/Material/StarFragment.png diff --git a/public/assets/img/Material/StealthfinTrout.png b/legacy/public/assets/img/Material/StealthfinTrout.png similarity index 100% rename from public/assets/img/Material/StealthfinTrout.png rename to legacy/public/assets/img/Material/StealthfinTrout.png diff --git a/public/assets/img/Material/SummerwingButterfly.png b/legacy/public/assets/img/Material/SummerwingButterfly.png similarity index 100% rename from public/assets/img/Material/SummerwingButterfly.png rename to legacy/public/assets/img/Material/SummerwingButterfly.png diff --git a/public/assets/img/Material/SunsetFirefly.png b/legacy/public/assets/img/Material/SunsetFirefly.png similarity index 100% rename from public/assets/img/Material/SunsetFirefly.png rename to legacy/public/assets/img/Material/SunsetFirefly.png diff --git a/public/assets/img/Material/Sunshroom.png b/legacy/public/assets/img/Material/Sunshroom.png similarity index 100% rename from public/assets/img/Material/Sunshroom.png rename to legacy/public/assets/img/Material/Sunshroom.png diff --git a/public/assets/img/Material/SwiftCarrot.png b/legacy/public/assets/img/Material/SwiftCarrot.png similarity index 100% rename from public/assets/img/Material/SwiftCarrot.png rename to legacy/public/assets/img/Material/SwiftCarrot.png diff --git a/public/assets/img/Material/SwiftViolet.png b/legacy/public/assets/img/Material/SwiftViolet.png similarity index 100% rename from public/assets/img/Material/SwiftViolet.png rename to legacy/public/assets/img/Material/SwiftViolet.png diff --git a/public/assets/img/Material/TabanthaWheat.png b/legacy/public/assets/img/Material/TabanthaWheat.png similarity index 100% rename from public/assets/img/Material/TabanthaWheat.png rename to legacy/public/assets/img/Material/TabanthaWheat.png diff --git a/public/assets/img/Material/ThunderwingButterfly.png b/legacy/public/assets/img/Material/ThunderwingButterfly.png similarity index 100% rename from public/assets/img/Material/ThunderwingButterfly.png rename to legacy/public/assets/img/Material/ThunderwingButterfly.png diff --git a/public/assets/img/Material/TirelessFrog.png b/legacy/public/assets/img/Material/TirelessFrog.png similarity index 100% rename from public/assets/img/Material/TirelessFrog.png rename to legacy/public/assets/img/Material/TirelessFrog.png diff --git a/public/assets/img/Material/Topaz.png b/legacy/public/assets/img/Material/Topaz.png similarity index 100% rename from public/assets/img/Material/Topaz.png rename to legacy/public/assets/img/Material/Topaz.png diff --git a/public/assets/img/Material/VoltfinTrout.png b/legacy/public/assets/img/Material/VoltfinTrout.png similarity index 100% rename from public/assets/img/Material/VoltfinTrout.png rename to legacy/public/assets/img/Material/VoltfinTrout.png diff --git a/public/assets/img/Material/Voltfruit.png b/legacy/public/assets/img/Material/Voltfruit.png similarity index 100% rename from public/assets/img/Material/Voltfruit.png rename to legacy/public/assets/img/Material/Voltfruit.png diff --git a/public/assets/img/Material/WarmDarner.png b/legacy/public/assets/img/Material/WarmDarner.png similarity index 100% rename from public/assets/img/Material/WarmDarner.png rename to legacy/public/assets/img/Material/WarmDarner.png diff --git a/public/assets/img/Material/WarmSafflina.png b/legacy/public/assets/img/Material/WarmSafflina.png similarity index 100% rename from public/assets/img/Material/WarmSafflina.png rename to legacy/public/assets/img/Material/WarmSafflina.png diff --git a/public/assets/img/Material/WhiteChuchuJelly.png b/legacy/public/assets/img/Material/WhiteChuchuJelly.png similarity index 100% rename from public/assets/img/Material/WhiteChuchuJelly.png rename to legacy/public/assets/img/Material/WhiteChuchuJelly.png diff --git a/public/assets/img/Material/Wildberry.png b/legacy/public/assets/img/Material/Wildberry.png similarity index 100% rename from public/assets/img/Material/Wildberry.png rename to legacy/public/assets/img/Material/Wildberry.png diff --git a/public/assets/img/Material/WinterwingButterfly.png b/legacy/public/assets/img/Material/WinterwingButterfly.png similarity index 100% rename from public/assets/img/Material/WinterwingButterfly.png rename to legacy/public/assets/img/Material/WinterwingButterfly.png diff --git a/public/assets/img/Material/Wood.png b/legacy/public/assets/img/Material/Wood.png similarity index 100% rename from public/assets/img/Material/Wood.png rename to legacy/public/assets/img/Material/Wood.png diff --git a/public/assets/img/Material/YellowChuchuJelly.png b/legacy/public/assets/img/Material/YellowChuchuJelly.png similarity index 100% rename from public/assets/img/Material/YellowChuchuJelly.png rename to legacy/public/assets/img/Material/YellowChuchuJelly.png diff --git a/public/assets/img/Material/YellowLizalfosTail.png b/legacy/public/assets/img/Material/YellowLizalfosTail.png similarity index 100% rename from public/assets/img/Material/YellowLizalfosTail.png rename to legacy/public/assets/img/Material/YellowLizalfosTail.png diff --git a/public/assets/img/Material/Zapshroom.png b/legacy/public/assets/img/Material/Zapshroom.png similarity index 100% rename from public/assets/img/Material/Zapshroom.png rename to legacy/public/assets/img/Material/Zapshroom.png diff --git a/public/assets/img/Modifiers/BowAttackUp.png b/legacy/public/assets/img/Modifiers/BowAttackUp.png similarity index 100% rename from public/assets/img/Modifiers/BowAttackUp.png rename to legacy/public/assets/img/Modifiers/BowAttackUp.png diff --git a/public/assets/img/Modifiers/BowAttackUpYellow.png b/legacy/public/assets/img/Modifiers/BowAttackUpYellow.png similarity index 100% rename from public/assets/img/Modifiers/BowAttackUpYellow.png rename to legacy/public/assets/img/Modifiers/BowAttackUpYellow.png diff --git a/public/assets/img/Modifiers/CookChilly.png b/legacy/public/assets/img/Modifiers/CookChilly.png similarity index 100% rename from public/assets/img/Modifiers/CookChilly.png rename to legacy/public/assets/img/Modifiers/CookChilly.png diff --git a/public/assets/img/Modifiers/CookElectro.png b/legacy/public/assets/img/Modifiers/CookElectro.png similarity index 100% rename from public/assets/img/Modifiers/CookElectro.png rename to legacy/public/assets/img/Modifiers/CookElectro.png diff --git a/public/assets/img/Modifiers/CookEnduring.png b/legacy/public/assets/img/Modifiers/CookEnduring.png similarity index 100% rename from public/assets/img/Modifiers/CookEnduring.png rename to legacy/public/assets/img/Modifiers/CookEnduring.png diff --git a/public/assets/img/Modifiers/CookEnergizing.png b/legacy/public/assets/img/Modifiers/CookEnergizing.png similarity index 100% rename from public/assets/img/Modifiers/CookEnergizing.png rename to legacy/public/assets/img/Modifiers/CookEnergizing.png diff --git a/public/assets/img/Modifiers/CookFireproof.png b/legacy/public/assets/img/Modifiers/CookFireproof.png similarity index 100% rename from public/assets/img/Modifiers/CookFireproof.png rename to legacy/public/assets/img/Modifiers/CookFireproof.png diff --git a/public/assets/img/Modifiers/CookHasty.png b/legacy/public/assets/img/Modifiers/CookHasty.png similarity index 100% rename from public/assets/img/Modifiers/CookHasty.png rename to legacy/public/assets/img/Modifiers/CookHasty.png diff --git a/public/assets/img/Modifiers/CookHearty.png b/legacy/public/assets/img/Modifiers/CookHearty.png similarity index 100% rename from public/assets/img/Modifiers/CookHearty.png rename to legacy/public/assets/img/Modifiers/CookHearty.png diff --git a/public/assets/img/Modifiers/CookMighty.png b/legacy/public/assets/img/Modifiers/CookMighty.png similarity index 100% rename from public/assets/img/Modifiers/CookMighty.png rename to legacy/public/assets/img/Modifiers/CookMighty.png diff --git a/public/assets/img/Modifiers/CookSneaky.png b/legacy/public/assets/img/Modifiers/CookSneaky.png similarity index 100% rename from public/assets/img/Modifiers/CookSneaky.png rename to legacy/public/assets/img/Modifiers/CookSneaky.png diff --git a/public/assets/img/Modifiers/CookSpicy.png b/legacy/public/assets/img/Modifiers/CookSpicy.png similarity index 100% rename from public/assets/img/Modifiers/CookSpicy.png rename to legacy/public/assets/img/Modifiers/CookSpicy.png diff --git a/public/assets/img/Modifiers/CookTough.png b/legacy/public/assets/img/Modifiers/CookTough.png similarity index 100% rename from public/assets/img/Modifiers/CookTough.png rename to legacy/public/assets/img/Modifiers/CookTough.png diff --git a/public/assets/img/Modifiers/CriticalHit.png b/legacy/public/assets/img/Modifiers/CriticalHit.png similarity index 100% rename from public/assets/img/Modifiers/CriticalHit.png rename to legacy/public/assets/img/Modifiers/CriticalHit.png diff --git a/public/assets/img/Modifiers/CriticalHitYellow.png b/legacy/public/assets/img/Modifiers/CriticalHitYellow.png similarity index 100% rename from public/assets/img/Modifiers/CriticalHitYellow.png rename to legacy/public/assets/img/Modifiers/CriticalHitYellow.png diff --git a/public/assets/img/Modifiers/DurabilityUp.png b/legacy/public/assets/img/Modifiers/DurabilityUp.png similarity index 100% rename from public/assets/img/Modifiers/DurabilityUp.png rename to legacy/public/assets/img/Modifiers/DurabilityUp.png diff --git a/public/assets/img/Modifiers/DurabilityUpYellow.png b/legacy/public/assets/img/Modifiers/DurabilityUpYellow.png similarity index 100% rename from public/assets/img/Modifiers/DurabilityUpYellow.png rename to legacy/public/assets/img/Modifiers/DurabilityUpYellow.png diff --git a/public/assets/img/Modifiers/GuardUp.png b/legacy/public/assets/img/Modifiers/GuardUp.png similarity index 100% rename from public/assets/img/Modifiers/GuardUp.png rename to legacy/public/assets/img/Modifiers/GuardUp.png diff --git a/public/assets/img/Modifiers/GuardUpYellow.png b/legacy/public/assets/img/Modifiers/GuardUpYellow.png similarity index 100% rename from public/assets/img/Modifiers/GuardUpYellow.png rename to legacy/public/assets/img/Modifiers/GuardUpYellow.png diff --git a/public/assets/img/Modifiers/LongThrow.png b/legacy/public/assets/img/Modifiers/LongThrow.png similarity index 100% rename from public/assets/img/Modifiers/LongThrow.png rename to legacy/public/assets/img/Modifiers/LongThrow.png diff --git a/public/assets/img/Modifiers/LongThrowYellow.png b/legacy/public/assets/img/Modifiers/LongThrowYellow.png similarity index 100% rename from public/assets/img/Modifiers/LongThrowYellow.png rename to legacy/public/assets/img/Modifiers/LongThrowYellow.png diff --git a/public/assets/img/Modifiers/Multishot3.png b/legacy/public/assets/img/Modifiers/Multishot3.png similarity index 100% rename from public/assets/img/Modifiers/Multishot3.png rename to legacy/public/assets/img/Modifiers/Multishot3.png diff --git a/public/assets/img/Modifiers/Multishot5.png b/legacy/public/assets/img/Modifiers/Multishot5.png similarity index 100% rename from public/assets/img/Modifiers/Multishot5.png rename to legacy/public/assets/img/Modifiers/Multishot5.png diff --git a/public/assets/img/Modifiers/MultishotX.png b/legacy/public/assets/img/Modifiers/MultishotX.png similarity index 100% rename from public/assets/img/Modifiers/MultishotX.png rename to legacy/public/assets/img/Modifiers/MultishotX.png diff --git a/public/assets/img/Modifiers/QuickShot.png b/legacy/public/assets/img/Modifiers/QuickShot.png similarity index 100% rename from public/assets/img/Modifiers/QuickShot.png rename to legacy/public/assets/img/Modifiers/QuickShot.png diff --git a/public/assets/img/Modifiers/QuickShotYellow.png b/legacy/public/assets/img/Modifiers/QuickShotYellow.png similarity index 100% rename from public/assets/img/Modifiers/QuickShotYellow.png rename to legacy/public/assets/img/Modifiers/QuickShotYellow.png diff --git a/public/assets/img/Modifiers/SurfMaster.png b/legacy/public/assets/img/Modifiers/SurfMaster.png similarity index 100% rename from public/assets/img/Modifiers/SurfMaster.png rename to legacy/public/assets/img/Modifiers/SurfMaster.png diff --git a/public/assets/img/Modifiers/SurfMasterYellow.png b/legacy/public/assets/img/Modifiers/SurfMasterYellow.png similarity index 100% rename from public/assets/img/Modifiers/SurfMasterYellow.png rename to legacy/public/assets/img/Modifiers/SurfMasterYellow.png diff --git a/public/assets/img/Modifiers/WeaponAttackUp.png b/legacy/public/assets/img/Modifiers/WeaponAttackUp.png similarity index 100% rename from public/assets/img/Modifiers/WeaponAttackUp.png rename to legacy/public/assets/img/Modifiers/WeaponAttackUp.png diff --git a/public/assets/img/Modifiers/WeaponAttackUpYellow.png b/legacy/public/assets/img/Modifiers/WeaponAttackUpYellow.png similarity index 100% rename from public/assets/img/Modifiers/WeaponAttackUpYellow.png rename to legacy/public/assets/img/Modifiers/WeaponAttackUpYellow.png diff --git a/public/assets/img/Modifiers/Zoom.png b/legacy/public/assets/img/Modifiers/Zoom.png similarity index 100% rename from public/assets/img/Modifiers/Zoom.png rename to legacy/public/assets/img/Modifiers/Zoom.png diff --git a/public/assets/img/Modifiers/ZoomYellow.png b/legacy/public/assets/img/Modifiers/ZoomYellow.png similarity index 100% rename from public/assets/img/Modifiers/ZoomYellow.png rename to legacy/public/assets/img/Modifiers/ZoomYellow.png diff --git a/public/assets/img/Shield/AncientShield.png b/legacy/public/assets/img/Shield/AncientShield.png similarity index 100% rename from public/assets/img/Shield/AncientShield.png rename to legacy/public/assets/img/Shield/AncientShield.png diff --git a/public/assets/img/Shield/BokoShield.png b/legacy/public/assets/img/Shield/BokoShield.png similarity index 100% rename from public/assets/img/Shield/BokoShield.png rename to legacy/public/assets/img/Shield/BokoShield.png diff --git a/public/assets/img/Shield/Daybreaker.png b/legacy/public/assets/img/Shield/Daybreaker.png similarity index 100% rename from public/assets/img/Shield/Daybreaker.png rename to legacy/public/assets/img/Shield/Daybreaker.png diff --git a/public/assets/img/Shield/DragonboneBokoShield.png b/legacy/public/assets/img/Shield/DragonboneBokoShield.png similarity index 100% rename from public/assets/img/Shield/DragonboneBokoShield.png rename to legacy/public/assets/img/Shield/DragonboneBokoShield.png diff --git a/public/assets/img/Shield/EmblazonedShield.png b/legacy/public/assets/img/Shield/EmblazonedShield.png similarity index 100% rename from public/assets/img/Shield/EmblazonedShield.png rename to legacy/public/assets/img/Shield/EmblazonedShield.png diff --git a/public/assets/img/Shield/FishermansShield.png b/legacy/public/assets/img/Shield/FishermansShield.png similarity index 100% rename from public/assets/img/Shield/FishermansShield.png rename to legacy/public/assets/img/Shield/FishermansShield.png diff --git a/public/assets/img/Shield/ForestDwellersShield.png b/legacy/public/assets/img/Shield/ForestDwellersShield.png similarity index 100% rename from public/assets/img/Shield/ForestDwellersShield.png rename to legacy/public/assets/img/Shield/ForestDwellersShield.png diff --git a/public/assets/img/Shield/GerudoShield.png b/legacy/public/assets/img/Shield/GerudoShield.png similarity index 100% rename from public/assets/img/Shield/GerudoShield.png rename to legacy/public/assets/img/Shield/GerudoShield.png diff --git a/public/assets/img/Shield/GuardianShield.png b/legacy/public/assets/img/Shield/GuardianShield.png similarity index 100% rename from public/assets/img/Shield/GuardianShield.png rename to legacy/public/assets/img/Shield/GuardianShield.png diff --git a/public/assets/img/Shield/GuardianShieldPlus.png b/legacy/public/assets/img/Shield/GuardianShieldPlus.png similarity index 100% rename from public/assets/img/Shield/GuardianShieldPlus.png rename to legacy/public/assets/img/Shield/GuardianShieldPlus.png diff --git a/public/assets/img/Shield/GuardianShieldPlusPlus.png b/legacy/public/assets/img/Shield/GuardianShieldPlusPlus.png similarity index 100% rename from public/assets/img/Shield/GuardianShieldPlusPlus.png rename to legacy/public/assets/img/Shield/GuardianShieldPlusPlus.png diff --git a/public/assets/img/Shield/HerosShield.png b/legacy/public/assets/img/Shield/HerosShield.png similarity index 100% rename from public/assets/img/Shield/HerosShield.png rename to legacy/public/assets/img/Shield/HerosShield.png diff --git a/public/assets/img/Shield/HuntersShield.png b/legacy/public/assets/img/Shield/HuntersShield.png similarity index 100% rename from public/assets/img/Shield/HuntersShield.png rename to legacy/public/assets/img/Shield/HuntersShield.png diff --git a/public/assets/img/Shield/HylianShield.png b/legacy/public/assets/img/Shield/HylianShield.png similarity index 100% rename from public/assets/img/Shield/HylianShield.png rename to legacy/public/assets/img/Shield/HylianShield.png diff --git a/public/assets/img/Shield/KiteShield.png b/legacy/public/assets/img/Shield/KiteShield.png similarity index 100% rename from public/assets/img/Shield/KiteShield.png rename to legacy/public/assets/img/Shield/KiteShield.png diff --git a/public/assets/img/Shield/KnightsShield.png b/legacy/public/assets/img/Shield/KnightsShield.png similarity index 100% rename from public/assets/img/Shield/KnightsShield.png rename to legacy/public/assets/img/Shield/KnightsShield.png diff --git a/public/assets/img/Shield/LizalShield.png b/legacy/public/assets/img/Shield/LizalShield.png similarity index 100% rename from public/assets/img/Shield/LizalShield.png rename to legacy/public/assets/img/Shield/LizalShield.png diff --git a/public/assets/img/Shield/LynelShield.png b/legacy/public/assets/img/Shield/LynelShield.png similarity index 100% rename from public/assets/img/Shield/LynelShield.png rename to legacy/public/assets/img/Shield/LynelShield.png diff --git a/public/assets/img/Shield/MightyLynelShield.png b/legacy/public/assets/img/Shield/MightyLynelShield.png similarity index 100% rename from public/assets/img/Shield/MightyLynelShield.png rename to legacy/public/assets/img/Shield/MightyLynelShield.png diff --git a/public/assets/img/Shield/PotLid.png b/legacy/public/assets/img/Shield/PotLid.png similarity index 100% rename from public/assets/img/Shield/PotLid.png rename to legacy/public/assets/img/Shield/PotLid.png diff --git a/public/assets/img/Shield/RadiantShield.png b/legacy/public/assets/img/Shield/RadiantShield.png similarity index 100% rename from public/assets/img/Shield/RadiantShield.png rename to legacy/public/assets/img/Shield/RadiantShield.png diff --git a/public/assets/img/Shield/ReinforcedLizalShield.png b/legacy/public/assets/img/Shield/ReinforcedLizalShield.png similarity index 100% rename from public/assets/img/Shield/ReinforcedLizalShield.png rename to legacy/public/assets/img/Shield/ReinforcedLizalShield.png diff --git a/public/assets/img/Shield/RoyalGuardsShield.png b/legacy/public/assets/img/Shield/RoyalGuardsShield.png similarity index 100% rename from public/assets/img/Shield/RoyalGuardsShield.png rename to legacy/public/assets/img/Shield/RoyalGuardsShield.png diff --git a/public/assets/img/Shield/RoyalShield.png b/legacy/public/assets/img/Shield/RoyalShield.png similarity index 100% rename from public/assets/img/Shield/RoyalShield.png rename to legacy/public/assets/img/Shield/RoyalShield.png diff --git a/public/assets/img/Shield/RustyShield.png b/legacy/public/assets/img/Shield/RustyShield.png similarity index 100% rename from public/assets/img/Shield/RustyShield.png rename to legacy/public/assets/img/Shield/RustyShield.png diff --git a/public/assets/img/Shield/SavageLynelShield.png b/legacy/public/assets/img/Shield/SavageLynelShield.png similarity index 100% rename from public/assets/img/Shield/SavageLynelShield.png rename to legacy/public/assets/img/Shield/SavageLynelShield.png diff --git a/public/assets/img/Shield/Shield.png b/legacy/public/assets/img/Shield/Shield.png similarity index 100% rename from public/assets/img/Shield/Shield.png rename to legacy/public/assets/img/Shield/Shield.png diff --git a/public/assets/img/Shield/ShieldOfTheMindsEye.png b/legacy/public/assets/img/Shield/ShieldOfTheMindsEye.png similarity index 100% rename from public/assets/img/Shield/ShieldOfTheMindsEye.png rename to legacy/public/assets/img/Shield/ShieldOfTheMindsEye.png diff --git a/public/assets/img/Shield/SilverShield.png b/legacy/public/assets/img/Shield/SilverShield.png similarity index 100% rename from public/assets/img/Shield/SilverShield.png rename to legacy/public/assets/img/Shield/SilverShield.png diff --git a/public/assets/img/Shield/SoldiersShield.png b/legacy/public/assets/img/Shield/SoldiersShield.png similarity index 100% rename from public/assets/img/Shield/SoldiersShield.png rename to legacy/public/assets/img/Shield/SoldiersShield.png diff --git a/public/assets/img/Shield/SpikedBokoShield.png b/legacy/public/assets/img/Shield/SpikedBokoShield.png similarity index 100% rename from public/assets/img/Shield/SpikedBokoShield.png rename to legacy/public/assets/img/Shield/SpikedBokoShield.png diff --git a/public/assets/img/Shield/SteelLizalShield.png b/legacy/public/assets/img/Shield/SteelLizalShield.png similarity index 100% rename from public/assets/img/Shield/SteelLizalShield.png rename to legacy/public/assets/img/Shield/SteelLizalShield.png diff --git a/public/assets/img/Shield/TravelersShield.png b/legacy/public/assets/img/Shield/TravelersShield.png similarity index 100% rename from public/assets/img/Shield/TravelersShield.png rename to legacy/public/assets/img/Shield/TravelersShield.png diff --git a/public/assets/img/Shield/WoodenShield.png b/legacy/public/assets/img/Shield/WoodenShield.png similarity index 100% rename from public/assets/img/Shield/WoodenShield.png rename to legacy/public/assets/img/Shield/WoodenShield.png diff --git a/public/assets/img/Weapon/AncientBattleAxe.png b/legacy/public/assets/img/Weapon/AncientBattleAxe.png similarity index 100% rename from public/assets/img/Weapon/AncientBattleAxe.png rename to legacy/public/assets/img/Weapon/AncientBattleAxe.png diff --git a/public/assets/img/Weapon/AncientBattleAxePlus.png b/legacy/public/assets/img/Weapon/AncientBattleAxePlus.png similarity index 100% rename from public/assets/img/Weapon/AncientBattleAxePlus.png rename to legacy/public/assets/img/Weapon/AncientBattleAxePlus.png diff --git a/public/assets/img/Weapon/AncientBattleAxePlusPlus.png b/legacy/public/assets/img/Weapon/AncientBattleAxePlusPlus.png similarity index 100% rename from public/assets/img/Weapon/AncientBattleAxePlusPlus.png rename to legacy/public/assets/img/Weapon/AncientBattleAxePlusPlus.png diff --git a/public/assets/img/Weapon/AncientBladesaw.png b/legacy/public/assets/img/Weapon/AncientBladesaw.png similarity index 100% rename from public/assets/img/Weapon/AncientBladesaw.png rename to legacy/public/assets/img/Weapon/AncientBladesaw.png diff --git a/public/assets/img/Weapon/AncientShortSword.png b/legacy/public/assets/img/Weapon/AncientShortSword.png similarity index 100% rename from public/assets/img/Weapon/AncientShortSword.png rename to legacy/public/assets/img/Weapon/AncientShortSword.png diff --git a/public/assets/img/Weapon/AncientSpear.png b/legacy/public/assets/img/Weapon/AncientSpear.png similarity index 100% rename from public/assets/img/Weapon/AncientSpear.png rename to legacy/public/assets/img/Weapon/AncientSpear.png diff --git a/public/assets/img/Weapon/BiggoronsSword.png b/legacy/public/assets/img/Weapon/BiggoronsSword.png similarity index 100% rename from public/assets/img/Weapon/BiggoronsSword.png rename to legacy/public/assets/img/Weapon/BiggoronsSword.png diff --git a/public/assets/img/Weapon/BlizzardRod.png b/legacy/public/assets/img/Weapon/BlizzardRod.png similarity index 100% rename from public/assets/img/Weapon/BlizzardRod.png rename to legacy/public/assets/img/Weapon/BlizzardRod.png diff --git a/public/assets/img/Weapon/BoatOar.png b/legacy/public/assets/img/Weapon/BoatOar.png similarity index 100% rename from public/assets/img/Weapon/BoatOar.png rename to legacy/public/assets/img/Weapon/BoatOar.png diff --git a/public/assets/img/Weapon/BokoBat.png b/legacy/public/assets/img/Weapon/BokoBat.png similarity index 100% rename from public/assets/img/Weapon/BokoBat.png rename to legacy/public/assets/img/Weapon/BokoBat.png diff --git a/public/assets/img/Weapon/BokoClub.png b/legacy/public/assets/img/Weapon/BokoClub.png similarity index 100% rename from public/assets/img/Weapon/BokoClub.png rename to legacy/public/assets/img/Weapon/BokoClub.png diff --git a/public/assets/img/Weapon/BokoSpear.png b/legacy/public/assets/img/Weapon/BokoSpear.png similarity index 100% rename from public/assets/img/Weapon/BokoSpear.png rename to legacy/public/assets/img/Weapon/BokoSpear.png diff --git a/public/assets/img/Weapon/BokoblinArm.png b/legacy/public/assets/img/Weapon/BokoblinArm.png similarity index 100% rename from public/assets/img/Weapon/BokoblinArm.png rename to legacy/public/assets/img/Weapon/BokoblinArm.png diff --git a/public/assets/img/Weapon/Boomerang.png b/legacy/public/assets/img/Weapon/Boomerang.png similarity index 100% rename from public/assets/img/Weapon/Boomerang.png rename to legacy/public/assets/img/Weapon/Boomerang.png diff --git a/public/assets/img/Weapon/BoulderBreaker.png b/legacy/public/assets/img/Weapon/BoulderBreaker.png similarity index 100% rename from public/assets/img/Weapon/BoulderBreaker.png rename to legacy/public/assets/img/Weapon/BoulderBreaker.png diff --git a/public/assets/img/Weapon/CeremonialTrident.png b/legacy/public/assets/img/Weapon/CeremonialTrident.png similarity index 100% rename from public/assets/img/Weapon/CeremonialTrident.png rename to legacy/public/assets/img/Weapon/CeremonialTrident.png diff --git a/public/assets/img/Weapon/CobbleCrusher.png b/legacy/public/assets/img/Weapon/CobbleCrusher.png similarity index 100% rename from public/assets/img/Weapon/CobbleCrusher.png rename to legacy/public/assets/img/Weapon/CobbleCrusher.png diff --git a/public/assets/img/Weapon/DemonCarver.png b/legacy/public/assets/img/Weapon/DemonCarver.png similarity index 100% rename from public/assets/img/Weapon/DemonCarver.png rename to legacy/public/assets/img/Weapon/DemonCarver.png diff --git a/public/assets/img/Weapon/DoubleAxe.png b/legacy/public/assets/img/Weapon/DoubleAxe.png similarity index 100% rename from public/assets/img/Weapon/DoubleAxe.png rename to legacy/public/assets/img/Weapon/DoubleAxe.png diff --git a/public/assets/img/Weapon/DragonboneBokoBat.png b/legacy/public/assets/img/Weapon/DragonboneBokoBat.png similarity index 100% rename from public/assets/img/Weapon/DragonboneBokoBat.png rename to legacy/public/assets/img/Weapon/DragonboneBokoBat.png diff --git a/public/assets/img/Weapon/DragonboneBokoClub.png b/legacy/public/assets/img/Weapon/DragonboneBokoClub.png similarity index 100% rename from public/assets/img/Weapon/DragonboneBokoClub.png rename to legacy/public/assets/img/Weapon/DragonboneBokoClub.png diff --git a/public/assets/img/Weapon/DragonboneBokoSpear.png b/legacy/public/assets/img/Weapon/DragonboneBokoSpear.png similarity index 100% rename from public/assets/img/Weapon/DragonboneBokoSpear.png rename to legacy/public/assets/img/Weapon/DragonboneBokoSpear.png diff --git a/public/assets/img/Weapon/DragonboneMoblinClub.png b/legacy/public/assets/img/Weapon/DragonboneMoblinClub.png similarity index 100% rename from public/assets/img/Weapon/DragonboneMoblinClub.png rename to legacy/public/assets/img/Weapon/DragonboneMoblinClub.png diff --git a/public/assets/img/Weapon/DragonboneMoblinSpear.png b/legacy/public/assets/img/Weapon/DragonboneMoblinSpear.png similarity index 100% rename from public/assets/img/Weapon/DragonboneMoblinSpear.png rename to legacy/public/assets/img/Weapon/DragonboneMoblinSpear.png diff --git a/public/assets/img/Weapon/Drillshaft.png b/legacy/public/assets/img/Weapon/Drillshaft.png similarity index 100% rename from public/assets/img/Weapon/Drillshaft.png rename to legacy/public/assets/img/Weapon/Drillshaft.png diff --git a/public/assets/img/Weapon/EdgeOfDuality.png b/legacy/public/assets/img/Weapon/EdgeOfDuality.png similarity index 100% rename from public/assets/img/Weapon/EdgeOfDuality.png rename to legacy/public/assets/img/Weapon/EdgeOfDuality.png diff --git a/public/assets/img/Weapon/EightfoldBlade.png b/legacy/public/assets/img/Weapon/EightfoldBlade.png similarity index 100% rename from public/assets/img/Weapon/EightfoldBlade.png rename to legacy/public/assets/img/Weapon/EightfoldBlade.png diff --git a/public/assets/img/Weapon/EightfoldLongblade.png b/legacy/public/assets/img/Weapon/EightfoldLongblade.png similarity index 100% rename from public/assets/img/Weapon/EightfoldLongblade.png rename to legacy/public/assets/img/Weapon/EightfoldLongblade.png diff --git a/public/assets/img/Weapon/EnhancedLizalSpear.png b/legacy/public/assets/img/Weapon/EnhancedLizalSpear.png similarity index 100% rename from public/assets/img/Weapon/EnhancedLizalSpear.png rename to legacy/public/assets/img/Weapon/EnhancedLizalSpear.png diff --git a/public/assets/img/Weapon/FarmersPitchfork.png b/legacy/public/assets/img/Weapon/FarmersPitchfork.png similarity index 100% rename from public/assets/img/Weapon/FarmersPitchfork.png rename to legacy/public/assets/img/Weapon/FarmersPitchfork.png diff --git a/public/assets/img/Weapon/FarmingHoe.png b/legacy/public/assets/img/Weapon/FarmingHoe.png similarity index 100% rename from public/assets/img/Weapon/FarmingHoe.png rename to legacy/public/assets/img/Weapon/FarmingHoe.png diff --git a/public/assets/img/Weapon/FeatheredEdge.png b/legacy/public/assets/img/Weapon/FeatheredEdge.png similarity index 100% rename from public/assets/img/Weapon/FeatheredEdge.png rename to legacy/public/assets/img/Weapon/FeatheredEdge.png diff --git a/public/assets/img/Weapon/FeatheredSpear.png b/legacy/public/assets/img/Weapon/FeatheredSpear.png similarity index 100% rename from public/assets/img/Weapon/FeatheredSpear.png rename to legacy/public/assets/img/Weapon/FeatheredSpear.png diff --git a/public/assets/img/Weapon/FierceDeitySword.png b/legacy/public/assets/img/Weapon/FierceDeitySword.png similarity index 100% rename from public/assets/img/Weapon/FierceDeitySword.png rename to legacy/public/assets/img/Weapon/FierceDeitySword.png diff --git a/public/assets/img/Weapon/FireRod.png b/legacy/public/assets/img/Weapon/FireRod.png similarity index 100% rename from public/assets/img/Weapon/FireRod.png rename to legacy/public/assets/img/Weapon/FireRod.png diff --git a/public/assets/img/Weapon/FishingHarpoon.png b/legacy/public/assets/img/Weapon/FishingHarpoon.png similarity index 100% rename from public/assets/img/Weapon/FishingHarpoon.png rename to legacy/public/assets/img/Weapon/FishingHarpoon.png diff --git a/public/assets/img/Weapon/Flameblade.png b/legacy/public/assets/img/Weapon/Flameblade.png similarity index 100% rename from public/assets/img/Weapon/Flameblade.png rename to legacy/public/assets/img/Weapon/Flameblade.png diff --git a/public/assets/img/Weapon/Flamespear.png b/legacy/public/assets/img/Weapon/Flamespear.png similarity index 100% rename from public/assets/img/Weapon/Flamespear.png rename to legacy/public/assets/img/Weapon/Flamespear.png diff --git a/public/assets/img/Weapon/ForestDwellersSpear.png b/legacy/public/assets/img/Weapon/ForestDwellersSpear.png similarity index 100% rename from public/assets/img/Weapon/ForestDwellersSpear.png rename to legacy/public/assets/img/Weapon/ForestDwellersSpear.png diff --git a/public/assets/img/Weapon/ForestDwellersSword.png b/legacy/public/assets/img/Weapon/ForestDwellersSword.png similarity index 100% rename from public/assets/img/Weapon/ForestDwellersSword.png rename to legacy/public/assets/img/Weapon/ForestDwellersSword.png diff --git a/public/assets/img/Weapon/ForkedLizalSpear.png b/legacy/public/assets/img/Weapon/ForkedLizalSpear.png similarity index 100% rename from public/assets/img/Weapon/ForkedLizalSpear.png rename to legacy/public/assets/img/Weapon/ForkedLizalSpear.png diff --git a/public/assets/img/Weapon/Frostblade.png b/legacy/public/assets/img/Weapon/Frostblade.png similarity index 100% rename from public/assets/img/Weapon/Frostblade.png rename to legacy/public/assets/img/Weapon/Frostblade.png diff --git a/public/assets/img/Weapon/Frostspear.png b/legacy/public/assets/img/Weapon/Frostspear.png similarity index 100% rename from public/assets/img/Weapon/Frostspear.png rename to legacy/public/assets/img/Weapon/Frostspear.png diff --git a/public/assets/img/Weapon/GerudoScimitar.png b/legacy/public/assets/img/Weapon/GerudoScimitar.png similarity index 100% rename from public/assets/img/Weapon/GerudoScimitar.png rename to legacy/public/assets/img/Weapon/GerudoScimitar.png diff --git a/public/assets/img/Weapon/GerudoSpear.png b/legacy/public/assets/img/Weapon/GerudoSpear.png similarity index 100% rename from public/assets/img/Weapon/GerudoSpear.png rename to legacy/public/assets/img/Weapon/GerudoSpear.png diff --git a/public/assets/img/Weapon/GiantBoomerang.png b/legacy/public/assets/img/Weapon/GiantBoomerang.png similarity index 100% rename from public/assets/img/Weapon/GiantBoomerang.png rename to legacy/public/assets/img/Weapon/GiantBoomerang.png diff --git a/public/assets/img/Weapon/GoddessSword.png b/legacy/public/assets/img/Weapon/GoddessSword.png similarity index 100% rename from public/assets/img/Weapon/GoddessSword.png rename to legacy/public/assets/img/Weapon/GoddessSword.png diff --git a/public/assets/img/Weapon/GoldenClaymore.png b/legacy/public/assets/img/Weapon/GoldenClaymore.png similarity index 100% rename from public/assets/img/Weapon/GoldenClaymore.png rename to legacy/public/assets/img/Weapon/GoldenClaymore.png diff --git a/public/assets/img/Weapon/GreatFlameblade.png b/legacy/public/assets/img/Weapon/GreatFlameblade.png similarity index 100% rename from public/assets/img/Weapon/GreatFlameblade.png rename to legacy/public/assets/img/Weapon/GreatFlameblade.png diff --git a/public/assets/img/Weapon/GreatFrostblade.png b/legacy/public/assets/img/Weapon/GreatFrostblade.png similarity index 100% rename from public/assets/img/Weapon/GreatFrostblade.png rename to legacy/public/assets/img/Weapon/GreatFrostblade.png diff --git a/public/assets/img/Weapon/GreatThunderblade.png b/legacy/public/assets/img/Weapon/GreatThunderblade.png similarity index 100% rename from public/assets/img/Weapon/GreatThunderblade.png rename to legacy/public/assets/img/Weapon/GreatThunderblade.png diff --git a/public/assets/img/Weapon/GuardianSpear.png b/legacy/public/assets/img/Weapon/GuardianSpear.png similarity index 100% rename from public/assets/img/Weapon/GuardianSpear.png rename to legacy/public/assets/img/Weapon/GuardianSpear.png diff --git a/public/assets/img/Weapon/GuardianSpearPlus.png b/legacy/public/assets/img/Weapon/GuardianSpearPlus.png similarity index 100% rename from public/assets/img/Weapon/GuardianSpearPlus.png rename to legacy/public/assets/img/Weapon/GuardianSpearPlus.png diff --git a/public/assets/img/Weapon/GuardianSpearPlusPlus.png b/legacy/public/assets/img/Weapon/GuardianSpearPlusPlus.png similarity index 100% rename from public/assets/img/Weapon/GuardianSpearPlusPlus.png rename to legacy/public/assets/img/Weapon/GuardianSpearPlusPlus.png diff --git a/public/assets/img/Weapon/GuardianSword.png b/legacy/public/assets/img/Weapon/GuardianSword.png similarity index 100% rename from public/assets/img/Weapon/GuardianSword.png rename to legacy/public/assets/img/Weapon/GuardianSword.png diff --git a/public/assets/img/Weapon/GuardianSwordPlus.png b/legacy/public/assets/img/Weapon/GuardianSwordPlus.png similarity index 100% rename from public/assets/img/Weapon/GuardianSwordPlus.png rename to legacy/public/assets/img/Weapon/GuardianSwordPlus.png diff --git a/public/assets/img/Weapon/GuardianSwordPlusPlus.png b/legacy/public/assets/img/Weapon/GuardianSwordPlusPlus.png similarity index 100% rename from public/assets/img/Weapon/GuardianSwordPlusPlus.png rename to legacy/public/assets/img/Weapon/GuardianSwordPlusPlus.png diff --git a/public/assets/img/Weapon/IceRod.png b/legacy/public/assets/img/Weapon/IceRod.png similarity index 100% rename from public/assets/img/Weapon/IceRod.png rename to legacy/public/assets/img/Weapon/IceRod.png diff --git a/public/assets/img/Weapon/IronSledgehammer.png b/legacy/public/assets/img/Weapon/IronSledgehammer.png similarity index 100% rename from public/assets/img/Weapon/IronSledgehammer.png rename to legacy/public/assets/img/Weapon/IronSledgehammer.png diff --git a/public/assets/img/Weapon/KnightsBroadsword.png b/legacy/public/assets/img/Weapon/KnightsBroadsword.png similarity index 100% rename from public/assets/img/Weapon/KnightsBroadsword.png rename to legacy/public/assets/img/Weapon/KnightsBroadsword.png diff --git a/public/assets/img/Weapon/KnightsClaymore.png b/legacy/public/assets/img/Weapon/KnightsClaymore.png similarity index 100% rename from public/assets/img/Weapon/KnightsClaymore.png rename to legacy/public/assets/img/Weapon/KnightsClaymore.png diff --git a/public/assets/img/Weapon/KnightsHalberd.png b/legacy/public/assets/img/Weapon/KnightsHalberd.png similarity index 100% rename from public/assets/img/Weapon/KnightsHalberd.png rename to legacy/public/assets/img/Weapon/KnightsHalberd.png diff --git a/public/assets/img/Weapon/KorokLeaf.png b/legacy/public/assets/img/Weapon/KorokLeaf.png similarity index 100% rename from public/assets/img/Weapon/KorokLeaf.png rename to legacy/public/assets/img/Weapon/KorokLeaf.png diff --git a/public/assets/img/Weapon/LightningRod.png b/legacy/public/assets/img/Weapon/LightningRod.png similarity index 100% rename from public/assets/img/Weapon/LightningRod.png rename to legacy/public/assets/img/Weapon/LightningRod.png diff --git a/public/assets/img/Weapon/LightscaleTrident.png b/legacy/public/assets/img/Weapon/LightscaleTrident.png similarity index 100% rename from public/assets/img/Weapon/LightscaleTrident.png rename to legacy/public/assets/img/Weapon/LightscaleTrident.png diff --git a/public/assets/img/Weapon/LizalBoomerang.png b/legacy/public/assets/img/Weapon/LizalBoomerang.png similarity index 100% rename from public/assets/img/Weapon/LizalBoomerang.png rename to legacy/public/assets/img/Weapon/LizalBoomerang.png diff --git a/public/assets/img/Weapon/LizalForkedBoomerang.png b/legacy/public/assets/img/Weapon/LizalForkedBoomerang.png similarity index 100% rename from public/assets/img/Weapon/LizalForkedBoomerang.png rename to legacy/public/assets/img/Weapon/LizalForkedBoomerang.png diff --git a/public/assets/img/Weapon/LizalSpear.png b/legacy/public/assets/img/Weapon/LizalSpear.png similarity index 100% rename from public/assets/img/Weapon/LizalSpear.png rename to legacy/public/assets/img/Weapon/LizalSpear.png diff --git a/public/assets/img/Weapon/LizalTriBoomerang.png b/legacy/public/assets/img/Weapon/LizalTriBoomerang.png similarity index 100% rename from public/assets/img/Weapon/LizalTriBoomerang.png rename to legacy/public/assets/img/Weapon/LizalTriBoomerang.png diff --git a/public/assets/img/Weapon/LizalfosArm.png b/legacy/public/assets/img/Weapon/LizalfosArm.png similarity index 100% rename from public/assets/img/Weapon/LizalfosArm.png rename to legacy/public/assets/img/Weapon/LizalfosArm.png diff --git a/public/assets/img/Weapon/LynelCrusher.png b/legacy/public/assets/img/Weapon/LynelCrusher.png similarity index 100% rename from public/assets/img/Weapon/LynelCrusher.png rename to legacy/public/assets/img/Weapon/LynelCrusher.png diff --git a/public/assets/img/Weapon/LynelSpear.png b/legacy/public/assets/img/Weapon/LynelSpear.png similarity index 100% rename from public/assets/img/Weapon/LynelSpear.png rename to legacy/public/assets/img/Weapon/LynelSpear.png diff --git a/public/assets/img/Weapon/LynelSword.png b/legacy/public/assets/img/Weapon/LynelSword.png similarity index 100% rename from public/assets/img/Weapon/LynelSword.png rename to legacy/public/assets/img/Weapon/LynelSword.png diff --git a/public/assets/img/Weapon/MasterSword.png b/legacy/public/assets/img/Weapon/MasterSword.png similarity index 100% rename from public/assets/img/Weapon/MasterSword.png rename to legacy/public/assets/img/Weapon/MasterSword.png diff --git a/public/assets/img/Weapon/MasterSwordAwakened.png b/legacy/public/assets/img/Weapon/MasterSwordAwakened.png similarity index 100% rename from public/assets/img/Weapon/MasterSwordAwakened.png rename to legacy/public/assets/img/Weapon/MasterSwordAwakened.png diff --git a/public/assets/img/Weapon/MeteorRod.png b/legacy/public/assets/img/Weapon/MeteorRod.png similarity index 100% rename from public/assets/img/Weapon/MeteorRod.png rename to legacy/public/assets/img/Weapon/MeteorRod.png diff --git a/public/assets/img/Weapon/MightyLynelCrusher.png b/legacy/public/assets/img/Weapon/MightyLynelCrusher.png similarity index 100% rename from public/assets/img/Weapon/MightyLynelCrusher.png rename to legacy/public/assets/img/Weapon/MightyLynelCrusher.png diff --git a/public/assets/img/Weapon/MightyLynelSpear.png b/legacy/public/assets/img/Weapon/MightyLynelSpear.png similarity index 100% rename from public/assets/img/Weapon/MightyLynelSpear.png rename to legacy/public/assets/img/Weapon/MightyLynelSpear.png diff --git a/public/assets/img/Weapon/MightyLynelSword.png b/legacy/public/assets/img/Weapon/MightyLynelSword.png similarity index 100% rename from public/assets/img/Weapon/MightyLynelSword.png rename to legacy/public/assets/img/Weapon/MightyLynelSword.png diff --git a/public/assets/img/Weapon/MoblinArm.png b/legacy/public/assets/img/Weapon/MoblinArm.png similarity index 100% rename from public/assets/img/Weapon/MoblinArm.png rename to legacy/public/assets/img/Weapon/MoblinArm.png diff --git a/public/assets/img/Weapon/MoblinClub.png b/legacy/public/assets/img/Weapon/MoblinClub.png similarity index 100% rename from public/assets/img/Weapon/MoblinClub.png rename to legacy/public/assets/img/Weapon/MoblinClub.png diff --git a/public/assets/img/Weapon/MoblinSpear.png b/legacy/public/assets/img/Weapon/MoblinSpear.png similarity index 100% rename from public/assets/img/Weapon/MoblinSpear.png rename to legacy/public/assets/img/Weapon/MoblinSpear.png diff --git a/public/assets/img/Weapon/MoonlightScimitar.png b/legacy/public/assets/img/Weapon/MoonlightScimitar.png similarity index 100% rename from public/assets/img/Weapon/MoonlightScimitar.png rename to legacy/public/assets/img/Weapon/MoonlightScimitar.png diff --git a/public/assets/img/Weapon/OneHitObliterator.png b/legacy/public/assets/img/Weapon/OneHitObliterator.png similarity index 100% rename from public/assets/img/Weapon/OneHitObliterator.png rename to legacy/public/assets/img/Weapon/OneHitObliterator.png diff --git a/public/assets/img/Weapon/OneHitObliteratorCharged.png b/legacy/public/assets/img/Weapon/OneHitObliteratorCharged.png similarity index 100% rename from public/assets/img/Weapon/OneHitObliteratorCharged.png rename to legacy/public/assets/img/Weapon/OneHitObliteratorCharged.png diff --git a/public/assets/img/Weapon/RoyalBroadsword.png b/legacy/public/assets/img/Weapon/RoyalBroadsword.png similarity index 100% rename from public/assets/img/Weapon/RoyalBroadsword.png rename to legacy/public/assets/img/Weapon/RoyalBroadsword.png diff --git a/public/assets/img/Weapon/RoyalClaymore.png b/legacy/public/assets/img/Weapon/RoyalClaymore.png similarity index 100% rename from public/assets/img/Weapon/RoyalClaymore.png rename to legacy/public/assets/img/Weapon/RoyalClaymore.png diff --git a/public/assets/img/Weapon/RoyalGuardsClaymore.png b/legacy/public/assets/img/Weapon/RoyalGuardsClaymore.png similarity index 100% rename from public/assets/img/Weapon/RoyalGuardsClaymore.png rename to legacy/public/assets/img/Weapon/RoyalGuardsClaymore.png diff --git a/public/assets/img/Weapon/RoyalGuardsSpear.png b/legacy/public/assets/img/Weapon/RoyalGuardsSpear.png similarity index 100% rename from public/assets/img/Weapon/RoyalGuardsSpear.png rename to legacy/public/assets/img/Weapon/RoyalGuardsSpear.png diff --git a/public/assets/img/Weapon/RoyalGuardsSword.png b/legacy/public/assets/img/Weapon/RoyalGuardsSword.png similarity index 100% rename from public/assets/img/Weapon/RoyalGuardsSword.png rename to legacy/public/assets/img/Weapon/RoyalGuardsSword.png diff --git a/public/assets/img/Weapon/RoyalHalberd.png b/legacy/public/assets/img/Weapon/RoyalHalberd.png similarity index 100% rename from public/assets/img/Weapon/RoyalHalberd.png rename to legacy/public/assets/img/Weapon/RoyalHalberd.png diff --git a/public/assets/img/Weapon/RustyBroadsword.png b/legacy/public/assets/img/Weapon/RustyBroadsword.png similarity index 100% rename from public/assets/img/Weapon/RustyBroadsword.png rename to legacy/public/assets/img/Weapon/RustyBroadsword.png diff --git a/public/assets/img/Weapon/RustyClaymore.png b/legacy/public/assets/img/Weapon/RustyClaymore.png similarity index 100% rename from public/assets/img/Weapon/RustyClaymore.png rename to legacy/public/assets/img/Weapon/RustyClaymore.png diff --git a/public/assets/img/Weapon/RustyHalberd.png b/legacy/public/assets/img/Weapon/RustyHalberd.png similarity index 100% rename from public/assets/img/Weapon/RustyHalberd.png rename to legacy/public/assets/img/Weapon/RustyHalberd.png diff --git a/public/assets/img/Weapon/SavageLynelCrusher.png b/legacy/public/assets/img/Weapon/SavageLynelCrusher.png similarity index 100% rename from public/assets/img/Weapon/SavageLynelCrusher.png rename to legacy/public/assets/img/Weapon/SavageLynelCrusher.png diff --git a/public/assets/img/Weapon/SavageLynelSpear.png b/legacy/public/assets/img/Weapon/SavageLynelSpear.png similarity index 100% rename from public/assets/img/Weapon/SavageLynelSpear.png rename to legacy/public/assets/img/Weapon/SavageLynelSpear.png diff --git a/public/assets/img/Weapon/SavageLynelSword.png b/legacy/public/assets/img/Weapon/SavageLynelSword.png similarity index 100% rename from public/assets/img/Weapon/SavageLynelSword.png rename to legacy/public/assets/img/Weapon/SavageLynelSword.png diff --git a/public/assets/img/Weapon/ScimitarOfTheSeven.png b/legacy/public/assets/img/Weapon/ScimitarOfTheSeven.png similarity index 100% rename from public/assets/img/Weapon/ScimitarOfTheSeven.png rename to legacy/public/assets/img/Weapon/ScimitarOfTheSeven.png diff --git a/public/assets/img/Weapon/SeaBreezeBoomerang.png b/legacy/public/assets/img/Weapon/SeaBreezeBoomerang.png similarity index 100% rename from public/assets/img/Weapon/SeaBreezeBoomerang.png rename to legacy/public/assets/img/Weapon/SeaBreezeBoomerang.png diff --git a/public/assets/img/Weapon/SerpentineSpear.png b/legacy/public/assets/img/Weapon/SerpentineSpear.png similarity index 100% rename from public/assets/img/Weapon/SerpentineSpear.png rename to legacy/public/assets/img/Weapon/SerpentineSpear.png diff --git a/public/assets/img/Weapon/SilverLongsword.png b/legacy/public/assets/img/Weapon/SilverLongsword.png similarity index 100% rename from public/assets/img/Weapon/SilverLongsword.png rename to legacy/public/assets/img/Weapon/SilverLongsword.png diff --git a/public/assets/img/Weapon/SilverscaleSpear.png b/legacy/public/assets/img/Weapon/SilverscaleSpear.png similarity index 100% rename from public/assets/img/Weapon/SilverscaleSpear.png rename to legacy/public/assets/img/Weapon/SilverscaleSpear.png diff --git a/public/assets/img/Weapon/SoldiersBroadsword.png b/legacy/public/assets/img/Weapon/SoldiersBroadsword.png similarity index 100% rename from public/assets/img/Weapon/SoldiersBroadsword.png rename to legacy/public/assets/img/Weapon/SoldiersBroadsword.png diff --git a/public/assets/img/Weapon/SoldiersClaymore.png b/legacy/public/assets/img/Weapon/SoldiersClaymore.png similarity index 100% rename from public/assets/img/Weapon/SoldiersClaymore.png rename to legacy/public/assets/img/Weapon/SoldiersClaymore.png diff --git a/public/assets/img/Weapon/SoldiersSpear.png b/legacy/public/assets/img/Weapon/SoldiersSpear.png similarity index 100% rename from public/assets/img/Weapon/SoldiersSpear.png rename to legacy/public/assets/img/Weapon/SoldiersSpear.png diff --git a/public/assets/img/Weapon/SoupLadle.png b/legacy/public/assets/img/Weapon/SoupLadle.png similarity index 100% rename from public/assets/img/Weapon/SoupLadle.png rename to legacy/public/assets/img/Weapon/SoupLadle.png diff --git a/public/assets/img/Weapon/SpikedBokoBat.png b/legacy/public/assets/img/Weapon/SpikedBokoBat.png similarity index 100% rename from public/assets/img/Weapon/SpikedBokoBat.png rename to legacy/public/assets/img/Weapon/SpikedBokoBat.png diff --git a/public/assets/img/Weapon/SpikedBokoClub.png b/legacy/public/assets/img/Weapon/SpikedBokoClub.png similarity index 100% rename from public/assets/img/Weapon/SpikedBokoClub.png rename to legacy/public/assets/img/Weapon/SpikedBokoClub.png diff --git a/public/assets/img/Weapon/SpikedBokoSpear.png b/legacy/public/assets/img/Weapon/SpikedBokoSpear.png similarity index 100% rename from public/assets/img/Weapon/SpikedBokoSpear.png rename to legacy/public/assets/img/Weapon/SpikedBokoSpear.png diff --git a/public/assets/img/Weapon/SpikedMoblinClub.png b/legacy/public/assets/img/Weapon/SpikedMoblinClub.png similarity index 100% rename from public/assets/img/Weapon/SpikedMoblinClub.png rename to legacy/public/assets/img/Weapon/SpikedMoblinClub.png diff --git a/public/assets/img/Weapon/SpikedMoblinSpear.png b/legacy/public/assets/img/Weapon/SpikedMoblinSpear.png similarity index 100% rename from public/assets/img/Weapon/SpikedMoblinSpear.png rename to legacy/public/assets/img/Weapon/SpikedMoblinSpear.png diff --git a/public/assets/img/Weapon/SpringLoadedHammer.png b/legacy/public/assets/img/Weapon/SpringLoadedHammer.png similarity index 100% rename from public/assets/img/Weapon/SpringLoadedHammer.png rename to legacy/public/assets/img/Weapon/SpringLoadedHammer.png diff --git a/public/assets/img/Weapon/StoneSmasher.png b/legacy/public/assets/img/Weapon/StoneSmasher.png similarity index 100% rename from public/assets/img/Weapon/StoneSmasher.png rename to legacy/public/assets/img/Weapon/StoneSmasher.png diff --git a/public/assets/img/Weapon/Sword.png b/legacy/public/assets/img/Weapon/Sword.png similarity index 100% rename from public/assets/img/Weapon/Sword.png rename to legacy/public/assets/img/Weapon/Sword.png diff --git a/public/assets/img/Weapon/SwordOfTheSixSages.png b/legacy/public/assets/img/Weapon/SwordOfTheSixSages.png similarity index 100% rename from public/assets/img/Weapon/SwordOfTheSixSages.png rename to legacy/public/assets/img/Weapon/SwordOfTheSixSages.png diff --git a/public/assets/img/Weapon/ThrowingSpear.png b/legacy/public/assets/img/Weapon/ThrowingSpear.png similarity index 100% rename from public/assets/img/Weapon/ThrowingSpear.png rename to legacy/public/assets/img/Weapon/ThrowingSpear.png diff --git a/public/assets/img/Weapon/Thunderblade.png b/legacy/public/assets/img/Weapon/Thunderblade.png similarity index 100% rename from public/assets/img/Weapon/Thunderblade.png rename to legacy/public/assets/img/Weapon/Thunderblade.png diff --git a/public/assets/img/Weapon/Thunderspear.png b/legacy/public/assets/img/Weapon/Thunderspear.png similarity index 100% rename from public/assets/img/Weapon/Thunderspear.png rename to legacy/public/assets/img/Weapon/Thunderspear.png diff --git a/public/assets/img/Weapon/ThunderstormRod.png b/legacy/public/assets/img/Weapon/ThunderstormRod.png similarity index 100% rename from public/assets/img/Weapon/ThunderstormRod.png rename to legacy/public/assets/img/Weapon/ThunderstormRod.png diff --git a/public/assets/img/Weapon/Torch.png b/legacy/public/assets/img/Weapon/Torch.png similarity index 100% rename from public/assets/img/Weapon/Torch.png rename to legacy/public/assets/img/Weapon/Torch.png diff --git a/public/assets/img/Weapon/TravelersClaymore.png b/legacy/public/assets/img/Weapon/TravelersClaymore.png similarity index 100% rename from public/assets/img/Weapon/TravelersClaymore.png rename to legacy/public/assets/img/Weapon/TravelersClaymore.png diff --git a/public/assets/img/Weapon/TravelersSpear.png b/legacy/public/assets/img/Weapon/TravelersSpear.png similarity index 100% rename from public/assets/img/Weapon/TravelersSpear.png rename to legacy/public/assets/img/Weapon/TravelersSpear.png diff --git a/public/assets/img/Weapon/TravelersSword.png b/legacy/public/assets/img/Weapon/TravelersSword.png similarity index 100% rename from public/assets/img/Weapon/TravelersSword.png rename to legacy/public/assets/img/Weapon/TravelersSword.png diff --git a/public/assets/img/Weapon/TreeBranch.png b/legacy/public/assets/img/Weapon/TreeBranch.png similarity index 100% rename from public/assets/img/Weapon/TreeBranch.png rename to legacy/public/assets/img/Weapon/TreeBranch.png diff --git a/public/assets/img/Weapon/ViciousSickle.png b/legacy/public/assets/img/Weapon/ViciousSickle.png similarity index 100% rename from public/assets/img/Weapon/ViciousSickle.png rename to legacy/public/assets/img/Weapon/ViciousSickle.png diff --git a/public/assets/img/Weapon/Weapon.png b/legacy/public/assets/img/Weapon/Weapon.png similarity index 100% rename from public/assets/img/Weapon/Weapon.png rename to legacy/public/assets/img/Weapon/Weapon.png diff --git a/public/assets/img/Weapon/Windcleaver.png b/legacy/public/assets/img/Weapon/Windcleaver.png similarity index 100% rename from public/assets/img/Weapon/Windcleaver.png rename to legacy/public/assets/img/Weapon/Windcleaver.png diff --git a/public/assets/img/Weapon/WoodcuttersAxe.png b/legacy/public/assets/img/Weapon/WoodcuttersAxe.png similarity index 100% rename from public/assets/img/Weapon/WoodcuttersAxe.png rename to legacy/public/assets/img/Weapon/WoodcuttersAxe.png diff --git a/public/assets/img/Weapon/WoodenMop.png b/legacy/public/assets/img/Weapon/WoodenMop.png similarity index 100% rename from public/assets/img/Weapon/WoodenMop.png rename to legacy/public/assets/img/Weapon/WoodenMop.png diff --git a/public/assets/img/Weapon/ZoraSpear.png b/legacy/public/assets/img/Weapon/ZoraSpear.png similarity index 100% rename from public/assets/img/Weapon/ZoraSpear.png rename to legacy/public/assets/img/Weapon/ZoraSpear.png diff --git a/public/assets/img/Weapon/ZoraSword.png b/legacy/public/assets/img/Weapon/ZoraSword.png similarity index 100% rename from public/assets/img/Weapon/ZoraSword.png rename to legacy/public/assets/img/Weapon/ZoraSword.png diff --git a/public/favicon.ico b/legacy/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to legacy/public/favicon.ico diff --git a/public/manifest.json b/legacy/public/manifest.json similarity index 100% rename from public/manifest.json rename to legacy/public/manifest.json diff --git a/public/robots.txt b/legacy/public/robots.txt similarity index 100% rename from public/robots.txt rename to legacy/public/robots.txt diff --git a/src/App.tsx b/legacy/src/App.tsx similarity index 100% rename from src/App.tsx rename to legacy/src/App.tsx diff --git a/src/__tests__/MSWMC_kai.e2e.ts b/legacy/src/__tests__/MSWMC_kai.e2e.ts similarity index 100% rename from src/__tests__/MSWMC_kai.e2e.ts rename to legacy/src/__tests__/MSWMC_kai.e2e.ts diff --git a/src/__tests__/MSWMC_kai.in.txt b/legacy/src/__tests__/MSWMC_kai.in.txt similarity index 100% rename from src/__tests__/MSWMC_kai.in.txt rename to legacy/src/__tests__/MSWMC_kai.in.txt diff --git a/src/__tests__/MSWMC_kai.out.txt b/legacy/src/__tests__/MSWMC_kai.out.txt similarity index 100% rename from src/__tests__/MSWMC_kai.out.txt rename to legacy/src/__tests__/MSWMC_kai.out.txt diff --git a/src/__tests__/MSWMC_simple.e2e.ts b/legacy/src/__tests__/MSWMC_simple.e2e.ts similarity index 100% rename from src/__tests__/MSWMC_simple.e2e.ts rename to legacy/src/__tests__/MSWMC_simple.e2e.ts diff --git a/src/__tests__/MSWMC_simple.in.txt b/legacy/src/__tests__/MSWMC_simple.in.txt similarity index 100% rename from src/__tests__/MSWMC_simple.in.txt rename to legacy/src/__tests__/MSWMC_simple.in.txt diff --git a/src/__tests__/MSWMC_simple.out.txt b/legacy/src/__tests__/MSWMC_simple.out.txt similarity index 100% rename from src/__tests__/MSWMC_simple.out.txt rename to legacy/src/__tests__/MSWMC_simple.out.txt diff --git a/src/__tests__/README.md b/legacy/src/__tests__/README.md similarity index 100% rename from src/__tests__/README.md rename to legacy/src/__tests__/README.md diff --git a/src/__tests__/apples_999.e2e.ts b/legacy/src/__tests__/apples_999.e2e.ts similarity index 100% rename from src/__tests__/apples_999.e2e.ts rename to legacy/src/__tests__/apples_999.e2e.ts diff --git a/src/__tests__/apples_999.in.txt b/legacy/src/__tests__/apples_999.in.txt similarity index 100% rename from src/__tests__/apples_999.in.txt rename to legacy/src/__tests__/apples_999.in.txt diff --git a/src/__tests__/apples_999.out.txt b/legacy/src/__tests__/apples_999.out.txt similarity index 100% rename from src/__tests__/apples_999.out.txt rename to legacy/src/__tests__/apples_999.out.txt diff --git a/src/__tests__/apples_999_twice.e2e.ts b/legacy/src/__tests__/apples_999_twice.e2e.ts similarity index 100% rename from src/__tests__/apples_999_twice.e2e.ts rename to legacy/src/__tests__/apples_999_twice.e2e.ts diff --git a/src/__tests__/apples_999_twice.in.txt b/legacy/src/__tests__/apples_999_twice.in.txt similarity index 100% rename from src/__tests__/apples_999_twice.in.txt rename to legacy/src/__tests__/apples_999_twice.in.txt diff --git a/src/__tests__/apples_999_twice.out.txt b/legacy/src/__tests__/apples_999_twice.out.txt similarity index 100% rename from src/__tests__/apples_999_twice.out.txt rename to legacy/src/__tests__/apples_999_twice.out.txt diff --git a/src/__tests__/apples_orbs.e2e.ts b/legacy/src/__tests__/apples_orbs.e2e.ts similarity index 100% rename from src/__tests__/apples_orbs.e2e.ts rename to legacy/src/__tests__/apples_orbs.e2e.ts diff --git a/src/__tests__/apples_orbs.in.txt b/legacy/src/__tests__/apples_orbs.in.txt similarity index 100% rename from src/__tests__/apples_orbs.in.txt rename to legacy/src/__tests__/apples_orbs.in.txt diff --git a/src/__tests__/apples_orbs.out.txt b/legacy/src/__tests__/apples_orbs.out.txt similarity index 100% rename from src/__tests__/apples_orbs.out.txt rename to legacy/src/__tests__/apples_orbs.out.txt diff --git a/src/__tests__/aqFinished1.e2e.ts b/legacy/src/__tests__/aqFinished1.e2e.ts similarity index 100% rename from src/__tests__/aqFinished1.e2e.ts rename to legacy/src/__tests__/aqFinished1.e2e.ts diff --git a/src/__tests__/aqFinished1.in.txt b/legacy/src/__tests__/aqFinished1.in.txt similarity index 100% rename from src/__tests__/aqFinished1.in.txt rename to legacy/src/__tests__/aqFinished1.in.txt diff --git a/src/__tests__/aqFinished1.out.txt b/legacy/src/__tests__/aqFinished1.out.txt similarity index 100% rename from src/__tests__/aqFinished1.out.txt rename to legacy/src/__tests__/aqFinished1.out.txt diff --git a/src/__tests__/arrows_quantityCheckExceptions.e2e.ts b/legacy/src/__tests__/arrows_quantityCheckExceptions.e2e.ts similarity index 100% rename from src/__tests__/arrows_quantityCheckExceptions.e2e.ts rename to legacy/src/__tests__/arrows_quantityCheckExceptions.e2e.ts diff --git a/src/__tests__/arrows_quantityCheckExceptions.in.txt b/legacy/src/__tests__/arrows_quantityCheckExceptions.in.txt similarity index 100% rename from src/__tests__/arrows_quantityCheckExceptions.in.txt rename to legacy/src/__tests__/arrows_quantityCheckExceptions.in.txt diff --git a/src/__tests__/arrows_quantityCheckExceptions.out.txt b/legacy/src/__tests__/arrows_quantityCheckExceptions.out.txt similarity index 100% rename from src/__tests__/arrows_quantityCheckExceptions.out.txt rename to legacy/src/__tests__/arrows_quantityCheckExceptions.out.txt diff --git a/src/__tests__/dropWithExtraLife.e2e.ts b/legacy/src/__tests__/dropWithExtraLife.e2e.ts similarity index 100% rename from src/__tests__/dropWithExtraLife.e2e.ts rename to legacy/src/__tests__/dropWithExtraLife.e2e.ts diff --git a/src/__tests__/dropWithExtraLife.in.txt b/legacy/src/__tests__/dropWithExtraLife.in.txt similarity index 100% rename from src/__tests__/dropWithExtraLife.in.txt rename to legacy/src/__tests__/dropWithExtraLife.in.txt diff --git a/src/__tests__/dropWithExtraLife.out.txt b/legacy/src/__tests__/dropWithExtraLife.out.txt similarity index 100% rename from src/__tests__/dropWithExtraLife.out.txt rename to legacy/src/__tests__/dropWithExtraLife.out.txt diff --git a/src/__tests__/dup_orbs.e2e.ts b/legacy/src/__tests__/dup_orbs.e2e.ts similarity index 100% rename from src/__tests__/dup_orbs.e2e.ts rename to legacy/src/__tests__/dup_orbs.e2e.ts diff --git a/src/__tests__/dup_orbs.in.txt b/legacy/src/__tests__/dup_orbs.in.txt similarity index 100% rename from src/__tests__/dup_orbs.in.txt rename to legacy/src/__tests__/dup_orbs.in.txt diff --git a/src/__tests__/dup_orbs.out.txt b/legacy/src/__tests__/dup_orbs.out.txt similarity index 100% rename from src/__tests__/dup_orbs.out.txt rename to legacy/src/__tests__/dup_orbs.out.txt diff --git a/src/__tests__/effectTransfer.e2e.ts b/legacy/src/__tests__/effectTransfer.e2e.ts similarity index 100% rename from src/__tests__/effectTransfer.e2e.ts rename to legacy/src/__tests__/effectTransfer.e2e.ts diff --git a/src/__tests__/effectTransfer.in.txt b/legacy/src/__tests__/effectTransfer.in.txt similarity index 100% rename from src/__tests__/effectTransfer.in.txt rename to legacy/src/__tests__/effectTransfer.in.txt diff --git a/src/__tests__/effectTransfer.out.txt b/legacy/src/__tests__/effectTransfer.out.txt similarity index 100% rename from src/__tests__/effectTransfer.out.txt rename to legacy/src/__tests__/effectTransfer.out.txt diff --git a/src/__tests__/empty.e2e.ts b/legacy/src/__tests__/empty.e2e.ts similarity index 100% rename from src/__tests__/empty.e2e.ts rename to legacy/src/__tests__/empty.e2e.ts diff --git a/src/__tests__/empty.in.txt b/legacy/src/__tests__/empty.in.txt similarity index 100% rename from src/__tests__/empty.in.txt rename to legacy/src/__tests__/empty.in.txt diff --git a/src/__tests__/empty.out.txt b/legacy/src/__tests__/empty.out.txt similarity index 100% rename from src/__tests__/empty.out.txt rename to legacy/src/__tests__/empty.out.txt diff --git a/src/__tests__/gliderOpensGameData.e2e.ts b/legacy/src/__tests__/gliderOpensGameData.e2e.ts similarity index 100% rename from src/__tests__/gliderOpensGameData.e2e.ts rename to legacy/src/__tests__/gliderOpensGameData.e2e.ts diff --git a/src/__tests__/gliderOpensGameData.in.txt b/legacy/src/__tests__/gliderOpensGameData.in.txt similarity index 100% rename from src/__tests__/gliderOpensGameData.in.txt rename to legacy/src/__tests__/gliderOpensGameData.in.txt diff --git a/src/__tests__/gliderOpensGameData.out.txt b/legacy/src/__tests__/gliderOpensGameData.out.txt similarity index 100% rename from src/__tests__/gliderOpensGameData.out.txt rename to legacy/src/__tests__/gliderOpensGameData.out.txt diff --git a/src/__tests__/goldrush_10reload22drop.e2e.ts b/legacy/src/__tests__/goldrush_10reload22drop.e2e.ts similarity index 100% rename from src/__tests__/goldrush_10reload22drop.e2e.ts rename to legacy/src/__tests__/goldrush_10reload22drop.e2e.ts diff --git a/src/__tests__/goldrush_10reload22drop.in.txt b/legacy/src/__tests__/goldrush_10reload22drop.in.txt similarity index 100% rename from src/__tests__/goldrush_10reload22drop.in.txt rename to legacy/src/__tests__/goldrush_10reload22drop.in.txt diff --git a/src/__tests__/goldrush_10reload22drop.out.txt b/legacy/src/__tests__/goldrush_10reload22drop.out.txt similarity index 100% rename from src/__tests__/goldrush_10reload22drop.out.txt rename to legacy/src/__tests__/goldrush_10reload22drop.out.txt diff --git a/src/__tests__/inventoryNuking1.e2e.ts b/legacy/src/__tests__/inventoryNuking1.e2e.ts similarity index 100% rename from src/__tests__/inventoryNuking1.e2e.ts rename to legacy/src/__tests__/inventoryNuking1.e2e.ts diff --git a/src/__tests__/inventoryNuking1.in.txt b/legacy/src/__tests__/inventoryNuking1.in.txt similarity index 100% rename from src/__tests__/inventoryNuking1.in.txt rename to legacy/src/__tests__/inventoryNuking1.in.txt diff --git a/src/__tests__/inventoryNuking1.out.txt b/legacy/src/__tests__/inventoryNuking1.out.txt similarity index 100% rename from src/__tests__/inventoryNuking1.out.txt rename to legacy/src/__tests__/inventoryNuking1.out.txt diff --git a/src/__tests__/inventoryNukingCounterExample.e2e.ts b/legacy/src/__tests__/inventoryNukingCounterExample.e2e.ts similarity index 100% rename from src/__tests__/inventoryNukingCounterExample.e2e.ts rename to legacy/src/__tests__/inventoryNukingCounterExample.e2e.ts diff --git a/src/__tests__/inventoryNukingCounterExample.in.txt b/legacy/src/__tests__/inventoryNukingCounterExample.in.txt similarity index 100% rename from src/__tests__/inventoryNukingCounterExample.in.txt rename to legacy/src/__tests__/inventoryNukingCounterExample.in.txt diff --git a/src/__tests__/inventoryNukingCounterExample.out.txt b/legacy/src/__tests__/inventoryNukingCounterExample.out.txt similarity index 100% rename from src/__tests__/inventoryNukingCounterExample.out.txt rename to legacy/src/__tests__/inventoryNukingCounterExample.out.txt diff --git a/src/__tests__/slate_VOSDedupe.e2e.ts b/legacy/src/__tests__/slate_VOSDedupe.e2e.ts similarity index 100% rename from src/__tests__/slate_VOSDedupe.e2e.ts rename to legacy/src/__tests__/slate_VOSDedupe.e2e.ts diff --git a/src/__tests__/slate_VOSDedupe.in.txt b/legacy/src/__tests__/slate_VOSDedupe.in.txt similarity index 100% rename from src/__tests__/slate_VOSDedupe.in.txt rename to legacy/src/__tests__/slate_VOSDedupe.in.txt diff --git a/src/__tests__/slate_VOSDedupe.out.txt b/legacy/src/__tests__/slate_VOSDedupe.out.txt similarity index 100% rename from src/__tests__/slate_VOSDedupe.out.txt rename to legacy/src/__tests__/slate_VOSDedupe.out.txt diff --git a/src/__tests__/wmc_1.e2e.ts b/legacy/src/__tests__/wmc_1.e2e.ts similarity index 100% rename from src/__tests__/wmc_1.e2e.ts rename to legacy/src/__tests__/wmc_1.e2e.ts diff --git a/src/__tests__/wmc_1.in.txt b/legacy/src/__tests__/wmc_1.in.txt similarity index 100% rename from src/__tests__/wmc_1.in.txt rename to legacy/src/__tests__/wmc_1.in.txt diff --git a/src/__tests__/wmc_1.out.txt b/legacy/src/__tests__/wmc_1.out.txt similarity index 100% rename from src/__tests__/wmc_1.out.txt rename to legacy/src/__tests__/wmc_1.out.txt diff --git a/src/__tests__/wmc_2.e2e.ts b/legacy/src/__tests__/wmc_2.e2e.ts similarity index 100% rename from src/__tests__/wmc_2.e2e.ts rename to legacy/src/__tests__/wmc_2.e2e.ts diff --git a/src/__tests__/wmc_2.in.txt b/legacy/src/__tests__/wmc_2.in.txt similarity index 100% rename from src/__tests__/wmc_2.in.txt rename to legacy/src/__tests__/wmc_2.in.txt diff --git a/src/__tests__/wmc_2.out.txt b/legacy/src/__tests__/wmc_2.out.txt similarity index 100% rename from src/__tests__/wmc_2.out.txt rename to legacy/src/__tests__/wmc_2.out.txt diff --git a/src/__tests__/wmc_3.e2e.ts b/legacy/src/__tests__/wmc_3.e2e.ts similarity index 100% rename from src/__tests__/wmc_3.e2e.ts rename to legacy/src/__tests__/wmc_3.e2e.ts diff --git a/src/__tests__/wmc_3.in.txt b/legacy/src/__tests__/wmc_3.in.txt similarity index 100% rename from src/__tests__/wmc_3.in.txt rename to legacy/src/__tests__/wmc_3.in.txt diff --git a/src/__tests__/wmc_3.out.txt b/legacy/src/__tests__/wmc_3.out.txt similarity index 100% rename from src/__tests__/wmc_3.out.txt rename to legacy/src/__tests__/wmc_3.out.txt diff --git a/src/__tests__/wmc_4.e2e.ts b/legacy/src/__tests__/wmc_4.e2e.ts similarity index 100% rename from src/__tests__/wmc_4.e2e.ts rename to legacy/src/__tests__/wmc_4.e2e.ts diff --git a/src/__tests__/wmc_4.in.txt b/legacy/src/__tests__/wmc_4.in.txt similarity index 100% rename from src/__tests__/wmc_4.in.txt rename to legacy/src/__tests__/wmc_4.in.txt diff --git a/src/__tests__/wmc_4.out.txt b/legacy/src/__tests__/wmc_4.out.txt similarity index 100% rename from src/__tests__/wmc_4.out.txt rename to legacy/src/__tests__/wmc_4.out.txt diff --git a/src/core/SimulationState.ts b/legacy/src/core/SimulationState.ts similarity index 100% rename from src/core/SimulationState.ts rename to legacy/src/core/SimulationState.ts diff --git a/src/core/command/ItemStackArg.ts b/legacy/src/core/command/ItemStackArg.ts similarity index 100% rename from src/core/command/ItemStackArg.ts rename to legacy/src/core/command/ItemStackArg.ts diff --git a/src/core/command/MemoizedParser.ts b/legacy/src/core/command/MemoizedParser.ts similarity index 100% rename from src/core/command/MemoizedParser.ts rename to legacy/src/core/command/MemoizedParser.ts diff --git a/src/core/command/ast/ast.basis.ts b/legacy/src/core/command/ast/ast.basis.ts similarity index 100% rename from src/core/command/ast/ast.basis.ts rename to legacy/src/core/command/ast/ast.basis.ts diff --git a/src/core/command/ast/grammar.txt b/legacy/src/core/command/ast/grammar.txt similarity index 100% rename from src/core/command/ast/grammar.txt rename to legacy/src/core/command/ast/grammar.txt diff --git a/src/core/command/ast/index.ts b/legacy/src/core/command/ast/index.ts similarity index 100% rename from src/core/command/ast/index.ts rename to legacy/src/core/command/ast/index.ts diff --git a/src/core/command/ast/tokenize.ts b/legacy/src/core/command/ast/tokenize.ts similarity index 100% rename from src/core/command/ast/tokenize.ts rename to legacy/src/core/command/ast/tokenize.ts diff --git a/src/core/command/ast/types.ts b/legacy/src/core/command/ast/types.ts similarity index 100% rename from src/core/command/ast/types.ts rename to legacy/src/core/command/ast/types.ts diff --git a/src/core/command/command.ts b/legacy/src/core/command/command.ts similarity index 100% rename from src/core/command/command.ts rename to legacy/src/core/command/command.ts diff --git a/src/core/command/index.ts b/legacy/src/core/command/index.ts similarity index 100% rename from src/core/command/index.ts rename to legacy/src/core/command/index.ts diff --git a/src/core/command/parse.basis.ts b/legacy/src/core/command/parse.basis.ts similarity index 100% rename from src/core/command/parse.basis.ts rename to legacy/src/core/command/parse.basis.ts diff --git a/src/core/command/parse.clause.inslot.ts b/legacy/src/core/command/parse.clause.inslot.ts similarity index 100% rename from src/core/command/parse.clause.inslot.ts rename to legacy/src/core/command/parse.clause.inslot.ts diff --git a/src/core/command/parse.clause.slot.ts b/legacy/src/core/command/parse.clause.slot.ts similarity index 100% rename from src/core/command/parse.clause.slot.ts rename to legacy/src/core/command/parse.clause.slot.ts diff --git a/src/core/command/parse.clause.with.fromslot.ts b/legacy/src/core/command/parse.clause.with.fromslot.ts similarity index 100% rename from src/core/command/parse.clause.with.fromslot.ts rename to legacy/src/core/command/parse.clause.with.fromslot.ts diff --git a/src/core/command/parse.cmd.add.test.ts b/legacy/src/core/command/parse.cmd.add.test.ts similarity index 100% rename from src/core/command/parse.cmd.add.test.ts rename to legacy/src/core/command/parse.cmd.add.test.ts diff --git a/src/core/command/parse.cmd.add.ts b/legacy/src/core/command/parse.cmd.add.ts similarity index 100% rename from src/core/command/parse.cmd.add.ts rename to legacy/src/core/command/parse.cmd.add.ts diff --git a/src/core/command/parse.cmd.breakslot.test.ts b/legacy/src/core/command/parse.cmd.breakslot.test.ts similarity index 100% rename from src/core/command/parse.cmd.breakslot.test.ts rename to legacy/src/core/command/parse.cmd.breakslot.test.ts diff --git a/src/core/command/parse.cmd.breakslot.ts b/legacy/src/core/command/parse.cmd.breakslot.ts similarity index 100% rename from src/core/command/parse.cmd.breakslot.ts rename to legacy/src/core/command/parse.cmd.breakslot.ts diff --git a/src/core/command/parse.cmd.closegame.test.ts b/legacy/src/core/command/parse.cmd.closegame.test.ts similarity index 100% rename from src/core/command/parse.cmd.closegame.test.ts rename to legacy/src/core/command/parse.cmd.closegame.test.ts diff --git a/src/core/command/parse.cmd.closegame.ts b/legacy/src/core/command/parse.cmd.closegame.ts similarity index 100% rename from src/core/command/parse.cmd.closegame.ts rename to legacy/src/core/command/parse.cmd.closegame.ts diff --git a/src/core/command/parse.cmd.equip.test.ts b/legacy/src/core/command/parse.cmd.equip.test.ts similarity index 100% rename from src/core/command/parse.cmd.equip.test.ts rename to legacy/src/core/command/parse.cmd.equip.test.ts diff --git a/src/core/command/parse.cmd.equip.ts b/legacy/src/core/command/parse.cmd.equip.ts similarity index 100% rename from src/core/command/parse.cmd.equip.ts rename to legacy/src/core/command/parse.cmd.equip.ts diff --git a/src/core/command/parse.cmd.has.test.ts b/legacy/src/core/command/parse.cmd.has.test.ts similarity index 100% rename from src/core/command/parse.cmd.has.test.ts rename to legacy/src/core/command/parse.cmd.has.test.ts diff --git a/src/core/command/parse.cmd.has.ts b/legacy/src/core/command/parse.cmd.has.ts similarity index 100% rename from src/core/command/parse.cmd.has.ts rename to legacy/src/core/command/parse.cmd.has.ts diff --git a/src/core/command/parse.cmd.initgamedata.test.ts b/legacy/src/core/command/parse.cmd.initgamedata.test.ts similarity index 100% rename from src/core/command/parse.cmd.initgamedata.test.ts rename to legacy/src/core/command/parse.cmd.initgamedata.test.ts diff --git a/src/core/command/parse.cmd.initgamedata.ts b/legacy/src/core/command/parse.cmd.initgamedata.ts similarity index 100% rename from src/core/command/parse.cmd.initgamedata.ts rename to legacy/src/core/command/parse.cmd.initgamedata.ts diff --git a/src/core/command/parse.cmd.initialize.test.ts b/legacy/src/core/command/parse.cmd.initialize.test.ts similarity index 100% rename from src/core/command/parse.cmd.initialize.test.ts rename to legacy/src/core/command/parse.cmd.initialize.test.ts diff --git a/src/core/command/parse.cmd.initialize.ts b/legacy/src/core/command/parse.cmd.initialize.ts similarity index 100% rename from src/core/command/parse.cmd.initialize.ts rename to legacy/src/core/command/parse.cmd.initialize.ts diff --git a/src/core/command/parse.cmd.reload.test.ts b/legacy/src/core/command/parse.cmd.reload.test.ts similarity index 100% rename from src/core/command/parse.cmd.reload.test.ts rename to legacy/src/core/command/parse.cmd.reload.test.ts diff --git a/src/core/command/parse.cmd.reload.ts b/legacy/src/core/command/parse.cmd.reload.ts similarity index 100% rename from src/core/command/parse.cmd.reload.ts rename to legacy/src/core/command/parse.cmd.reload.ts diff --git a/src/core/command/parse.cmd.remove.test.ts b/legacy/src/core/command/parse.cmd.remove.test.ts similarity index 100% rename from src/core/command/parse.cmd.remove.test.ts rename to legacy/src/core/command/parse.cmd.remove.test.ts diff --git a/src/core/command/parse.cmd.remove.ts b/legacy/src/core/command/parse.cmd.remove.ts similarity index 100% rename from src/core/command/parse.cmd.remove.ts rename to legacy/src/core/command/parse.cmd.remove.ts diff --git a/src/core/command/parse.cmd.save.test.ts b/legacy/src/core/command/parse.cmd.save.test.ts similarity index 100% rename from src/core/command/parse.cmd.save.test.ts rename to legacy/src/core/command/parse.cmd.save.test.ts diff --git a/src/core/command/parse.cmd.save.ts b/legacy/src/core/command/parse.cmd.save.ts similarity index 100% rename from src/core/command/parse.cmd.save.ts rename to legacy/src/core/command/parse.cmd.save.ts diff --git a/src/core/command/parse.cmd.shoot.test.ts b/legacy/src/core/command/parse.cmd.shoot.test.ts similarity index 100% rename from src/core/command/parse.cmd.shoot.test.ts rename to legacy/src/core/command/parse.cmd.shoot.test.ts diff --git a/src/core/command/parse.cmd.shoot.ts b/legacy/src/core/command/parse.cmd.shoot.ts similarity index 100% rename from src/core/command/parse.cmd.shoot.ts rename to legacy/src/core/command/parse.cmd.shoot.ts diff --git a/src/core/command/parse.cmd.super.test.ts b/legacy/src/core/command/parse.cmd.super.test.ts similarity index 100% rename from src/core/command/parse.cmd.super.test.ts rename to legacy/src/core/command/parse.cmd.super.test.ts diff --git a/src/core/command/parse.cmd.super.ts b/legacy/src/core/command/parse.cmd.super.ts similarity index 100% rename from src/core/command/parse.cmd.super.ts rename to legacy/src/core/command/parse.cmd.super.ts diff --git a/src/core/command/parse.cmd.sync.test.ts b/legacy/src/core/command/parse.cmd.sync.test.ts similarity index 100% rename from src/core/command/parse.cmd.sync.test.ts rename to legacy/src/core/command/parse.cmd.sync.test.ts diff --git a/src/core/command/parse.cmd.sync.ts b/legacy/src/core/command/parse.cmd.sync.ts similarity index 100% rename from src/core/command/parse.cmd.sync.ts rename to legacy/src/core/command/parse.cmd.sync.ts diff --git a/src/core/command/parse.cmd.trial.test.ts b/legacy/src/core/command/parse.cmd.trial.test.ts similarity index 100% rename from src/core/command/parse.cmd.trial.test.ts rename to legacy/src/core/command/parse.cmd.trial.test.ts diff --git a/src/core/command/parse.cmd.trial.ts b/legacy/src/core/command/parse.cmd.trial.ts similarity index 100% rename from src/core/command/parse.cmd.trial.ts rename to legacy/src/core/command/parse.cmd.trial.ts diff --git a/src/core/command/parse.cmd.write.test.ts b/legacy/src/core/command/parse.cmd.write.test.ts similarity index 100% rename from src/core/command/parse.cmd.write.test.ts rename to legacy/src/core/command/parse.cmd.write.test.ts diff --git a/src/core/command/parse.cmd.write.ts b/legacy/src/core/command/parse.cmd.write.ts similarity index 100% rename from src/core/command/parse.cmd.write.ts rename to legacy/src/core/command/parse.cmd.write.ts diff --git a/src/core/command/parse.item.ts b/legacy/src/core/command/parse.item.ts similarity index 100% rename from src/core/command/parse.item.ts rename to legacy/src/core/command/parse.item.ts diff --git a/src/core/command/parse.metadata.ts b/legacy/src/core/command/parse.metadata.ts similarity index 100% rename from src/core/command/parse.metadata.ts rename to legacy/src/core/command/parse.metadata.ts diff --git a/src/core/command/parse.test.ts b/legacy/src/core/command/parse.test.ts similarity index 100% rename from src/core/command/parse.test.ts rename to legacy/src/core/command/parse.test.ts diff --git a/src/core/command/parsev2.ts b/legacy/src/core/command/parsev2.ts similarity index 100% rename from src/core/command/parsev2.ts rename to legacy/src/core/command/parsev2.ts diff --git a/src/core/command/type.ts b/legacy/src/core/command/type.ts similarity index 100% rename from src/core/command/type.ts rename to legacy/src/core/command/type.ts diff --git a/src/core/inventory/GameData.ts b/legacy/src/core/inventory/GameData.ts similarity index 100% rename from src/core/inventory/GameData.ts rename to legacy/src/core/inventory/GameData.ts diff --git a/src/core/inventory/README.md b/legacy/src/core/inventory/README.md similarity index 100% rename from src/core/inventory/README.md rename to legacy/src/core/inventory/README.md diff --git a/src/core/inventory/SlotDisplayForItemStack.ts b/legacy/src/core/inventory/SlotDisplayForItemStack.ts similarity index 100% rename from src/core/inventory/SlotDisplayForItemStack.ts rename to legacy/src/core/inventory/SlotDisplayForItemStack.ts diff --git a/src/core/inventory/Slots.ts b/legacy/src/core/inventory/Slots.ts similarity index 100% rename from src/core/inventory/Slots.ts rename to legacy/src/core/inventory/Slots.ts diff --git a/src/core/inventory/Slots.updateLife.test.ts b/legacy/src/core/inventory/Slots.updateLife.test.ts similarity index 100% rename from src/core/inventory/Slots.updateLife.test.ts rename to legacy/src/core/inventory/Slots.updateLife.test.ts diff --git a/src/core/inventory/SlotsCore.ts b/legacy/src/core/inventory/SlotsCore.ts similarity index 100% rename from src/core/inventory/SlotsCore.ts rename to legacy/src/core/inventory/SlotsCore.ts diff --git a/src/core/inventory/VisibleInventory.ts b/legacy/src/core/inventory/VisibleInventory.ts similarity index 100% rename from src/core/inventory/VisibleInventory.ts rename to legacy/src/core/inventory/VisibleInventory.ts diff --git a/src/core/inventory/add.test.ts b/legacy/src/core/inventory/add.test.ts similarity index 100% rename from src/core/inventory/add.test.ts rename to legacy/src/core/inventory/add.test.ts diff --git a/src/core/inventory/add.ts b/legacy/src/core/inventory/add.ts similarity index 100% rename from src/core/inventory/add.ts rename to legacy/src/core/inventory/add.ts diff --git a/src/core/inventory/index.ts b/legacy/src/core/inventory/index.ts similarity index 100% rename from src/core/inventory/index.ts rename to legacy/src/core/inventory/index.ts diff --git a/src/core/inventory/options.ts b/legacy/src/core/inventory/options.ts similarity index 100% rename from src/core/inventory/options.ts rename to legacy/src/core/inventory/options.ts diff --git a/src/core/inventory/remove.test.ts b/legacy/src/core/inventory/remove.test.ts similarity index 100% rename from src/core/inventory/remove.test.ts rename to legacy/src/core/inventory/remove.test.ts diff --git a/src/core/inventory/remove.ts b/legacy/src/core/inventory/remove.ts similarity index 100% rename from src/core/inventory/remove.ts rename to legacy/src/core/inventory/remove.ts diff --git a/src/core/inventory/types.ts b/legacy/src/core/inventory/types.ts similarity index 100% rename from src/core/inventory/types.ts rename to legacy/src/core/inventory/types.ts diff --git a/src/core/runtime/RuntimeProvider.tsx b/legacy/src/core/runtime/RuntimeProvider.tsx similarity index 100% rename from src/core/runtime/RuntimeProvider.tsx rename to legacy/src/core/runtime/RuntimeProvider.tsx diff --git a/src/core/runtime/directLoad.ts b/legacy/src/core/runtime/directLoad.ts similarity index 100% rename from src/core/runtime/directLoad.ts rename to legacy/src/core/runtime/directLoad.ts diff --git a/src/core/runtime/index.ts b/legacy/src/core/runtime/index.ts similarity index 100% rename from src/core/runtime/index.ts rename to legacy/src/core/runtime/index.ts diff --git a/src/core/runtime/page.ts b/legacy/src/core/runtime/page.ts similarity index 100% rename from src/core/runtime/page.ts rename to legacy/src/core/runtime/page.ts diff --git a/src/core/runtime/warnOnClose.ts b/legacy/src/core/runtime/warnOnClose.ts similarity index 100% rename from src/core/runtime/warnOnClose.ts rename to legacy/src/core/runtime/warnOnClose.ts diff --git a/src/core/runtime/warnReadOnly.ts b/legacy/src/core/runtime/warnReadOnly.ts similarity index 100% rename from src/core/runtime/warnReadOnly.ts rename to legacy/src/core/runtime/warnReadOnly.ts diff --git a/src/data/i18n/LanguageProvider.tsx b/legacy/src/data/i18n/LanguageProvider.tsx similarity index 100% rename from src/data/i18n/LanguageProvider.tsx rename to legacy/src/data/i18n/LanguageProvider.tsx diff --git a/src/data/i18n/en.lang.yaml b/legacy/src/data/i18n/en.lang.yaml similarity index 100% rename from src/data/i18n/en.lang.yaml rename to legacy/src/data/i18n/en.lang.yaml diff --git a/src/data/i18n/index.ts b/legacy/src/data/i18n/index.ts similarity index 100% rename from src/data/i18n/index.ts rename to legacy/src/data/i18n/index.ts diff --git a/src/data/item/Item.ts b/legacy/src/data/item/Item.ts similarity index 100% rename from src/data/item/Item.ts rename to legacy/src/data/item/Item.ts diff --git a/src/data/item/ItemProvider.tsx b/legacy/src/data/item/ItemProvider.tsx similarity index 100% rename from src/data/item/ItemProvider.tsx rename to legacy/src/data/item/ItemProvider.tsx diff --git a/src/data/item/ItemStack.ts b/legacy/src/data/item/ItemStack.ts similarity index 100% rename from src/data/item/ItemStack.ts rename to legacy/src/data/item/ItemStack.ts diff --git a/src/data/item/all.items.yaml b/legacy/src/data/item/all.items.yaml similarity index 100% rename from src/data/item/all.items.yaml rename to legacy/src/data/item/all.items.yaml diff --git a/src/data/item/elixir.test.ts b/legacy/src/data/item/elixir.test.ts similarity index 100% rename from src/data/item/elixir.test.ts rename to legacy/src/data/item/elixir.test.ts diff --git a/src/data/item/elixir.ts b/legacy/src/data/item/elixir.ts similarity index 100% rename from src/data/item/elixir.ts rename to legacy/src/data/item/elixir.ts diff --git a/src/data/item/extra.ts b/legacy/src/data/item/extra.ts similarity index 100% rename from src/data/item/extra.ts rename to legacy/src/data/item/extra.ts diff --git a/src/data/item/index.ts b/legacy/src/data/item/index.ts similarity index 100% rename from src/data/item/index.ts rename to legacy/src/data/item/index.ts diff --git a/src/data/item/item.legacy.test.ts b/legacy/src/data/item/item.legacy.test.ts similarity index 100% rename from src/data/item/item.legacy.test.ts rename to legacy/src/data/item/item.legacy.test.ts diff --git a/src/data/item/items.yaml.d.ts b/legacy/src/data/item/items.yaml.d.ts similarity index 100% rename from src/data/item/items.yaml.d.ts rename to legacy/src/data/item/items.yaml.d.ts diff --git a/src/data/item/legacy.ts b/legacy/src/data/item/legacy.ts similarity index 100% rename from src/data/item/legacy.ts rename to legacy/src/data/item/legacy.ts diff --git a/src/data/item/type.ts b/legacy/src/data/item/type.ts similarity index 100% rename from src/data/item/type.ts rename to legacy/src/data/item/type.ts diff --git a/src/data/saveAs.ts b/legacy/src/data/saveAs.ts similarity index 100% rename from src/data/saveAs.ts rename to legacy/src/data/saveAs.ts diff --git a/src/data/storage/StoreProvider.tsx b/legacy/src/data/storage/StoreProvider.tsx similarity index 100% rename from src/data/storage/StoreProvider.tsx rename to legacy/src/data/storage/StoreProvider.tsx diff --git a/src/data/storage/index.ts b/legacy/src/data/storage/index.ts similarity index 100% rename from src/data/storage/index.ts rename to legacy/src/data/storage/index.ts diff --git a/src/data/storage/serialize.test.ts b/legacy/src/data/storage/serialize.test.ts similarity index 100% rename from src/data/storage/serialize.test.ts rename to legacy/src/data/storage/serialize.test.ts diff --git a/src/data/storage/serialize.ts b/legacy/src/data/storage/serialize.ts similarity index 100% rename from src/data/storage/serialize.ts rename to legacy/src/data/storage/serialize.ts diff --git a/src/data/test/index.ts b/legacy/src/data/test/index.ts similarity index 100% rename from src/data/test/index.ts rename to legacy/src/data/test/index.ts diff --git a/src/data/test/mock.item.ts b/legacy/src/data/test/mock.item.ts similarity index 100% rename from src/data/test/mock.item.ts rename to legacy/src/data/test/mock.item.ts diff --git a/src/data/util/array.ts b/legacy/src/data/util/array.ts similarity index 100% rename from src/data/util/array.ts rename to legacy/src/data/util/array.ts diff --git a/src/data/util/index.ts b/legacy/src/data/util/index.ts similarity index 100% rename from src/data/util/index.ts rename to legacy/src/data/util/index.ts diff --git a/src/data/util/string.ts b/legacy/src/data/util/string.ts similarity index 100% rename from src/data/util/string.ts rename to legacy/src/data/util/string.ts diff --git a/src/data/util/types.ts b/legacy/src/data/util/types.ts similarity index 100% rename from src/data/util/types.ts rename to legacy/src/data/util/types.ts diff --git a/src/data/util/version.ts b/legacy/src/data/util/version.ts similarity index 100% rename from src/data/util/version.ts rename to legacy/src/data/util/version.ts diff --git a/src/main.tsx b/legacy/src/main.tsx similarity index 100% rename from src/main.tsx rename to legacy/src/main.tsx diff --git a/src/ui/components/Code.tsx b/legacy/src/ui/components/Code.tsx similarity index 100% rename from src/ui/components/Code.tsx rename to legacy/src/ui/components/Code.tsx diff --git a/src/ui/components/Section.tsx b/legacy/src/ui/components/Section.tsx similarity index 100% rename from src/ui/components/Section.tsx rename to legacy/src/ui/components/Section.tsx diff --git a/src/ui/components/basic/BodyText.tsx b/legacy/src/ui/components/basic/BodyText.tsx similarity index 100% rename from src/ui/components/basic/BodyText.tsx rename to legacy/src/ui/components/basic/BodyText.tsx diff --git a/src/ui/components/basic/Button.tsx b/legacy/src/ui/components/basic/Button.tsx similarity index 100% rename from src/ui/components/basic/Button.tsx rename to legacy/src/ui/components/basic/Button.tsx diff --git a/src/ui/components/basic/Category.tsx b/legacy/src/ui/components/basic/Category.tsx similarity index 100% rename from src/ui/components/basic/Category.tsx rename to legacy/src/ui/components/basic/Category.tsx diff --git a/src/ui/components/basic/Control.tsx b/legacy/src/ui/components/basic/Control.tsx similarity index 100% rename from src/ui/components/basic/Control.tsx rename to legacy/src/ui/components/basic/Control.tsx diff --git a/src/ui/components/basic/Description.tsx b/legacy/src/ui/components/basic/Description.tsx similarity index 100% rename from src/ui/components/basic/Description.tsx rename to legacy/src/ui/components/basic/Description.tsx diff --git a/src/ui/components/basic/Label.tsx b/legacy/src/ui/components/basic/Label.tsx similarity index 100% rename from src/ui/components/basic/Label.tsx rename to legacy/src/ui/components/basic/Label.tsx diff --git a/src/ui/components/basic/ListItem.tsx b/legacy/src/ui/components/basic/ListItem.tsx similarity index 100% rename from src/ui/components/basic/ListItem.tsx rename to legacy/src/ui/components/basic/ListItem.tsx diff --git a/src/ui/components/basic/index.ts b/legacy/src/ui/components/basic/index.ts similarity index 100% rename from src/ui/components/basic/index.ts rename to legacy/src/ui/components/basic/index.ts diff --git a/src/ui/components/index.ts b/legacy/src/ui/components/index.ts similarity index 100% rename from src/ui/components/index.ts rename to legacy/src/ui/components/index.ts diff --git a/src/ui/components/item/ItemList.tsx b/legacy/src/ui/components/item/ItemList.tsx similarity index 100% rename from src/ui/components/item/ItemList.tsx rename to legacy/src/ui/components/item/ItemList.tsx diff --git a/src/ui/components/item/ItemSlot.tsx b/legacy/src/ui/components/item/ItemSlot.tsx similarity index 94% rename from src/ui/components/item/ItemSlot.tsx rename to legacy/src/ui/components/item/ItemSlot.tsx index 041f036..532c353 100644 --- a/src/ui/components/item/ItemSlot.tsx +++ b/legacy/src/ui/components/item/ItemSlot.tsx @@ -51,7 +51,10 @@ export const ItemSlot: React.FC = ({ slot }) => { isEquipped && "ItemSlotEquipped", )} > - + {count !== undefined && ( @@ -84,7 +87,7 @@ export const ItemSlot: React.FC = ({ slot }) => { {modifierImage && ( )} {modifierText && ( diff --git a/src/ui/components/item/index.ts b/legacy/src/ui/components/item/index.ts similarity index 100% rename from src/ui/components/item/index.ts rename to legacy/src/ui/components/item/index.ts diff --git a/src/ui/css/Button.css b/legacy/src/ui/css/Button.css similarity index 100% rename from src/ui/css/Button.css rename to legacy/src/ui/css/Button.css diff --git a/src/ui/css/Category.css b/legacy/src/ui/css/Category.css similarity index 100% rename from src/ui/css/Category.css rename to legacy/src/ui/css/Category.css diff --git a/src/ui/css/Code.css b/legacy/src/ui/css/Code.css similarity index 100% rename from src/ui/css/Code.css rename to legacy/src/ui/css/Code.css diff --git a/src/ui/css/CrashScreen.css b/legacy/src/ui/css/CrashScreen.css similarity index 100% rename from src/ui/css/CrashScreen.css rename to legacy/src/ui/css/CrashScreen.css diff --git a/src/ui/css/Description.css b/legacy/src/ui/css/Description.css similarity index 100% rename from src/ui/css/Description.css rename to legacy/src/ui/css/Description.css diff --git a/src/ui/css/Input.css b/legacy/src/ui/css/Input.css similarity index 100% rename from src/ui/css/Input.css rename to legacy/src/ui/css/Input.css diff --git a/src/ui/css/ItemSlot.css b/legacy/src/ui/css/ItemSlot.css similarity index 100% rename from src/ui/css/ItemSlot.css rename to legacy/src/ui/css/ItemSlot.css diff --git a/src/ui/css/Label.css b/legacy/src/ui/css/Label.css similarity index 100% rename from src/ui/css/Label.css rename to legacy/src/ui/css/Label.css diff --git a/src/ui/css/ListItem.css b/legacy/src/ui/css/ListItem.css similarity index 100% rename from src/ui/css/ListItem.css rename to legacy/src/ui/css/ListItem.css diff --git a/src/ui/css/Page.css b/legacy/src/ui/css/Page.css similarity index 100% rename from src/ui/css/Page.css rename to legacy/src/ui/css/Page.css diff --git a/src/ui/css/Section.css b/legacy/src/ui/css/Section.css similarity index 100% rename from src/ui/css/Section.css rename to legacy/src/ui/css/Section.css diff --git a/src/ui/css/Tooltip.css b/legacy/src/ui/css/Tooltip.css similarity index 100% rename from src/ui/css/Tooltip.css rename to legacy/src/ui/css/Tooltip.css diff --git a/src/ui/css/index.ts b/legacy/src/ui/css/index.ts similarity index 100% rename from src/ui/css/index.ts rename to legacy/src/ui/css/index.ts diff --git a/src/ui/css/main.css b/legacy/src/ui/css/main.css similarity index 100% rename from src/ui/css/main.css rename to legacy/src/ui/css/main.css diff --git a/src/ui/panels/CommandReferencePanel.tsx b/legacy/src/ui/panels/CommandReferencePanel.tsx similarity index 100% rename from src/ui/panels/CommandReferencePanel.tsx rename to legacy/src/ui/panels/CommandReferencePanel.tsx diff --git a/src/ui/panels/HelpPanel.tsx b/legacy/src/ui/panels/HelpPanel.tsx similarity index 100% rename from src/ui/panels/HelpPanel.tsx rename to legacy/src/ui/panels/HelpPanel.tsx diff --git a/src/ui/panels/ItemExplorerPanel.tsx b/legacy/src/ui/panels/ItemExplorerPanel.tsx similarity index 100% rename from src/ui/panels/ItemExplorerPanel.tsx rename to legacy/src/ui/panels/ItemExplorerPanel.tsx diff --git a/src/ui/panels/NavPanel.tsx b/legacy/src/ui/panels/NavPanel.tsx similarity index 98% rename from src/ui/panels/NavPanel.tsx rename to legacy/src/ui/panels/NavPanel.tsx index f4497be..f3f44bb 100644 --- a/src/ui/panels/NavPanel.tsx +++ b/legacy/src/ui/panels/NavPanel.tsx @@ -87,7 +87,6 @@ export const NavPanel: React.FC = () => { > HELP -
{ > {status}
+ IST Simulator v4 is under development! ); diff --git a/src/ui/panels/SavePanel.tsx b/legacy/src/ui/panels/SavePanel.tsx similarity index 100% rename from src/ui/panels/SavePanel.tsx rename to legacy/src/ui/panels/SavePanel.tsx diff --git a/src/ui/panels/ScriptOptionPanel.tsx b/legacy/src/ui/panels/ScriptOptionPanel.tsx similarity index 98% rename from src/ui/panels/ScriptOptionPanel.tsx rename to legacy/src/ui/panels/ScriptOptionPanel.tsx index 7f40b12..d09e8f7 100644 --- a/src/ui/panels/ScriptOptionPanel.tsx +++ b/legacy/src/ui/panels/ScriptOptionPanel.tsx @@ -39,7 +39,8 @@ export const ScriptOptionPanel: React.FC = () => { const directUrl = useMemo(() => { const serializedCommands = serialize(currentText.join("\n")); const query = new URLSearchParams(serializedCommands).toString(); - return `${window.location.origin}/?${query}`; + // hard-coding the "legacy" path here + return `${window.location.origin}/legacy/?${query}`; }, [currentText]); const directUrlLength = directUrl.length; diff --git a/src/ui/panels/SettingPanel.tsx b/legacy/src/ui/panels/SettingPanel.tsx similarity index 100% rename from src/ui/panels/SettingPanel.tsx rename to legacy/src/ui/panels/SettingPanel.tsx diff --git a/src/ui/panels/SimMainPanel.tsx b/legacy/src/ui/panels/SimMainPanel.tsx similarity index 100% rename from src/ui/panels/SimMainPanel.tsx rename to legacy/src/ui/panels/SimMainPanel.tsx diff --git a/src/ui/panels/SimStepsPanel.tsx b/legacy/src/ui/panels/SimStepsPanel.tsx similarity index 100% rename from src/ui/panels/SimStepsPanel.tsx rename to legacy/src/ui/panels/SimStepsPanel.tsx diff --git a/src/ui/panels/index.ts b/legacy/src/ui/panels/index.ts similarity index 100% rename from src/ui/panels/index.ts rename to legacy/src/ui/panels/index.ts diff --git a/src/ui/surfaces/CommandTextArea.tsx b/legacy/src/ui/surfaces/CommandTextArea.tsx similarity index 100% rename from src/ui/surfaces/CommandTextArea.tsx rename to legacy/src/ui/surfaces/CommandTextArea.tsx diff --git a/src/ui/surfaces/CrashScreen.tsx b/legacy/src/ui/surfaces/CrashScreen.tsx similarity index 100% rename from src/ui/surfaces/CrashScreen.tsx rename to legacy/src/ui/surfaces/CrashScreen.tsx diff --git a/src/ui/surfaces/LoadingScreen.tsx b/legacy/src/ui/surfaces/LoadingScreen.tsx similarity index 100% rename from src/ui/surfaces/LoadingScreen.tsx rename to legacy/src/ui/surfaces/LoadingScreen.tsx diff --git a/src/ui/surfaces/Page.tsx b/legacy/src/ui/surfaces/Page.tsx similarity index 100% rename from src/ui/surfaces/Page.tsx rename to legacy/src/ui/surfaces/Page.tsx diff --git a/src/ui/surfaces/Tooltip.tsx b/legacy/src/ui/surfaces/Tooltip.tsx similarity index 100% rename from src/ui/surfaces/Tooltip.tsx rename to legacy/src/ui/surfaces/Tooltip.tsx diff --git a/src/ui/surfaces/index.ts b/legacy/src/ui/surfaces/index.ts similarity index 100% rename from src/ui/surfaces/index.ts rename to legacy/src/ui/surfaces/index.ts diff --git a/src/ui/types.ts b/legacy/src/ui/types.ts similarity index 100% rename from src/ui/types.ts rename to legacy/src/ui/types.ts diff --git a/src/vite-env.d.ts b/legacy/src/vite-env.d.ts similarity index 100% rename from src/vite-env.d.ts rename to legacy/src/vite-env.d.ts diff --git a/tools/test/jest.config.cjs b/legacy/tools/test/jest.config.cjs similarity index 100% rename from tools/test/jest.config.cjs rename to legacy/tools/test/jest.config.cjs diff --git a/tools/test/jest.d.ts b/legacy/tools/test/jest.d.ts similarity index 100% rename from tools/test/jest.d.ts rename to legacy/tools/test/jest.d.ts diff --git a/tools/test/jest.setup.ts b/legacy/tools/test/jest.setup.ts similarity index 100% rename from tools/test/jest.setup.ts rename to legacy/tools/test/jest.setup.ts diff --git a/tsconfig.json b/legacy/tsconfig.json similarity index 100% rename from tsconfig.json rename to legacy/tsconfig.json diff --git a/tsconfig.node.json b/legacy/tsconfig.node.json similarity index 100% rename from tsconfig.node.json rename to legacy/tsconfig.node.json diff --git a/vite.config.ts b/legacy/vite.config.ts similarity index 96% rename from vite.config.ts rename to legacy/vite.config.ts index 7add9ed..3d0b6ef 100644 --- a/vite.config.ts +++ b/legacy/vite.config.ts @@ -21,4 +21,5 @@ const https = createHttpsConfig(); export default defineConfig({ plugins: [react(), tsconfigPaths(), yaml()], server: { https }, + base: "/legacy/", }); diff --git a/manual/.gitignore b/manual/.gitignore new file mode 100644 index 0000000..7585238 --- /dev/null +++ b/manual/.gitignore @@ -0,0 +1 @@ +book diff --git a/manual/Taskfile.yml b/manual/Taskfile.yml new file mode 100644 index 0000000..872f415 --- /dev/null +++ b/manual/Taskfile.yml @@ -0,0 +1,16 @@ +version: '3' + +tasks: + dev: + desc: Start mdbook in watch mode + cmds: + - task: build + - mdbook watch & + - live-server book -p 8081 + + build: + desc: (Re-)build the book + cmds: + - rm -rf book + - mdbook build + diff --git a/manual/book.toml b/manual/book.toml new file mode 100644 index 0000000..e2a58b3 --- /dev/null +++ b/manual/book.toml @@ -0,0 +1,12 @@ +[book] + +authors = ["Pistonight"] +language = "en" +multilingual = false +src = "src" +title = "The IST Simulator Manual" + +[output.html] +site-url = "/manual/" +smart-punctuation = true +git-repository-url = "https://github.com/Pistonite/botw-ist" diff --git a/manual/src/SUMMARY.md b/manual/src/SUMMARY.md new file mode 100644 index 0000000..7390c82 --- /dev/null +++ b/manual/src/SUMMARY.md @@ -0,0 +1,3 @@ +# Summary + +- [Chapter 1](./chapter_1.md) diff --git a/manual/src/chapter_1.md b/manual/src/chapter_1.md new file mode 100644 index 0000000..05879d4 --- /dev/null +++ b/manual/src/chapter_1.md @@ -0,0 +1,3 @@ +# Chapter 1 + +This is a placeholder... diff --git a/next/botw-ist-command/.gitignore b/next/botw-ist-command/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/next/botw-ist-command/.gitignore @@ -0,0 +1 @@ +/target diff --git a/next/botw-ist-command/Cargo.lock b/next/botw-ist-command/Cargo.lock new file mode 100644 index 0000000..b72e009 --- /dev/null +++ b/next/botw-ist-command/Cargo.lock @@ -0,0 +1,438 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + +[[package]] +name = "botw-ist-command" +version = "0.0.0" +dependencies = [ + "logos", + "phf", + "teleparse", + "thiserror", +] + +[[package]] +name = "deref-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4255bb7dd538590188bd0aea52e48bd699b19bd90b0d069ec2ced8461fe23273" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "indexmap" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "logos" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1ceb190eb9bdeecdd8f1ad6a71d6d632a50905948771718741b5461fb01e13" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90be66cb7bd40cb5cc2e9cfaf2d1133b04a3d93b72344267715010a466e0915a" +dependencies = [ + "beef", + "fnv", + "lazy_static", + "proc-macro2", + "quote", + "regex-syntax", + "syn 2.0.72", +] + +[[package]] +name = "logos-derive" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45154231e8e96586b39494029e58f12f8ffcb5ecf80333a603a13aa205ea8cbd" +dependencies = [ + "logos-codegen", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "teleparse" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80436d09591939259a48971e0958fa1f448ccfc52cd866aa6e3a2ac22f453a7a" +dependencies = [ + "deref-derive", + "derivative", + "itertools", + "logos", + "num", + "teleparse-macros", + "thiserror", +] + +[[package]] +name = "teleparse-macros" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806cb698e390e3ab8f6748c38431cc72c6484e70e80480d78e2d564fc9e99a47" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "syn 2.0.72", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] diff --git a/next/botw-ist-command/Cargo.toml b/next/botw-ist-command/Cargo.toml new file mode 100644 index 0000000..9e4f407 --- /dev/null +++ b/next/botw-ist-command/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "botw-ist-command" +version = "0.0.0" +edition = "2021" + +[dependencies] +logos = "0.14.1" # not needed after teleparse fix the bug +phf = { version = "0.11.2", features = ["macros"] } +teleparse = "0.0.4" +thiserror = "1.0.63" diff --git a/next/botw-ist-command/src/item.rs b/next/botw-ist-command/src/item.rs new file mode 100644 index 0000000..10cb95b --- /dev/null +++ b/next/botw-ist-command/src/item.rs @@ -0,0 +1,40 @@ +pub struct ItemStack { + item_type: u32, + item_use: u32, + value: i32, + equipped: bool, + in_inventory: bool, + name: String, + data: ItemCookData, + ingredients: [String; 5] +} + +#[repr(C)] +pub struct ItemCookData { + health_recover: i32, + effect_duration: i32, + sell_price: i32, + cook_effect: f32, + effect_level: f32 +} + +#[repr(C)] +pub struct ItemWeaponData { +} + +pub struct ItemMeta { + pub life: f32, + pub equip: bool, + pub price: u32, + pub hp: u32, + pub modifier: u32, // enum + pub upgrade: u32 +} + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Invalid meta key: {0}")] + InvalidMetaKey(String), + #[error("Invalid meta value for key `{0}`: {1}")] + InvalidMetaValue(String, String), +} diff --git a/next/botw-ist-command/src/item_data.rs b/next/botw-ist-command/src/item_data.rs new file mode 100644 index 0000000..0a0cc0e --- /dev/null +++ b/next/botw-ist-command/src/item_data.rs @@ -0,0 +1,275 @@ +#![allow(non_camel_case_types)] // non camel case to match closer to actor names +pub enum ItemCategoryRaw { + Weapon_Sword, // Weapon_Sword_XXX + Weapon_Lsword, // Weapon_Lsword_XXX + Weapon_Spear, // Weapon_Spear_XXX + Weapon_Bow, // Weapon_Bow_XXX + Weapon_Shield, // Weapon_Shield_XXX + Armor_Head, // Armor_XXX_Head + Armor_Upper, // Armor_XXX_Upper + Armor_Lower, // Armor_XXX_Lower + Item, // Item_ + Item_Cook, // Item_Cook + Key +} + +pub struct ItemDataRaw { + pub category: ItemCategoryRaw, + pub actor_name: &'static str, + pub item_name: &'static str, + pub search_term: &'static str, + pub priority: u32, + pub weapon_power: u32, + pub durability: u32, + pub armor_upgrade: u32, + pub stackable: bool, + pub bow_zoom: bool, + pub bow_multishot: bool, + pub bow_rapidfire: bool, +} + +impl ItemDataRaw { + pub const fn new_const(category: ItemCategoryRaw, actor_name: &'static str, item_name: &'static str) -> Self { + ItemDataRaw { + category, + actor_name, + item_name, + search_term: "", + priority: 0, + weapon_power: 0, + durability: 0, + armor_upgrade: 0, + stackable: false, + bow_zoom: false, + bow_multishot: false, + bow_rapidfire: false, + } + } + +} + +macro_rules! actor_name { + (Weapon_Sword $id:literal) => { + concat!("Weapon_Sword_", $id) + }; + (Weapon_Lsword $id:literal) => { + concat!("Weapon_Lsword_", $id) + }; + (Weapon_Spear $id:literal) => { + concat!("Weapon_Spear_", $id) + }; + (Weapon_Bow $id:literal) => { + concat!("Weapon_Bow_", $id) + }; + (Weapon_Shield $id:literal) => { + concat!("Weapon_Shield_", $id) + }; + (Armor_Head $id:literal) => { + concat!("Armor_", $id, "_Head") + }; + (Armor_Upper $id:literal) => { + concat!("Armor_", $id, "_Upper") + }; + (Armor_Lower $id:literal) => { + concat!("Armor_", $id, "_Lower") + }; + (Item $id:literal) => { + concat!("Item_", $id) + }; + (Item_Cook $id:literal) => { + concat!("Item_Cook_", $id) + }; + (Key $id:literal) => { + $id + }; +} + +macro_rules! item_data_raw { + ($type:ident $id:literal: $item_name:literal + $( {$($field:ident : $value:literal),*} )? +) => { + { + #[allow(unused_mut)] + let mut item = ItemDataRaw::new_const( + ItemCategoryRaw::$type, + actor_name!($type $id), + $item_name + ); + $( + $(item.$field = $value;)* + )? + item + } + } +} + +macro_rules! item_map { + ( + $( + $type:ident $id:literal: $item_name:literal + $( {$($field:ident : $value:literal),*} )? + +),* + ) => { + phf::phf_map! { + $( + $item_name => item_data_raw!($type $id: $item_name $( {$($field : $value),*} )?), + )* + } + } +} + +pub const ITEMS: phf::Map<&'static str, ItemDataRaw> = item_map! { + Weapon_Sword "070": "MasterSword" { durability: 40, weapon_power: 30 } +"Weapon_Sword_001": "Traveler's Sword", +// - TravelersSword:travelersword: +// durability: 20 + "Weapon_Sword_002": "Soldier's Broadsword", +// - SoldiersBroadsword:soldiersword: +// durability: 23 + "Weapon_Sword_003": "Knight's Broadsword", +// - KnightsBroadsword:knightsword: +// durability: 27 + "Weapon_Sword_004": "Boko Club", +// - BokoClub: +// durability: 12 + "Weapon_Sword_005": "Spiked Boko Club", +// - SpikedBokoClub: +// durability: 14 + "Weapon_Sword_006": "Dragonbone Boko Club", +// - DragonboneBokoClub: +// durability: 18 + "Weapon_Sword_007": "Lizal Boomerang", +// - LizalBoomerang: +// durability: 17 + "Weapon_Sword_008": "Lizal Forked Boomerang", +// - LizalForkedBoomerang: +// durability: 23 + "Weapon_Sword_009": "Lizal Tri-Boomerang", +// - LizalTriBoomerang: +// durability: 27 +// priority: 1 + "Weapon_Sword_013": "Guardian Sword", +// - GuardianSword: +// durability: 17 + "Weapon_Sword_014": "Guardian Sword+", +// - GuardianSwordPlus: +// durability: 26 + "Weapon_Sword_015": "Guardian Sword++", +// - GuardianSwordPlusPlus: +// durability: 32 + "Weapon_Sword_016": "Lynel Sword", +// - LynelSword: +// durability: 26 + "Weapon_Sword_017": "Mighty Lynel Sword", +// - MightyLynelSword: +// durability: 32 + "Weapon_Sword_018": "Savage Lynel Sword", +// - SavageLynelSword: +// durability: 41 + "Weapon_Sword_019": "Bokoblin Arm", +// - BokoblinArm: +// durability: 5 + "Weapon_Sword_020": "Lizalfos Arm", +// - LizalfosArm: +// durability: 8 + "Weapon_Sword_021": "Rusty Broadsword", +// - RustyBroadsword: +// durability: 8 + "Weapon_Sword_022": "Soup Ladle", +// - SoupLadle: +// durability: 5 +// priority: 1 + "Weapon_Sword_023": "Ancient Short Sword", +// - AncientShortSword: +// durability: 54 + "Weapon_Sword_024": "Royal Broadsword", +// - RoyalBroadsword:royalswordrsword: +// durability: 36 + "Weapon_Sword_025": "Forest Dweller's Sword", +// - ForestDwellersSword:fdsword: +// durability: 27 + "Weapon_Sword_027": "Zora Sword", +// - ZoraSword: +// durability: 27 + "Weapon_Sword_029": "Gerudo Scimitar", +// - GerudoScimitar: +// durability: 23 + "Weapon_Sword_030": "Moonlight Scimitar", +// - MoonlightScimitar: +// durability: 32 + "Weapon_Sword_031": "Feathered Edge", +// - FeatheredEdge: +// durability: 27 + "Weapon_Sword_033": "Flameblade", +// - Flameblade: +// durability: 36 + "Weapon_Sword_034": "Frostblade", +// - Frostblade: +// durability: 30 + "Weapon_Sword_035": "Thunderblade", +// - Thunderblade: +// durability: 36 + "Weapon_Sword_040": "Spring-Loaded Hammer", + "Weapon_Sword_041": "Eightfold Blade", +// - EightfoldBlade: +// durability: 26 + "Weapon_Sword_042": "Spring-Loaded Hammer", +// - SpringLoadedHammer: +// durability: 80 + "Weapon_Sword_043": "Torch", +// - Torch: +// durability: 8 +// priority: 1 + "Weapon_Sword_044": "Tree Branch", +// - TreeBranch: +// durability: 4 +// priority: 1 + "Weapon_Sword_047": "Royal Guard's Sword", +// - RoyalGuardsSword:rgsword: +// durability: 14 + "Weapon_Sword_048": "Meteor Rod", +// - MeteorRod: +// durability: 32 + "Weapon_Sword_049": "Blizzard Rod", +// - BlizzardRod: +// durability: 32 + "Weapon_Sword_050": "Thunderstorm Rod", +// - ThunderstormRod: +// durability: 32 + "Weapon_Sword_051": "Boomerang", +// - Boomerang: +// durability: 18 + "Weapon_Sword_052": "Scimitar of the Seven", +// - ScimitarOfTheSeven: +// durability: 60 + "Weapon_Sword_053": "Vicious Sickle", +// - ViciousSickle: +// durability: 14 + "Weapon_Sword_057": "Goddess Sword", +// - GoddessSword: +// durability: 45 + "Weapon_Sword_058": "Sword", +// - Sword: +// durability: 27 + "Weapon_Sword_059": "Sea-Breeze Boomerang", +// - SeaBreezeBoomerang: +// durability: 20 + "Weapon_Sword_060": "Fire Rod", +// - FireRod: +// durability: 14 + "Weapon_Sword_061": "Ice Rod", +// - IceRod: +// durability: 14 + "Weapon_Sword_062": "Lightning Rod", +// - LightningRod: +// durability: 14 + "Weapon_Sword_070": "Master Sword", + "Weapon_Sword_073": "Demon Carver", +// - DemonCarver: +// durability: 25 +"Weapon_Sword_502": "One-Hit Obliterator", +// - OneHitObliterator:oho: +// durability: 40 +}; + diff --git a/next/botw-ist-command/src/lib.rs b/next/botw-ist-command/src/lib.rs new file mode 100644 index 0000000..c38c08e --- /dev/null +++ b/next/botw-ist-command/src/lib.rs @@ -0,0 +1,4 @@ + +mod parse; +mod item; +mod item_data; diff --git a/next/botw-ist-command/src/parse.rs b/next/botw-ist-command/src/parse.rs new file mode 100644 index 0000000..2573c0c --- /dev/null +++ b/next/botw-ist-command/src/parse.rs @@ -0,0 +1,100 @@ +use teleparse::prelude::*; + +#[derive_lexicon] +#[teleparse(ignore(r"\s+"))] +pub enum TT { + #[teleparse( + regex(r"[a-zA-Z]+"), + terminal( + TWord, + TInit = "init", + TInitialize = "initialize", + TAll = "all", + TInitGameData = "initgamedata", + ) + )] + Word, + + #[teleparse(regex(r"\d+"), terminal(TNumber))] + Number, + + #[teleparse(terminal( + TEq = "=", + TColon = ":", + TBracketOpen = "[", + TBracketClose = "]", + TComma = ",", + ))] + Symbol +} + +pub enum SCommand { +} + +#[derive_syntax] +#[teleparse(root)] +pub struct SCmdInit { + pub kw_init: SInit, + pub items: SNumberedItemList, +} + +#[derive_syntax] +pub enum SNumberedItemList { + Single(SItem), + List(tp::Vec), +} + +#[derive_syntax] +pub struct SItem { + pub name: tp::Nev, + pub meta: tp::Option, +} + +#[derive_syntax] +pub struct SNumberedItem { + pub num: TNumber, + pub item: SItem, +} + +#[derive_syntax] +pub struct SMeta { + pub sym_open: TBracketOpen, + pub items: tp::Punct, + pub sym_close: TBracketClose, +} + +#[derive_syntax] +pub struct SMetaKeyValue { + pub key: TWord, + pub value: tp::Option, +} + +#[derive_syntax] +pub struct SMetaValue { + pub sep: SMetaSep, + pub value: SWordOrNum, +} + +#[derive_syntax] +pub enum SMetaSep { + Colon(TColon), + Eq(TEq), +} + +#[derive_syntax] +pub enum SWordOrNum { + Word(TWord), + Number(TNumber), +} + +#[derive_syntax] +pub enum SInit { + Init(TInit), + Initialize(TInitialize), +} + +// #[derive_syntax] +// pub enum SAmountOrAll { +// Amount(TNumber), +// All(TAll), +// } diff --git a/public/CNAME b/public/CNAME deleted file mode 100644 index d12361b..0000000 --- a/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -dupl.itntpiston.app \ No newline at end of file diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 0000000..e8df3ac --- /dev/null +++ b/server/.gitignore @@ -0,0 +1,3 @@ +/build +/dist +/.env diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..4d03b01 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,14 @@ +FROM alpine:latest +EXPOSE 80 +ENV APP_DIR=/iss +COPY ./dist $APP_DIR +RUN chmod +x $APP_DIR/server/botw-iss + +WORKDIR $APP_DIR + +ENV ISS_LOG=info \ + ISS_LOG_COLOR=false \ + ISS_MANUAL_PATH=/iss/manual \ + ISS_LEGACY_PATH=/iss/legacy + +ENTRYPOINT ["/iss/server/botw-iss"] diff --git a/server/Taskfile.yml b/server/Taskfile.yml new file mode 100644 index 0000000..c53299c --- /dev/null +++ b/server/Taskfile.yml @@ -0,0 +1,74 @@ +version: '3' + +tasks: + check: + desc: Check for errors + cmds: + - go vet + - mkdir -p build + - gofmt -l . > build/fmt.txt + - cmd: if ! [ -z $(cat build/fmt.txt) ]; then echo 'Run `go fmt` to format the following files:'; cat build/fmt.txt; exit 1; fi + silent: true + + fix: + desc: Fix errors + cmds: + - go fmt + + build: + desc: Build the server executable + cmds: + - mkdir -p build + - go build -o build/botw-iss + + dev: + desc: Run the server in watch mode + env: + ISS_LOG: info + ISS_LOG_COLOR: "false" + ISS_ADDRESS: https://pistonite.local:8000 + ISS_CERT: ../cert + ISS_MANUAL_PATH: ../manual/book + ISS_LEGACY_PATH: ../legacy/dist + ISS_DEV: 1 + cmds: + - cargo watch -C . -s 'go run .' + + ###################################### + # Container Local Testing + ###################################### + + pull: + desc: Pull the latest build artifact from GitHub + dotenv: + - .env + cmds: + - magnesis -o dist + + container: + desc: Build the Docker container + cmds: + - docker build -t pistonite/botw-iss . + + run: + desc: Run the Docker container + cmds: + - docker run -p 8000:80 -e ISS_ADDRESS=http://pistonite.local:80 pistonite/botw-iss:latest + + connect: + desc: Connect to the running Docker container + cmds: + - docker exec -it $(docker container ls -q --filter ancestor=pistonite/botw-iss) /bin/sh + + stop: + desc: Stop the running Docker container + cmds: + - docker stop $(docker ps ls -q -a --filter ancestor=pistonite/botw-iss) + + clean: + desc: Clean the containers + cmds: + - docker container prune + - docker image rm $(docker image ls -q -a --filter reference=pistonite/botw-iss) + + diff --git a/server/draw.go b/server/draw.go new file mode 100644 index 0000000..c916bd6 --- /dev/null +++ b/server/draw.go @@ -0,0 +1,53 @@ +package main + +import ( + "fmt" +) + +const banner string = ` + ┌───────────────────────────────────────────────────┐ + │ IST Simulator Server │ + │ __ ______ ______ │ + │ /\ \ /\ ___\ /\ ___\ │ + │ \ \ \ \ \___ \ \ \___ \ │ + │ \ \_\ \/\_____\ \/\_____\ │ + │ \/_/ \/_____/ \/_____/ │ ` + +const col = 51 + +func DrawStart() { + fmt.Println(banner) +} + +func DrawLine(name string, value string) { + numDots := col - (len(name) + len(value) + 4) + if numDots <= 0 { + fmt.Printf(" │ %*s │ \n", -col+2, name) + fmt.Printf(" │ %*s │ \n", col-2, value) + } else { + fmt.Printf(" │ %s ", name) + for range numDots { + fmt.Print(".") + } + fmt.Printf(" %s │ \n", value) + } +} + +const sectionHead string = ` └───────────╮ ╭═══════════════════╮ ╭───────────┘ ` + +const sectionFoot string = ` ┌───────────╯ ╰═══════════════════╯ ╰───────────┐ ` + +func DrawSection(name string) { + fmt.Printf(" │%*s│ \n", col, "") + fmt.Println(sectionHead) + w := 19 + name = fmt.Sprintf("%*s", -w, fmt.Sprintf("%*s", (w+len(name))/2, name)) + fmt.Printf(" ╞═══┤%s├═══╡\n", name) + fmt.Println(sectionFoot) + fmt.Printf(" │%*s│ \n", col, "") +} + +func DrawEnd() { + fmt.Printf(" │%*s│ \n", col, "") + fmt.Print(" └───────────────────────────────────────────────────┘ ") +} diff --git a/server/env.go b/server/env.go new file mode 100644 index 0000000..c3cbe0d --- /dev/null +++ b/server/env.go @@ -0,0 +1,138 @@ +package main + +// Environment variables + +import ( + "fmt" + "path" + "strconv" + "strings" + + "github.com/gofiber/fiber/v2/log" + + "github.com/plaid/go-envvar/envvar" +) + +// Raw values from environment variables +type RawEnv struct { + LogLevel string `envvar:"ISS_LOG" default:"info"` + LogColor bool `envvar:"ISS_LOG_COLOR" default:"true"` + Address string `envvar:"ISS_ADDRESS"` + Cert string `envvar:"ISS_CERT" default:""` + ManualPath string `envvar:"ISS_MANUAL_PATH"` + LegacyPath string `envvar:"ISS_LEGACY_PATH"` +} + +type EnvConfig struct { + // Logging Level + LogLevel log.Level + // Log with color + LogColor bool + // Path to the manual app + ManualPath string + // Path to the legacy app + LegacyPath string + // Addresses + Address EnvAddress +} + +type EnvAddress struct { + // The string for the port to listen on (e.g. ":80") + Port string + // The domain part of the host URL (e.g. "example.domain.org") + Domain string + // The orogin part of the host URL (e.g. "http://example.domain.org") + Origin string + // Redirect Url for the app (e.g. "http://example.domain.org/api/auth/cb") + RedirectUrl string + + // Path to cert.pem file. Required if https + CertPem string + // Path to cert.key file. Required if https + CertKey string +} + +func ParseEnvConfig() *EnvConfig { + raw := RawEnv{} + if err := envvar.Parse(&raw); err != nil { + log.Fatal(err) + } + + address, err := raw.ParseAddress() + if err != nil { + log.Fatal(err) + } + + return &EnvConfig{ + LogLevel: raw.ParseLogLevel(), + LogColor: raw.LogColor, + ManualPath: raw.ManualPath, + LegacyPath: raw.LegacyPath, + Address: *address, + } +} + +func (this *RawEnv) ParseLogLevel() log.Level { + switch strings.ToLower(this.LogLevel) { + case "debug": + return log.LevelDebug + case "info": + return log.LevelInfo + case "warn": + return log.LevelWarn + default: + return log.LevelError + } +} + +func (this *RawEnv) ParseAddress() (*EnvAddress, error) { + addrs := EnvAddress{} + + hostParts := strings.Split(this.Address, ":") + hostPartLength := len(hostParts) + if hostPartLength < 2 { + return nil, fmt.Errorf("bad host format: %s", this.Address) + } + rawPort := hostParts[hostPartLength-1] + if _, err := strconv.ParseUint(rawPort, 0, 16); err != nil { + return nil, fmt.Errorf("invalid port: %s", rawPort) + } + + domainWithScheme := strings.Join(hostParts[:hostPartLength-1], ":") + addrs.Port = ":" + rawPort + + redirectUrlBuilder := strings.Builder{} + redirectUrlBuilder.WriteString(domainWithScheme) + if rawPort != "80" && rawPort != "443" { + redirectUrlBuilder.WriteByte(':') + redirectUrlBuilder.WriteString(rawPort) + } + addrs.Origin = redirectUrlBuilder.String() + if strings.HasPrefix(domainWithScheme, "http://") { + addrs.Domain = domainWithScheme[len("http://"):] + } else if strings.HasPrefix(domainWithScheme, "https://") { + addrs.Domain = domainWithScheme[len("https://"):] + if this.Cert == "" { + return nil, fmt.Errorf("env var ISS_CERT required for https") + } + addrs.CertKey = path.Join(this.Cert, "cert.key") + addrs.CertPem = path.Join(this.Cert, "cert.pem") + } else { + return nil, fmt.Errorf("invalid URL scheme. Only http and https allowed.") + } + + redirectUrlBuilder.WriteString("/api/auth/cb") + addrs.RedirectUrl = redirectUrlBuilder.String() + + DrawSection("Server Address") + DrawLine("Origin", addrs.Origin) + DrawLine("Domain", addrs.Domain) + DrawLine("Redirect URL", addrs.RedirectUrl) + DrawLine("Port", addrs.Port) + + return &addrs, nil +} + +func (this *EnvAddress) IsHttps() bool { + return this.CertKey != "" && this.CertPem != "" +} diff --git a/server/go.mod b/server/go.mod new file mode 100644 index 0000000..cae5108 --- /dev/null +++ b/server/go.mod @@ -0,0 +1,23 @@ +module github.com/Pistonite/botw-ist/server/v2 + +go 1.23.1 + +require ( + github.com/gofiber/fiber/v2 v2.52.5 + github.com/plaid/go-envvar v1.1.0 +) + +require ( + github.com/andybalholm/brotli v1.0.5 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/klauspost/compress v1.17.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.51.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/sys v0.15.0 // indirect +) diff --git a/server/go.sum b/server/go.sum new file mode 100644 index 0000000..02c7f24 --- /dev/null +++ b/server/go.sum @@ -0,0 +1,37 @@ +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo= +github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/plaid/go-envvar v1.1.0 h1:q/po6Vnxh1ANQugP9UVXp/DxbLpQCxVV7HeCq2iXMwA= +github.com/plaid/go-envvar v1.1.0/go.mod h1:l95NEcV3lksGLSdpHtPxDvs16HNNp6CQhtfo0ATM7ks= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= +github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/server/main.go b/server/main.go new file mode 100644 index 0000000..106bbcf --- /dev/null +++ b/server/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/log" + "github.com/gofiber/fiber/v2/middleware/logger" + // // "github.com/gofiber/fiber/v2/utils" +) + +func main() { + DrawStart() + + env := ParseEnvConfig() + log.SetLevel(env.LogLevel) + log.Debugf("Set Log Level to: %s\n", env.LogLevel) + + // Create the app + app := fiber.New() + app.Use(logger.New(logger.Config{ + DisableColors: !env.LogColor, + })) + + DrawSection("Asset Paths") + + DrawLine("Manual", env.ManualPath) + app.Get("/manual", func(ctx *fiber.Ctx) error { + return ctx.Redirect("/manual/index.html") + }) + app.Static("/manual", env.ManualPath, fiber.Static{ + Compress: true, + MaxAge: 3600, + }) + + DrawLine("Legacy", env.LegacyPath) + app.Static("/legacy", env.LegacyPath, fiber.Static{ + Compress: true, + MaxAge: 3600, + }) + + DrawEnd() + + addr := env.Address + var err error + if addr.IsHttps() { + err = app.ListenTLS(addr.Port, addr.CertPem, addr.CertKey) + } else { + err = app.Listen(addr.Port) + } + log.Fatal(err) +} diff --git a/sim/core/.gitkeep b/sim/core/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sim/parser/Cargo.toml b/sim/parser/Cargo.toml new file mode 100644 index 0000000..49de6f4 --- /dev/null +++ b/sim/parser/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "ist-parser" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies] +teleparse = "0.0.4" +logos = "0.14.1" # not needed after teleparse fix the bug diff --git a/sim/parser/src/lib.rs b/sim/parser/src/lib.rs new file mode 100644 index 0000000..de66599 --- /dev/null +++ b/sim/parser/src/lib.rs @@ -0,0 +1,182 @@ +use teleparse::{derive_lexicon, derive_syntax, tp}; + +pub fn test_message(n: u64) -> String { + format!("Hello from Rust! You passed in {}", n) +} + +#[derive_lexicon] +pub enum TT { + #[teleparse(terminal( + SymLAngle = "<", + SymRAngle = ">", + SymLParen = "(", + SymRParen = ")", + SymLBracket = "[", + SymRBracket = "]", + SymLBrace = "{", + SymRBrace = "}", + SymEqual = "=", + SymColon = ":", + SymComma = ",", + SymSemi = ";", + ))] + Symbol, + + #[teleparse(regex(r"\d+"), terminal(Number))] + Number, + #[teleparse(regex(r"0x[0-9a-fA-F]+"), terminal(HexNumber))] + HexNumber, + + #[teleparse( + terminal( + CmdInit = "init", + CmdInitGdt = "init-gdt", + + CmdGet = "get", + CmdPickUp = "pick-up", + CmdBuy = "buy", + CmdCook = "cook", + + CmdEat = "eat", + CmdSell = "sell", + CmdEatAll = "eat-all", // tyupe + CmdSellAll = "sell-all", //type + CmdDropAll = "drop-all", //type + + CmdHold = "hold", + CmdUnhold = "unhold", + CmdHoldSmuggle = "hold-smuggle", + CmdHoldAttach = "hold-attach", + CmdDrop = "drop", + CmdPutAside = "put-aside", + CmdDnp = "dnp", + + CmdRoast = "roast", + CmdBoil = "boil", + CmdFreeze = "freeze", + + CmdEquip = "equip", + CmdUnequip = "unequip", // type + CmdUnequipThe = "unequip-the", // item + CmdShoot = "shoot-arrow", + + CmdSort = "sort", // type + // + CmdSave = "save", + CmdSaveAs = "save-as", + CmdReload = "reload", + + CmdCloseGame = "close-game", + CmdNewGame = "new-game", + ) + )] + Command, + + #[teleparse(terminal(AmtAll = "all", AmtInfinite = "infinite"))] + Amount, + + #[teleparse(terminal( + KwFrom = "from", + KwSlot = "slot", + ))] + Keyword, + + #[teleparse(regex(r"[-a-zA-Z]+"), terminal(Word))] + Word, + + Variable, + Name, + Type, +} + +#[derive_syntax] +#[teleparse(root)] +pub struct CommandInit { + pub cmd: CmdInit, + pub items: NumberedItemList, +} + +#[derive_syntax] +pub enum NumberedItemList { + Single(Item), + List(tp::Vec), +} + +#[derive_syntax] +pub struct NumberedItem { + pub num: Num, + pub item: Item, +} + +#[derive_syntax] +pub struct NumberedOrAllItem { + pub num: NumOrAll, + pub item: Item, +} + +#[derive_syntax] +pub struct NumberedOrInfiniteItem { + pub num: NumOrInfinite, + pub item: Item, +} + +#[derive_syntax] +pub struct Item { + #[teleparse(semantic(Name))] + pub name: tp::Nev, + pub meta: tp::Option, +} + +#[derive_syntax] +pub struct ItemMeta { + pub open: SymLBracket, + pub entries: tp::Punct, + pub close: SymRBracket, +} + +#[derive_syntax] +pub struct ItemMetaKeyValue { + #[teleparse(semantic(Variable))] + pub key: Word, + pub value: tp::Option +} + +#[derive_syntax] +pub struct ItemMetaValue { + pub sep: MetaSep, + pub value: WordOrNum, +} + +#[derive_syntax] +pub enum WordOrNum { + Word(Word), + Number(Number), + HexNumber(HexNumber), +} + +#[derive_syntax] +pub enum Num { + Number(Number), + HexNumber(HexNumber), +} + +#[derive_syntax] +pub enum NumOrAll { + All(AmtAll), + Number(Number), + HexNumber(HexNumber), +} + +#[derive_syntax] +pub enum NumOrInfinite { + Infinite(AmtInfinite), + Number(Number), + HexNumber(HexNumber), +} + +#[derive_syntax] +pub enum MetaSep { + Colon(SymColon), + Equal(SymEqual), +} + diff --git a/sim/runtime/Cargo.toml b/sim/runtime/Cargo.toml new file mode 100644 index 0000000..0d9fc92 --- /dev/null +++ b/sim/runtime/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "ist-runtime" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies] +ist-parser = { path = "../parser" } + diff --git a/sim/runtime/src/lib.rs b/sim/runtime/src/lib.rs new file mode 100644 index 0000000..49b3ed2 --- /dev/null +++ b/sim/runtime/src/lib.rs @@ -0,0 +1,5 @@ + +pub fn get_message() -> String { + ist_parser::test_message(42) +} +