From 4acf46a53f7bb1382ba5d75a87cb272f3c75aa59 Mon Sep 17 00:00:00 2001 From: ahaoboy <504595380@qq.com> Date: Tue, 11 Jun 2024 16:02:23 +0800 Subject: [PATCH] v0.1.0 --- .github/workflows/release.yml | 271 +++ .gitignore | 1 + Cargo.lock | 2913 ++++++++++++++++++++++++++++++++ Cargo.toml | 31 + assets/ico/cat/dark_cat_0.ico | Bin 0 -> 5430 bytes assets/ico/cat/dark_cat_1.ico | Bin 0 -> 5430 bytes assets/ico/cat/dark_cat_2.ico | Bin 0 -> 5430 bytes assets/ico/cat/dark_cat_3.ico | Bin 0 -> 5430 bytes assets/ico/cat/dark_cat_4.ico | Bin 0 -> 5430 bytes assets/ico/cat/light_cat_0.ico | Bin 0 -> 5430 bytes assets/ico/cat/light_cat_1.ico | Bin 0 -> 5430 bytes assets/ico/cat/light_cat_2.ico | Bin 0 -> 5430 bytes assets/ico/cat/light_cat_3.ico | Bin 0 -> 5430 bytes assets/ico/cat/light_cat_4.ico | Bin 0 -> 5430 bytes assets/png/app256.png | Bin 0 -> 19445 bytes assets/png/app32.png | Bin 0 -> 537 bytes assets/png/dark_cat_0.png | Bin 0 -> 441 bytes assets/png/dark_cat_1.png | Bin 0 -> 451 bytes assets/png/dark_cat_2.png | Bin 0 -> 413 bytes assets/png/dark_cat_3.png | Bin 0 -> 428 bytes assets/png/dark_cat_4.png | Bin 0 -> 408 bytes assets/png/light_cat_0.png | Bin 0 -> 561 bytes assets/png/light_cat_1.png | Bin 0 -> 547 bytes assets/png/light_cat_2.png | Bin 0 -> 552 bytes assets/png/light_cat_3.png | Bin 0 -> 554 bytes assets/png/light_cat_4.png | Bin 0 -> 536 bytes assets/run-cat.gif | Bin 0 -> 179271 bytes readme.md | 11 + src/main.rs | 160 ++ 29 files changed, 3387 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 assets/ico/cat/dark_cat_0.ico create mode 100644 assets/ico/cat/dark_cat_1.ico create mode 100644 assets/ico/cat/dark_cat_2.ico create mode 100644 assets/ico/cat/dark_cat_3.ico create mode 100644 assets/ico/cat/dark_cat_4.ico create mode 100644 assets/ico/cat/light_cat_0.ico create mode 100644 assets/ico/cat/light_cat_1.ico create mode 100644 assets/ico/cat/light_cat_2.ico create mode 100644 assets/ico/cat/light_cat_3.ico create mode 100644 assets/ico/cat/light_cat_4.ico create mode 100644 assets/png/app256.png create mode 100644 assets/png/app32.png create mode 100644 assets/png/dark_cat_0.png create mode 100644 assets/png/dark_cat_1.png create mode 100644 assets/png/dark_cat_2.png create mode 100644 assets/png/dark_cat_3.png create mode 100644 assets/png/dark_cat_4.png create mode 100644 assets/png/light_cat_0.png create mode 100644 assets/png/light_cat_1.png create mode 100644 assets/png/light_cat_2.png create mode 100644 assets/png/light_cat_3.png create mode 100644 assets/png/light_cat_4.png create mode 100644 assets/run-cat.gif create mode 100644 readme.md create mode 100644 src/main.rs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c816275 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,271 @@ +# Copyright 2022-2024, axodotdev +# SPDX-License-Identifier: MIT or Apache-2.0 +# +# CI that: +# +# * checks for a Git Tag that looks like a release +# * builds artifacts with cargo-dist (archives, installers, hashes) +# * uploads those artifacts to temporary workflow zip +# * on success, uploads the artifacts to a GitHub Release +# +# Note that the GitHub Release will be created with a generated +# title/body based on your changelogs. + +name: Release + +permissions: + contents: write + +# This task will run whenever you push a git tag that looks like a version +# like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc. +# Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where +# PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION +# must be a Cargo-style SemVer Version (must have at least major.minor.patch). +# +# If PACKAGE_NAME is specified, then the announcement will be for that +# package (erroring out if it doesn't have the given version or isn't cargo-dist-able). +# +# If PACKAGE_NAME isn't specified, then the announcement will be for all +# (cargo-dist-able) packages in the workspace with that version (this mode is +# intended for workspaces with only one dist-able package, or with all dist-able +# packages versioned/released in lockstep). +# +# If you push multiple tags at once, separate instances of this workflow will +# spin up, creating an independent announcement for each one. However, GitHub +# will hard limit this to 3 tags per commit, as it will assume more tags is a +# mistake. +# +# If there's a prerelease-style suffix to the version, then the release(s) +# will be marked as a prerelease. +on: + pull_request: + push: + tags: + - '**[0-9]+.[0-9]+.[0-9]+*' + +jobs: + # Run 'cargo dist plan' (or host) to determine what tasks we need to do + plan: + runs-on: "ubuntu-20.04" + outputs: + val: ${{ steps.plan.outputs.manifest }} + tag: ${{ !github.event.pull_request && github.ref_name || '' }} + tag-flag: ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }} + publishing: ${{ !github.event.pull_request }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install cargo-dist + # we specify bash to get pipefail; it guards against the `curl` command + # failing. otherwise `sh` won't catch that `curl` returned non-0 + shell: bash + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.15.1/cargo-dist-installer.sh | sh" + # sure would be cool if github gave us proper conditionals... + # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible + # functionality based on whether this is a pull_request, and whether it's from a fork. + # (PRs run on the *source* but secrets are usually on the *target* -- that's *good* + # but also really annoying to build CI around when it needs secrets to work right.) + - id: plan + run: | + cargo dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json + echo "cargo dist ran successfully" + cat plan-dist-manifest.json + echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT" + - name: "Upload dist-manifest.json" + uses: actions/upload-artifact@v4 + with: + name: artifacts-plan-dist-manifest + path: plan-dist-manifest.json + + # Build and packages all the platform-specific things + build-local-artifacts: + name: build-local-artifacts (${{ join(matrix.targets, ', ') }}) + # Let the initial task tell us to not run (currently very blunt) + needs: + - plan + if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }} + strategy: + fail-fast: false + # Target platforms/runners are computed by cargo-dist in create-release. + # Each member of the matrix has the following arguments: + # + # - runner: the github runner + # - dist-args: cli flags to pass to cargo dist + # - install-dist: expression to run to install cargo-dist on the runner + # + # Typically there will be: + # - 1 "global" task that builds universal installers + # - N "local" tasks that build each platform's binaries and platform-specific installers + matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }} + runs-on: ${{ matrix.runner }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json + steps: + - name: enable windows longpaths + run: | + git config --global core.longpaths true + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: swatinem/rust-cache@v2 + with: + key: ${{ join(matrix.targets, '-') }} + - name: Install cargo-dist + run: ${{ matrix.install_dist }} + # Get the dist-manifest + - name: Fetch local artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - name: Install dependencies + run: | + ${{ matrix.packages_install }} + - name: Build artifacts + run: | + # Actually do builds and make zips and whatnot + cargo dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json + echo "cargo dist ran successfully" + - id: cargo-dist + name: Post-build + # We force bash here just because github makes it really hard to get values up + # to "real" actions without writing to env-vars, and writing to env-vars has + # inconsistent syntax between shell and powershell. + shell: bash + run: | + # Parse out what we just built and upload it to scratch storage + echo "paths<> "$GITHUB_OUTPUT" + jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + + cp dist-manifest.json "$BUILD_MANIFEST_NAME" + - name: "Upload artifacts" + uses: actions/upload-artifact@v4 + with: + name: artifacts-build-local-${{ join(matrix.targets, '_') }} + path: | + ${{ steps.cargo-dist.outputs.paths }} + ${{ env.BUILD_MANIFEST_NAME }} + + # Build and package all the platform-agnostic(ish) things + build-global-artifacts: + needs: + - plan + - build-local-artifacts + runs-on: "ubuntu-20.04" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install cargo-dist + shell: bash + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.15.1/cargo-dist-installer.sh | sh" + # Get all the local artifacts for the global tasks to use (for e.g. checksums) + - name: Fetch local artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - id: cargo-dist + shell: bash + run: | + cargo dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json + echo "cargo dist ran successfully" + + # Parse out what we just built and upload it to scratch storage + echo "paths<> "$GITHUB_OUTPUT" + jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + + cp dist-manifest.json "$BUILD_MANIFEST_NAME" + - name: "Upload artifacts" + uses: actions/upload-artifact@v4 + with: + name: artifacts-build-global + path: | + ${{ steps.cargo-dist.outputs.paths }} + ${{ env.BUILD_MANIFEST_NAME }} + # Determines if we should publish/announce + host: + needs: + - plan + - build-local-artifacts + - build-global-artifacts + # Only run if we're "publishing", and only if local and global didn't fail (skipped is fine) + if: ${{ always() && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + runs-on: "ubuntu-20.04" + outputs: + val: ${{ steps.host.outputs.manifest }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install cargo-dist + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.15.1/cargo-dist-installer.sh | sh" + # Fetch artifacts from scratch-storage + - name: Fetch artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + # This is a harmless no-op for GitHub Releases, hosting for that happens in "announce" + - id: host + shell: bash + run: | + cargo dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json + echo "artifacts uploaded and released successfully" + cat dist-manifest.json + echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT" + - name: "Upload dist-manifest.json" + uses: actions/upload-artifact@v4 + with: + # Overwrite the previous copy + name: artifacts-dist-manifest + path: dist-manifest.json + + # Create a GitHub Release while uploading all files to it + announce: + needs: + - plan + - host + # use "always() && ..." to allow us to wait for all publish jobs while + # still allowing individual publish jobs to skip themselves (for prereleases). + # "host" however must run to completion, no skipping allowed! + if: ${{ always() && needs.host.result == 'success' }} + runs-on: "ubuntu-20.04" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: "Download GitHub Artifacts" + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: artifacts + merge-multiple: true + - name: Cleanup + run: | + # Remove the granular manifests + rm -f artifacts/*-dist-manifest.json + - name: Create GitHub Release + uses: ncipollo/release-action@v1 + with: + tag: ${{ needs.plan.outputs.tag }} + name: ${{ fromJson(needs.host.outputs.val).announcement_title }} + body: ${{ fromJson(needs.host.outputs.val).announcement_github_body }} + prerelease: ${{ fromJson(needs.host.outputs.val).announcement_is_prerelease }} + artifacts: "artifacts/*" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..6d36e20 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2913 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e53b0a3d5760cd2ba9b787ae0c6440ad18ee294ff71b05e3381c900a7d16cfd" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.5.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "atk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] + +[[package]] +name = "bitstream-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys", + "objc2", +] + +[[package]] +name = "built" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6a6c0b39c38fd754ac338b00a88066436389c0f029da5d37d1e01091d9b7c17" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.5.0", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "calloop" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +dependencies = [ + "bitflags 2.5.0", + "log", + "polling", + "rustix", + "slab", + "thiserror", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop", + "rustix", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "cc" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "cursor-icon" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.3", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" + +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.5.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2", + "dispatch", + "objc2", +] + +[[package]] +name = "image" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] + +[[package]] +name = "image-webp" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d" +dependencies = [ + "byteorder-lite", + "thiserror", +] + +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.5.0", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.5.0", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "libxdo" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" +dependencies = [ + "libxdo-sys", +] + +[[package]] +name = "libxdo-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" +dependencies = [ + "libc", + "x11", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "muda" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b959f97c97044e4c96e32e1db292a7d594449546a3c6b77ae613dc3a5b5145" +dependencies = [ + "cocoa", + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "libxdo", + "objc", + "once_cell", + "png", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.5.0", + "jni-sys", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[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-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 = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox 0.0.2", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b41438d2fc63c46c74a2203bf5ccd82c41ba04347b2fcf5754f230b167067d5" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6a007746f34ed64099e88783b0ae369eaa3da6392868ba262e2af9b8fbaea1" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.66", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[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 = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox 0.1.3", + "thiserror", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "run-cat" +version = "0.1.0" +dependencies = [ + "image", + "sysinfo", + "tray-icon", + "winit", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sctk-adwaita" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.203" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smithay-client-toolkit" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.5.0", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.30.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732ffa00f53e6b2af46208fba5718d9662a421049204e156328b66791ffa15ae" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "windows", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" + +[[package]] +name = "tray-icon" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad8319cca93189ea9ab1b290de0595960529750b6b8b501a399ed1ec3775d60" +dependencies = [ + "cocoa", + "core-graphics", + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.66", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wayland-backend" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34e9e6b6d4a2bb4e7e69433e0b35c7923b95d4dc8503a84d25ec917a4bbfdf07" +dependencies = [ + "cc", + "downcast-rs", + "rustix", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e63801c85358a431f986cffa74ba9599ff571fc5774ac113ed3b490c19a1133" +dependencies = [ + "bitflags 2.5.0", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.5.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a206e8b2b53b1d3fcb9428fec72bc278ce539e2fa81fe2bfc1ab27703d5187b9" +dependencies = [ + "rustix", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.5.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67da50b9f80159dec0ea4c11c13e24ef9e7574bd6ce24b01860a175010cea565" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "105b1842da6554f91526c14a2a2172897b7f745a805d62af4ce698706be79c12" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winit" +version = "0.29.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.5.0", + "bytemuck", + "calloop", + "cfg_aliases", + "core-foundation", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", + "libc", + "log", + "memmap2", + "ndk", + "ndk-sys", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle", + "redox_syscall 0.3.5", + "rustix", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.48.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading 0.8.3", + "once_cell", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" + +[[package]] +name = "xcursor" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.5.0", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "zune-core" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zune-jpeg" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8168e06 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "run-cat" +version = "0.1.0" +edition = "2021" +repository = "https://github.com/ahaoboy/run-cat" +homepage = "https://github.com/ahaoboy/run-cat" +authors = ["ahaoboy"] + +[dependencies] +tray-icon = "0.14.3" +image = "0.25.1" +sysinfo = "0.30.12" +winit="0.29" + +# The profile that 'cargo dist' will build with +[profile.dist] +inherits = "release" +lto = "thin" + +# Config for 'cargo dist' +[workspace.metadata.dist] +# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax) +cargo-dist-version = "0.15.1" +# CI backends to support +ci = "github" +# The installers to generate for each app +installers = [] +# Target platforms to build apps for (Rust target-triple syntax) +targets = ["aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-pc-windows-msvc"] +# Publish jobs to run in CI +pr-run-mode = "plan" diff --git a/assets/ico/cat/dark_cat_0.ico b/assets/ico/cat/dark_cat_0.ico new file mode 100644 index 0000000000000000000000000000000000000000..30056a484a32d948796cb890ded268dcfef6895c GIT binary patch literal 5430 zcmeH~Pe@cj9LL8@q=RG!PZI1!EjmPp4k1zz9XiPp9wNk(RES7)h>(bohzMFbL`aBq zQV5Zd4jn?45Q&J84iOzBBEo}oh=>lceZFts$TYS4-W$!9Wq+u|(#D*3(2et?B7{;s}-HoSP`T(D$AV;iUoc9X0yYK>5;1VoB zC7E#JU7dhap!>D}wjSyq@)}Ez8|&+g>zJy{u>4M{s>N!ZtStH|2BV4r4w& z#?arv;8xFpoT@AN2wx+u{L^o1(H(Z|eb&AeEqNa~xn1?D&5v<6=vyi&T6?t?KgA@T z#qfCwl|<)&Yp@8e98RcRbevbwZ^3>)23sfmfUGj==W_cbTZQj&OS2(!XosvXy6T6> z#@g6ieoNBm-Jxv;onzelEM3p^4G59<1a*vGmGBeRyTi$PL3g%hc}>e?<6dPFJCbD=k?nmHPggU%ikZO|0MCG^jzJC zl{C3Re8{~A+F|9LJyip+iK5hggK5$O`_AtE|- z@K8&qh*(0zgG59`NOXt}9YjJph=_t7=X7h4IiN# zFh^TYH*Gz&IO_WQpdU2OgK!sKz-#yh(h^wvzMG?wO`PtUB& z?duB=M}G*u;MQ)|CO!+Jps{^{_n_-jZXYc)Thqs%!lyy^$(6>K0?pqU(DSbN`=pjt@1y!XP{cN%Lb4`r_pE vjit^Nkfz`vd;+~sIo}*{{is!dS>>TEfwb*96}MgzpZsU_pUnY=yLb8vb@dfq literal 0 HcmV?d00001 diff --git a/assets/ico/cat/dark_cat_2.ico b/assets/ico/cat/dark_cat_2.ico new file mode 100644 index 0000000000000000000000000000000000000000..e55a61e5a9d1c165c9adf3cd2b17aadd589b6fbb GIT binary patch literal 5430 zcmeI0KS)(k9LJAlgM+9;gGjvB&>trU5r+m_MI;;|92!KTL?T4QQ6eHlR6-o0!AWuv z2Z@Fdk#LB3L_{=%h=hZLh=_!UJU?H(KR90ReXpKRlDa?m@H_W+et+&c_uTW&ea@A* zQdd>w&}sLu%(-jMxpeyIdK&vEwj0=J;&Eh0#YqVr2}PKLY&P4VxkSH(_fQ?4TWmG( z8oooy@8^0R_Fxqx>o5!>@Dg6Z7MMH>#Vhw$>&&B7qs5Q6HumeVoFjgdz7H^HF}}v$ z0zV-G8qXSN409ln9*1GYp&!8#$o>(2z`dZami9%@=Yz((>(LR%gTcG_Yha`JU5%!qFX-@JaYbjX+|Ku9rH_2qSkawNna(E8g zL887~dGM)(o908iH;9wcZ}L^^%ct?}06V+T%+CBqjLtQZFYp9<;1`(a{Gjteg>p&5 zWzbnix*F<0XR5I1jL`{AarZ%=Ki+V>f4#v)2Bi04H_%(?d~)oZ7QPpPALmO@K)>#9 z9=gKyqOS3~1OB{oc`8{Ux<0B_oDKgJ48Uh7maLGdHm+uzotUX&-2izOHh2nc zptE=d=zg1F1Wfdv9qvo$N@xeY%O}l8AbD-y>`P6z->>t&&+{EcSX&E%$ei#GoO;hG`)|y(EUbXX9A9nB7Gq4c+L_-ZeudapVhmAq;g`nctaz?pfx{+X)}w zJ@o(XJ*3A5_<6p@`dRHqylf$+&6}f-eqUv~vTD%i_d@m+Hp52Po>dpiQ}23CW$4bM zb*A-OZi0Urt4+&Mx8Cb964CXebNlX`xAnS?m`#zaz<5IRo%tfj%bG>k zw(E~|%76LWA~NdtWUlX|tN{xeSkvdIL-79;zejRR%|noB|E59b@d;Ry)M`%r6fD6> zXuv$Yfo0eos!5BXzX7tdX_`mPf*LdUbi~d&>8s|oZV+|xZ8eZ-T(K_Sl+Ypp8dgRfTjMP{Q$B} BtndH; literal 0 HcmV?d00001 diff --git a/assets/ico/cat/dark_cat_4.ico b/assets/ico/cat/dark_cat_4.ico new file mode 100644 index 0000000000000000000000000000000000000000..c1f7fef2dbe36e6bcc448f8deadf8f2a2486105f GIT binary patch literal 5430 zcmeH~ze^)Q7=}l&xlRcpatIOe2go57Rw4)%_XmhrScsisB^Fi|7Kg~;K@hPJk>fbH zt1LuBQUogt5fKp)krW~p79ti_5}$X?!e-fxyU|h6yzpdZzM1d)c4jt{i7^$X(o|O) z%A^^sGN#2ClT1Fg|6%`ytqmJhMm*Xn!c;-WhbNcIO~Xo@xibD6?87`rb5Z>nJLGs2 zeteJNzgy_)w94J_7T*09CIovvS zJylD!{jNzV8~KS_3u(B4Vp_J8Uw5A<+OU*g_lPLUzI1+)CO~(UsM5VF z@^^r-bcisUd)|=gUDv2@di*ruf zpGWVz)>3mRRl1|<4!h>dKY;BReuA^^lwY6+{=jpjd$aDA`mX-S&o}MO|5P16?ag97 z21P9W&*$93OLyx97q0jG+ zO>@Ez1Ow0ryI~V}O`fff`CjZVn1`u|jbR^zpVsRnb_`U*ny2yq1YfW> zU^>PvSgo_h5dJ8P!)=hxASnMwSZm34f%1K>^2Ii|1+U;8q&e~zBBnj{fO33xsh0fB z&<#)F9!!EXJ_O&e`@ywsQys@-wP)?+C5(XjY=?ABv9I2w=kM$S{xs-&IR{$5RJ~#? zjkkmL-3JFjF@Fbn>uVA7c~?`LZ7lzz=S%?(gPunvKGp1bO{?_X|DVohrGH~SyVa_z z`mWuKuV;>)r)k_h*222>R%%Xwp4$haep*lKDtUgUx#jrJqxR#dt@nlADS5f>Id86# zm~{?C?eEw&=#TL%wgIHs0T-b$#?GyzUh!IM45O)Y*ZWHEPx(UcJ?GqvnBIx*!EiA z<5*wlY%0>T_EF;c-=n?v!!xk<2)=&fIs;jMubwYuUH?9LuI01zcqzMw9M!h|EdER~ zwzlU>*`MTHhgML%;vO_Mx~J*9{?F;RH4dNPJ*2hLK2qOn(%4sWb;fx;6rV%dgXgx8 z+W@0E_K2w=mydM^4Hd^%za($bLMKS-sdkeq3HSm literal 0 HcmV?d00001 diff --git a/assets/ico/cat/light_cat_1.ico b/assets/ico/cat/light_cat_1.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c04edb54a4ba8d3458473cd6520c508ad634316 GIT binary patch literal 5430 zcmeH}O-L0{6vxL(qD3S`NQm$xUM4LhqLrIA5z-<;T)2o9E(%&mv~VFI5)l#8%aP_+UXA@4>F-T+Wx5HuR z18GQe9A-haD_(nH`{b?HQhO9MZUOGV9*AS&zG=(f3XkCh3_={6r{Bal(N=JLo*Y>* znv+o6rXGD~N^l(XJ^I0uRnyk{V&`dV-Ts|*^S{ggWnVRCyBBq5=(}uv`$qk)wRlEu z-7&hql=D~Zhs{g(+8CS(`OagNUkn7F)lthDWYul?Pq=)KXm`Vk^XZ;lYz&d6=( zg8g9Hs^K)ufHX8#=SX{OF}7~r+PeYb?7x|>!Pde1ti8;bD{vB?gZZs)^|cn3Bg-}t zI~8=|yz0kTK5u>Q>n?W-?YnRlbneQq8>-c$J(s4}@;R(+^{B75`QOn#1z!6Y{kJYg zu^-?KXwFZA)&6}3)AG9J%d+~0`Lp5c(0S+souehFrltHZtGu^b{Ji7wwq~+};B&|A zeY|gnqtFph`v54m3C7?P#Ch`e`x)!=+S&KMtadXRozMeaa27^k1yqNvi+(?opt)5z<$T4XgJo6|Mg6C6EW!hrf@YA8#pTf~60?&W z??KS>)@smL-!7uHnK71I*4mrV+Zy}x K&M#Z?=brEW<_3=d literal 0 HcmV?d00001 diff --git a/assets/ico/cat/light_cat_2.ico b/assets/ico/cat/light_cat_2.ico new file mode 100644 index 0000000000000000000000000000000000000000..6ef348cbc566a8d633332c0a1723f4f0ccd4d929 GIT binary patch literal 5430 zcmeH~Uu4x`7{`BWCCO~bE|NGIsf!$4OwvUiU1Vmmi%GgTCQ%pZB9ksA=c0?Gl5~+| zCK1VGGLu~#yGoK>BwZvk)5YYNT_ltGeC>Voc>T`r)bEs-bNG0k_j%su&-?z~-=C8t zZOMkDt1Cekl5-oAWKWVLg~HnS3HDpq_F_Y2#+n^b@7IQ7J<^`Bu1yVmTY_IXJaJq+ zwtcJ;cPXRB1$;Bm8Rl58%rWl>Sp4Ro z_aN`WGJJ<`unLy*YtR>vr$O;)$Zs){@1PcJ&K$+H2Xu|4TQ2R>PS^(9gI#``XVT{X3+el5 zHb1TB|LHkXfTN)2QO2*?K3nm>&R}aVT6?kH&p&H9O@@@$0)tblUp`{5A8H8i$zhdLRIS^-F_c5^bJ^2!c$>bF^o^ky<9tS()}#1qZvGPbd+_y@OV{HnoD5RmEjQsF zDE<*>t(vQ_R@-dWgT|dO3^h=F%NO?|yRLOTzn`yjW3{rR z_Q3p?(XGB}#Q6Na2lf3FbpK9+&gl$TUN5z7kNNtr$M=%2Ctd!B@ESC>bFb%@^2|a7 zbnoguvD}jOU&Gs^cZ1G=)l#lfuqoeL(Av&|u9IT4XIiJld_f2$8%TNK$_r!hM_1eL_1-JsXZ>pg^83E<6`aS3q5ITTWjFSN&<_L93msr{d=0ZTk~fIgI)-34=(076^M2LM zQ`>Tsi9Zl(>Kqq?ZhkMVmPzl+qx-(So+nq{7=K>=*1Gcc(u(`Dv%jAAi`(%3{eA+= Cum=|a literal 0 HcmV?d00001 diff --git a/assets/ico/cat/light_cat_3.ico b/assets/ico/cat/light_cat_3.ico new file mode 100644 index 0000000000000000000000000000000000000000..e687899526cde1b098f26808d99773d17ad1037a GIT binary patch literal 5430 zcmeH}JxG;N7{^~LiHJyX2q$kyUxYM-gEW{lgoH#$IE6F>MMQ)+NMl4qlr%&{IEhp= zL_;)$I7oyvG=xYp=@!@pei#PMO+zUURbDr~jo##F8dv2CBWSg?4 zrVLri&Tq-Gy;+u(N-Oin=azU1?txtv4x!#0R9 z?Ef&gQ;d`!=#+mM&O!8d{hhf@^qoPs2-1zhbLa#6%h&m(n*`On1UEst9(WJ4pc+ns z{iD2!{u#7DYhu&IT+i?f_&Lh=I=p~s7=zdw@5?f-IqzY7R8KotXM4{jt&{XPu1A|x zUuo`mMKLS+u4j#H{QXbgnGzfYeUB>q)>C8MclAuxdr{mAzeBa|QLW$ExIgFK!Mk?@ z(rvaD-0j*V=SN6J}bVtVg$`@;J-09p-_qyw_R1LOUi*)?cAy&Ev z*|ftkxCXl8ozGHdU=VaB*OE8dXz%a9vE~@-uJ49Xm;wKfvP~+_ViRLlGj7HAD=22U zy~SKb>x=l#!(C{Gwd7Y{Wv9Nzxal~~V=YDFS5@Zk#=hKHO5>{z6W8<(`uW^rJO$|) zD(Z)Oa0?&BEUF{zL9Am0zYbW2-JtKG&T~=DsCRz(c@HsH%%lIY7hoDf_bH7L z=dmvJtX$8dy=wGXv0OlR3A7K{#+cE!(m3@==k`57{6Wz9RL&mod6G?$pZzyV)+(>^ b=oy(><=v>h)#Lv8t*G~8wI>|)|M&Y1D?0L| literal 0 HcmV?d00001 diff --git a/assets/ico/cat/light_cat_4.ico b/assets/ico/cat/light_cat_4.ico new file mode 100644 index 0000000000000000000000000000000000000000..de354587d746805d86fdc4f8de7138dbdd390f21 GIT binary patch literal 5430 zcmeH}KSdBh2nh)hsm~Yhfy3pe@Adu(@g96Q=iYPf`JQ`!|6T}9VOMBv z4cJ_`z9)pkA%t9RbNrO~2h1H|4wsD0dCXS7CIa;0d9loYER4X8r1I__yAhJ2BxjC_OSwA;0&ln2ONmL>?kO%eB*2M zm#|YX2U=%6$fjqiJ>7!-m^Xx71nJMmIltcgw2sZoYTuXP8rV7exc7A(RZG^-SK?bO zvz64U)>^h#{!j0j9GnHckGA<$tKUYQ>fMk3!&&asvs77|4*U~f8u~8l`|=)&y~``@=MWl&sP_=7bI-@|3|956uS&K2`U}(@ z2YvVKTPphr^evaKeyXW&`_Nf$L=EY9-;ZZ&q~Ar|wWyn=ZF8@pzU~uY{rhwDzTzoq zTx0z&(mspvot#d{s^RD4Z`Ye*b{`Mo7t{6EAWy!YhhgZ3RM(GB5x)nIU=l9ELGU?m z8T&b5c^=NtC7MOnw1EBj(XX@jn`gTt!{}M>o&b&9){E5}Rhd}=a zpMiQd4fUe?&c>;ghSyR27uYj8i$4OY>(4;fR?qX%WL`PPVH#Gz>zS6fK5l(KVV&ye zy`XD*67GZ7_rA`=W3evg$6yJ(j`u$kdkL#9M{_seTbx_O+A|>?t8bb%Hk;1xV@)6E z9$f(KYaXsZ8))4*(0NV4GN?z5b?xqga+;$xonkia!}42_I?7XQ9Ohsc^6(L6U;=Dy zxi+g8)AcpAf9-t~`a##_1^Ap=`(xF(|h2`P~hkr0sX?hd7-53PiBcS&8OyS{zi@!daO z9r(oFYtJ=fJw~Xh$YNuVVL%`dY(ACA54N4*frP5NcmOl?Z;MK}V;hkAt8*Lo+m+bGqz9)*>X~Qf@$tN(hk1h{24{nYCKBNVjiH{kOLDChT}W)S)AGe#fu^$OMMe3QiMFS0 z*{FcPUUk4xhi=XOviFhy)d~~j*_hIrhu|i(-u_zg-E}1DSj&3nxj@T0`;YZeC{5dX z=ly&BJkqi#V!iz`W8I14U$+dMGLzJbG+$pJNdz%}rRpA~f?R}jd?0&FEKQkYFxF+M znP`+%QGJF4DRtScnBu$H@r5)%%As13`Fad!lB7Xz)Cq?mS`cQa+R||+q4-|4ajURh z_p>o1(xAybC&XO3pla;EH0)JPXdz5!+!8N8VjQ1Fc>)E+%${8Mf{ao4IX0;!-LfT7 z+i)(4I9?DY#0a8-$PZon4_xUhE9o=LF?tekDJ7IKa+o*-kxbM(#5;cx4O*Fc9{s5} z^8?51^F9Z(ZUG3BwE7aR8E()+tM`$p?QL{gh|CZqQ^nR6(gTe`l69Klb8?zA6)jHczs!7yO__Wp#l@cyY7#*Y-y8Em=U~Vjw2n)i|k2D-h zyj4FO%Wr4TT=+!;QUUR+w;j!9TjJ}Ah~)@Ec?iG>l3j0DShTaMH9$aPV4G+^*}t=? zUk-W&F@^ZBr{YVf{cq{9%}|0q9KTzhw+pFtFdU8I9p)ejolv1cL!d!;p=F;4xt1gB zdn+Iyki3Z2{fr(36wUy`b>MOJeMFbtB#OvzeJ|q5bEBZ#SEoas|B8cYII~C~J&>j3 z>}-?doE(?E>QCGF;yvY0tU;?i2VZRILTDn|1|#N4dOh$dxwP;%9X_M!;J3;A4)vu* z^kHCP8o)P2P-K9VOr~L*p$D0E9k@Hv^~N&B`5`lMBI?BIcuwq(O2*9b#nr^fc%xKb z_1$_EHIgliqPRNx`rbC*-`^7q^Hn1b!K=X!ZRPjsEXFPGH7#0jGR~lC!kXj|V#6)# z1Mhx0YbQ0`mAIi!NtPFcv81G=b#ijDX=i6Al{Z z*D#_s@uvI_$vmZ5)oAGoEAsJOW@e^F$M|_z8NT@Ejwf7*Y8Otgy+>@XLVHS-^)y}8 zj7{@7SrrRGL395r5>NgyTp0Vr#6-aG=qNjn!Z0_=*t6O?B$E;<@@S-qeT(fO`@dT| zc&*d>$8r$bc@wKZ?lg!@VNsFu$mnQi@3MJnFT8*-f>fbP=84JJXSsN}7U8t9I&)^% zIHg@rCQ%XhG6TK)jaHtMkf?WN2w&RHvAEz%iDX6^WEeg6-JHUqrO>mY6N2{QDD&)y zug%Jb?SA$ES#>L=$wlDTAE`q~l#-(2;xG$3i3Pm!h)oK5r4M9bC~TFf#|p-s=(i_! zE4m!}Y38x?xs(uF1A~Q7u;eV2_06Q>pBtV;Ah@o}N!XJTj$4~WRTo)AGL0A`yl;Li z$dTnSS-uMTufD!M>E`BUR__(r_o+^-8q?0`XLNeEP5S+!AB=UD=P~FgF^$WNj&GHp z8#901kb@ju9Q&Bu8o3{=ovS#bB%jSX_56|1ZB z68j@bJUcr($qu=0hnhZ?`MokC}~;1l=A_xLjo!n*&k+b-;+eYTIfYVqVA;<+@{ z345UTRe?{BS@w3d3y{BvB=$F1^J7SR*7YycOT>)-GLvldnvXX~?WzANI3Pb{axp~m zEawX9JU?1B^$yUi0FU;bzwP9{F)$Eq{rSi&GlQl2!WiGSXqqAJT=mvjuvHZS>mq{G z4J*VJ69ePY@sgYnD_7#&6c_f}GmIBYiY0eom{(GsX^!)$ZST)?Ba{u@0DqlNigfWO z#O%7m|4!>Y`dB%H%S`n#R#JddG7WzS!?(@wv&^meUwtHQUWDzsf)C00uEsq(yN;+n z(_R;xLEn(T=@x>_;Rrdp$eCT{Q5bOEso`)AwEoS4Ss+w6*lIb#D zm~rdY;o?}Hl-sPa_xkhBYvhG`dxGP;Bo^J{8ABKIo>1(TE4;7op~226wL$1pJ&u^i zLjH1!2&pI^PYp3N4BlD@ z-yGi6YM|J=)B+8bu8oVpEHv9_o9P#n~7IBNl9P8)8(0V2K-zPC4WXh@VTW$ z@V|uy%%`isr?BpB$#>&9-qX|~zT7r{G9%tCx2VtRH#iVI?gT!fUR+$1Kja^ZnJr0# zg^l}!MIU5}7k9YjBEiPM7Pl5+I^e^6<`Pyt^f+&Xy#Gc0PGGVGOK&$@Z45giU{n$} zGNLdEeDF+6PJT0TfaR@Pp_&NAX!jRt8xi>r)G|5@$XO$J8$^R$7B^UFn-0qVzN zR4j5{tSW;B4YtMamaNchSJ3Dxj(1mT@I@NlH&|sjRIX!+v%TA)^TFe-o37ZF4M`Snn{6p(=cW zM9iueMDEfSSN^9rf?&K%lj&0BO>1ID}HK)^_+a2 z)mJR?qqjo$lgBa>KHHr?mV(hUh4hl8-8U_{W9oK>;!u{Cy%M(`HK?gUM@RR$-7Der zyLQ#=XMgz;{cxdyE)@S@TY8Pm5Nae_#A$uFPJ${DA|2sji6hhBuZbacAL9>D&nls&-g}NWh-*UO!I)cA9K=l!;X*HnrrGNWg zamJb}zu)=xv5#=eMUfy*7$TR=Fl^a-)wwIYd(==(ne8O}Tt<>E0NV9S#Uo1{GL;r2 zkoqNx6OR-I>G7UNSSRQs#8ruX_+xnv4Jy+t*?7D=;;X7LZt;-t^J}wlYDxdc)+zeo z)JiEwbomEobY$cimwS0cv(lnDg_(UM!ynTs>?7}mKcpD4fBr2txzxu%xqY7I|A=MM z6zy){J#1UMbllhsX9^Ikum452e);mHoTB37A^D#7-rezf52x)P3eCGBX+J+<3kwT` z1t$5I2BC^Y?VqhR+^Z{-8IgGQ3+bhFA(Vh_?SzVvQ*e+OR#z_ONudfqUT=oS#PBub zfP#=yy;|M2-g^%YFZ{qvf-5R1VddxN-{0Eylb|9BJD@A;uiWXr%t2aX6hPd?5SkSu zNUR8n`z)~K0e+0*$uQuH^gHq@ zlit%qKHjM!77`_FVK{go{~jFdmckXWDx*qEPv0k~nZC{YZwDM@?B?sQ`Qco)f7DRv zo0s3MUKWyRZqN6{&T20RW9s zM`yq|KV-amP~q=Lg6f!qVF+H6+u)r%E~=jpq%3(wIU%_5jzJZzgi2bySLABRGF_;O zcw=J&f%U%$%mSmgo12>_*PAhPJV{3vdd=<(qStGPTYvu|K&nmJ6|~uTd1q#2i>}$J zxdf0Tj>|ABYhR!Q6$aMza+5%ng@S1c<#>a5A@R!g%>t5y&@`c%dBGg!ue&o<)p{~6OTFHMD<9LF_YKEDu2aP zW>#7IMxZ>7AWDDHysV;>fZZ12tVA7QgHZE6S>UeK{d00kWjJWY@N;0BSx3gn$q9Pm z*i;R)h8m%UU;-Tb;J1;)H}ZtwY!CRHtLf^7Ei5bqiIyuH6x-7M2z#t0BlN61f_kK3 zrC?u)FS1)3{tz6;N0dVmzp_f_ObjLC3RbS)S7iTPs$RhHZs}+4vaN?l{phrgGZT$~ z04WepGN31MJ@7crthHaQV21DDVq!{pcyJR%fBlM~rK98Uu5SMjiMi&a`<0?_&Br%K z614PkSTyKfSV8-*EM`7<(%(reHae$S-bKH7^9CQhLHX?u8njeVf5F@Hy&k2z-SGmS zoh)xPZS8IEqafYWF)Ue~s1zgL*eODL$Jk_266DA~e}v=aKl_AVRqG_nxW{`zD?JY! zENZ)9B{Fw^gpQh1K8AebGGwf zrw|CvmxKoXGABWB_uu^D>RkZ{>HJCocOkMf>L+X3d>+w8C6wItC!AQ_=Ulyk+fsWA z4J?eR*-qiri--OD(-oX9E5i3@IZuTvm@yF%C#`&Crtl*>oW@nA>mbl^f2s%?C$4l$ zK65@mcsUiDIv&Rlqh%6@|4AkD+QZ(PvBa!@D>AKoWR9O({Xr6RuEDK$m6SPAUiU8% z*LpDV<qNwf-#wXAp4*qU&V8G`_N}2T_I0qPKfMmgh@!m?7idL9C_y`+ib4JU z{d+2>B}&7$*8|@ug=!t9%VE=|UaO#dlu$#aW@md2y)+GPKS&2qsV}9{rZ!ReS3)8^ zXusyiK*tV8xaoeG(nuWJSa44E=_;RtHT#T;`}gu%QzbyaxoHu*X;JyD?b1)T-Nh!L zeYLa*-@JK~dZ($b{z+BrVaoPGmutfFzqvSh1ZEZ%DQoMZeGzrs%7 zzNmEP)d<#IwvWStg~v3+r7%x^P z-=NK^y#AZvQv2b|M!BEq>kHq@|9)@nf+oPTabi}_3t>CHo<4J${oZKZ%lzw(s!0xo zriv0?$_csIN|}1DEk#o;>#1j5shQmH=4(Qei^8u}^#~}p zA`=Y{JKr`qG zUNiQYjU^^kkJsm+>?s%8jzp7b=xEn`GIb>HV{KP@Tx*aHgdG@)nL$3TOgA{rZcM6* zO%v5kPE5qc#+r@KIrOZ%(r|L(fd;Y*PG~4DHBQXHX96ab+{((RTQn|o1NG1DHWl8k zG8|e+BG26$M899-#_k?0laD;`aiNRHI-k_JwC-x?et;Md2cpBvjoTi-EX*$S6u^S0M0`1B3EtxARvW25VCOz>(ATvnKYc+XiN%3& zT6tS(t$z{F{$@lHVGN(BDmXcZXYUM-L#}J$#k|5)xXG;g!J7jy6%$F%C@Bx?_W3-g zW@hpW3wvudi52}Bzf*o14&M9u4)YMNvOePrl9^7XD7Ku6sBeBCC{ae0%wLsvPXJu5 zZx3pC?r3PaxCq*PFMixVe*QE#s6a?WguGOsJ>YUSWv>2GUg&wfib7?Cb=nK$x8qHx zeDdhx&Tp|A8FU=2iNSF|!M5NHPD)AH+>8;!dG_#DonCZZy+DSRfq{Yf%9#f|?Ee0K zs-&;J|JwF>r5=BMA>xean=8&|Krdz;ZEW1O{r`(S5 zJ8u4xi}9IuKEj@gfUu#wis*`lZ&NCt3swI&O2r1xUw3U)M$CHHUNY9 zS3&eCM2G4iq%Po~{|Fm0O@-?c7t)ElR?&!b+=?lPTIWpGxXY!f}86G6otq6UsOK^HYMOh&}ojN_!iiQeS=9X z4|Zkpya3MXY(_8!AjqS!i3iEdRWT?;{%@qO(C0OQjw`+#SeKo z2)$*rwqVkIUw(A=3(`j<2^avv)c5y+cZW^Aoe`cG6EiMU^B|C{>|j1-n(V;tAtq zAS=Si<>BO^E`??d#T4U^R&^x_J=TVFBEX83GhF|h<4ns7Z4;ztWZamy&9U~Xaelo! zU&loJ+9({hfmK1TXCN15Z}8#*T0(EIja;ry9MVS)Ani5^)#RRCf$ z_-vM`^U3pOd>SZ~R4!Ybvl&x;eNy;iT3K7?0aCp?Q53l?8^Xs|@4QGnD)uC7;t5<6$KF^4VzFZzITKiD>hZH3}tN#Is)J4QVHaGVTq=B`{rvI3{ND6~HzPf_4O~7HQl#w#_Js?vQ zVgVE%K70T~>MfwjacOCAONn!bbFB|hkq|)c%>e;|rnxveI;w*M0bauV;r7DkxC`}U zw;(3p)A54fu)C*+6DTJNAulZ1ZxkoSe2xvgEnMP;GjhM!m0P=#AX=GrJ}z4FvkHv) zjkiqn^dy3t?1}vTx7^9>rr+2M8`u7uuj@$g>F(~11@0fn3 z{(|Xm4@-;VCay{{tCbp0ABtr2Vq}Z_m4c{^Yb7CINLU@eFBeXJ-@q0W%w0A857Q z@7aK1NecRNSDsWDLcpfKDOpAbJ1Wa&Z6-98vb!R)(54mT;6v!|&4+@5f|HEZ`{Lio z+kW>a1A0GQX#scf@azSCABCU?8mJ;fRGdQI-tjf?{yu3m)E)f5 zEPdF?BH^}s1}7jTlMz6p!v8AZw=xSh3Y;5gIb zd4Qr$2+BHYY01c_%?A(e8TGvec_J~pNfcO3yqulHmzu{DitKsLi;V%Zn;RP(R==JB zM{xtVvHWfuNTJx|#A+(~OhAnR@cOcNSnN)ubIGIk?CoTNA>PrzfE^wZQP4C|eCRj( zP^m1DfC(OTLOjrP=j&_>Kx@;%&e(%r2mbm-EgliqcZKo^@EhJVau38%$AE?J26Pa9 zH*g++!}9YFuhs_eU3@m9`GCwLGJE!KEDzDdcaH%CGI$4q6gVFHQ|Mxk*L1H<+QR4N z^!T$>MlJ=t{tKs*{dO%+?w;CEO2X$<_m=iYi^yHs&wRTMx>$qo%6X%yN@f;3Kip1W z*0!)4TLuqob^+@9@B{m|8|apsfPcdsZGRQ{V47Ue9DN>dcHEvGt`H%j59gZq0QE!f z&K|B-3x5725nrnV;KvTuw^+XuR3Qn683ecp@SX-v>BuQyh(C`y?f`MC8d{2$j`US6 z$&Y-c)%cq{1xDWex;vLCcYemZO5z1}kp9Dr!)GmCR#q%<9Ug7!Mlv`Wfh&i178Mqn z{T)s#ANVrR+iNycslPi_M)2CSBWimnh1?g%+S+>VyJgtEw34!Nk)SjK4-Zj3^9InC z(7Y*nuqwc{jpCfiIb3O5N4PzYZeh%@j^yZtB-(DKHNUk;oYaSwJ#>9WwcPp@M|+6L z0$M~EIIskP2g|K|zE}UM^gF>Sh>iyW1c9G^Z&Q_Q;fMq#)$$G&hf8z~0d>N4uU5A; z7o_#V;%{K6~K1 z<$%^9AwED=xM-k`Zfg?;ZuCK;2&mcBYN-8{?8tm1lDs5Ge0Ye?e|-5ej?j<&HeCER7w&ge^KGpzMFu`s;@&Om)V;r8~n)}c_AN?}O}qFJDBlr+ZaPprBb z%MrISdwX=(v=B7tqi?5nz`e~FPtT4x5FsQ~AGYEc_s&egBfngr0$_hITQh)&E1YX! zGnC9W*Z#4|#R*>c4iby!{>uiH%)V}m~ei;lx;+(L+q zj2v)e=I<}E^o~!PJWI&CKM0BlFZbm&8m@m~+btnx^C;Y;;^Ne3v~4y@8u6UtSjWZY z@wfD|4}h6@Ex8R)7N4`s#kStWt7&R}hFcbUdwbHGHYzGOD<5_!JBb>B9P{nd4o+l` zvkGE){knhAr863M7Fggsl>*k_=JtIwP4+PpDCe@nH-Ibyj&_v=D|9lgP_5@!l+v!D zI0~+;o3-drsqsd%nc?ekMe|`>>wLVZNyGQ&<;fKC#$j(eMxgRPSC1m$L~wI+E3K^T z1y;s!P2dA&iAvTf`SX~89xILnDYoUbg)>bQ^tfzKclRIryo~7j`ucM6@)GLmc${p; zrO%?&%mq@lg8F?nZKjyof8n?P{K-F@!G}vqN-9B$$|9cOyt~mC>2o&1_uXm!4Lsuj zlwY%rGPm47+t`4R!-NAFRFM@C8k@}5MXXBnz)*(6mHYcJS5?Cy~K zi^2JfRKQGqhz($D863f)RzHTjffLD5Gvhld0t^=r18wZ9`uYmqULFoDQ*YBNtElwD zJ|U*<3Q*v5O35_bzpb2jk{80@KKs-p*5PI4%wPX%%qzSY(c$B%FrTHzojR$X6<>7-QrYBe8GuDOt>Co(d-}1!@ZHWLo1JT<1tau7?a>aJ#5{8$j^abXg zE<4JI)dQ&%r`$4uiRfBy8}-<*N))8dvS1S6Qn4A?`(*5{-k z=X=+($0)^Z(BSYzzs_c_9M5;-n$mlz%U_|kzJe~0y0p)`mR+U|N4k<`dR&-NkLud2 zu}@Rkd$Vj*=$Y@Z?5#ggsy=%~DPtgN(;Ud6)baoA7Lx83enfXXx@}0`|MTwb3CE)|7#=rj|9B3PyC{l|m-XbeHk0Xbm42Kz)J z>gSW7uw{=7o`K{2UnRIW%n5uH2)Ny2A|xihjrIrrUyJwAH+ZIey7fCb6J1;q=v1KN zf8|;k#oNkhsEAiZlrk09&Erdpj{E}?rnEurGSPtYWxHa{O|&-PbFX0myxfbGsfqo#Tq9OyP2;x9K44#mVfdLsnhNDLF zty2ij+qZ9_FDH_Yct%v>weQY+FCc0aF9SS@Iz-nYV_-V%S4aqww2Vx?c7+ar*fTtD zehSdF`ax+SdeB9vSz9xdS5%}GA^?pEdIdiPj*l=^$d@m)w6st>JUkF>y#-r<2Lf8a zYNcgm>0ZCaIXO9j&oux6^wUVpc`g=inQU!u-*iM$)nHd}hCTim8xvgBFkz>F07Vs> zn4JyJZGo_`_#;&HFn@dN3+!*rNEHoKIy$;_5X4&h1WP&1t#y4uMD;tWXV=3HAxeOd zVRojM4_h*Eq`y?G7;%MwMey3KDmD0*JVI;nM`lRE-o7k{8fj?UpkD3kYThq4@yTLD z2*?^fuLzLyN`3(+Yy%`SE!F$J%z&xT7^e6V~oRI*vhj0-}}h5(?lFYxh<8nS;YqAFuDgYI-m+ag1eBCTFe8WjB( zw`nn&K`|L=_feQ*e-4o(<65Tf8Oz;a5F7HG-CtlJDhK^@nbH`2169U5!IoKwzr~r8 z5hov^Xl`!49uRx{l%Ad*w5q2u@bZ8ZS(i0PUP=64f?3TYZ#o;;`V%nAvVMKCX>>6% zH>xYMeZqmuS@0KP&AeW@W(Q1OGtObbWa@eVC;jfaE(vPCJlR~}cNnou5mGw3;i{cS2qX^H zaJPBbNCaSvwKz{ulD6SLCJ)Zsm`=+rM1l94)a&le+(Y(RP?)3LWUI{TbFM!yt5(zu z=$zdtJS)u(xV6s|^c?h7E{h>(>PDL{Z5WKp^?EF%8Wv?a_BHV5z39<_I&teyO;4}q zJl!*`_+J?(rlg?Wt0c^-9txF-I_E2k9LwPBTNB#QGL3%+o5L6Zj{7=1oJ%nc`0Y1V z_Qo_PF;(a0pKbJsk17u0gavh;U~0Z?H?ACsapUU2T6M zvhQ<3hsh*Jn3zx{zc&7AJ(LWOl+vy38B3GHRfU@ea?Q;8x&&nGcC)dpdSontD8SaK zF^LX*I53^-3>4EeF8Wg`d=`8;Mg92xNiqRHbBbC+DHy&z2H-S1EjD65JzjNwf43|M zUQIpXU}3;N5^5OWkmK)3qcNUhc3$sTv6QrZ^$zTKG%;`o!HB0`ho1nr$)Qm4H&lht zuG2K_dp^f$U7^5)y$)+*#;gy_U4Jl~3dVDP{J%h`DiUi5}q6(dYVXFzQc7eIM1$7N(hQU~7S!9@V@wA8h=k%RuT zaYQmuf;}M_t7}Gckask;*UiHG2y_3-reZThuEoO#K(h|o&|HfrOQZAR-<>{LgwbA0 z{fCj%W0}*ln<>=S7?1vD5zMtNAldc== zC1zUqY%zj3pl74w*H-XBMUgAkhBcK!lZB2TFJi4Z8knL29A4VZjq~*M6fQ?HMg7Tu zvoHX>#@LjUoyolhSosl4)7ezzb)h47mq`7?))&&`0IuD+S3%gXLD6j{sEWezPz^}X zjSUO9OF@!YfReo{WKG)OEXu=}yJT5n{4m1(n6@`>vbpimY_ z@N*}a{$@QNe0f*gFC7&WrqaXssVuMe8_EkW?pSOGP#Tq{ohw(%a&nbO$-h}rkA-)MYgx8kmZQ=zJ!8+WuIVT*k*;{PP zkZ?i3_TB<1<%DAPnKXsnwBI(zKNN(E`C#%Zo;OPR%)X4$;RF&NMpMx>YR3`lp2Vja ztWn?$a2pHmLcyaS;QNV0k@Nl0TBvusbEs%D$rQ`YrbuLJ3bYI@mxdZ5)SBbNr6~|r ztolEYfHa-DNF?~isGV|OmpoU)%JfvzIB{n4#EHP=jxuqsIvMIseeXgH=T*=b8gs3X2K4Ma&{F@HuR{2xvK$e_$SR4ci z*}nTP+a4|#fBpG$X$)$%=!jk_XTd?$0C`?FAnun(6pZz6UI-1Ek!&O!7RERN?tNHI z+DImgm8GPmLylTjdQ)KZr&2TuQ1>y?`%2C~`aC;&l&MZcFc~#q@_YhT%*JToBNvDm za>=VugM3oM-qq*inwVBp!Q5A#h6!|NKb3wVK9j5#WG=!;?)cwb;M~l9ve*Rn|^X=y-1G3xz;WIxbACj-2wWE;&y%yuW@&Of0iircU0P)8a zOCL3OA#^C(xxPkyje3;c*vAxm6q8b&^{iJ$E-o`O>ba>O9_I7cfPSGsTBeOhTQivfn zTINfAJ$KvbAPYQ@028RFL83op(M66#o6F4x6|fOeq_FjV>p9WoM$3fl?%Lg7Hg#S& z6TOn)GQU{%oKNs8pNtniAq&*2#c#wgD;VDZb1J=0k4I1WE~_2TPW!4`hlJJ2q!m>M zwOFpnoK=No)Bm*`2P_KyXD;m*#2_j?Xziyv9U4mY49J;%n7NlP-;Olnh3{K|EI5qE zAO*Grn!en+o>A;2#yE2&{>AjIt@g)8YS39f0eIioPBHC|BIV+KkE(}kZ4$uJ`<|%XBPY(j5bOgZKXLFzxNtP+qc52I{Q69(ixUwCW-*EEF38ce#bUU&FOcZ*Q+% zvi2F8RdC-o$-Gc_ZxjGD*Bn@xqKsxTkeCGwR{u@x#<&+x!N3(ce+G8|YELlZ1Gx_7)>XQY~I?OL$nitc4eF0`<;c8qdl>-VC zn~bESWT{J)JlyUE+uj8{m4|A@<}+mVdXJte&YEilG)M^e4r2m}h|)`5JR_+F0;gzl zK8u^vZE!Oopbnbtf1APw@vtZb3Bhq@f+x|1g@tOX4hem_rv6{xXBM>Y=95 zVFF`p1c*6!y&@2$06vbhMGy#LuF{GME+x&wB2tiOQ28B8EO{+D+fA2im%6n7&I9IX z=go*qt@n}1vXsOJT3ZBVw^KxH-k_G2mRmLNLe2ufOI8D)L`0wN-}exhB5{wpCe#8; z6W(Yq_NRTW*TXn{&v(^ur4l4Fc%3=G&@Qm{N4=Flw56&umvMW!<%GCGK!&=JVxGYX zyiZ=2l_>U(YXtDalAfLoZuwa3a=^HSZ!qwB&A=h^`S1IHD~K;bef83@!0c66YAOlX zz#C;16UN+O;mXVQm$VcRVEQ_tcmh?$7!lCa+Ik*b@Z7kj0XGcrFbLSX zJ?B0Ma#JdP0{@?}f)UTn-%L5uV1cDXjH1cFku9b?r+r#VWNO1-hk*Svu})Oe8~~M4 zYte^MY1~Q-8f)>`)(7=-6Fs1ez!1dRPEKGym^kGG!)LKkx|-tV=6R!dk@XuxO!X$& z5?uI^+%j@lu+*rQEs1Q7NAbz2dSzL!dJ)&ycCX>*?s|knMj% zLgeA$nX9wK?RdB}gmW@(byI8`3a+FjqtF8iz1CyxI_ zf9W&w`fb1R`;2>WL`1+hS+PB3D|^BB3AN6Pyp{TOC?Fi;>HArNZT?xRS&m@knYE```3F0qcD; zj5+`yDmlEQHHEL}Yb%-Ee?_Zs4+l+)y6#WCyx&s|?Cy^y=LEhE!0Y1qgYWMDlVwkL ztNx<~0xJ$5uid%%q;iPq>CDtig)E2xF|GyQwcP{1^?I))$MxTmfa1cqQ1yaSZAYTm z{V^gS?5KzO00^iU zN9I>C4z+{?aeYmhe9B2_Y0hx6us2z5{2;XFbPhe|jcIB9ucgadB=15lTT1JMNEiNl8f{9exYW*Z+@* z!bK2Bbm8gb*RNm6HjciaC|2=M7>!CuA6buE;1?3kthncoUibcx+~b4~X0HPU1Fv}y zz~DtuiNKFpa#V)89|!`j!47~CKU@$-!|neG1d#Yd2L~g-!$p4Ib7p{3cY{(&frW(nzndGfH_a0sYf`1m6TEJ9CD-3gyR-vpCG%&%XAWP}qQ=74Jv z5)!TfVaUwR&UE`8F^DESScH+w7Sp%0b@`p?-+T~*t#zSN_r}sn z4O5FF0-WsuqDc(|>zSDp03S=gWf1q!wP<4o>v}puRYVC(FXSO5syVOU3uX;t!4AC& zs;hCpM>glb~Mt}!POiF?SGw5$`!FB_I63n7oom*IlR8&;d@!KCvF#at} z)48^;aBhw>A#QKC64@PRTF#gesr!!=K7l*L-U-iA;pX&`_p1NyWJye!}wK{*{v6$X(R?-A+?{N*5UHhMIv-QixD-D1K$|yIClJ?E@2O@BwGg&wnnzgST|B zcA%w8fC0^;Com)EM_?!rS47m&(qf>=R}vj_Rbkl`Kl-NYVsPRz=G-E|M8N=8YR2oW zdN0r}wE&6%SWtoalP)kSPT($^KUt!>2?RmF)!WVP3ZkC{yf$oB`4xG;Qogu@(}Vi{ z{rkFYtlaW)3^1Rnt*s4jV$(nV2t~AOWPV@~Q|y*oxc|p$7@{DO*ee(Qt_&#0WY!s?vah;gSnlY(*!65Dqucs zg5Cd*t3$rx=i(s_5T4~kIe)EV2krF}y!wCIF`rG+gRqFy&t6>%1>-?l5ZnXne42Mp|GK#O{Yh!^Xyz-_h}i7c)SBw{Jo! z603eF82xkf2L=n>ksVX3jy{`A?hG}RjQEgVWMt%baCJDyfSUoj61?BhrVe+MM)+2H zL4v@2Bzt4*;>q+dYY8bl8hIAEg%9J28F=5hc=(Qd-{iZbGFDSnYUb! zR>N3h7e!G6|0SfS3pRrJrZA!^{qM#lO)cMduen$48M(_cJ(Lgl(w}SH7}p%JO32o4 z!pCw!e7OlHdFwr4AWDx*Otj+nya9tq-_5!ZmY1+tv4Xh&8Eh_glfXtHkN+$okl5tp znWDxkOC^4 zj7cRE25ju_?{`!HXwV4?k^!M@os0ob^g+d;W^PF>@=egsXreoz1U0-)IbdNx3@@*# z$$9-XKTqhY-6KjX@s{FHLB-N6A+T6~eR_9-?7)tZCi+D6CaqDJO;hXOIUD#~As|4s z@!j%QY;xW;fP#QnN&xu=_zHKL1V~`O%v=oc?gU_qF-59{oU!+J4TT&HEy9~)NGB5V z^77vx^V}d>Q>iX5UobQ^U6tra8BAaO=6%6QFi50+=)G+_;azp=AoDW$L?d8EQKU*+ zmP!`3&uaDeY#+>s{HUuNuQ3$^2?Qm`mBEK2p^Jy`b_0LOqs}KPFq4&4p3$^G;`mU_ z1TB?EF7!(0L@Y&E^Jq3geIS8Az{ho)2f)FVpYTo&LeJhxt{lr(t~jemVj?B5XB3rZ z7(c+=qXN^e-?0w2O3Xw4^H-Sn`hFIH(&^{-R7-Hr!O=~={-jjLAmOi=1{ zu(m_;P7EgByJ#o0*$tAOBx+XBjVB_sMvZBGe42_Xs_#5lmg4HO0oTJcia|N2eeuFV z+1c5-3{Kaz1%zyi9G!E}_UbX9~>UANu1xrmp-&{0k=8jykZ?xmarJb!5( z_+B)p(O#Tzyqn-56J&FmP%K5Q)w#ug_7n)Bq&gs(4C|Rov1vxmN;v=hX8L5JKeIY5 znlNF1K#DefTY*}Xr&*)CojN4OVr|g8LBpUXaCsb`X6eo z;;p0-1RoFY#APCqAuRiKwRPT1@CK}ve!bAoHL))&}X%(&Qr%zTd5x& z2b`EyAIDo>f0`AqycllCE@(4uxEc&EUF|06QAiou7Q*1j)RKG_aseK*1dP3LUA&m6 z7a#PILcEErnog#&%*R`{546?BKJS-uQA+ZH3Sc*|HVuv%G$Pz=O>5xRS7$&c>TH&q z%{j3qmZZ3B(5xYkbe-UHPry6X$Vf?VT($>$_Y2so1X=Toh?#T^AMAVW*nWSq>9dXV zviql6<=@~)-!DV=dn_t$h9~==eoV8ZzCTzR_}d=eXSUrb6HL`cpv-996UWEL8uQ-E z@^90v96D|cwl5f~(oJfvjBhJFRk=IMjOn6iPpqdc83!E)-Nsv)8r)`DRT~^DTY0!? z=BA-nX0>J6>Hm2HnnI zr$cy<|9!jLm_<{ee7yM`zLG4bEP=Bv#ojIec8y-^wx8xRA_7Yu)&*9nohi>43w^ZP9t}{XwMthp%V-VEKiz zydusGRqK7H!3R3~p~Qzmw*l=t#xTSd{pqH+bZC*DoAD#yXOBAPP7e)sL&cqmb1{%*pr5BcZ~ z)pe!*^#m(X5v#*#-ACXtTMdvsv?1tVI;t8-Hm`S0A34Nb>L(4FFQ{JG6HOTUC$3%; z;)*Zpb}7_O%qB?M(bG=s1c};*&l>C}u6Q=w%^Z+dq`IgEP|qOxv=kOfpK;(iphF;F zwmO0S>xMTN>zuFm)YFkOP?gdkZErE~)RQzH8GN71=vEs=bf{3tgf}LK&&s{MYG1^+ zK$PvZQDIzgQ$?DK2J=Z7x~MaeU3z+#N{pZy>3oQ4In+a~(atE^!IvO9$>%ETp z?--Q{E1eXpp9*DuFpP&k`fiqK(beNekSM>F{20jE($>DOxv8Eq)R0(A(||z(W=(gE z931wEAl{_{gS(^$Te;eJiJo%ntqNrBvFB>pDP4wP)!Eae@#p^}9PiJ&of@QF*mxvs zobj<2L}UNWXWv78X1Cqj=*!HqPe<9(5S)xCirKQ?v|Lz?xQ;|{b+ zg88V~=wcBa6h$&bgA8c&w8>5D441|DiTxo3>*nNeEeb3XOrHxbV6=P_CrhO!{=WeH z1OxjP*3s>D-y>a6I&jc}e60vq;uju|XEcpY&9nU_r^%yNvbM#$wa3y1 z3oWC4QM(@+S7ny%M5zrX35jyIfW`1f^IJ2-X#i7PF4sZUiiQ{f0QBzNyCZ-vJRZ+r zy|TJ~;S6(kO8)!{YR@zyc3z68C*u0|Mv-fB+^p2=>n`aWC$aG%TN+QC!VFarR9 z-o1Ng0{FKmii5SR@LVs6C_-L~_5mANL5+(2M(Uddr9`GoIZo5Io`vB=v{B-I1S(tm&>)?2obJb01}Fdims-lq^uPLp_?d*-Fa6+we39`(1hyh)ia}Q znzBaJ3oXzX0%^ABw62pPEahcb{?yvl+wRl5-psKV-j#p1Q9`CM001Z|Dym3HNm(Tb zLV_R&gILpn@jOf;6Ud0P!Qx0ng4wj&FZh#jvf!UQb@io{09a_ZFsuPE!{u_Vvx2y#5`Y}NdiA;w!1HL328^cAVu4xPb7oCiGZ=uC z%!7A-pSMr6>R}5*9)Q0Bcwc^!kJ$(s0|0=mtgLhZPYQxCTNK44fNoNmAvT9{vhk`N zYU5y)1YwqFuU5~9!L$XT9>6jHf1?TKHHx4z013T%^%^LO;*$XG0}!oMmM0OV^t&0V zMyU7p&7h;EDrxEY!MGvFl)1gpW2FaQZzSy>|i%my$CUORygO?~2# z7?&B7*otvcMpp*gfr`|h7KZfzJ_7KyTJ~P65K;ypAuB6uD1d43GJ=kP!HFjb-rRN} z3h1#yL=U#OA56L}aKZyXDS)-`iu>z>J@F+p3I-q{D=VurfICG|oCIJf6jFf}8pDcj zmUo|7Mn}C}lE%0T(acc~uNU7Mc#rAcALHvA0$kfK$`tngVL zm@)aS%pRnd1HfhkmZA*6K>%CeJ)vg@Ys|itXp{^z{MCw6VapESu!;T7Xc8~#e*o%qE7 iN?a~iNvLnq2>w4QmJWN+1n^G)0000kdg00001Z*opl0neg$ zng9R+(@8`@R7l6A)lEoLVHC#k-@Q&IK`BxTClKue7ZONKU)Vx0S_Jk*gS4n9aVfJf zS{P!Rh$v`LAkk9VwF!b~QGzf*L?jqtEo##u6-8^2U=1yl(3v|k*YT|Geb0IR_q@+N zZ~}o1MFQG$m5H+Gx*S@S+9_?uSu`0ktpg1OfI#ppmypz`KEk4 zcFlV>OmIr^SSx>;Cy(%;R7`jfaT*&iCKEZ0iE_f6Ki+%cb&-5oz$XLdO61F4VULR| zgH<7*M%svjl>?x`eZBDkKO+k-8;JZ`-r1Cg&bj1GMCnQG5vTwE!h%U-URuOg*L6B? zUtaNI1RxMR&rSJg!ta7)i*6^t55vCuTu_k>13~G{bX>P)L$Zkdg00001Z*opl0neg$ zng9R+b4f%&R7l6|ls_nhaTv$HzxzWhm%-u;H*kwmii>2pWHX#aDcP?ZWGAJVEGA`P zQ>R-fb;G%oi40C5hLa2?T^*6=WAHln$Gvw)iSoS5+wW1$Ai751L{Xgs_CyTzI1#N?NBZHXo&Ng9ty;7%X$6O*MxATI?3Jc|-aWZvl`mxx00000NkvXXu0mjf*4xH5 literal 0 HcmV?d00001 diff --git a/assets/png/dark_cat_1.png b/assets/png/dark_cat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a923f1d8f8d95df837d67ecbb03ee9f541694473 GIT binary patch literal 451 zcmV;!0X+VRP)kdg00001Z*opl0neg$ zng9R+eMv+?R7l6|lut|4Q51%sGnq&!A&E3WgeVS*K`RwOTNmUvFmO@pR_)R@A?*@G zh`vB=0&y{jhzr343ra{7A|cYSb_#_kJ}oqv(edZ}auxXA&Ao?v-h2MM=LW&4kU5?E z8NojhIN%5HmAhWuvqYNZEp^Ig&YQQJAks!K!UMkYh)UYHkU9dpUGb&5rRt>Dh;#(g zs^$sT9k#~TDG0pokb9Ug>#8&MD-lVvU=#Ofr=DL_(^jHmKjKQo{?$r)=%kq{s>!gy zXXd!clf;7VatE-%e#cFVj}Dt7hzfdn4lFRs5^H<|cG%zzt% z>WMMD_Xbg-3ub+Ktkb$vMd!Om2<&jPr0ceCeQYh^Z6^+_gNNE^EAOZ(%5{`QGAyzb zYX$eZ7^RM$_);Wgb8f5p!k?;c*_R-!i~G9*(|t8>&YZv1WgE)UXaT`_vjpLo`rS)q tio8T{pVXFeXC!eJ%E5p5sh$xW#UEYPNW9w3T4n$M002ovPDHLkV1f!0(xw0a literal 0 HcmV?d00001 diff --git a/assets/png/dark_cat_2.png b/assets/png/dark_cat_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c2ee3d0237a32dd231d202c263bb5e663d6bf6 GIT binary patch literal 413 zcmV;O0b>4%P)kdg00001Z*opl0neg$ zng9R+S4l)cR7l6|ls!m-K^(@PD~E!@0*5F>f}*w@+8mlADjI^?3W;b6YiMhcsG*Og z=33hNn3_V;!qLQvf|dxH3ZY04LHRZK5~=S?f=hwVO?UTye)sUd| z@Q`6fBFcv3vK9w5Cck==*Nvh&GVhM|PF?Cz9=7GzizFEt!j!5&n06Vv!3BHF0a;>% zWQu@c!i>^KD_(}!0w7I51~(JTGVpC50j_{707)8UdrCJE0M2-`GTpL(k8x|3kl~yZ zLFQ#2RE8a#mBh;f`!d9x0f$thm<<3QE2OHjKhaeIVA5*P@8)7_%j}C)nE`S{2$lf| z*%YQpkfuP60v{E-Yp#-K)-UN!CwkSUnk415qyv+oMQzHkdg00001Z*opl0neg$ zng9R+W=TXrR7l6|l+PB_nzQ;0np3r!bgWJD><(jjX=fFL{GfJur~zc-+z$o6^545)CnoUqHY zN9zV-1PWcGC;-bcGSo6kg#DZ$!ix1OJ7WZBcX@tNIfx`-85v8Q&9%-Xb-KIkdg00001Z*opl0neg$ zng9R+Qb|NXR7l6|l{-rVK@^40hzOQyp@9fm#DEZN)Izip{0D-aB%P%{!NMYFA&8}j zXk()yD3OSd%ElBH@qu6piC6?AL9_~=g_BjY4~c0Ma;91Cob&C>-5tirs4g|t7jFRm zC4hDY>j2QFf)WyYZ2kg3zf#&&i6xCHT&Xq(1i~6tmu}3lEo|#R_ga*6s??{?xCd>- zIi$>oGR!c>29N{tl!2_{c7(tn zsR!QdQ<|i+d~fA>X2;nAG4}1mC9@33$T%>6MZWcbP9lW9bYjgnSmus(qP|VEfDW>r z@g&_kdg00001Z*opl0neg$ zng9R+>q$gGR7l6w)W1uWVH5}O&-1=lBSa+}vIxQ{XpscdOEfqIEe%%S&}3lIAOsGL zK@HJAP(edPI4DFzOSFbWPL)AXn7OnVQ9_vB`!x7+?|X0e>J=xS1Mkms&hz~~=X*{N z>}n;u3*UPQHoXh^sIY@WOq46v%1T>KkSIH8zZF+>S(J!X4BJ~O=oejbLG-Ztr*#Tl zUU=`YUh`I6uTp7c|2Dx5Ph1m4>z4FosDf>Pw@IafHm@y<7R-qrx#LjgvnA`QjfWhQM91DPA^#%(mLTh&w(Bl1cTN@Q<<4bSGIve_zYY3T1{tnU!Po=NZzRy4Y~N?!fH00000NkvXXu0mjfYo!A< literal 0 HcmV?d00001 diff --git a/assets/png/light_cat_1.png b/assets/png/light_cat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1ffa89f79266ad6d979f87ef518d6705833603 GIT binary patch literal 547 zcmV+;0^I$HP)kdg00001Z*opl0neg$ zng9R+-AP12R7l6|)J;fKQ4|O8-+gbSkje-tk~Tr2W}6m4w3ikI5tR^x8y7BJ8dwyx z2y7KbK_5`d)ZL7GD-uT|_fD~j$3rVMNM zTv}>lLbWk9vdcbOEogR7uU47Fv=@$=F>gU<{vNbyQ?L>9X1vzsoL<|0k=|J&r4+gi z8uMPP;EQLKb5T@O%>7*yExI5G!2x&e1@C+^Et4oXWDBxYFWOBPO_#R2-Em2ecAIkr z8!z+ZQ7p$2MXwwwYu4%b4i74dC9`6k6r#&Z4)U!FhJDC!<|Fv%yu+U4T=cJu;L0+d zS#L}kbJYnu1woTz9*Gu>>drez1w*1}&bKoAxGpVPaym`rUB7|a8l-|AQFPxapGDEF z8q>6fs`||xy4`SGFd&MCYm`@xR%+EQjEP3;%tBqHHBVY1mD%pCL7A}1eAGyzZ(^Nk lum1w9S^i1{{~a_aKLJZQvkG|UlF|SG002ovPDHLkV1ieA@96*l literal 0 HcmV?d00001 diff --git a/assets/png/light_cat_2.png b/assets/png/light_cat_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6f0ea91750434dcdc66f8eeb6d09395a316720 GIT binary patch literal 552 zcmV+@0@wYCP)kdg00001Z*opl0neg$ zng9R+;z>k7R7l6|)IVrcK@i9B&%V3E;J*-v5d}rDFoF_A2#8fgP)Q+Hf`wusXki(| zB1MWTOq0q&B#osa5=4Ro3rQ73#3G>JA5=udgs2fDCU)M_6W0qu6{veSBB z&54qxh(UuM=yuaLV`&XL-0{6u!D~g^1wlbh5acShAm}ry&r^?GcS%SAC(L+gSidW7 zn-+aBAXK!fVhe&z-nnd2G-F<$V2M)@Y)}+MBYG5#d*YUJS_K97MbWf=pUk>zk4#{$ zq98bCvbLpElZHJK&5K3^;|8?3x?C6X%3fIOuyO{_VV}*)a@c6ULl$(}ovk3PA_!WY zH6toz044Kv|EW%D2rnpl-{4rUlIV>gy^Duf4PWP8%_X%ef%b3)8{qBpyKk0000kdg00001Z*opl0neg$ zng9R+UB~_x{fb zf*p;9orV7wfI#deVa>+HHJf);v!F3q+h~pT zxt_vd$F10-$4Oo0oH41O!UiQ(W$k`gU9TX`KWkCZ(M=~-znVQTF6eMVkXou)5Ogb< zvdQ`%(a*d(|j`e;GPyc>zP**n9oS@6ZE$9BoRq?^g5M$wp7 zL5tU-X;HMOXbrQhC>rt7KsKO15nn$w%U)#PLC|3#C3|BUQS{xc``YpVyS*1h)6VO2 z&xGOz*o9N0rbOoiO{pKb_Ka0~DhP#~8vW^$F0iVC z1_dkbdZyr;hxXg+QC=}slNj>cflb~!qGi1)Z*I-!*_dcXQ>{kxQpg?+DlYkK&PuIM sWcS41Beu{~{{%^OslNeiqW$B5UyD1=c_Ih5rT_o{07*qoM6N<$f*AD$`2YX_ literal 0 HcmV?d00001 diff --git a/assets/png/light_cat_4.png b/assets/png/light_cat_4.png new file mode 100644 index 0000000000000000000000000000000000000000..75df043d15d7a7e8da33107a070d29a5a972b562 GIT binary patch literal 536 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 z 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 literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..27db7de --- /dev/null +++ b/readme.md @@ -0,0 +1,11 @@ +A cute running cat animation on your windows taskbar. + +## install + +```bash +cargo install run-cat +or +cargo binstall run-cat +``` + +![run-cat](./assets/run-cat.gif) diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..c577eac --- /dev/null +++ b/src/main.rs @@ -0,0 +1,160 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +// Copyright 2022-2022 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT +#![allow(unused)] + +use tray_icon::{ + menu::{AboutMetadata, Menu, MenuEvent, MenuItem, PredefinedMenuItem}, + TrayIconBuilder, TrayIconEvent, +}; +use winit::event_loop::{ControlFlow, EventLoop, EventLoopBuilder}; + +use sysinfo::System; + +fn load_icon(buf: &[u8]) -> tray_icon::Icon { + let (icon_rgba, icon_width, icon_height) = { + let image = image::load_from_memory(buf) + .expect("Failed to open icon path") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + (rgba, width, height) + }; + tray_icon::Icon::from_rgba(icon_rgba, icon_width, icon_height).expect("Failed to open icon") +} + +const FPS_STEPS: [(u64, u64); 5] = [(20, 10), (40, 15), (60, 20), (80, 25), (100, 30)]; + +fn get_fps(cpu: f32) -> u64 { + for (percent, fps) in FPS_STEPS { + if cpu <= percent as f32 { + return fps; + } + } + return 30; +} + +fn main() { + // Since winit doesn't use gtk on Linux, and we need gtk for + // the tray icon to show up, we need to spawn a thread + // where we initialize gtk and create the tray_icon + #[cfg(target_os = "linux")] + std::thread::spawn(|| { + use tray_icon::menu::Menu; + + let icon = load_icon(std::path::Path::new(path)); + + gtk::init().unwrap(); + let _tray_icon = TrayIconBuilder::new() + .with_menu(Box::new(Menu::new())) + .with_icon(icon) + .build() + .unwrap(); + + gtk::main(); + }); + + let dark_cat_icons: [tray_icon::Icon; 5] = [ + load_icon(include_bytes!("../assets/png/dark_cat_0.png")), + load_icon(include_bytes!("../assets/png/dark_cat_1.png")), + load_icon(include_bytes!("../assets/png/dark_cat_2.png")), + load_icon(include_bytes!("../assets/png/dark_cat_3.png")), + load_icon(include_bytes!("../assets/png/dark_cat_4.png")), + ]; + + let light_cat_icons: [tray_icon::Icon; 5] = [ + load_icon(include_bytes!("../assets/png/light_cat_0.png")), + load_icon(include_bytes!("../assets/png/light_cat_1.png")), + load_icon(include_bytes!("../assets/png/light_cat_2.png")), + load_icon(include_bytes!("../assets/png/light_cat_3.png")), + load_icon(include_bytes!("../assets/png/light_cat_4.png")), + ]; + + let tray_menu = Menu::new(); + // tray_menu.append_items("items"); + let mut c = 0; + + let mut theme = "dark"; + + let quit_item = MenuItem::new("quit", true, None); + let dark_item = MenuItem::new("dark", true, None); + let light_item = MenuItem::new("light", true, None); + + tray_menu.append_items(&[&dark_item, &light_item, &quit_item]); + + let app_icon = load_icon(include_bytes!("../assets/png/app32.png")); + let tray_icon = TrayIconBuilder::new() + .with_menu(Box::new(tray_menu)) + .with_tooltip("run cat~") + .with_icon(app_icon) + .build() + .unwrap(); + + let event_loop = EventLoop::new().unwrap(); + let menu_channel = MenuEvent::receiver(); + let tray_channel = TrayIconEvent::receiver(); + + let mut sys = System::new(); + sys.refresh_all(); + std::thread::sleep(sysinfo::MINIMUM_CPU_UPDATE_INTERVAL); + let mut last_update_ts = std::time::Instant::now(); + + let mut avg_cpu_usage = 0; + let mut last_refresh_cpu = std::time::Instant::now(); + let cpu_gap = 300; + let mut last_avg_cpu_usage = 0.; + + event_loop.run(move |event, event_loop| { + // We add delay of 16 ms (60fps) to event_loop to reduce cpu load. + // This can be removed to allow ControlFlow::Poll to poll on each cpu cycle + // Alternatively, you can set ControlFlow::Wait or use TrayIconEvent::set_event_handler, + // see https://github.com/tauri-apps/tray-icon/issues/83#issuecomment-1697773065 + event_loop.set_control_flow(ControlFlow::WaitUntil( + std::time::Instant::now() + std::time::Duration::from_millis(16), + )); + + if let Ok(event) = menu_channel.try_recv() { + println!("{event:?}"); + if event.id == quit_item.id() { + std::process::exit(0); + } + if event.id == dark_item.id() { + theme = "dark"; + } + if event.id == light_item.id() { + theme = "light"; + } + } + + let now = std::time::Instant::now(); + + sys.refresh_cpu(); + sys.refresh_all(); + let avg = if last_refresh_cpu.elapsed().as_millis() < cpu_gap { + last_avg_cpu_usage + } else { + last_refresh_cpu = now; + let avg = + sys.cpus().iter().map(|i| i.cpu_usage()).sum::() / sys.cpus().len() as f32; + last_avg_cpu_usage = avg; + avg + }; + + let fps: u64 = get_fps(avg); + let ms = 1000 / fps; + let sleep_time = std::time::Duration::from_millis(ms); + + if last_update_ts.elapsed().as_millis() >= ms.into() { + last_update_ts = now; + let list = match theme { + "dark" => &dark_cat_icons, + "light" => &light_cat_icons, + _ => &dark_cat_icons, + }; + let icon = &list[c % dark_cat_icons.len()]; + c += 1; + tray_icon.set_icon(Some(icon.clone())).unwrap(); + } + }); +}