diff --git a/.docs/aurora/configuration.md b/.docs/aurora/configuration.md index 6845d5b..6fe29ed 100644 --- a/.docs/aurora/configuration.md +++ b/.docs/aurora/configuration.md @@ -80,23 +80,9 @@ Manage the immunity whitelist. - Usage: `[p]aurora timedelta ` - Aliases: `tdc, td, and timedeltaconvert` -This command converts a duration to a [`timedelta`](https://docs.python.org/3/library/datetime.html#datetime.timedelta) Python object.You cannot convert years or months as they are not fixed units. Use `[p]aurora relativedelta` for that. +This command converts a duration to a [`timedelta`](https://docs.python.org/3/library/datetime.html#datetime.timedelta) Python object. **Example usage** -`[p]aurora timedelta 1 day 15hr 82 minutes 52s` - +`[p]timedelta 1 day 15hr 82 minutes 52s` **Output** `1 day, 16:22:52` - -### aurora relativedelta - -- Usage: `[p]aurora relativedelta ` -- Aliases: `rdc, rd, and relativedeltaconvert` - -This command converts a duration to a [`relativedelta`](https://dateutil.readthedocs.io/en/stable/relativedelta.html) Python object. - -**Example usage** -`[p]aurora relativedelta 3 years 1 day 15hr 82 minutes 52s` - -**Output** -`relativedelta(years=+3, days=+1, hours=+15, minutes=+82, seconds=+52)` diff --git a/.docs/aurora/moderation-commands.md b/.docs/aurora/moderation-commands.md index 68d3a7f..93e5a06 100644 --- a/.docs/aurora/moderation-commands.md +++ b/.docs/aurora/moderation-commands.md @@ -23,27 +23,19 @@ Add a note to a user. Warn a user. -## addrole +## blacklist -- Usage: `/addrole [duration] [silent]` -- `target:` (Required) Who are you adding a role to? -- `role:` (Required) What role are you adding to the target? -- `reason:` (Required) Why are you adding a role to this user? -- `duration:` (Optional) How long are you adding this role for? +/// admonition | This command is unfinished, and doesn't currently work. + type: warning +/// + +- Usage: `/blacklist [silent]` +- `target:` (Required) Who are you blacklisting? +- `role:` (Required) What blacklist type are you applying to the target? +- `reason:` (Required) Why are you blacklisting this user? - `silent:` (Optional) Should the user be messaged? -Add a role to a user. - -## removerole - -- Usage: `/removerole [duration] [silent]` -- `target:` (Required) Who are you removing a role from? -- `role:` (Required) What role are you removing from the target? -- `reason:` (Required) Why are you removing a role from this user? -- `duration:` (Optional) How long are you removing this role for? -- `silent:` (Optional) Should the user be messaged? - -Remove a role from a user. +Add a blacklist role to a user. ## mute diff --git a/.docs/backup.md b/.docs/backup.md index f324e72..238ba8e 100644 --- a/.docs/backup.md +++ b/.docs/backup.md @@ -10,14 +10,6 @@ Backup allows you to export a JSON list of all of your installed repositories an [p]cog load backup ``` -## Version Compatibility - -As of commit [1edb08a](https://www.coastalcommits.com/SeaswimmerTheFsh/SeaCogs/commit/1edb08a1271f12098ca0bed11a735f7162cedd14), the Backup cog no longer supports Red versions older than 3.5.6. If you want to use the cog on an earlier version (3.5.0 - 3.5.5), install the cog pinned to this commit: `43464db6a7c51bc69282b1ae3dc507a4aae851de`. - -```bash -[p]cog installversion sea-cogs 43464db6a7c51bc69282b1ae3dc507a4aae851de backup -``` - ## Commands ### backup export diff --git a/.docs/emojiinfo.md b/.docs/emojiinfo.md deleted file mode 100644 index 1473e59..0000000 --- a/.docs/emojiinfo.md +++ /dev/null @@ -1,19 +0,0 @@ -# EmojiInfo - -EmojiInfo allows you to retrieve information about an emoji. - -## Installation - -```bash -[p]repo add seacogs https://www.coastalcommits.com/SeaswimmerTheFsh/SeaCogs -[p]cog install seacogs emojiinfo -[p]cog load emojiinfo -``` - -## Commands - -### emoji - -- Usage: `[p]emoji [ephemeral]` - -Retrieve information about the provided emoji. If `ephemeral` is provided and the command is used as a slash command, the response will be sent as an ephemeral message. diff --git a/.docs/pterodactyl/configuration.md b/.docs/pterodactyl/configuration.md index 9fd4e26..87349bd 100644 --- a/.docs/pterodactyl/configuration.md +++ b/.docs/pterodactyl/configuration.md @@ -39,9 +39,7 @@ Default value: tellraw @a ["",{"text":".$N ","color":".$C","insertion":"<@.$I>","hoverEvent":{"action":"show_text","contents":"Shift click to mention this user inside Discord"}},{"text":"(DISCORD):","color":"blue","clickEvent":{"action":"open_url","value":".$V"},"hoverEvent":{"action":"show_text","contents":"Click to join the Discord Server"}},{"text":" .$M","color":"white"}] ``` -## `console` - -### `channel` +## `consolechannel` /// admonition | Only give access to the console channel to people you trust! type: danger @@ -65,21 +63,6 @@ This is to prevent the console channel from flooding and getting backed up by Di Default value: `None` -### `commands` - -/// admonition | This has no effect on the `[p]pterodactyl command` text command, or the matching slash command. - type: danger -If you want to disable the ability to execute commands on the server through Discord, use the following commands: -`[p]pterodactyl config console commands False` - this command -`[p]command disable pterodactyl command` - disables the text command that lets you execute commands on the server -`[p]slash disable pterodactyl` - due to how slash commands are laid out, this is the only way to disable the ability to execute commands on the server -`[p]slash sync` - apply above slash command change -/// - -This option determines if commands sent to the console channel will be sent to the Pterodactyl console. - -Default value: `False` - ## `invite` This option determines what url the chat command will substitute in for the Discord invite placeholder. @@ -153,41 +136,6 @@ This option determines which server's websocket to connect to. See [Getting Star Default value: `None` -## `topic` - -### `host` - -This option determines the hostname of your server that will be used to retrieve server information. - -### `port` - -This option determines the port of your server that will be used to retrieve server information. - -Default value: `25565` - -### `text` - -This option determines what the channel topic will be set to. - -Available placeholders: - -- `.$H` - replaced with the server's hostname -- `.$O` - replaced with the server's port - -Available with a Minecraft server: - -- `.$I` - replaced with the server's ip address -- `.$M` - replaced with maximum player count -- `.$P` - replaced with current online player count -- `.$V` - replaced with the server's current version -- `.$D` - replaced with the server's description / message of the day - -Default value: - -``` -Server IP: .$H\nServer Players: .$P/.$M -``` - ## `url` This option determines what panel the cog will send requests to. See [Getting Started](getting-started.md#getting-server-information) for more information on this. diff --git a/.forgejo/ISSUE_TEMPLATE/bug-report.md b/.forgejo/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 0000000..92c144c --- /dev/null +++ b/.forgejo/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,23 @@ +--- +name: Bug Report +about: Got an issue with a cog from SeaCogs? Use this. +title: "[BUG]" +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +What caused the error? + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.forgejo/ISSUE_TEMPLATE/bug_report.yaml b/.forgejo/ISSUE_TEMPLATE/bug_report.yaml deleted file mode 100644 index d603128..0000000 --- a/.forgejo/ISSUE_TEMPLATE/bug_report.yaml +++ /dev/null @@ -1,55 +0,0 @@ -name: Bug Report -about: File a bug report -title: "[Cog Name] " -labels: [bug] -ref: master -body: - - type: markdown - attributes: - value: | - Thank you for taking the time to fill out this bug report! - - type: checkboxes - id: confirmation - attributes: - label: Please confirm that; - options: - - label: I have checked that this bug does not already have an opened/closed [issue](https://www.coastalcommits.com/SeaswimmerTheFsh/SeaCogs/issues) or [pull request](https://www.coastalcommits.com/SeaswimmerTheFsh/SeaCogs/pulls) associated with it. - required: true - - label: I have checked that I am on the latest version of [Red-DiscordBot](https://github.com/CogCreators/Red-DiscordBot), and SeaCogs. - required: true - - type: input - id: hosting - attributes: - label: Hosting - description: How is your bot hosted? - placeholder: Local, Docker, etc. - validations: - required: true - - type: textarea - id: what-happened - attributes: - label: What happened? - description: Also, what did you expect to happen? - placeholder: A bug happened! - validations: - required: true - - type: textarea - id: reproduction - attributes: - label: Reproduction steps - description: Please provide detailed steps to reproduce the bug. - placeholder: | - 1. Do this - 2. Do that - 3. Do this other thing - 4. Bug happens! - validations: - required: false - - type: textarea - id: logs - attributes: - label: Relevant traceback or logs - description: Please copy and paste any relevant tracebacks or log output. This will be automatically formatted into code, so no need for backticks. - render: py - validations: - required: false diff --git a/.forgejo/ISSUE_TEMPLATE/config.yaml b/.forgejo/ISSUE_TEMPLATE/config.yaml deleted file mode 100644 index 2d0a481..0000000 --- a/.forgejo/ISSUE_TEMPLATE/config.yaml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Other Concerns? - url: https://discord.gg/eMUMe77Yb8 - about: Ask in our Discord server! diff --git a/.forgejo/ISSUE_TEMPLATE/suggestion.md b/.forgejo/ISSUE_TEMPLATE/suggestion.md new file mode 100644 index 0000000..b63159a --- /dev/null +++ b/.forgejo/ISSUE_TEMPLATE/suggestion.md @@ -0,0 +1,26 @@ +--- +name: Suggestion +about: Trying to suggest something for SeaCogs? Use this. +title: "[SUGGESTION]" +labels: enhancement +assignees: '' + +--- + +**What cog is your feature request for?** +A cog in this repository. + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.forgejo/ISSUE_TEMPLATE/suggestion.yaml b/.forgejo/ISSUE_TEMPLATE/suggestion.yaml deleted file mode 100644 index 7c70ad3..0000000 --- a/.forgejo/ISSUE_TEMPLATE/suggestion.yaml +++ /dev/null @@ -1,55 +0,0 @@ -name: Suggestion -about: Trying to suggest something for SeaCogs? Use this. -title: "[Cog Name] " -labels: enhancement -ref: master -body: - - type: markdown - attributes: - value: | - Thank you for taking the time to suggest an enhancement! - - type: input - id: cog - attributes: - label: What cog is your feature request for? - description: Specify the cog within the repository. - placeholder: E.g., ModerationCog - validations: - required: true - - type: textarea - id: problem-description - attributes: - label: Is your feature request related to a problem? Please describe. - placeholder: A clear and concise description of what the problem is. - validations: - required: true - - type: textarea - id: solution-description - attributes: - label: Describe the solution you'd like - placeholder: A clear and concise description of what you want to happen. - validations: - required: true - - type: textarea - id: alternatives - attributes: - label: Describe alternatives you've considered - placeholder: A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false - - type: textarea - id: screenshots - attributes: - label: Screenshots - description: If applicable, add screenshots to help explain your problem. - placeholder: Paste image links here. - validations: - required: false - - type: textarea - id: additional-context - attributes: - label: Additional context - description: Add any other context about the problem here. - placeholder: Any extra information you think might be useful. - validations: - required: false diff --git a/.forgejo/pull_request_template.md b/.forgejo/pull_request_template.md deleted file mode 100644 index 2813cd5..0000000 --- a/.forgejo/pull_request_template.md +++ /dev/null @@ -1,6 +0,0 @@ -# Describe what your pull request does and which issue you're targeting - - - -- [ ] By submitting this pull request, I permit SeaswimmerTheFsh to license my work under - the [Mozilla Public License Version 2.0](https://www.coastalcommits.com/SeaswimmerTheFsh/SeaCogs/src/branch/main/LICENSE). diff --git a/.forgejo/workflows/config/.pylintrc b/.forgejo/workflows/config/.pylintrc index 94010af..18bfab4 100644 --- a/.forgejo/workflows/config/.pylintrc +++ b/.forgejo/workflows/config/.pylintrc @@ -17,6 +17,4 @@ import-outside-toplevel, import-self, relative-beyond-top-level, - too-many-instance-attributes, - duplicate-code, - too-many-nested-blocks + too-many-instance-attributes diff --git a/.forgejo/workflows/workflow.yaml b/.forgejo/workflows/workflow.yaml index 98b12fc..0d0bcf9 100644 --- a/.forgejo/workflows/workflow.yaml +++ b/.forgejo/workflows/workflow.yaml @@ -17,11 +17,11 @@ jobs: run: poetry install --with dev --no-root - name: Analysing code with Ruff - run: ./.venv/bin/ruff check $(git ls-files '*.py') + run: ruff check $(git ls-files '*.py') continue-on-error: true - name: Analysing code with Pylint - run: ./.venv/bin/pylint --rcfile=.forgejo/workflows/config/.pylintrc $(git ls-files '*.py') + run: pylint --rcfile=.forgejo/workflows/config/.pylintrc $(git ls-files '*.py') Build Documentation (MkDocs): runs-on: docker @@ -42,7 +42,7 @@ jobs: run: | export SITE_URL="https://$CI_ACTION_REF_NAME_SLUG.seacogs.coastalcommits.com" export EDIT_URI="src/branch/$CI_ACTION_REF_NAME/.docs" - ./.venv/bin/mkdocs build -v + mkdocs build -v - name: Deploy documentation run: | @@ -58,7 +58,7 @@ jobs: npx -p "@getmeli/cli" meli upload ./site \ --url "https://pages.coastalcommits.com" \ --site "${{ vars.MELI_SITE_ID }}" \ - --token "${{ secrets.MELI_SECRET }}" \ + --token "${{ secrets.MELI_SITE_SECRET }}" \ --release "$CI_ACTION_REF_NAME_SLUG/${{ env.GITHUB_SHA }}" \ --branch "$CI_ACTION_REF_NAME_SLUG" diff --git a/.gitignore b/.gitignore index 429d31f..0f14351 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ .cache .vscode site -.venv diff --git a/antipolls/__init__.py b/antipolls/__init__.py deleted file mode 100644 index 8863332..0000000 --- a/antipolls/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .antipolls import AntiPolls - - -async def setup(bot): - await bot.add_cog(AntiPolls(bot)) diff --git a/antipolls/antipolls.py b/antipolls/antipolls.py deleted file mode 100644 index 810e88b..0000000 --- a/antipolls/antipolls.py +++ /dev/null @@ -1,180 +0,0 @@ -# _____ _ -# / ____| (_) -# | (___ ___ __ _ _____ ___ _ __ ___ _ __ ___ ___ _ __ -# \___ \ / _ \/ _` / __\ \ /\ / / | '_ ` _ \| '_ ` _ \ / _ \ '__| -# ____) | __/ (_| \__ \\ V V /| | | | | | | | | | | | __/ | -# |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_| - -import discord -from red_commons.logging import getLogger -from redbot.core import commands -from redbot.core.bot import Config, Red -from redbot.core.utils.chat_formatting import humanize_list - - -class AntiPolls(commands.Cog): - """AntiPolls deletes messages that contain polls, with a configurable per-guild role and channel whitelist and support for default Discord permissions (Manage Messages).""" - - __author__ = ["SeaswimmerTheFsh"] - __version__ = "1.0.0" - __documentation__ = "https://seacogs.coastalcommits.com/antipolls/" - - def __init__(self, bot: Red): - super().__init__() - self.bot = bot - self.logger = getLogger("red.SeaCogs.AntiPolls") - self.config = Config.get_conf(self, identifier=23517395243, force_registration=True) - self.config.register_guild( - role_whitelist=[], - channel_whitelist=[], - manage_messages=True, - ) - if not self.bot.intents.message_content: - self.logger.error("Message Content intent is not enabled, cog will not load.") - raise RuntimeError("This cog requires the Message Content intent to function. To prevent potentially destructive behavior, the cog will not load without the intent enabled.") - - def format_help_for_context(self, ctx: commands.Context) -> str: - pre_processed = super().format_help_for_context(ctx) or "" - n = "\n" if "\n\n" not in pre_processed else "" - text = [ - f"{pre_processed}{n}", - f"Cog Version: **{self.__version__}**", - f"Author: {humanize_list(self.__author__)}", - f"Documentation: {self.__documentation__}", - ] - return "\n".join(text) - - async def red_delete_data_for_user(self, **kwargs): # pylint: disable=unused-argument - """Nothing to delete.""" - return - - @commands.Cog.listener('on_message') - async def polls_listener(self, message: discord.Message) -> None: - if message.guild is None: - return self.logger.verbose("Message in direct messages ignored") - - if message.author.bot: - return self.logger.verbose("Message from bot ignored") - - if await self.bot.cog_disabled_in_guild(self, message.guild): - return self.logger.verbose("Message ignored, cog is disabled in guild %s", message.guild.id) - - guild_config = await self.config.guild(message.guild).all() - - if guild_config['manage_messages'] is True and message.author.guild_permissions.manage_messages: - return self.logger.verbose("Message from user with Manage Messages permission ignored") - - if message.channel.id in guild_config['channel_whitelist']: - return self.logger.verbose("Message in whitelisted channel %s ignored", message.channel.id) - - if any(role.id in guild_config['role_whitelist'] for role in message.author.roles): - return self.logger.verbose("Message from whitelisted role %s ignored", message.author.roles) - - if not message.content and not message.embeds and not message.attachments and not message.stickers: - self.logger.trace("Message %s is a poll, attempting to delete", message.id) - - try: - await message.delete() - except discord.HTTPException as e: - return self.logger.error("Failed to delete message: %s", e) - - return self.logger.trace("Deleted poll message %s", message.id) - self.logger.verbose("Message %s is not a poll, ignoring", message.id) - - @commands.group(name="antipolls", aliases=["ap"]) - @commands.guild_only() - @commands.admin_or_permissions(manage_guild=True) - async def antipolls(self, ctx: commands.Context) -> None: - """Manage AntiPolls settings.""" - - @antipolls.group(name="roles") - async def antipolls_roles(self, ctx: commands.Context) -> None: - """Manage role whitelist.""" - - @antipolls_roles.command(name="add") - async def antipolls_roles_add(self, ctx: commands.Context, *roles: discord.Role) -> None: - """Add roles to the whitelist.""" - async with self.config.guild(ctx.guild).role_whitelist() as role_whitelist: - role_whitelist: list - failed: list[discord.Role] = [] - for role in roles: - if role.id in role_whitelist: - failed.append(role) - continue - role_whitelist.append(role.id) - await ctx.tick() - if failed: - await ctx.send(f"The following roles were already in the whitelist: {humanize_list([role.mention for role in failed])}", delete_after=10) - - @antipolls_roles.command(name="remove") - async def antipolls_roles_remove(self, ctx: commands.Context, *roles: discord.Role) -> None: - """Remove roles from the whitelist.""" - async with self.config.guild(ctx.guild).role_whitelist() as role_whitelist: - role_whitelist: list - failed: list[discord.Role] = [] - for role in roles: - if role.id not in role_whitelist: - failed.append(role) - continue - role_whitelist.remove(role.id) - await ctx.tick() - if failed: - await ctx.send(f"The following roles were not in the whitelist: {humanize_list([role.mention for role in failed])}", delete_after=10) - - @antipolls_roles.command(name="list") - async def antipolls_roles_list(self, ctx: commands.Context) -> None: - """List roles in the whitelist.""" - role_whitelist = await self.config.guild(ctx.guild).role_whitelist() - if not role_whitelist: - return await ctx.send("No roles in the whitelist.") - roles = [ctx.guild.get_role(role) for role in role_whitelist] - await ctx.send(humanize_list([role.mention for role in roles])) - - @antipolls.group(name="channels") - async def antipolls_channels(self, ctx: commands.Context) -> None: - """Manage channel whitelist.""" - - @antipolls_channels.command(name="add") - async def antipolls_channels_add(self, ctx: commands.Context, *channels: discord.TextChannel) -> None: - """Add channels to the whitelist.""" - async with self.config.guild(ctx.guild).channel_whitelist() as channel_whitelist: - channel_whitelist: list - failed: list[discord.TextChannel] = [] - for channel in channels: - if channel.id in channel_whitelist: - failed.append(channel) - continue - channel_whitelist.append(channel.id) - await ctx.tick() - if failed: - await ctx.send(f"The following channels were already in the whitelist: {humanize_list([channel.mention for channel in failed])}", delete_after=10) - - @antipolls_channels.command(name="remove") - async def antipolls_channels_remove(self, ctx: commands.Context, *channels: discord.TextChannel) -> None: - """Remove channels from the whitelist.""" - async with self.config.guild(ctx.guild).channel_whitelist() as channel_whitelist: - channel_whitelist: list - failed: list[discord.TextChannel] = [] - for channel in channels: - if channel.id not in channel_whitelist: - failed.append(channel) - continue - channel_whitelist.remove(channel.id) - await ctx.tick() - if failed: - await ctx.send(f"The following channels were not in the whitelist: {humanize_list([channel.mention for channel in failed])}", delete_after=10) - - @antipolls_channels.command(name="list") - async def antipolls_channels_list(self, ctx: commands.Context) -> None: - """List channels in the whitelist.""" - channel_whitelist = await self.config.guild(ctx.guild).channel_whitelist() - if not channel_whitelist: - return await ctx.send("No channels in the whitelist.") - channels = [ctx.guild.get_channel(channel) for channel in channel_whitelist] - await ctx.send(humanize_list([channel.mention for channel in channels])) - - @antipolls.command(name="managemessages") - async def antipolls_managemessages(self, ctx: commands.Context, enabled: bool) -> None: - """Toggle Manage Messages permission check.""" - await self.config.guild(ctx.guild).manage_messages.set(enabled) - await ctx.tick() diff --git a/antipolls/info.json b/antipolls/info.json deleted file mode 100644 index 569fa0c..0000000 --- a/antipolls/info.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "author" : ["SeaswimmerTheFsh (seasw.)"], - "install_msg" : "Thank you for installing AntiPolls!\nYou can find the source code of this cog [here](https://coastalcommits.com/SeaswimmerTheFsh/SeaCogs).", - "name" : "AntiPolls", - "short" : "AntiPolls deletes messages that contain polls.", - "description" : "AntiPolls deletes messages that contain polls, with a configurable per-guild role and channel whitelist and support for default Discord permissions (Manage Messages).", - "end_user_data_statement" : "This cog does not store any user data.", - "hidden": false, - "disabled": false, - "min_bot_version": "3.5.0", - "min_python_version": [3, 10, 0], - "tags": [ - "automod", - "automoderation", - "polls" - ] -} diff --git a/aurora/aurora.py b/aurora/aurora.py index 563a82c..7414b78 100644 --- a/aurora/aurora.py +++ b/aurora/aurora.py @@ -13,13 +13,14 @@ from datetime import datetime, timedelta, timezone from math import ceil import discord -from discord import Object +import humanize from discord.ext import tasks +from pytimeparse2 import disable_dateutil, parse from redbot.core import app_commands, commands, data_manager from redbot.core.app_commands import Choice from redbot.core.bot import Red -from redbot.core.commands.converter import parse_relativedelta, parse_timedelta -from redbot.core.utils.chat_formatting import box, error, humanize_list, humanize_timedelta, warning +from redbot.core.utils.chat_formatting import (box, error, humanize_list, + warning) from aurora.importers.aurora import ImportAuroraView from aurora.importers.galacticbot import ImportGalacticBotView @@ -28,10 +29,17 @@ from aurora.menus.guild import Guild from aurora.menus.immune import Immune from aurora.menus.overrides import Overrides from aurora.utilities.config import config, register_config -from aurora.utilities.database import connect, create_guild_table, fetch_case, mysql_log -from aurora.utilities.factory import addrole_embed, case_factory, changes_factory, evidenceformat_factory, guild_embed, immune_embed, message_factory, overrides_embed +from aurora.utilities.database import (connect, create_guild_table, fetch_case, + mysql_log) +from aurora.utilities.factory import (addrole_embed, case_factory, + changes_factory, evidenceformat_factory, + guild_embed, immune_embed, + message_factory, overrides_embed) from aurora.utilities.logger import logger -from aurora.utilities.utils import check_moddable, check_permissions, convert_timedelta_to_str, fetch_channel_dict, fetch_user_dict, generate_dict, get_footer_image, log, send_evidenceformat, timedelta_from_relativedelta +from aurora.utilities.utils import (check_moddable, check_permissions, + convert_timedelta_to_str, + fetch_channel_dict, fetch_user_dict, + generate_dict, log, send_evidenceformat) class Aurora(commands.Cog): @@ -40,8 +48,7 @@ class Aurora(commands.Cog): This cog stores all of its data in an SQLite database.""" __author__ = ["SeaswimmerTheFsh"] - __version__ = "2.1.3" - __documentation__ = "https://seacogs.coastalcommits.com/aurora/" + __version__ = "2.1.6" async def red_delete_data_for_user(self, *, requester, user_id: int): if requester == "discord_deleted_user": @@ -77,6 +84,7 @@ class Aurora(commands.Cog): super().__init__() self.bot = bot register_config(config) + disable_dateutil() self.handle_expiry.start() def format_help_for_context(self, ctx: commands.Context) -> str: @@ -86,7 +94,6 @@ class Aurora(commands.Cog): f"{pre_processed}{n}", f"Cog Version: **{self.__version__}**", f"Author: {humanize_list(self.__author__)}", - f"Documentation: {self.__documentation__}", ] return "\n".join(text) @@ -114,20 +121,6 @@ class Aurora(commands.Cog): except ConnectionRefusedError: return - @commands.Cog.listener("on_member_join") - async def addrole_on_member_join(self, member: discord.Member): - """This method automatically adds roles to users when they join the server.""" - if not await self.bot.cog_disabled_in_guild(self, member.guild): - query = f"""SELECT moderation_id, role_id, reason FROM moderation_{member.guild.id} WHERE target_id = ? AND moderation_type = 'ADDROLE' AND expired = 0 AND resolved = 0;""" - database = connect() - cursor = database.cursor() - cursor.execute(query, (member.id,)) - results = cursor.fetchall() - for result in results: - role = member.guild.get_role(result[1]) - reason = result[2] - await member.add_roles(role, reason=f"Role automatically added on member rejoin for: {reason} (Case #{result[0]:,})") - @commands.Cog.listener("on_audit_log_entry_create") async def autologger(self, entry: discord.AuditLogEntry): """This method automatically logs moderations done by users manually ("right clicks").""" @@ -187,50 +180,47 @@ class Aurora(commands.Cog): ### COMMANDS ####################################################################################################################### - @app_commands.command(name="note") + @commands.hybrid_command(name="note") + @commands.mod_or_permissions(moderate_members=True) + @app_commands.describe( + target="Who are you noting?", + reason="Why are you noting this user?", + silent="Should the user be messaged?", + ) async def note( self, - interaction: discord.Interaction, + ctx: commands.Context, target: discord.User, reason: str, silent: bool = None, ): - """Add a note to a user. - - Parameters - ----------- - target: discord.User - Who are you noting? - reason: str - Why are you noting this user? - silent: bool - Should the user be messaged?""" - if not await check_moddable(target, interaction, ["moderate_members"]): + """Add a note to a user.""" + if not await check_moddable(target, ctx, ["moderate_members"]): return - await interaction.response.send_message( + message = await ctx.send( content=f"{target.mention} has recieved a note!\n**Reason** - `{reason}`" ) if silent is None: - silent = not await config.guild(interaction.guild).dm_users() + silent = not await config.guild(ctx.guild).dm_users() if silent is False: try: embed = await message_factory( - await self.bot.get_embed_color(interaction.channel), - guild=interaction.guild, - moderator=interaction.user, + await self.bot.get_embed_color(ctx.channel), + guild=ctx.guild, + moderator=ctx.author, reason=reason, moderation_type="note", - response=await interaction.original_response(), + response=message, ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass moderation_id = await mysql_log( - interaction.guild.id, - interaction.user.id, + ctx.guild.id, + ctx.author.id, "NOTE", "USER", target.id, @@ -238,58 +228,55 @@ class Aurora(commands.Cog): "NULL", reason, ) - await interaction.edit_original_response( + await message.edit( content=f"{target.mention} has received a note! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`" ) - await log(interaction, moderation_id) + await log(ctx, moderation_id) - case = await fetch_case(moderation_id, interaction.guild.id) - await send_evidenceformat(interaction, case) + case = await fetch_case(moderation_id, ctx.guild.id) + await send_evidenceformat(ctx, case) - @app_commands.command(name="warn") + @commands.hybrid_command(name="warn") + @commands.mod_or_permissions(moderate_members=True) + @app_commands.describe( + target="Who are you warning?", + reason="Why are you warning this user?", + silent="Should the user be messaged?", + ) async def warn( self, - interaction: discord.Interaction, + ctx: commands.Context, target: discord.Member, reason: str, silent: bool = None, ): - """Warn a user. - - Parameters - ----------- - target: discord.Member - Who are you warning? - reason: str - Why are you warning this user? - silent: bool - Should the user be messaged?""" - if not await check_moddable(target, interaction, ["moderate_members"]): + """Warn a user.""" + if not await check_moddable(target, ctx, ["moderate_members"]): return - await interaction.response.send_message( + message = await ctx.send( content=f"{target.mention} has been warned!\n**Reason** - `{reason}`" ) if silent is None: - silent = not await config.guild(interaction.guild).dm_users() + silent = not await config.guild(ctx.guild).dm_users() if silent is False: try: embed = await message_factory( - await self.bot.get_embed_color(interaction.channel), - guild=interaction.guild, - moderator=interaction.user, + await self.bot.get_embed_color(ctx.channel), + guild=ctx.guild, + moderator=ctx.author, reason=reason, moderation_type="warned", - response=await interaction.original_response(), + response=message, ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass moderation_id = await mysql_log( - interaction.guild.id, - interaction.user.id, + ctx.guild.id, + ctx.author.id, "WARN", "USER", target.id, @@ -297,13 +284,13 @@ class Aurora(commands.Cog): "NULL", reason, ) - await interaction.edit_original_response( + await message.edit( content=f"{target.mention} has been warned! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`" ) - await log(interaction, moderation_id) + await log(ctx, moderation_id) - case = await fetch_case(moderation_id, interaction.guild.id) - await send_evidenceformat(interaction, case) + case = await fetch_case(moderation_id, ctx.guild.id) + await send_evidenceformat(ctx, case) @app_commands.command(name="addrole") async def addrole( @@ -339,10 +326,13 @@ class Aurora(commands.Cog): return if duration is not None: - parsed_time = parse_timedelta(duration) - if parsed_time is None: + try: + parsed_time = parse( + sval=duration, as_timedelta=True, raise_exception=True + ) + except ValueError: await interaction.response.send_message( - content=error("Please provide a valid duration!"), ephemeral=True + error("Please provide a valid duration!"), ephemeral=True ) return else: @@ -381,16 +371,16 @@ class Aurora(commands.Cog): duration=parsed_time, role=role, ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass await target.add_roles( role, - reason=f"Role added by {interaction.user.id}{' for ' + humanize_timedelta(timedelta=parsed_time) if parsed_time != 'NULL' else ''} for: {reason}", + reason=f"Role added by {interaction.user.id}{(' for ' + {humanize.precisedelta(parsed_time)} if parsed_time != 'NULL' else '')} for: {reason}", ) response: discord.WebhookMessage = await interaction.followup.send( - content=f"{target.mention} has been given the {role.mention} role{' for ' + humanize_timedelta(timedelta=parsed_time) if parsed_time != 'NULL' else ''}!\n**Reason** - `{reason}`" + content=f"{target.mention} has been given the {role.mention} role{(' for ' + {humanize.precisedelta(parsed_time)} if parsed_time != 'NULL' else '')}!\n**Reason** - `{reason}`" ) moderation_id = await mysql_log( @@ -404,145 +394,35 @@ class Aurora(commands.Cog): reason, ) await response.edit( - content=f"{target.mention} has been given the {role.mention} role{' for ' + humanize_timedelta(timedelta=parsed_time) if parsed_time != 'NULL' else ''}! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`", + content=f"{target.mention} has been given the {role.mention} role{(' for ' + {humanize.precisedelta(parsed_time)} if parsed_time != 'NULL' else '')}! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`", ) await log(interaction, moderation_id) case = await fetch_case(moderation_id, interaction.guild.id) await send_evidenceformat(interaction, case) - @app_commands.command(name="removerole") - async def removerole( - self, - interaction: discord.Interaction, - target: discord.Member, - role: discord.Role, - reason: str, - duration: str = None, - silent: bool = None, - ): - """Remove a role from a user. - - Parameters - ----------- - target: discord.Member - Who are you removing a role from? - role: discord.Role - What role are you removing from the target? - reason: str - Why are you removing a role from this user? - duration: str - How long are you removing this role for? - silent: bool - Should the user be messaged?""" - addrole_whitelist = await config.guild(interaction.guild).addrole_whitelist() - - if not addrole_whitelist: - await interaction.response.send_message( - content=error("There are no whitelisted roles set for this server!"), - ephemeral=True, - ) - return - - if duration is not None: - parsed_time = parse_timedelta(duration) - if parsed_time is None: - await interaction.response.send_message( - content=error("Please provide a valid duration!"), ephemeral=True - ) - return - else: - parsed_time = "NULL" - - if role.id not in addrole_whitelist: - await interaction.response.send_message( - content=error("That role isn't whitelisted!"), ephemeral=True - ) - return - - if not await check_moddable( - target, interaction, ["moderate_members", "manage_roles"] - ): - return - - if role.id not in [user_role.id for user_role in target.roles]: - await interaction.response.send_message( - content=error(f"{target.mention} does not have this role!"), - ephemeral=True, - ) - return - - await interaction.response.defer() - if silent is None: - silent = not await config.guild(interaction.guild).dm_users() - if silent is False: - try: - embed = await message_factory( - await self.bot.get_embed_color(interaction.channel), - guild=interaction.guild, - moderator=interaction.user, - reason=reason, - moderation_type="removerole", - response=await interaction.original_response(), - duration=parsed_time, - role=role, - ) - await target.send(embed=embed, file=get_footer_image(self)) - except discord.errors.HTTPException: - pass - - await target.remove_roles( - role, - reason=f"Role removed by {interaction.user.id}{' for ' + humanize_timedelta(timedelta=parsed_time) if parsed_time != 'NULL' else ''} for: {reason}", - ) - response: discord.WebhookMessage = await interaction.followup.send( - content=f"{target.mention} has had the {role.mention} role removed{' for ' + humanize_timedelta(timedelta=parsed_time) if parsed_time != 'NULL' else ''}!\n**Reason** - `{reason}`" - ) - - moderation_id = await mysql_log( - interaction.guild.id, - interaction.user.id, - "REMOVEROLE", - "USER", - target.id, - role.id, - parsed_time, - reason, - ) - await response.edit( - content=f"{target.mention} has had the {role.mention} role removed{' for ' + humanize_timedelta(timedelta=parsed_time) if parsed_time != 'NULL' else ''}! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`", - ) - await log(interaction, moderation_id) - - case = await fetch_case(moderation_id, interaction.guild.id) - await send_evidenceformat(interaction, case) - - @app_commands.command(name="mute") + @commands.hybrid_command(name="mute") + @commands.mod_or_permissions(moderate_members=True) + @app_commands.describe( + target="Who are you muting?", + duration="How long are you muting this user for?", + reason="Why are you muting this user?", + silent="Should the user be messaged?", + ) async def mute( self, - interaction: discord.Interaction, + ctx: commands.Context, target: discord.Member, duration: str, reason: str, silent: bool = None, ): - """Mute a user. - - Parameters - ----------- - target: discord.Member - Who are you unbanning? - duration: str - How long are you muting this user for? - reason: str - Why are you unbanning this user? - silent: bool - Should the user be messaged?""" - if not await check_moddable(target, interaction, ["moderate_members"]): + """Mute a user.""" + if not await check_moddable(target, ctx, ["moderate_members"]): return if target.is_timed_out() is True: - await interaction.response.send_message( + await ctx.send( error(f"{target.mention} is already muted!"), allowed_mentions=discord.AllowedMentions(users=False), ephemeral=True, @@ -550,46 +430,47 @@ class Aurora(commands.Cog): return try: - parsed_time = parse_timedelta(duration, maximum=timedelta(days=28)) - if parsed_time is None: - await interaction.response.send_message( - error("Please provide a valid duration!"), ephemeral=True - ) - return - except commands.BadArgument: - await interaction.response.send_message( - error("Please provide a duration that is less than 28 days."), ephemeral=True + parsed_time = parse(sval=duration, as_timedelta=True, raise_exception=True) + except ValueError: + await ctx.send( + error("Please provide a valid duration!"), ephemeral=True + ) + return + + if parsed_time.total_seconds() / 1000 > 2419200000: + await ctx.send( + error("Please provide a duration that is less than 28 days.") ) return await target.timeout( - parsed_time, reason=f"Muted by {interaction.user.id} for: {reason}" + parsed_time, reason=f"Muted by {ctx.author.id} for: {reason}" ) - await interaction.response.send_message( - content=f"{target.mention} has been muted for {humanize_timedelta(timedelta=parsed_time)}!\n**Reason** - `{reason}`" + message = await ctx.send( + content=f"{target.mention} has been muted for {humanize.precisedelta(parsed_time)}!\n**Reason** - `{reason}`" ) if silent is None: - silent = not await config.guild(interaction.guild).dm_users() + silent = not await config.guild(ctx.guild).dm_users() if silent is False: try: embed = await message_factory( - await self.bot.get_embed_color(interaction.channel), - guild=interaction.guild, - moderator=interaction.user, + await ctx.embed_color(), + guild=ctx.guild, + moderator=ctx.author, reason=reason, moderation_type="muted", - response=await interaction.original_response(), + response=message, duration=parsed_time, ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass moderation_id = await mysql_log( - interaction.guild.id, - interaction.user.id, + ctx.guild.id, + ctx.author.id, "MUTE", "USER", target.id, @@ -597,37 +478,34 @@ class Aurora(commands.Cog): parsed_time, reason, ) - await interaction.edit_original_response( - content=f"{target.mention} has been muted for {humanize_timedelta(timedelta=parsed_time)}! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`" + await message.edit( + content=f"{target.mention} has been muted for {humanize.precisedelta(parsed_time)}! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`" ) - await log(interaction, moderation_id) + await log(ctx, moderation_id) - case = await fetch_case(moderation_id, interaction.guild.id) - await send_evidenceformat(interaction, case) + case = await fetch_case(moderation_id, ctx.guild.id) + await send_evidenceformat(ctx, case) - @app_commands.command(name="unmute") + @commands.hybrid_command(name="unmute") + @commands.mod_or_permissions(moderate_members=True) + @app_commands.describe( + target="Who are you unmuting?", + reason="Why are you unmuting this user?", + silent="Should the user be messaged?", + ) async def unmute( self, - interaction: discord.Interaction, + ctx: commands.Context, target: discord.Member, reason: str = None, silent: bool = None, ): - """Unmute a user. - - Parameters - ----------- - target: discord.user - Who are you unmuting? - reason: str - Why are you unmuting this user? - silent: bool - Should the user be messaged?""" - if not await check_moddable(target, interaction, ["moderate_members"]): + """Unmute a user.""" + if not await check_moddable(target, ctx, ["moderate_members"]): return if target.is_timed_out() is False: - await interaction.response.send_message( + await ctx.send( error(f"{target.mention} is not muted!"), allowed_mentions=discord.AllowedMentions(users=False), ephemeral=True, @@ -636,35 +514,35 @@ class Aurora(commands.Cog): if reason: await target.timeout( - None, reason=f"Unmuted by {interaction.user.id} for: {reason}" + None, reason=f"Unmuted by {ctx.author.id} for: {reason}" ) else: - await target.timeout(None, reason=f"Unbanned by {interaction.user.id}") + await target.timeout(None, reason=f"Unmuted by {ctx.author.id}") reason = "No reason given." - await interaction.response.send_message( + message = await ctx.send( content=f"{target.mention} has been unmuted!\n**Reason** - `{reason}`" ) if silent is None: - silent = not await config.guild(interaction.guild).dm_users() + silent = not await config.guild(ctx.guild).dm_users() if silent is False: try: embed = await message_factory( - await self.bot.get_embed_color(interaction.channel), - guild=interaction.guild, - moderator=interaction.user, + await ctx.embed_color(), + guild=ctx.guild, + moderator=ctx.author, reason=reason, moderation_type="unmuted", - response=await interaction.original_response(), + response=message, ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass moderation_id = await mysql_log( - interaction.guild.id, - interaction.user.id, + ctx.guild.id, + ctx.author.id, "UNMUTE", "USER", target.id, @@ -672,13 +550,13 @@ class Aurora(commands.Cog): "NULL", reason, ) - await interaction.edit_original_response( + await message.edit( content=f"{target.mention} has been unmuted! (Case `#{moderation_id:,}`)\n**Reason** - `{reason}`" ) - await log(interaction, moderation_id) + await log(ctx, moderation_id) - case = await fetch_case(moderation_id, interaction.guild.id) - await send_evidenceformat(interaction, case) + case = await fetch_case(moderation_id, ctx.guild.id) + await send_evidenceformat(ctx, case) @app_commands.command(name="kick") async def kick( @@ -717,7 +595,7 @@ class Aurora(commands.Cog): moderation_type="kicked", response=await interaction.original_response(), ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass @@ -793,22 +671,18 @@ class Aurora(commands.Cog): pass if duration: - parsed_time = parse_relativedelta(duration) - if parsed_time is None: - await interaction.response.send_message( - content=error("Please provide a valid duration!"), ephemeral=True - ) - return try: - parsed_time = timedelta_from_relativedelta(parsed_time) + parsed_time = parse( + sval=duration, as_timedelta=True, raise_exception=True + ) except ValueError: await interaction.response.send_message( - content=error("Please provide a valid duration!"), ephemeral=True + error("Please provide a valid duration!"), ephemeral=True ) return await interaction.response.send_message( - content=f"{target.mention} has been banned for {humanize_timedelta(timedelta=parsed_time)}!\n**Reason** - `{reason}`" + content=f"{target.mention} has been banned for {humanize.precisedelta(parsed_time)}!\n**Reason** - `{reason}`" ) try: @@ -821,7 +695,7 @@ class Aurora(commands.Cog): response=await interaction.original_response(), duration=parsed_time, ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass @@ -842,7 +716,7 @@ class Aurora(commands.Cog): reason, ) await interaction.edit_original_response( - content=f"{target.mention} has been banned for {humanize_timedelta(timedelta=parsed_time)}! (Case `#{moderation_id}`)\n**Reason** - `{reason}`" + content=f"{target.mention} has been banned for {humanize.precisedelta(parsed_time)}! (Case `#{moderation_id}`)\n**Reason** - `{reason}`" ) await log(interaction, moderation_id) @@ -865,7 +739,7 @@ class Aurora(commands.Cog): moderation_type="banned", response=await interaction.original_response(), ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass @@ -948,7 +822,7 @@ class Aurora(commands.Cog): moderation_type="unbanned", response=await interaction.original_response(), ) - await target.send(embed=embed, file=get_footer_image(self)) + await target.send(embed=embed) except discord.errors.HTTPException: pass @@ -1182,9 +1056,9 @@ class Aurora(commands.Cog): } ) duration_embed = ( - f"{humanize_timedelta(timedelta=td)} | " + f"{humanize.precisedelta(td)} | " if bool(case["expired"]) is False - else f"{humanize_timedelta(timedelta=td)} | Expired" + else f"{humanize.precisedelta(td)} | Expired" ) field_value += f"\n**Duration:** {duration_embed}" @@ -1427,7 +1301,7 @@ class Aurora(commands.Cog): os.remove(filename) return await interaction.response.send_message( - content=box(json.dumps(case_dict, indent=2), 'json'), + content=box({json.dumps(case_dict, indent=2)}), ephemeral=ephemeral, ) return @@ -1493,8 +1367,11 @@ class Aurora(commands.Cog): case_dict = await fetch_case(case, interaction.guild.id) if case_dict: if duration: - parsed_time = parse_timedelta(duration) - if parsed_time is None: + try: + parsed_time = parse( + sval=duration, as_timedelta=True, raise_exception=True + ) + except ValueError: await interaction.response.send_message( error("Please provide a valid duration!"), ephemeral=True ) @@ -1607,13 +1484,10 @@ class Aurora(commands.Cog): @tasks.loop(minutes=1) async def handle_expiry(self): - await self.bot.wait_until_red_ready() current_time = time.time() database = connect() cursor = database.cursor() - global_unban_num = 0 - global_addrole_num = 0 - global_removerole_num = 0 + global_num = 0 guilds: list[discord.Guild] = self.bot.guilds for guild in guilds: @@ -1631,7 +1505,7 @@ class Aurora(commands.Cog): target_ids = [row[0] for row in result] moderation_ids = [row[1] for row in result] - unban_num = 0 + num = 0 for target_id, moderation_id in zip(target_ids, moderation_ids): user: discord.User = await self.bot.fetch_user(target_id) name = ( @@ -1652,7 +1526,7 @@ class Aurora(commands.Cog): ) try: - await user.send(embed=embed, file=get_footer_image(self)) + await user.send(embed=embed) except discord.errors.HTTPException: pass @@ -1663,7 +1537,7 @@ class Aurora(commands.Cog): guild.name, guild.id, ) - unban_num = unban_num + 1 + num = num + 1 except ( discord.errors.NotFound, discord.errors.Forbidden, @@ -1678,87 +1552,44 @@ class Aurora(commands.Cog): e, ) - removerole_num = 0 - addrole_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'ADDROLE' AND expired = 0" - try: - cursor.execute(addrole_query, (time.time(),)) - result = cursor.fetchall() - except sqlite3.OperationalError: - continue - target_ids = [row[0] for row in result] - moderation_ids = [row[1] for row in result] - role_ids = [row[2] for row in result] - - for target_id, moderation_id, role_id in zip( - target_ids, moderation_ids, role_ids - ): - try: - member = await guild.fetch_member(target_id) - - await member.remove_roles( - Object(role_id), reason=f"Automatic role removal from case #{moderation_id}" - ) - - removerole_num = removerole_num + 1 - except ( - discord.errors.NotFound, - discord.errors.Forbidden, - discord.errors.HTTPException, - ) as e: - logger.error( - "Removing the role %s from user %s failed due to: \n%s", - role_id, - target_id, - e, - ) - continue - - addrole_num = 0 - removerole_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'REMOVEROLE' AND expired = 0" - try: - cursor.execute(removerole_query, (time.time(),)) - result = cursor.fetchall() - except sqlite3.OperationalError: - continue - target_ids = [row[0] for row in result] - moderation_ids = [row[1] for row in result] - role_ids = [row[2] for row in result] - - for target_id, moderation_id, role_id in zip( - target_ids, moderation_ids, role_ids - ): - try: - member = await guild.fetch_member(target_id) - - await member.add_roles( - Object(role_id), reason=f"Automatic role addition from case #{moderation_id}" - ) - - addrole_num = addrole_num + 1 - except ( - discord.errors.NotFound, - discord.errors.Forbidden, - discord.errors.HTTPException, - ) as e: - logger.error("Adding the role %s to user %s failed due to: \n%s", role_id, target_id, e) - continue - - expiry_query = f"UPDATE `moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= ? AND expired = 0) OR (expired = 0 AND resolved = 1);" + expiry_query = f"UPDATE `moderation_{guild.id}` SET expired = 1 WHERE (end_timestamp != 0 AND end_timestamp <= ? AND expired = 0 AND moderation_type != 'BLACKLIST') OR (expired = 0 AND resolved = 1 AND moderation_type != 'BLACKLIST')" cursor.execute(expiry_query, (time.time(),)) + blacklist_query = f"SELECT target_id, moderation_id, role_id FROM moderation_{guild.id} WHERE end_timestamp != 0 AND end_timestamp <= ? AND moderation_type = 'BLACKLIST' AND expired = 0" + try: + cursor.execute(blacklist_query, (time.time(),)) + result = cursor.fetchall() + except sqlite3.OperationalError: + continue + target_ids = [row[0] for row in result] + moderation_ids = [row[1] for row in result] + role_ids = [row[2] for row in result] + + for target_id, moderation_id, role_id in zip( + target_ids, moderation_ids, role_ids + ): + try: + # member: discord.Member = await guild.fetch_member(target_id) + + role: discord.Role = guild.get_role(role_id) + if role is None: + raise discord.errors.NotFound + except ( + discord.errors.NotFound, + discord.errors.Forbidden, + discord.errors.HTTPException, + ): + continue + per_guild_completion_time = (time.time() - time_per_guild) * 1000 logger.debug( - "Completed expiry loop for %s (%s) in %sms with %s users unbanned, %s roles added, and %s roles removed", + "Completed expiry loop for %s (%s) in %sms with %s users unbanned", guild.name, guild.id, f"{per_guild_completion_time:.6f}", - unban_num, - addrole_num, - removerole_num, + num, ) - global_unban_num = global_unban_num + unban_num - global_addrole_num = global_addrole_num + addrole_num - global_removerole_num = global_removerole_num + removerole_num + global_num = global_num + num database.commit() cursor.close() @@ -1766,11 +1597,9 @@ class Aurora(commands.Cog): completion_time = (time.time() - current_time) * 1000 logger.debug( - "Completed expiry loop in %sms with %s users unbanned, %s roles added, and %s roles removed", + "Completed expiry loop in %sms with %s users unbanned", f"{completion_time:.6f}", - global_unban_num, - global_addrole_num, - global_removerole_num, + global_num, ) ######################################################################################################################## @@ -1788,16 +1617,14 @@ class Aurora(commands.Cog): @aurora_settings.command(name="overrides", aliases=["override", "user"]) async def aurora_settings_overrides(self, ctx: commands.Context): """Manage Aurora's user overriddable settings.""" - msg = await ctx.send(embed=await overrides_embed(ctx)) - await msg.edit(view=Overrides(ctx, msg, 60)) + await ctx.send(embed=await overrides_embed(ctx), view=Overrides(ctx)) @aurora_settings.command(name="guild", aliases=["server"]) @commands.admin_or_permissions(manage_guild=True) @commands.guild_only() async def aurora_settings_guild(self, ctx: commands.Context): """Manage Aurora's guild settings.""" - msg = await ctx.send(embed=await guild_embed(ctx)) - await msg.edit(view=Guild(ctx, msg, 60)) + await ctx.send(embed=await guild_embed(ctx), view=Guild(ctx)) @aurora_settings.command(name="addrole", aliases=["removerole"]) @commands.admin_or_permissions(manage_guild=True) @@ -1806,16 +1633,14 @@ class Aurora(commands.Cog): """Manage the addrole whitelist. Roles added to this list are also applied to `/removerole`.""" - msg = await ctx.send(embed=await addrole_embed(ctx)) - await msg.edit(view=Addrole(ctx, msg, 60)) + await ctx.send(embed=await addrole_embed(ctx), view=Addrole(ctx)) @aurora_settings.command(name="immunity") @commands.admin_or_permissions(manage_guild=True) @commands.guild_only() async def aurora_settings_immunity(self, ctx: commands.Context): """Manage the immunity whitelist.""" - msg = await ctx.send(embed=await immune_embed(ctx)) - await msg.edit(view=Immune(ctx, msg, 60)) + await ctx.send(embed=await immune_embed(ctx), view=Immune(ctx)) @aurora.group(autohelp=True, name="import") @commands.admin() @@ -1862,34 +1687,15 @@ class Aurora(commands.Cog): ) @aurora.command(aliases=["tdc", "td", "timedeltaconvert"]) - async def timedelta(self, ctx: commands.Context, *, duration: str) -> None: - """Convert a string to a timedelta. - - This command converts a duration to a [`timedelta`](https://docs.python.org/3/library/datetime.html#datetime.timedelta) Python object. - You cannot convert years or months as they are not fixed units. Use `[p]aurora relativedelta` for that. + async def timedelta(self, ctx: commands.Context, *, duration: str): + """This command converts a duration to a [`timedelta`](https://docs.python.org/3/library/datetime.html#datetime.timedelta) Python object. **Example usage** `[p]aurora timedelta 1 day 15hr 82 minutes 52s` **Output** `1 day, 16:22:52`""" - parsed_time = parse_timedelta(duration) - if parsed_time is None: + try: + parsed_time = parse(duration, as_timedelta=True, raise_exception=True) + await ctx.send(f"`{str(parsed_time)}`") + except ValueError: await ctx.send(error("Please provide a convertible value!")) - return - await ctx.send(f"`{parsed_time}`") - - @aurora.command(aliases=["rdc", "rd", "relativedeltaconvert"]) - async def relativedelta(self, ctx: commands.Context, *, duration: str) -> None: - """Convert a string to a relativedelta. - - This command converts a duration to a [`relativedelta`](https://dateutil.readthedocs.io/en/stable/relativedelta.html) Python object. - - **Example usage** - `[p]aurora relativedelta 3 years 1 day 15hr 82 minutes 52s` - **Output** - `relativedelta(years=+3, days=+1, hours=+15, minutes=+82, seconds=+52)`""" - parsed_time = parse_relativedelta(duration) - if parsed_time is None: - await ctx.send(error("Please provide a convertible value!")) - return - await ctx.send(f"`{parsed_time}`") diff --git a/aurora/data/arrow.png b/aurora/data/arrow.png deleted file mode 100644 index aedf12e..0000000 Binary files a/aurora/data/arrow.png and /dev/null differ diff --git a/aurora/importers/aurora.py b/aurora/importers/aurora.py index 44cab98..a4857aa 100644 --- a/aurora/importers/aurora.py +++ b/aurora/importers/aurora.py @@ -43,7 +43,7 @@ class ImportAuroraView(ui.View): file = await self.ctx.message.attachments[0].read() data: list[dict] = sorted(json.loads(file), key=lambda x: x["moderation_id"]) - user_mod_types = ["NOTE", "WARN", "ADDROLE", "REMOVEROLE", "MUTE", "UNMUTE", "KICK", "TEMPBAN", "BAN", "UNBAN"] + user_mod_types = ["NOTE", "WARN", "MUTE", "UNMUTE", "KICK", "BAN", "UNBAN"] channel_mod_types = ["SLOWMODE", "LOCKDOWN"] @@ -58,8 +58,6 @@ class ImportAuroraView(ui.View): case["target_type"] = "USER" elif case["moderation_type"] in channel_mod_types: case["target_type"] = "CHANNEL" - else: - case["target_type"] = "USER" if "role_id" not in case or not case["role_id"]: case["role_id"] = 0 diff --git a/aurora/info.json b/aurora/info.json index 52a577e..0d6d417 100644 --- a/aurora/info.json +++ b/aurora/info.json @@ -5,6 +5,7 @@ "short" : "A full replacement for Red's core Mod cogs.", "description" : "Aurora is a fully-featured moderation system. It is heavily inspired by GalacticBot, and is designed to be a more user-friendly alternative to Red's core Mod cogs. This cog stores all of its data in an SQLite database.", "end_user_data_statement" : "This cog stores the following information:\n- User IDs of accounts who moderate users or are moderated\n- Guild IDs of guilds with the cog enabled\n- Timestamps of moderations\n- Other information relating to moderations", + "requirements": ["humanize", "pytimeparse2"], "hidden": false, "disabled": false, "min_bot_version": "3.5.0", diff --git a/aurora/menus/addrole.py b/aurora/menus/addrole.py index 11f6b32..c6bcc6b 100644 --- a/aurora/menus/addrole.py +++ b/aurora/menus/addrole.py @@ -1,4 +1,4 @@ -from discord import ButtonStyle, Interaction, Message, ui +from discord import ButtonStyle, Interaction, ui from redbot.core import commands from redbot.core.utils.chat_formatting import error @@ -7,14 +7,9 @@ from aurora.utilities.factory import addrole_embed class Addrole(ui.View): - def __init__(self, ctx: commands.Context, message: Message, timeout: int = None): + def __init__(self, ctx: commands.Context): super().__init__() self.ctx = ctx - self.message = message - self.timeout = timeout - - async def on_timeout(self): - await self.message.edit(view=None) @ui.select(cls=ui.RoleSelect, placeholder="Select a role", min_values=0, max_values=25) async def addrole_select(self, interaction: Interaction, select: ui.RoleSelect): @@ -22,13 +17,12 @@ class Addrole(ui.View): await interaction.response.send_message(error("You must have the manage guild permission to add roles to the addrole whitelist."), ephemeral=True) return await interaction.response.defer() - async with config.guild(self.ctx.guild).addrole_whitelist() as addrole_whitelist: - addrole_whitelist: list # type hint - for value in select.values: - if value.id in addrole_whitelist: - addrole_whitelist.remove(value.id) - else: - addrole_whitelist.append(value.id) + addrole_whitelist: list = await config.guild(self.ctx.guild).addrole_whitelist() + if select.values[0].id in addrole_whitelist: + addrole_whitelist.remove(select.values[0].id) + else: + addrole_whitelist.append(select.values[0].id) + await config.guild(self.ctx.guild).addrole_whitelist.set(addrole_whitelist) await interaction.message.edit(embed=await addrole_embed(self.ctx)) @ui.button(label="Clear", style=ButtonStyle.red, row=1) diff --git a/aurora/menus/guild.py b/aurora/menus/guild.py index f99e552..a7c78c7 100644 --- a/aurora/menus/guild.py +++ b/aurora/menus/guild.py @@ -1,4 +1,4 @@ -from discord import ButtonStyle, Interaction, Message, ui +from discord import ButtonStyle, Interaction, ui from redbot.core import commands from aurora.utilities.config import config @@ -7,14 +7,9 @@ from aurora.utilities.utils import create_pagesize_options class Guild(ui.View): - def __init__(self, ctx: commands.Context, message: Message, timeout: int = None): + def __init__(self, ctx: commands.Context): super().__init__() self.ctx = ctx - self.message = message - self.timeout = timeout - - async def on_timeout(self): - await self.message.edit(view=None) @ui.button(label="Show Moderator", style=ButtonStyle.green, row=0) async def show_moderator(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument @@ -22,7 +17,7 @@ class Guild(ui.View): await interaction.response.send_message("You must have the manage guild permission to change this setting.", ephemeral=True) return await interaction.response.defer() - current_setting = await config.guild(interaction.guild).show_moderator() + current_setting = await config.guild(interaction.guild).show_moderator await config.guild(interaction.guild).show_moderator.set(not current_setting) await interaction.message.edit(embed=await guild_embed(self.ctx)) @@ -36,16 +31,6 @@ class Guild(ui.View): await config.guild(interaction.guild).use_discord_permissions.set(not current_setting) await interaction.message.edit(embed=await guild_embed(self.ctx)) - @ui.button(label="Respect Hierarchy", style=ButtonStyle.green, row=0) - async def respect_heirarchy(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument - if not interaction.user.guild_permissions.manage_guild and not interaction.user.guild_permissions.administrator: - await interaction.response.send_message("You must have the manage guild permission to change this setting.", ephemeral=True) - return - await interaction.response.defer() - current_setting = await config.guild(interaction.guild).respect_hierarchy() - await config.guild(interaction.guild).respect_hierarchy.set(not current_setting) - await interaction.message.edit(embed=await guild_embed(self.ctx)) - @ui.button(label="Ignore Modlog", style=ButtonStyle.green, row=0) async def ignore_modlog(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument if not interaction.user.guild_permissions.manage_guild and not interaction.user.guild_permissions.administrator: diff --git a/aurora/menus/immune.py b/aurora/menus/immune.py index 2a5c007..b9697b6 100644 --- a/aurora/menus/immune.py +++ b/aurora/menus/immune.py @@ -1,4 +1,4 @@ -from discord import ButtonStyle, Interaction, Message, ui +from discord import ButtonStyle, Interaction, ui from redbot.core import commands from redbot.core.utils.chat_formatting import error @@ -7,14 +7,9 @@ from aurora.utilities.factory import immune_embed class Immune(ui.View): - def __init__(self, ctx: commands.Context, message: Message, timeout: int = None): + def __init__(self, ctx: commands.Context): super().__init__() self.ctx = ctx - self.message = message - self.timeout = timeout - - async def on_timeout(self): - await self.message.edit(view=None) @ui.select(cls=ui.RoleSelect, placeholder="Select a role", min_values=0, max_values=25) async def immune_select(self, interaction: Interaction, select: ui.RoleSelect): @@ -22,13 +17,13 @@ class Immune(ui.View): await interaction.response.send_message(error("You must have the manage guild permission to add immune roles."), ephemeral=True) return await interaction.response.defer() - async with config.guild(self.ctx.guild).immune_roles() as immune_roles: - immune_roles: list # type hint - for value in select.values: - if value.id in immune_roles: - immune_roles.remove(value.id) - else: - immune_roles.append(value.id) + immune_roles: list = await config.guild(self.ctx.guild).immune_roles() + for role in select.values: + if role.id in immune_roles: + immune_roles.remove(role.id) + else: + immune_roles.append(role.id) + await config.guild(self.ctx.guild).immune_roles.set(immune_roles) await interaction.message.edit(embed=await immune_embed(self.ctx)) @ui.button(label="Clear", style=ButtonStyle.red, row=1) diff --git a/aurora/menus/overrides.py b/aurora/menus/overrides.py index c5d0e68..d98a208 100644 --- a/aurora/menus/overrides.py +++ b/aurora/menus/overrides.py @@ -1,4 +1,4 @@ -from discord import ButtonStyle, Interaction, Message, ui +from discord import ButtonStyle, Interaction, ui from redbot.core import commands from aurora.utilities.config import config @@ -7,14 +7,9 @@ from aurora.utilities.utils import create_pagesize_options class Overrides(ui.View): - def __init__(self, ctx: commands.Context, message: Message, timeout: int = None): + def __init__(self, ctx: commands.Context): super().__init__() self.ctx = ctx - self.message = message - self.timeout = timeout - - async def on_timeout(self): - await self.message.edit(view=None) @ui.button(label="Auto Evidence Format", style=ButtonStyle.green, row=0) async def auto_evidenceformat(self, interaction: Interaction, button: ui.Button): # pylint: disable=unused-argument diff --git a/aurora/utilities/config.py b/aurora/utilities/config.py index 0b5e503..77c1dfe 100644 --- a/aurora/utilities/config.py +++ b/aurora/utilities/config.py @@ -7,7 +7,6 @@ def register_config(config_obj: Config): config_obj.register_guild( show_moderator=True, use_discord_permissions=True, - respect_hierarchy=True, ignore_modlog=True, ignore_other_bots=True, dm_users=True, diff --git a/aurora/utilities/factory.py b/aurora/utilities/factory.py index 0d8a8cd..69d8cda 100644 --- a/aurora/utilities/factory.py +++ b/aurora/utilities/factory.py @@ -2,12 +2,15 @@ from datetime import datetime, timedelta from typing import Union -from discord import Color, Embed, Guild, Interaction, InteractionMessage, Member, Role, User +import humanize +from discord import Color, Embed, Guild, Member, Message, Role, User from redbot.core import commands -from redbot.core.utils.chat_formatting import bold, box, error, humanize_timedelta, warning +from redbot.core.utils.chat_formatting import bold, box, error, warning from aurora.utilities.config import config -from aurora.utilities.utils import fetch_channel_dict, fetch_user_dict, get_bool_emoji, get_next_case_number, get_pagesize_str +from aurora.utilities.utils import (fetch_channel_dict, fetch_user_dict, + get_bool_emoji, get_next_case_number, + get_pagesize_str) async def message_factory( @@ -17,7 +20,7 @@ async def message_factory( moderation_type: str, moderator: Union[Member, User] = None, duration: timedelta = None, - response: InteractionMessage = None, + response: Message = None, role: Role = None, ) -> Embed: """This function creates a message from set parameters, meant for contacting the moderated user. @@ -29,10 +32,9 @@ async def message_factory( moderation_type (str): The type of moderation. moderator (Union[Member, User], optional): The moderator who performed the moderation. Defaults to None. duration (timedelta, optional): The duration of the moderation. Defaults to None. - response (InteractionMessage, optional): The response message. Defaults to None. + response (Message, optional): The response message. Defaults to None. role (Role, optional): The role that was added or removed. Defaults to None. - Returns: embed: The message embed. """ @@ -46,10 +48,8 @@ async def message_factory( else: guild_name = guild.name - title = moderation_type - if moderation_type in ["tempbanned", "muted"] and duration: - embed_duration = f" for {humanize_timedelta(timedelta=duration)}" + embed_duration = f" for {humanize.precisedelta(duration)}" else: embed_duration = "" @@ -57,17 +57,13 @@ async def message_factory( embed_desc = "received a" elif moderation_type == "addrole": embed_desc = f"received the {role.name} role" - title = "Role Added" - moderation_type = "" elif moderation_type == "removerole": embed_desc = f"lost the {role.name} role" - title = "Role Removed" - moderation_type = "" else: embed_desc = "been" embed = Embed( - title=str.title(title), + title=str.title(moderation_type), description=f"You have {embed_desc} {moderation_type}{embed_duration} in {guild_name}.", color=color, timestamp=datetime.now(), @@ -87,14 +83,14 @@ async def message_factory( embed.set_footer( text=f"Case #{await get_next_case_number(guild.id):,}", - icon_url="attachment://arrow.png", + icon_url="https://cdn.discordapp.com/attachments/1070822161389994054/1159469476773904414/arrow-right-circle-icon-512x512-2p1e2aaw.png?ex=65312319&is=651eae19&hm=3cebdd28e805c13a79ec48ef87c32ca532ffa6b9ede2e48d0cf8e5e81f3a6818&", ) return embed async def log_factory( - interaction: Interaction, case_dict: dict, resolved: bool = False + ctx: commands.Context, case_dict: dict, resolved: bool = False ) -> Embed: """This function creates a log embed from set parameters, meant for moderation logging. @@ -105,20 +101,20 @@ async def log_factory( """ if resolved: if case_dict["target_type"] == "USER": - target_user = await fetch_user_dict(interaction.client, case_dict["target_id"]) + target_user = await fetch_user_dict(ctx.bot, case_dict["target_id"]) target_name = ( f"`{target_user['name']}`" if target_user["discriminator"] == "0" else f"`{target_user['name']}#{target_user['discriminator']}`" ) elif case_dict["target_type"] == "CHANNEL": - target_user = await fetch_channel_dict(interaction.guild, case_dict["target_id"]) + target_user = await fetch_channel_dict(ctx.guild, case_dict["target_id"]) if target_user["mention"]: target_name = f"{target_user['mention']}" else: target_name = f"`{target_user['name']}`" - moderator_user = await fetch_user_dict(interaction.client, case_dict["moderator_id"]) + moderator_user = await fetch_user_dict(ctx.bot, case_dict["moderator_id"]) moderator_name = ( f"`{moderator_user['name']}`" if moderator_user["discriminator"] == "0" @@ -127,7 +123,7 @@ async def log_factory( embed = Embed( title=f"📕 Case #{case_dict['moderation_id']:,} Resolved", - color=await interaction.client.get_embed_color(interaction.channel), + color=await ctx.client.get_embed_color(ctx.channel), ) embed.description = f"**Type:** {str.title(case_dict['moderation_type'])}\n**Target:** {target_name} ({target_user['id']})\n**Moderator:** {moderator_name} ({moderator_user['id']})\n**Timestamp:** | " @@ -143,9 +139,9 @@ async def log_factory( } ) duration_embed = ( - f"{humanize_timedelta(timedelta=td)} | " + f"{humanize.precisedelta(td)} | " if case_dict["expired"] == "0" - else str(humanize_timedelta(timedelta=td)) + else str(humanize.precisedelta(td)) ) embed.description = ( embed.description @@ -154,7 +150,7 @@ async def log_factory( embed.add_field(name="Reason", value=box(case_dict["reason"]), inline=False) - resolved_user = await fetch_user_dict(interaction.client, case_dict["resolved_by"]) + resolved_user = await fetch_user_dict(ctx.bot, case_dict["resolved_by"]) resolved_name = ( resolved_user["name"] if resolved_user["discriminator"] == "0" @@ -168,20 +164,20 @@ async def log_factory( ) else: if case_dict["target_type"] == "USER": - target_user = await fetch_user_dict(interaction.client, case_dict["target_id"]) + target_user = await fetch_user_dict(ctx.bot, case_dict["target_id"]) target_name = ( f"`{target_user['name']}`" if target_user["discriminator"] == "0" else f"`{target_user['name']}#{target_user['discriminator']}`" ) elif case_dict["target_type"] == "CHANNEL": - target_user = await fetch_channel_dict(interaction.guild, case_dict["target_id"]) + target_user = await fetch_channel_dict(ctx.guild, case_dict["target_id"]) if target_user["mention"]: target_name = target_user["mention"] else: target_name = f"`{target_user['name']}`" - moderator_user = await fetch_user_dict(interaction.client, case_dict["moderator_id"]) + moderator_user = await fetch_user_dict(ctx.bot, case_dict["moderator_id"]) moderator_name = ( f"`{moderator_user['name']}`" if moderator_user["discriminator"] == "0" @@ -190,7 +186,7 @@ async def log_factory( embed = Embed( title=f"📕 Case #{case_dict['moderation_id']:,}", - color=await interaction.client.get_embed_color(interaction.channel), + color=await ctx.bot.get_embed_color(ctx.channel), ) embed.description = f"**Type:** {str.title(case_dict['moderation_type'])}\n**Target:** {target_name} ({target_user['id']})\n**Moderator:** {moderator_name} ({moderator_user['id']})\n**Timestamp:** | " @@ -206,35 +202,35 @@ async def log_factory( ) embed.description = ( embed.description - + f"\n**Duration:** {humanize_timedelta(timedelta=td)} | " + + f"\n**Duration:** {humanize.precisedelta(td)} | " ) embed.add_field(name="Reason", value=box(case_dict["reason"]), inline=False) return embed -async def case_factory(interaction: Interaction, case_dict: dict) -> Embed: +async def case_factory(ctx: commands.Context, case_dict: dict) -> Embed: """This function creates a case embed from set parameters. Args: - interaction (Interaction): The interaction object. + ctx (commands.Context): The context object. case_dict (dict): The case dictionary. """ if case_dict["target_type"] == "USER": - target_user = await fetch_user_dict(interaction.client, case_dict["target_id"]) + target_user = await fetch_user_dict(ctx.bot, case_dict["target_id"]) target_name = ( f"`{target_user['name']}`" if target_user["discriminator"] == "0" else f"`{target_user['name']}#{target_user['discriminator']}`" ) elif case_dict["target_type"] == "CHANNEL": - target_user = await fetch_channel_dict(interaction.guild, case_dict["target_id"]) + target_user = await fetch_channel_dict(ctx.guild, case_dict["target_id"]) if target_user["mention"]: target_name = f"{target_user['mention']}" else: target_name = f"`{target_user['name']}`" - moderator_user = await fetch_user_dict(interaction.client, case_dict["moderator_id"]) + moderator_user = await fetch_user_dict(ctx.bot, case_dict["moderator_id"]) moderator_name = ( f"`{moderator_user['name']}`" if moderator_user["discriminator"] == "0" @@ -243,7 +239,7 @@ async def case_factory(interaction: Interaction, case_dict: dict) -> Embed: embed = Embed( title=f"📕 Case #{case_dict['moderation_id']:,}", - color=await interaction.client.get_embed_color(interaction.channel), + color=await ctx.bot.get_embed_color(ctx.channel), ) embed.description = f"**Type:** {str.title(case_dict['moderation_type'])}\n**Target:** {target_name} ({target_user['id']})\n**Moderator:** {moderator_name} ({moderator_user['id']})\n**Resolved:** {bool(case_dict['resolved'])}\n**Timestamp:** | " @@ -257,9 +253,9 @@ async def case_factory(interaction: Interaction, case_dict: dict) -> Embed: } ) duration_embed = ( - f"{humanize_timedelta(timedelta=td)} | " + f"{humanize.precisedelta(td)} | " if bool(case_dict["expired"]) is False - else str(humanize_timedelta(timedelta=td)) + else str(humanize.precisedelta(td)) ) embed.description += f"\n**Duration:** {duration_embed}\n**Expired:** {bool(case_dict['expired'])}" @@ -269,9 +265,6 @@ async def case_factory(interaction: Interaction, case_dict: dict) -> Embed: else "\n**Changes:** 0" ) - if case_dict["role_id"]: - embed.description += f"\n**Role:** <@&{case_dict['role_id']}>" - if case_dict["metadata"]: if case_dict["metadata"]["imported_from"]: embed.description += ( @@ -281,7 +274,7 @@ async def case_factory(interaction: Interaction, case_dict: dict) -> Embed: embed.add_field(name="Reason", value=box(case_dict["reason"]), inline=False) if case_dict["resolved"] == 1: - resolved_user = await fetch_user_dict(interaction.client, case_dict["resolved_by"]) + resolved_user = await fetch_user_dict(ctx.bot, case_dict["resolved_by"]) resolved_name = ( f"`{resolved_user['name']}`" if resolved_user["discriminator"] == "0" @@ -296,16 +289,16 @@ async def case_factory(interaction: Interaction, case_dict: dict) -> Embed: return embed -async def changes_factory(interaction: Interaction, case_dict: dict) -> Embed: +async def changes_factory(ctx: commands.Context, case_dict: dict) -> Embed: """This function creates a changes embed from set parameters. Args: - interaction (Interaction): The interaction object. + ctx (commands.Context): The context object. case_dict (dict): The case dictionary. """ embed = Embed( title=f"📕 Case #{case_dict['moderation_id']:,} Changes", - color=await interaction.client.get_embed_color(interaction.channel), + color=await ctx.bot.get_embed_color(ctx.channel), ) memory_dict = {} @@ -314,7 +307,7 @@ async def changes_factory(interaction: Interaction, case_dict: dict) -> Embed: for change in case_dict["changes"]: if change["user_id"] not in memory_dict: memory_dict[str(change["user_id"])] = await fetch_user_dict( - interaction.client, change["user_id"] + ctx.bot, change["user_id"] ) user = memory_dict[str(change["user_id"])] @@ -353,7 +346,7 @@ async def changes_factory(interaction: Interaction, case_dict: dict) -> Embed: return embed -async def evidenceformat_factory(interaction: Interaction, case_dict: dict) -> str: +async def evidenceformat_factory(ctx: commands.Context, case_dict: dict) -> str: """This function creates a codeblock in evidence format from set parameters. Args: @@ -361,7 +354,7 @@ async def evidenceformat_factory(interaction: Interaction, case_dict: dict) -> s case_dict (dict): The case dictionary. """ if case_dict["target_type"] == "USER": - target_user = await fetch_user_dict(interaction.client, case_dict["target_id"]) + target_user = await fetch_user_dict(ctx.bot, case_dict["target_id"]) target_name = ( target_user["name"] if target_user["discriminator"] == "0" @@ -369,10 +362,10 @@ async def evidenceformat_factory(interaction: Interaction, case_dict: dict) -> s ) elif case_dict["target_type"] == "CHANNEL": - target_user = await fetch_channel_dict(interaction.guild, case_dict["target_id"]) + target_user = await fetch_channel_dict(ctx.guild, case_dict["target_id"]) target_name = target_user["name"] - moderator_user = await fetch_user_dict(interaction.client, case_dict["moderator_id"]) + moderator_user = await fetch_user_dict(ctx.bot, case_dict["moderator_id"]) moderator_name = ( moderator_user["name"] if moderator_user["discriminator"] == "0" @@ -381,14 +374,10 @@ async def evidenceformat_factory(interaction: Interaction, case_dict: dict) -> s content = f"Case: {case_dict['moderation_id']:,} ({str.title(case_dict['moderation_type'])})\nTarget: {target_name} ({target_user['id']})\nModerator: {moderator_name} ({moderator_user['id']})" - if case_dict["role_id"] != "0": - role = interaction.guild.get_role(int(case_dict["role_id"])) - content += "\nRole: " + (role.name if role is not None else case_dict["role_id"]) - if case_dict["duration"] != "NULL": hours, minutes, seconds = map(int, case_dict["duration"].split(":")) td = timedelta(hours=hours, minutes=minutes, seconds=seconds) - content += f"\nDuration: {humanize_timedelta(timedelta=td)}" + content += f"\nDuration: {humanize.precisedelta(td)}" content += f"\nReason: {case_dict['reason']}" @@ -464,7 +453,6 @@ async def guild_embed(ctx: commands.Context) -> Embed: ctx.guild ).history_inline_pagesize(), "auto_evidenceformat": await config.guild(ctx.guild).auto_evidenceformat(), - "respect_hierarchy": await config.guild(ctx.guild).respect_hierarchy(), } channel = ctx.guild.get_channel(guild_settings["log_channel"]) @@ -481,9 +469,6 @@ async def guild_embed(ctx: commands.Context) -> Embed: + bold("Use Discord Permissions: ") + get_bool_emoji(guild_settings["use_discord_permissions"]), "- " - + bold("Respect Hierarchy: ") - + get_bool_emoji(guild_settings["respect_hierarchy"]), - "- " + bold("Ignore Modlog: ") + get_bool_emoji(guild_settings["ignore_modlog"]), "- " @@ -523,29 +508,15 @@ async def guild_embed(ctx: commands.Context) -> Embed: async def addrole_embed(ctx: commands.Context) -> Embed: """Generates a configuration menu field value for a guild's addrole whitelist.""" - roles = [] - async with config.guild(ctx.guild).addrole_whitelist() as whitelist: - for role in whitelist: - evalulated_role = ctx.guild.get_role(role) or error(f"`{role}` (Not Found)") - if isinstance(evalulated_role, Role): - roles.append({ - "id": evalulated_role.id, - "mention": evalulated_role.mention, - "position": evalulated_role.position - }) - else: - roles.append({ - "id": role, - "mention": error(f"`{role}` (Not Found)"), - "position": 0 - }) - - if roles: - roles = sorted(roles, key=lambda x: x["position"], reverse=True) - roles = [role["mention"] for role in roles] - whitelist_str = "\n".join(roles) + whitelist = await config.guild(ctx.guild).addrole_whitelist() + if whitelist: + whitelist = [ + ctx.guild.get_role(role).mention or error(f"`{role}` (Not Found)") + for role in whitelist + ] + whitelist = "\n".join(whitelist) else: - whitelist_str = warning("No roles are on the addrole whitelist!") + whitelist = warning("No roles are on the addrole whitelist!") e = await _config(ctx) e.title += ": Addrole Whitelist" @@ -553,8 +524,8 @@ async def addrole_embed(ctx: commands.Context) -> Embed: "Use the select menu below to manage this guild's addrole whitelist." ) - if len(whitelist_str) > 4000 and len(whitelist_str) < 5000: - lines = whitelist_str.split("\n") + if len(whitelist) > 4000 and len(whitelist) < 5000: + lines = whitelist.split("\n") chunks = [] chunk = "" for line in lines: @@ -568,35 +539,21 @@ async def addrole_embed(ctx: commands.Context) -> Embed: for chunk in chunks: e.add_field(name="", value=chunk) else: - e.description += "\n\n" + whitelist_str + e.description += "\n\n" + whitelist return e async def immune_embed(ctx: commands.Context) -> Embed: - """Generates a configuration menu embed for a guild's immune roles.""" + """Generates a configuration menu field value for a guild's immune roles.""" - roles = [] - async with config.guild(ctx.guild).immune_roles() as immune_roles: - for role in immune_roles: - evalulated_role = ctx.guild.get_role(role) or error(f"`{role}` (Not Found)") - if isinstance(evalulated_role, Role): - roles.append({ - "id": evalulated_role.id, - "mention": evalulated_role.mention, - "position": evalulated_role.position - }) - else: - roles.append({ - "id": role, - "mention": error(f"`{role}` (Not Found)"), - "position": 0 - }) - - if roles: - roles = sorted(roles, key=lambda x: x["position"], reverse=True) - roles = [role["mention"] for role in roles] - immune_str = "\n".join(roles) + immune_roles = await config.guild(ctx.guild).immune_roles() + if immune_roles: + immune_str = [ + ctx.guild.get_role(role).mention or error(f"`{role}` (Not Found)") + for role in immune_roles + ] + immune_str = "\n".join(immune_str) else: immune_str = warning("No roles are set as immune roles!") diff --git a/aurora/utilities/logger.py b/aurora/utilities/logger.py index c0cbd99..9ea3c2f 100644 --- a/aurora/utilities/logger.py +++ b/aurora/utilities/logger.py @@ -1,3 +1,3 @@ from red_commons.logging import getLogger -logger = getLogger("red.SeaCogs.Aurora") +logger = getLogger("red.seacogs.aurora") diff --git a/aurora/utilities/utils.py b/aurora/utilities/utils.py index 1ff21fa..eb0eb16 100644 --- a/aurora/utilities/utils.py +++ b/aurora/utilities/utils.py @@ -1,13 +1,11 @@ # pylint: disable=cyclic-import import json -from datetime import datetime from datetime import timedelta as td -from typing import Optional, Union +from typing import Union -from dateutil.relativedelta import relativedelta as rd -from discord import File, Guild, Interaction, Member, SelectOption, User +from discord import Guild, Interaction, Member, SelectOption, User from discord.errors import Forbidden, NotFound -from redbot.core import commands, data_manager +from redbot.core import commands from redbot.core.utils.chat_formatting import error from .config import config @@ -42,11 +40,11 @@ def check_permissions( async def check_moddable( - target: Union[User, Member], interaction: Interaction, permissions: list + target: Union[User, Member], ctx: Union[commands.Context, Interaction], permissions: list ) -> bool: """Checks if a moderator can moderate a target.""" - if check_permissions(interaction.client.user, permissions, guild=interaction.guild): - await interaction.response.send_message( + if check_permissions(ctx.bot.user, permissions, guild=ctx.guild): + await ctx.send( error( f"I do not have the `{permissions}` permission, required for this action." ), @@ -54,9 +52,9 @@ async def check_moddable( ) return False - if await config.guild(interaction.guild).use_discord_permissions() is True: - if check_permissions(interaction.user, permissions, guild=interaction.guild): - await interaction.response.send_message( + if await config.guild(ctx.guild).use_discord_permissions() is True: + if check_permissions(ctx.author, permissions, guild=ctx.guild): + await ctx.send( error( f"You do not have the `{permissions}` permission, required for this action." ), @@ -64,21 +62,21 @@ async def check_moddable( ) return False - if interaction.user.id == target.id: - await interaction.response.send_message( + if ctx.author.id == target.id: + await ctx.send( content="You cannot moderate yourself!", ephemeral=True ) return False if target.bot: - await interaction.response.send_message( + await ctx.send( content="You cannot moderate bots!", ephemeral=True ) return False if isinstance(target, Member): - if interaction.user.top_role <= target.top_role and await config.guild(interaction.guild).respect_hierarchy() is True: - await interaction.response.send_message( + if ctx.author.top_role <= target.top_role: + await ctx.send( content=error( "You cannot moderate members with a higher role than you!" ), @@ -87,10 +85,10 @@ async def check_moddable( return False if ( - interaction.guild.get_member(interaction.client.user.id).top_role + ctx.guild.get_member(ctx.bot.user.id).top_role <= target.top_role ): - await interaction.response.send_message( + await ctx.send( content=error( "You cannot moderate members with a role higher than the bot!" ), @@ -102,7 +100,7 @@ async def check_moddable( for role in target.roles: if role.id in immune_roles: - await interaction.response.send_message( + await ctx.send( content=error("You cannot moderate members with an immune role!"), ephemeral=True, ) @@ -205,19 +203,19 @@ async def fetch_role_dict(guild: Guild, role_id: int) -> dict: return role_dict -async def log(interaction: Interaction, moderation_id: int, resolved: bool = False) -> None: +async def log(ctx: Union[commands.Context, Interaction], moderation_id: int, resolved: bool = False) -> None: """This function sends a message to the guild's configured logging channel when an infraction takes place.""" from .database import fetch_case from .factory import log_factory - logging_channel_id = await config.guild(interaction.guild).log_channel() + logging_channel_id = await config.guild(ctx.guild).log_channel() if logging_channel_id != " ": - logging_channel = interaction.guild.get_channel(logging_channel_id) + logging_channel = ctx.guild.get_channel(logging_channel_id) - case = await fetch_case(moderation_id, interaction.guild.id) + case = await fetch_case(moderation_id, ctx.guild.id) if case: embed = await log_factory( - interaction=interaction, case_dict=case, resolved=resolved + ctx=ctx, case_dict=case, resolved=resolved ) try: await logging_channel.send(embed=embed) @@ -225,20 +223,20 @@ async def log(interaction: Interaction, moderation_id: int, resolved: bool = Fal return -async def send_evidenceformat(interaction: Interaction, case_dict: dict) -> None: +async def send_evidenceformat(ctx: commands.Context, case_dict: dict) -> None: """This function sends an ephemeral message to the moderator who took the moderation action, with a pre-made codeblock for use in the mod-evidence channel.""" from .factory import evidenceformat_factory send_evidence_bool = ( - await config.user(interaction.user).auto_evidenceformat() - or await config.guild(interaction.guild).auto_evidenceformat() + await config.user(ctx.author).auto_evidenceformat() + or await config.guild(ctx.guild).auto_evidenceformat() or False ) if send_evidence_bool is False: return - content = await evidenceformat_factory(interaction=interaction, case_dict=case_dict) - await interaction.followup.send(content=content, ephemeral=True) + content = await evidenceformat_factory(ctx=ctx, case_dict=case_dict) + await ctx.send(content=content, ephemeral=True) def convert_timedelta_to_str(timedelta: td) -> str: @@ -250,7 +248,7 @@ def convert_timedelta_to_str(timedelta: td) -> str: return f"{hours}:{minutes}:{seconds}" -def get_bool_emoji(value: Optional[bool]) -> str: +def get_bool_emoji(value: bool) -> str: """Returns a unicode emoji based on a boolean value.""" if value is True: return "\N{WHITE HEAVY CHECK MARK}" @@ -285,14 +283,3 @@ def create_pagesize_options() -> list[SelectOption]: ) ) return options - -def timedelta_from_relativedelta(relativedelta: rd) -> td: - """Converts a relativedelta object to a timedelta object.""" - now = datetime.now() - then = now - relativedelta - return now - then - -def get_footer_image(coginstance: commands.Cog) -> File: - """Returns the footer image for the embeds.""" - image_path = data_manager.bundled_data_path(coginstance) / "arrow.png" - return File(image_path, filename="arrow.png", description="arrow") diff --git a/backup/backup.py b/backup/backup.py index 6202e3a..cde40fa 100644 --- a/backup/backup.py +++ b/backup/backup.py @@ -14,7 +14,8 @@ from redbot.cogs.downloader import errors from redbot.cogs.downloader.converters import InstalledCog from redbot.core import commands from redbot.core.bot import Red -from redbot.core.utils.chat_formatting import error, humanize_list, text_to_file +from redbot.core.utils.chat_formatting import (error, humanize_list, + text_to_file) # pylint: disable=protected-access @@ -22,13 +23,12 @@ class Backup(commands.Cog): """A utility to make reinstalling repositories and cogs after migrating the bot far easier.""" __author__ = ["SeaswimmerTheFsh"] - __version__ = "1.1.0" - __documentation__ = "https://seacogs.coastalcommits.com/backup/" + __version__ = "1.0.1" def __init__(self, bot: Red): super().__init__() self.bot = bot - self.logger = getLogger("red.SeaCogs.Backup") + self.logger = getLogger("red.seacogs.backup") def format_help_for_context(self, ctx: commands.Context) -> str: pre_processed = super().format_help_for_context(ctx) or "" @@ -37,7 +37,6 @@ class Backup(commands.Cog): f"{pre_processed}{n}", f"Cog Version: **{self.__version__}**", f"Author: {humanize_list(self.__author__)}", - f"Documentation: {self.__documentation__}", ] return "\n".join(text) @@ -100,7 +99,7 @@ class Backup(commands.Cog): except (json.JSONDecodeError, IndexError): try: export = json.loads(await ctx.message.reference.resolved.attachments[0].read()) - except (json.JSONDecodeError, IndexError, AttributeError): + except (json.JSONDecodeError, IndexError): await ctx.send(error("Please provide a valid JSON export file.")) return @@ -160,15 +159,17 @@ class Backup(commands.Cog): ) self.logger.debug("Repository %s already exists", name) - except errors.AuthenticationError as err: - repo_e.append(f"Authentication error while adding repository {name}. See logs for more information.") - self.logger.exception( - "Something went wrong whilst cloning %s (to revision %s)", - url, - branch, - exc_info=err, - ) - continue + # This is commented out because errors.AuthenticationError is not yet implemented in Red 3.5.5's Downloader cog. + # Rather, it is only in the development version and will be added in version 3.5.6 (or whatever the next version is). + # except errors.AuthenticationError as err: + # repo_e.append(f"Authentication error while adding repository {name}. See logs for more information.") + # self.logger.exception( + # "Something went wrong whilst cloning %s (to revision %s)", + # url, + # branch, + # exc_info=err, + # ) + # continue except errors.CloningError as err: repo_e.append( diff --git a/backup/info.json b/backup/info.json index 2fb6c6e..fccea3e 100644 --- a/backup/info.json +++ b/backup/info.json @@ -7,8 +7,8 @@ "end_user_data_statement" : "This cog does not store end user data.", "hidden": false, "disabled": false, - "min_bot_version": "3.5.6", - "max_bot_version": "3.5.9", + "min_bot_version": "3.5.0", + "max_bot_version": "3.5.5", "min_python_version": [3, 9, 0], "tags": [ "utility", diff --git a/bible/bible.py b/bible/bible.py index 10cc953..5b7305f 100644 --- a/bible/bible.py +++ b/bible/bible.py @@ -6,14 +6,11 @@ # |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_| import random -from io import BytesIO import aiohttp -import numpy as np -from discord import Colour, Embed, File -from PIL import Image +from discord import Embed from red_commons.logging import getLogger -from redbot.core import Config, commands, data_manager +from redbot.core import Config, commands from redbot.core.bot import Red from redbot.core.utils.chat_formatting import error, humanize_list @@ -25,8 +22,7 @@ class Bible(commands.Cog): """Retrieve Bible verses from the API.bible API.""" __author__ = ["SeaswimmerTheFsh"] - __version__ = "1.1.0" - __documentation__ = "https://seacogs.coastalcommits.com/bible/" + __version__ = "1.0.1" def __init__(self, bot: Red): super().__init__() @@ -35,7 +31,7 @@ class Bible(commands.Cog): self.config = Config.get_conf( self, identifier=481923957134912, force_registration=True ) - self.logger = getLogger("red.SeaCogs.Bible") + self.logger = getLogger("red.seacogs.bible") self.config.register_global(bible="de4e12af7f28f599-02") self.config.register_user(bible=None) @@ -46,26 +42,9 @@ class Bible(commands.Cog): f"{pre_processed}{n}", f"Cog Version: **{self.__version__}**", f"Author: {humanize_list(self.__author__)}", - f"Documentation: {self.__documentation__}", ] return "\n".join(text) - def get_icon(self, color: Colour) -> File: - """Get the docs.api.bible favicon with a given color.""" - image_path = data_manager.bundled_data_path(self) / "api.bible-logo.png" - image = Image.open(image_path) - image = image.convert("RGBA") - data = np.array(image) - red, green, blue, alpha = data.T # pylint: disable=unused-variable - white_areas = (red == 255) & (blue == 255) & (green == 255) - data[..., :-1][white_areas.T] = color.to_rgb() - image = Image.fromarray(data) - - with BytesIO() as image_binary: - image.save(image_binary, "PNG") - image_binary.seek(0) - return File(image_binary, filename="icon.png", description="API.Bible Icon") - async def translate_book_name(self, bible_id: str, book_name: str) -> str: """Translate a book name to a book ID.""" book_name_list = [ @@ -267,17 +246,15 @@ class Bible(commands.Cog): return if await ctx.embed_requested(): - icon = self.get_icon(await ctx.embed_color()) embed = Embed( title=f"{passage['reference']}", description=passage["content"].replace("¶ ", ""), - color=await ctx.embed_color(), + color=await self.bot.get_embed_color(ctx.channel), ) embed.set_footer( - text=f"{ctx.prefix}bible passage - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})", - icon_url="attachment://icon.png" + text=f"{ctx.prefix}bible passage - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})" ) - await ctx.send(embed=embed, file=icon) + await ctx.send(embed=embed) else: await ctx.send(f"## {passage['reference']}\n{passage['content']}") @@ -309,16 +286,14 @@ class Bible(commands.Cog): return if await ctx.embed_requested(): - icon = self.get_icon(await ctx.embed_color()) embed = Embed( title=f"{passage['reference']}", description=passage["content"].replace("¶ ", ""), - color=await ctx.embed_color(), + color=await self.bot.get_embed_color(ctx.channel), ) embed.set_footer( - text=f"{ctx.prefix}bible random - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})", - icon_url="attachment://icon.png" + text=f"{ctx.prefix}bible random - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})" ) - await ctx.send(embed=embed, file=icon) + await ctx.send(embed=embed) else: await ctx.send(f"## {passage['reference']}\n{passage['content']}") diff --git a/bible/data/api.bible-logo.png b/bible/data/api.bible-logo.png deleted file mode 100644 index 4415129..0000000 Binary files a/bible/data/api.bible-logo.png and /dev/null differ diff --git a/bible/info.json b/bible/info.json index dc33f92..9a91213 100644 --- a/bible/info.json +++ b/bible/info.json @@ -9,7 +9,6 @@ "disabled": false, "min_bot_version": "3.5.0", "min_python_version": [3, 10, 0], - "requirements": ["numpy", "pillow"], "tags": [ "fun", "utility", diff --git a/emojiinfo/__init__.py b/emojiinfo/__init__.py deleted file mode 100644 index fb9994a..0000000 --- a/emojiinfo/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .emojiinfo import EmojiInfo - - -async def setup(bot): - await bot.add_cog(EmojiInfo(bot)) diff --git a/emojiinfo/data/emojis.json b/emojiinfo/data/emojis.json deleted file mode 100644 index dadae4c..0000000 --- a/emojiinfo/data/emojis.json +++ /dev/null @@ -1,5309 +0,0 @@ -{ - "people": { - "grinning": "😀", - "smiley": "😃", - "smile": "😄", - "grin": "😁", - "laughing": "😆", - "satisfied": "😆", - "sweat_smile": "😅", - "joy": "😂", - "rofl": "🤣", - "rolling_on_the_floor_laughing": "🤣", - "relaxed": "☺️", - "blush": "😊", - "innocent": "😇", - "slight_smile": "🙂", - "slightly_smiling_face": "🙂", - "upside_down": "🙃", - "upside_down_face": "🙃", - "wink": "😉", - "relieved": "😌", - "smiling_face_with_tear": "🥲", - "heart_eyes": "😍", - "smiling_face_with_3_hearts": "🥰", - "kissing_heart": "😘", - "kissing": "😗", - "kissing_smiling_eyes": "😙", - "kissing_closed_eyes": "😚", - "yum": "😋", - "stuck_out_tongue": "😛", - "stuck_out_tongue_closed_eyes": "😝", - "stuck_out_tongue_winking_eye": "😜", - "zany_face": "🤪", - "face_with_raised_eyebrow": "🤨", - "face_with_monocle": "🧐", - "nerd": "🤓", - "nerd_face": "🤓", - "sunglasses": "😎", - "star_struck": "🤩", - "partying_face": "🥳", - "smirk": "😏", - "unamused": "😒", - "disappointed": "😞", - "pensive": "😔", - "worried": "😟", - "confused": "😕", - "slight_frown": "🙁", - "slightly_frowning_face": "🙁", - "frowning2": "☹️", - "white_frowning_face": "☹️", - "persevere": "😣", - "confounded": "😖", - "tired_face": "😫", - "weary": "😩", - "pleading_face": "🥺", - "cry": "😢", - "sob": "😭", - "triumph": "😤", - "face_exhaling": "😮‍💨", - "angry": "😠", - "rage": "😡", - "face_with_symbols_over_mouth": "🤬", - "exploding_head": "🤯", - "flushed": "😳", - "face_in_clouds": "😶‍🌫️", - "hot_face": "🥵", - "cold_face": "🥶", - "scream": "😱", - "fearful": "😨", - "cold_sweat": "😰", - "disappointed_relieved": "😥", - "sweat": "😓", - "hugging": "🤗", - "hugging_face": "🤗", - "thinking": "🤔", - "thinking_face": "🤔", - "face_with_hand_over_mouth": "🤭", - "yawning_face": "🥱", - "shushing_face": "🤫", - "lying_face": "🤥", - "liar": "🤥", - "no_mouth": "😶", - "neutral_face": "😐", - "expressionless": "😑", - "grimacing": "😬", - "rolling_eyes": "🙄", - "face_with_rolling_eyes": "🙄", - "hushed": "😯", - "frowning": "😦", - "anguished": "😧", - "open_mouth": "😮", - "astonished": "😲", - "sleeping": "😴", - "drooling_face": "🤤", - "drool": "🤤", - "sleepy": "😪", - "dizzy_face": "😵", - "face_with_spiral_eyes": "😵‍💫", - "zipper_mouth": "🤐", - "zipper_mouth_face": "🤐", - "woozy_face": "🥴", - "nauseated_face": "🤢", - "sick": "🤢", - "face_vomiting": "🤮", - "sneezing_face": "🤧", - "sneeze": "🤧", - "mask": "😷", - "thermometer_face": "🤒", - "face_with_thermometer": "🤒", - "head_bandage": "🤕", - "face_with_head_bandage": "🤕", - "money_mouth": "🤑", - "money_mouth_face": "🤑", - "cowboy": "🤠", - "face_with_cowboy_hat": "🤠", - "disguised_face": "🥸", - "smiling_imp": "😈", - "imp": "👿", - "japanese_ogre": "👹", - "japanese_goblin": "👺", - "clown": "🤡", - "clown_face": "🤡", - "poop": "💩", - "shit": "💩", - "hankey": "💩", - "poo": "💩", - "ghost": "👻", - "skull": "💀", - "skeleton": "💀", - "skull_crossbones": "☠️", - "skull_and_crossbones": "☠️", - "alien": "👽", - "space_invader": "👾", - "robot": "🤖", - "robot_face": "🤖", - "jack_o_lantern": "🎃", - "smiley_cat": "😺", - "smile_cat": "😸", - "joy_cat": "😹", - "heart_eyes_cat": "😻", - "smirk_cat": "😼", - "kissing_cat": "😽", - "scream_cat": "🙀", - "crying_cat_face": "😿", - "pouting_cat": "😾", - "palms_up_together": "🤲", - "palms_up_together_tone1": "🤲🏻", - "palms_up_together_light_skin_tone": "🤲🏻", - "palms_up_together_tone2": "🤲🏼", - "palms_up_together_medium_light_skin_tone": "🤲🏼", - "palms_up_together_tone3": "🤲🏽", - "palms_up_together_medium_skin_tone": "🤲🏽", - "palms_up_together_tone4": "🤲🏾", - "palms_up_together_medium_dark_skin_tone": "🤲🏾", - "palms_up_together_tone5": "🤲🏿", - "palms_up_together_dark_skin_tone": "🤲🏿", - "open_hands": "👐", - "open_hands_tone1": "👐🏻", - "open_hands_tone2": "👐🏼", - "open_hands_tone3": "👐🏽", - "open_hands_tone4": "👐🏾", - "open_hands_tone5": "👐🏿", - "raised_hands": "🙌", - "raised_hands_tone1": "🙌🏻", - "raised_hands_tone2": "🙌🏼", - "raised_hands_tone3": "🙌🏽", - "raised_hands_tone4": "🙌🏾", - "raised_hands_tone5": "🙌🏿", - "clap": "👏", - "clap_tone1": "👏🏻", - "clap_tone2": "👏🏼", - "clap_tone3": "👏🏽", - "clap_tone4": "👏🏾", - "clap_tone5": "👏🏿", - "handshake": "🤝", - "shaking_hands": "🤝", - "thumbsup": "👍", - "+1": "👍", - "thumbup": "👍", - "thumbsup_tone1": "👍🏻", - "+1_tone1": "👍🏻", - "thumbup_tone1": "👍🏻", - "thumbsup_tone2": "👍🏼", - "+1_tone2": "👍🏼", - "thumbup_tone2": "👍🏼", - "thumbsup_tone3": "👍🏽", - "+1_tone3": "👍🏽", - "thumbup_tone3": "👍🏽", - "thumbsup_tone4": "👍🏾", - "+1_tone4": "👍🏾", - "thumbup_tone4": "👍🏾", - "thumbsup_tone5": "👍🏿", - "+1_tone5": "👍🏿", - "thumbup_tone5": "👍🏿", - "thumbsdown": "👎", - "-1": "👎", - "thumbdown": "👎", - "thumbsdown_tone1": "👎🏻", - "_1_tone1": "👎🏻", - "thumbdown_tone1": "👎🏻", - "thumbsdown_tone2": "👎🏼", - "_1_tone2": "👎🏼", - "thumbdown_tone2": "👎🏼", - "thumbsdown_tone3": "👎🏽", - "_1_tone3": "👎🏽", - "thumbdown_tone3": "👎🏽", - "thumbsdown_tone4": "👎🏾", - "_1_tone4": "👎🏾", - "thumbdown_tone4": "👎🏾", - "thumbsdown_tone5": "👎🏿", - "_1_tone5": "👎🏿", - "thumbdown_tone5": "👎🏿", - "punch": "👊", - "punch_tone1": "👊🏻", - "punch_tone2": "👊🏼", - "punch_tone3": "👊🏽", - "punch_tone4": "👊🏾", - "punch_tone5": "👊🏿", - "fist": "✊", - "fist_tone1": "✊🏻", - "fist_tone2": "✊🏼", - "fist_tone3": "✊🏽", - "fist_tone4": "✊🏾", - "fist_tone5": "✊🏿", - "left_facing_fist": "🤛", - "left_fist": "🤛", - "left_facing_fist_tone1": "🤛🏻", - "left_fist_tone1": "🤛🏻", - "left_facing_fist_tone2": "🤛🏼", - "left_fist_tone2": "🤛🏼", - "left_facing_fist_tone3": "🤛🏽", - "left_fist_tone3": "🤛🏽", - "left_facing_fist_tone4": "🤛🏾", - "left_fist_tone4": "🤛🏾", - "left_facing_fist_tone5": "🤛🏿", - "left_fist_tone5": "🤛🏿", - "right_facing_fist": "🤜", - "right_fist": "🤜", - "right_facing_fist_tone1": "🤜🏻", - "right_fist_tone1": "🤜🏻", - "right_facing_fist_tone2": "🤜🏼", - "right_fist_tone2": "🤜🏼", - "right_facing_fist_tone3": "🤜🏽", - "right_fist_tone3": "🤜🏽", - "right_facing_fist_tone4": "🤜🏾", - "right_fist_tone4": "🤜🏾", - "right_facing_fist_tone5": "🤜🏿", - "right_fist_tone5": "🤜🏿", - "fingers_crossed": "🤞", - "hand_with_index_and_middle_finger_crossed": "🤞", - "fingers_crossed_tone1": "🤞🏻", - "hand_with_index_and_middle_fingers_crossed_tone1": "🤞🏻", - "fingers_crossed_tone2": "🤞🏼", - "hand_with_index_and_middle_fingers_crossed_tone2": "🤞🏼", - "fingers_crossed_tone3": "🤞🏽", - "hand_with_index_and_middle_fingers_crossed_tone3": "🤞🏽", - "fingers_crossed_tone4": "🤞🏾", - "hand_with_index_and_middle_fingers_crossed_tone4": "🤞🏾", - "fingers_crossed_tone5": "🤞🏿", - "hand_with_index_and_middle_fingers_crossed_tone5": "🤞🏿", - "v": "✌️", - "v_tone1": "✌🏻", - "v_tone2": "✌🏼", - "v_tone3": "✌🏽", - "v_tone4": "✌🏾", - "v_tone5": "✌🏿", - "love_you_gesture": "🤟", - "love_you_gesture_tone1": "🤟🏻", - "love_you_gesture_light_skin_tone": "🤟🏻", - "love_you_gesture_tone2": "🤟🏼", - "love_you_gesture_medium_light_skin_tone": "🤟🏼", - "love_you_gesture_tone3": "🤟🏽", - "love_you_gesture_medium_skin_tone": "🤟🏽", - "love_you_gesture_tone4": "🤟🏾", - "love_you_gesture_medium_dark_skin_tone": "🤟🏾", - "love_you_gesture_tone5": "🤟🏿", - "love_you_gesture_dark_skin_tone": "🤟🏿", - "metal": "🤘", - "sign_of_the_horns": "🤘", - "metal_tone1": "🤘🏻", - "sign_of_the_horns_tone1": "🤘🏻", - "metal_tone2": "🤘🏼", - "sign_of_the_horns_tone2": "🤘🏼", - "metal_tone3": "🤘🏽", - "sign_of_the_horns_tone3": "🤘🏽", - "metal_tone4": "🤘🏾", - "sign_of_the_horns_tone4": "🤘🏾", - "metal_tone5": "🤘🏿", - "sign_of_the_horns_tone5": "🤘🏿", - "ok_hand": "👌", - "ok_hand_tone1": "👌🏻", - "ok_hand_tone2": "👌🏼", - "ok_hand_tone3": "👌🏽", - "ok_hand_tone4": "👌🏾", - "ok_hand_tone5": "👌🏿", - "pinching_hand": "🤏", - "pinching_hand_tone1": "🤏🏻", - "pinching_hand_light_skin_tone": "🤏🏻", - "pinching_hand_tone2": "🤏🏼", - "pinching_hand_medium_light_skin_tone": "🤏🏼", - "pinching_hand_tone3": "🤏🏽", - "pinching_hand_medium_skin_tone": "🤏🏽", - "pinching_hand_tone4": "🤏🏾", - "pinching_hand_medium_dark_skin_tone": "🤏🏾", - "pinching_hand_tone5": "🤏🏿", - "pinching_hand_dark_skin_tone": "🤏🏿", - "pinched_fingers": "🤌", - "pinched_fingers_tone2": "🤌🏼", - "pinched_fingers_medium_light_skin_tone": "🤌🏼", - "pinched_fingers_tone1": "🤌🏻", - "pinched_fingers_light_skin_tone": "🤌🏻", - "pinched_fingers_tone3": "🤌🏽", - "pinched_fingers_medium_skin_tone": "🤌🏽", - "pinched_fingers_tone4": "🤌🏾", - "pinched_fingers_medium_dark_skin_tone": "🤌🏾", - "pinched_fingers_tone5": "🤌🏿", - "pinched_fingers_dark_skin_tone": "🤌🏿", - "point_left": "👈", - "point_left_tone1": "👈🏻", - "point_left_tone2": "👈🏼", - "point_left_tone3": "👈🏽", - "point_left_tone4": "👈🏾", - "point_left_tone5": "👈🏿", - "point_right": "👉", - "point_right_tone1": "👉🏻", - "point_right_tone2": "👉🏼", - "point_right_tone3": "👉🏽", - "point_right_tone4": "👉🏾", - "point_right_tone5": "👉🏿", - "point_up_2": "👆", - "point_up_2_tone1": "👆🏻", - "point_up_2_tone2": "👆🏼", - "point_up_2_tone3": "👆🏽", - "point_up_2_tone4": "👆🏾", - "point_up_2_tone5": "👆🏿", - "point_down": "👇", - "point_down_tone1": "👇🏻", - "point_down_tone2": "👇🏼", - "point_down_tone3": "👇🏽", - "point_down_tone4": "👇🏾", - "point_down_tone5": "👇🏿", - "point_up": "☝️", - "point_up_tone1": "☝🏻", - "point_up_tone2": "☝🏼", - "point_up_tone3": "☝🏽", - "point_up_tone4": "☝🏾", - "point_up_tone5": "☝🏿", - "raised_hand": "✋", - "raised_hand_tone1": "✋🏻", - "raised_hand_tone2": "✋🏼", - "raised_hand_tone3": "✋🏽", - "raised_hand_tone4": "✋🏾", - "raised_hand_tone5": "✋🏿", - "raised_back_of_hand": "🤚", - "back_of_hand": "🤚", - "raised_back_of_hand_tone1": "🤚🏻", - "back_of_hand_tone1": "🤚🏻", - "raised_back_of_hand_tone2": "🤚🏼", - "back_of_hand_tone2": "🤚🏼", - "raised_back_of_hand_tone3": "🤚🏽", - "back_of_hand_tone3": "🤚🏽", - "raised_back_of_hand_tone4": "🤚🏾", - "back_of_hand_tone4": "🤚🏾", - "raised_back_of_hand_tone5": "🤚🏿", - "back_of_hand_tone5": "🤚🏿", - "hand_splayed": "🖐️", - "raised_hand_with_fingers_splayed": "🖐️", - "hand_splayed_tone1": "🖐🏻", - "raised_hand_with_fingers_splayed_tone1": "🖐🏻", - "hand_splayed_tone2": "🖐🏼", - "raised_hand_with_fingers_splayed_tone2": "🖐🏼", - "hand_splayed_tone3": "🖐🏽", - "raised_hand_with_fingers_splayed_tone3": "🖐🏽", - "hand_splayed_tone4": "🖐🏾", - "raised_hand_with_fingers_splayed_tone4": "🖐🏾", - "hand_splayed_tone5": "🖐🏿", - "raised_hand_with_fingers_splayed_tone5": "🖐🏿", - "vulcan": "🖖", - "raised_hand_with_part_between_middle_and_ring_fingers": "🖖", - "vulcan_tone1": "🖖🏻", - "raised_hand_with_part_between_middle_and_ring_fingers_tone1": "🖖🏻", - "vulcan_tone2": "🖖🏼", - "raised_hand_with_part_between_middle_and_ring_fingers_tone2": "🖖🏼", - "vulcan_tone3": "🖖🏽", - "raised_hand_with_part_between_middle_and_ring_fingers_tone3": "🖖🏽", - "vulcan_tone4": "🖖🏾", - "raised_hand_with_part_between_middle_and_ring_fingers_tone4": "🖖🏾", - "vulcan_tone5": "🖖🏿", - "raised_hand_with_part_between_middle_and_ring_fingers_tone5": "🖖🏿", - "wave": "👋", - "wave_tone1": "👋🏻", - "wave_tone2": "👋🏼", - "wave_tone3": "👋🏽", - "wave_tone4": "👋🏾", - "wave_tone5": "👋🏿", - "call_me": "🤙", - "call_me_hand": "🤙", - "call_me_tone1": "🤙🏻", - "call_me_hand_tone1": "🤙🏻", - "call_me_tone2": "🤙🏼", - "call_me_hand_tone2": "🤙🏼", - "call_me_tone3": "🤙🏽", - "call_me_hand_tone3": "🤙🏽", - "call_me_tone4": "🤙🏾", - "call_me_hand_tone4": "🤙🏾", - "call_me_tone5": "🤙🏿", - "call_me_hand_tone5": "🤙🏿", - "muscle": "💪", - "muscle_tone1": "💪🏻", - "muscle_tone2": "💪🏼", - "muscle_tone3": "💪🏽", - "muscle_tone4": "💪🏾", - "muscle_tone5": "💪🏿", - "mechanical_arm": "🦾", - "middle_finger": "🖕", - "reversed_hand_with_middle_finger_extended": "🖕", - "middle_finger_tone1": "🖕🏻", - "reversed_hand_with_middle_finger_extended_tone1": "🖕🏻", - "middle_finger_tone2": "🖕🏼", - "reversed_hand_with_middle_finger_extended_tone2": "🖕🏼", - "middle_finger_tone3": "🖕🏽", - "reversed_hand_with_middle_finger_extended_tone3": "🖕🏽", - "middle_finger_tone4": "🖕🏾", - "reversed_hand_with_middle_finger_extended_tone4": "🖕🏾", - "middle_finger_tone5": "🖕🏿", - "reversed_hand_with_middle_finger_extended_tone5": "🖕🏿", - "writing_hand": "✍️", - "writing_hand_tone1": "✍🏻", - "writing_hand_tone2": "✍🏼", - "writing_hand_tone3": "✍🏽", - "writing_hand_tone4": "✍🏾", - "writing_hand_tone5": "✍🏿", - "pray": "🙏", - "pray_tone1": "🙏🏻", - "pray_tone2": "🙏🏼", - "pray_tone3": "🙏🏽", - "pray_tone4": "🙏🏾", - "pray_tone5": "🙏🏿", - "foot": "🦶", - "foot_tone1": "🦶🏻", - "foot_light_skin_tone": "🦶🏻", - "foot_tone2": "🦶🏼", - "foot_medium_light_skin_tone": "🦶🏼", - "foot_tone3": "🦶🏽", - "foot_medium_skin_tone": "🦶🏽", - "foot_tone4": "🦶🏾", - "foot_medium_dark_skin_tone": "🦶🏾", - "foot_tone5": "🦶🏿", - "foot_dark_skin_tone": "🦶🏿", - "leg": "🦵", - "leg_tone1": "🦵🏻", - "leg_light_skin_tone": "🦵🏻", - "leg_tone2": "🦵🏼", - "leg_medium_light_skin_tone": "🦵🏼", - "leg_tone3": "🦵🏽", - "leg_medium_skin_tone": "🦵🏽", - "leg_tone4": "🦵🏾", - "leg_medium_dark_skin_tone": "🦵🏾", - "leg_tone5": "🦵🏿", - "leg_dark_skin_tone": "🦵🏿", - "mechanical_leg": "🦿", - "lipstick": "💄", - "kiss": "💋", - "lips": "👄", - "tooth": "🦷", - "tongue": "👅", - "ear": "👂", - "ear_tone1": "👂🏻", - "ear_tone2": "👂🏼", - "ear_tone3": "👂🏽", - "ear_tone4": "👂🏾", - "ear_tone5": "👂🏿", - "ear_with_hearing_aid": "🦻", - "ear_with_hearing_aid_tone1": "🦻🏻", - "ear_with_hearing_aid_light_skin_tone": "🦻🏻", - "ear_with_hearing_aid_tone2": "🦻🏼", - "ear_with_hearing_aid_medium_light_skin_tone": "🦻🏼", - "ear_with_hearing_aid_tone3": "🦻🏽", - "ear_with_hearing_aid_medium_skin_tone": "🦻🏽", - "ear_with_hearing_aid_tone4": "🦻🏾", - "ear_with_hearing_aid_medium_dark_skin_tone": "🦻🏾", - "ear_with_hearing_aid_tone5": "🦻🏿", - "ear_with_hearing_aid_dark_skin_tone": "🦻🏿", - "nose": "👃", - "nose_tone1": "👃🏻", - "nose_tone2": "👃🏼", - "nose_tone3": "👃🏽", - "nose_tone4": "👃🏾", - "nose_tone5": "👃🏿", - "footprints": "👣", - "eye": "👁️", - "eyes": "👀", - "brain": "🧠", - "anatomical_heart": "🫀", - "lungs": "🫁", - "bone": "🦴", - "speaking_head": "🗣️", - "speaking_head_in_silhouette": "🗣️", - "bust_in_silhouette": "👤", - "busts_in_silhouette": "👥", - "people_hugging": "🫂", - "baby": "👶", - "baby_tone1": "👶🏻", - "baby_tone2": "👶🏼", - "baby_tone3": "👶🏽", - "baby_tone4": "👶🏾", - "baby_tone5": "👶🏿", - "girl": "👧", - "girl_tone1": "👧🏻", - "girl_tone2": "👧🏼", - "girl_tone3": "👧🏽", - "girl_tone4": "👧🏾", - "girl_tone5": "👧🏿", - "child": "🧒", - "child_tone1": "🧒🏻", - "child_light_skin_tone": "🧒🏻", - "child_tone2": "🧒🏼", - "child_medium_light_skin_tone": "🧒🏼", - "child_tone3": "🧒🏽", - "child_medium_skin_tone": "🧒🏽", - "child_tone4": "🧒🏾", - "child_medium_dark_skin_tone": "🧒🏾", - "child_tone5": "🧒🏿", - "child_dark_skin_tone": "🧒🏿", - "boy": "👦", - "boy_tone1": "👦🏻", - "boy_tone2": "👦🏼", - "boy_tone3": "👦🏽", - "boy_tone4": "👦🏾", - "boy_tone5": "👦🏿", - "woman": "👩", - "woman_tone1": "👩🏻", - "woman_tone2": "👩🏼", - "woman_tone3": "👩🏽", - "woman_tone4": "👩🏾", - "woman_tone5": "👩🏿", - "adult": "🧑", - "adult_tone1": "🧑🏻", - "adult_light_skin_tone": "🧑🏻", - "adult_tone2": "🧑🏼", - "adult_medium_light_skin_tone": "🧑🏼", - "adult_tone3": "🧑🏽", - "adult_medium_skin_tone": "🧑🏽", - "adult_tone4": "🧑🏾", - "adult_medium_dark_skin_tone": "🧑🏾", - "adult_tone5": "🧑🏿", - "adult_dark_skin_tone": "🧑🏿", - "man": "👨", - "man_tone1": "👨🏻", - "man_tone2": "👨🏼", - "man_tone3": "👨🏽", - "man_tone4": "👨🏾", - "man_tone5": "👨🏿", - "person_curly_hair": "🧑‍🦱", - "person_tone1_curly_hair": "🧑🏻‍🦱", - "person_light_skin_tone_curly_hair": "🧑🏻‍🦱", - "person_tone2_curly_hair": "🧑🏼‍🦱", - "person_medium_light_skin_tone_curly_hair": "🧑🏼‍🦱", - "person_tone3_curly_hair": "🧑🏽‍🦱", - "person_medium_skin_tone_curly_hair": "🧑🏽‍🦱", - "person_tone4_curly_hair": "🧑🏾‍🦱", - "person_medium_dark_skin_tone_curly_hair": "🧑🏾‍🦱", - "person_tone5_curly_hair": "🧑🏿‍🦱", - "person_dark_skin_tone_curly_hair": "🧑🏿‍🦱", - "woman_curly_haired": "👩‍🦱", - "woman_curly_haired_tone1": "👩🏻‍🦱", - "woman_curly_haired_light_skin_tone": "👩🏻‍🦱", - "woman_curly_haired_tone2": "👩🏼‍🦱", - "woman_curly_haired_medium_light_skin_tone": "👩🏼‍🦱", - "woman_curly_haired_tone3": "👩🏽‍🦱", - "woman_curly_haired_medium_skin_tone": "👩🏽‍🦱", - "woman_curly_haired_tone4": "👩🏾‍🦱", - "woman_curly_haired_medium_dark_skin_tone": "👩🏾‍🦱", - "woman_curly_haired_tone5": "👩🏿‍🦱", - "woman_curly_haired_dark_skin_tone": "👩🏿‍🦱", - "man_curly_haired": "👨‍🦱", - "man_curly_haired_tone1": "👨🏻‍🦱", - "man_curly_haired_light_skin_tone": "👨🏻‍🦱", - "man_curly_haired_tone2": "👨🏼‍🦱", - "man_curly_haired_medium_light_skin_tone": "👨🏼‍🦱", - "man_curly_haired_tone3": "👨🏽‍🦱", - "man_curly_haired_medium_skin_tone": "👨🏽‍🦱", - "man_curly_haired_tone4": "👨🏾‍🦱", - "man_curly_haired_medium_dark_skin_tone": "👨🏾‍🦱", - "man_curly_haired_tone5": "👨🏿‍🦱", - "man_curly_haired_dark_skin_tone": "👨🏿‍🦱", - "person_red_hair": "🧑‍🦰", - "person_tone1_red_hair": "🧑🏻‍🦰", - "person_light_skin_tone_red_hair": "🧑🏻‍🦰", - "person_tone2_red_hair": "🧑🏼‍🦰", - "person_medium_light_skin_tone_red_hair": "🧑🏼‍🦰", - "person_tone3_red_hair": "🧑🏽‍🦰", - "person_medium_skin_tone_red_hair": "🧑🏽‍🦰", - "person_tone4_red_hair": "🧑🏾‍🦰", - "person_medium_dark_skin_tone_red_hair": "🧑🏾‍🦰", - "person_tone5_red_hair": "🧑🏿‍🦰", - "person_dark_skin_tone_red_hair": "🧑🏿‍🦰", - "woman_red_haired": "👩‍🦰", - "woman_red_haired_tone1": "👩🏻‍🦰", - "woman_red_haired_light_skin_tone": "👩🏻‍🦰", - "woman_red_haired_tone2": "👩🏼‍🦰", - "woman_red_haired_medium_light_skin_tone": "👩🏼‍🦰", - "woman_red_haired_tone3": "👩🏽‍🦰", - "woman_red_haired_medium_skin_tone": "👩🏽‍🦰", - "woman_red_haired_tone4": "👩🏾‍🦰", - "woman_red_haired_medium_dark_skin_tone": "👩🏾‍🦰", - "woman_red_haired_tone5": "👩🏿‍🦰", - "woman_red_haired_dark_skin_tone": "👩🏿‍🦰", - "man_red_haired": "👨‍🦰", - "man_red_haired_tone1": "👨🏻‍🦰", - "man_red_haired_light_skin_tone": "👨🏻‍🦰", - "man_red_haired_tone2": "👨🏼‍🦰", - "man_red_haired_medium_light_skin_tone": "👨🏼‍🦰", - "man_red_haired_tone3": "👨🏽‍🦰", - "man_red_haired_medium_skin_tone": "👨🏽‍🦰", - "man_red_haired_tone4": "👨🏾‍🦰", - "man_red_haired_medium_dark_skin_tone": "👨🏾‍🦰", - "man_red_haired_tone5": "👨🏿‍🦰", - "man_red_haired_dark_skin_tone": "👨🏿‍🦰", - "blond_haired_woman": "👱‍♀️", - "blond_haired_woman_tone1": "👱🏻‍♀️", - "blond_haired_woman_light_skin_tone": "👱🏻‍♀️", - "blond_haired_woman_tone2": "👱🏼‍♀️", - "blond_haired_woman_medium_light_skin_tone": "👱🏼‍♀️", - "blond_haired_woman_tone3": "👱🏽‍♀️", - "blond_haired_woman_medium_skin_tone": "👱🏽‍♀️", - "blond_haired_woman_tone4": "👱🏾‍♀️", - "blond_haired_woman_medium_dark_skin_tone": "👱🏾‍♀️", - "blond_haired_woman_tone5": "👱🏿‍♀️", - "blond_haired_woman_dark_skin_tone": "👱🏿‍♀️", - "blond_haired_person": "👱", - "person_with_blond_hair": "👱", - "blond_haired_person_tone1": "👱🏻", - "person_with_blond_hair_tone1": "👱🏻", - "blond_haired_person_tone2": "👱🏼", - "person_with_blond_hair_tone2": "👱🏼", - "blond_haired_person_tone3": "👱🏽", - "person_with_blond_hair_tone3": "👱🏽", - "blond_haired_person_tone4": "👱🏾", - "person_with_blond_hair_tone4": "👱🏾", - "blond_haired_person_tone5": "👱🏿", - "person_with_blond_hair_tone5": "👱🏿", - "blond_haired_man": "👱‍♂️", - "blond_haired_man_tone1": "👱🏻‍♂️", - "blond_haired_man_light_skin_tone": "👱🏻‍♂️", - "blond_haired_man_tone2": "👱🏼‍♂️", - "blond_haired_man_medium_light_skin_tone": "👱🏼‍♂️", - "blond_haired_man_tone3": "👱🏽‍♂️", - "blond_haired_man_medium_skin_tone": "👱🏽‍♂️", - "blond_haired_man_tone4": "👱🏾‍♂️", - "blond_haired_man_medium_dark_skin_tone": "👱🏾‍♂️", - "blond_haired_man_tone5": "👱🏿‍♂️", - "blond_haired_man_dark_skin_tone": "👱🏿‍♂️", - "person_white_hair": "🧑‍🦳", - "person_tone1_white_hair": "🧑🏻‍🦳", - "person_light_skin_tone_white_hair": "🧑🏻‍🦳", - "person_tone2_white_hair": "🧑🏼‍🦳", - "person_medium_light_skin_tone_white_hair": "🧑🏼‍🦳", - "person_tone3_white_hair": "🧑🏽‍🦳", - "person_medium_skin_tone_white_hair": "🧑🏽‍🦳", - "person_tone4_white_hair": "🧑🏾‍🦳", - "person_medium_dark_skin_tone_white_hair": "🧑🏾‍🦳", - "person_tone5_white_hair": "🧑🏿‍🦳", - "person_dark_skin_tone_white_hair": "🧑🏿‍🦳", - "woman_white_haired": "👩‍🦳", - "woman_white_haired_tone1": "👩🏻‍🦳", - "woman_white_haired_light_skin_tone": "👩🏻‍🦳", - "woman_white_haired_tone2": "👩🏼‍🦳", - "woman_white_haired_medium_light_skin_tone": "👩🏼‍🦳", - "woman_white_haired_tone3": "👩🏽‍🦳", - "woman_white_haired_medium_skin_tone": "👩🏽‍🦳", - "woman_white_haired_tone4": "👩🏾‍🦳", - "woman_white_haired_medium_dark_skin_tone": "👩🏾‍🦳", - "woman_white_haired_tone5": "👩🏿‍🦳", - "woman_white_haired_dark_skin_tone": "👩🏿‍🦳", - "man_white_haired": "👨‍🦳", - "man_white_haired_tone1": "👨🏻‍🦳", - "man_white_haired_light_skin_tone": "👨🏻‍🦳", - "man_white_haired_tone2": "👨🏼‍🦳", - "man_white_haired_medium_light_skin_tone": "👨🏼‍🦳", - "man_white_haired_tone3": "👨🏽‍🦳", - "man_white_haired_medium_skin_tone": "👨🏽‍🦳", - "man_white_haired_tone4": "👨🏾‍🦳", - "man_white_haired_medium_dark_skin_tone": "👨🏾‍🦳", - "man_white_haired_tone5": "👨🏿‍🦳", - "man_white_haired_dark_skin_tone": "👨🏿‍🦳", - "person_bald": "🧑‍🦲", - "person_tone1_bald": "🧑🏻‍🦲", - "person_light_skin_tone_bald": "🧑🏻‍🦲", - "person_tone2_bald": "🧑🏼‍🦲", - "person_medium_light_skin_tone_bald": "🧑🏼‍🦲", - "person_tone3_bald": "🧑🏽‍🦲", - "person_medium_skin_tone_bald": "🧑🏽‍🦲", - "person_tone4_bald": "🧑🏾‍🦲", - "person_medium_dark_skin_tone_bald": "🧑🏾‍🦲", - "person_tone5_bald": "🧑🏿‍🦲", - "person_dark_skin_tone_bald": "🧑🏿‍🦲", - "woman_bald": "👩‍🦲", - "woman_bald_tone1": "👩🏻‍🦲", - "woman_bald_light_skin_tone": "👩🏻‍🦲", - "woman_bald_tone2": "👩🏼‍🦲", - "woman_bald_medium_light_skin_tone": "👩🏼‍🦲", - "woman_bald_tone3": "👩🏽‍🦲", - "woman_bald_medium_skin_tone": "👩🏽‍🦲", - "woman_bald_tone4": "👩🏾‍🦲", - "woman_bald_medium_dark_skin_tone": "👩🏾‍🦲", - "woman_bald_tone5": "👩🏿‍🦲", - "woman_bald_dark_skin_tone": "👩🏿‍🦲", - "man_bald": "👨‍🦲", - "man_bald_tone1": "👨🏻‍🦲", - "man_bald_light_skin_tone": "👨🏻‍🦲", - "man_bald_tone2": "👨🏼‍🦲", - "man_bald_medium_light_skin_tone": "👨🏼‍🦲", - "man_bald_tone3": "👨🏽‍🦲", - "man_bald_medium_skin_tone": "👨🏽‍🦲", - "man_bald_tone4": "👨🏾‍🦲", - "man_bald_medium_dark_skin_tone": "👨🏾‍🦲", - "man_bald_tone5": "👨🏿‍🦲", - "man_bald_dark_skin_tone": "👨🏿‍🦲", - "bearded_person": "🧔", - "bearded_person_tone1": "🧔🏻", - "bearded_person_light_skin_tone": "🧔🏻", - "bearded_person_tone2": "🧔🏼", - "bearded_person_medium_light_skin_tone": "🧔🏼", - "bearded_person_tone3": "🧔🏽", - "bearded_person_medium_skin_tone": "🧔🏽", - "bearded_person_tone4": "🧔🏾", - "bearded_person_medium_dark_skin_tone": "🧔🏾", - "bearded_person_tone5": "🧔🏿", - "bearded_person_dark_skin_tone": "🧔🏿", - "man_beard": "🧔‍♂️", - "man_tone1_beard": "🧔🏻‍♂️", - "man_light_skin_tone_beard": "🧔🏻‍♂️", - "man_tone2_beard": "🧔🏼‍♂️", - "man_medium_light_skin_tone_beard": "🧔🏼‍♂️", - "man_tone3_beard": "🧔🏽‍♂️", - "man_medium_skin_tone_beard": "🧔🏽‍♂️", - "man_tone4_beard": "🧔🏾‍♂️", - "man_medium_dark_skin_tone_beard": "🧔🏾‍♂️", - "man_tone5_beard": "🧔🏿‍♂️", - "man_dark_skin_tone_beard": "🧔🏿‍♂️", - "woman_beard": "🧔‍♀️", - "woman_tone1_beard": "🧔🏻‍♀️", - "woman_light_skin_tone_beard": "🧔🏻‍♀️", - "woman_tone2_beard": "🧔🏼‍♀️", - "woman_medium_light_skin_tone_beard": "🧔🏼‍♀️", - "woman_tone3_beard": "🧔🏽‍♀️", - "woman_medium_skin_tone_beard": "🧔🏽‍♀️", - "woman_tone4_beard": "🧔🏾‍♀️", - "woman_medium_dark_skin_tone_beard": "🧔🏾‍♀️", - "woman_tone5_beard": "🧔🏿‍♀️", - "woman_dark_skin_tone_beard": "🧔🏿‍♀️", - "older_woman": "👵", - "grandma": "👵", - "older_woman_tone1": "👵🏻", - "grandma_tone1": "👵🏻", - "older_woman_tone2": "👵🏼", - "grandma_tone2": "👵🏼", - "older_woman_tone3": "👵🏽", - "grandma_tone3": "👵🏽", - "older_woman_tone4": "👵🏾", - "grandma_tone4": "👵🏾", - "older_woman_tone5": "👵🏿", - "grandma_tone5": "👵🏿", - "older_adult": "🧓", - "older_adult_tone1": "🧓🏻", - "older_adult_light_skin_tone": "🧓🏻", - "older_adult_tone2": "🧓🏼", - "older_adult_medium_light_skin_tone": "🧓🏼", - "older_adult_tone3": "🧓🏽", - "older_adult_medium_skin_tone": "🧓🏽", - "older_adult_tone4": "🧓🏾", - "older_adult_medium_dark_skin_tone": "🧓🏾", - "older_adult_tone5": "🧓🏿", - "older_adult_dark_skin_tone": "🧓🏿", - "older_man": "👴", - "older_man_tone1": "👴🏻", - "older_man_tone2": "👴🏼", - "older_man_tone3": "👴🏽", - "older_man_tone4": "👴🏾", - "older_man_tone5": "👴🏿", - "man_with_chinese_cap": "👲", - "man_with_gua_pi_mao": "👲", - "man_with_chinese_cap_tone1": "👲🏻", - "man_with_gua_pi_mao_tone1": "👲🏻", - "man_with_chinese_cap_tone2": "👲🏼", - "man_with_gua_pi_mao_tone2": "👲🏼", - "man_with_chinese_cap_tone3": "👲🏽", - "man_with_gua_pi_mao_tone3": "👲🏽", - "man_with_chinese_cap_tone4": "👲🏾", - "man_with_gua_pi_mao_tone4": "👲🏾", - "man_with_chinese_cap_tone5": "👲🏿", - "man_with_gua_pi_mao_tone5": "👲🏿", - "person_wearing_turban": "👳", - "man_with_turban": "👳", - "person_wearing_turban_tone1": "👳🏻", - "man_with_turban_tone1": "👳🏻", - "person_wearing_turban_tone2": "👳🏼", - "man_with_turban_tone2": "👳🏼", - "person_wearing_turban_tone3": "👳🏽", - "man_with_turban_tone3": "👳🏽", - "person_wearing_turban_tone4": "👳🏾", - "man_with_turban_tone4": "👳🏾", - "person_wearing_turban_tone5": "👳🏿", - "man_with_turban_tone5": "👳🏿", - "woman_wearing_turban": "👳‍♀️", - "woman_wearing_turban_tone1": "👳🏻‍♀️", - "woman_wearing_turban_light_skin_tone": "👳🏻‍♀️", - "woman_wearing_turban_tone2": "👳🏼‍♀️", - "woman_wearing_turban_medium_light_skin_tone": "👳🏼‍♀️", - "woman_wearing_turban_tone3": "👳🏽‍♀️", - "woman_wearing_turban_medium_skin_tone": "👳🏽‍♀️", - "woman_wearing_turban_tone4": "👳🏾‍♀️", - "woman_wearing_turban_medium_dark_skin_tone": "👳🏾‍♀️", - "woman_wearing_turban_tone5": "👳🏿‍♀️", - "woman_wearing_turban_dark_skin_tone": "👳🏿‍♀️", - "man_wearing_turban": "👳‍♂️", - "man_wearing_turban_tone1": "👳🏻‍♂️", - "man_wearing_turban_light_skin_tone": "👳🏻‍♂️", - "man_wearing_turban_tone2": "👳🏼‍♂️", - "man_wearing_turban_medium_light_skin_tone": "👳🏼‍♂️", - "man_wearing_turban_tone3": "👳🏽‍♂️", - "man_wearing_turban_medium_skin_tone": "👳🏽‍♂️", - "man_wearing_turban_tone4": "👳🏾‍♂️", - "man_wearing_turban_medium_dark_skin_tone": "👳🏾‍♂️", - "man_wearing_turban_tone5": "👳🏿‍♂️", - "man_wearing_turban_dark_skin_tone": "👳🏿‍♂️", - "woman_with_headscarf": "🧕", - "woman_with_headscarf_tone1": "🧕🏻", - "woman_with_headscarf_light_skin_tone": "🧕🏻", - "woman_with_headscarf_tone2": "🧕🏼", - "woman_with_headscarf_medium_light_skin_tone": "🧕🏼", - "woman_with_headscarf_tone3": "🧕🏽", - "woman_with_headscarf_medium_skin_tone": "🧕🏽", - "woman_with_headscarf_tone4": "🧕🏾", - "woman_with_headscarf_medium_dark_skin_tone": "🧕🏾", - "woman_with_headscarf_tone5": "🧕🏿", - "woman_with_headscarf_dark_skin_tone": "🧕🏿", - "police_officer": "👮", - "cop": "👮", - "police_officer_tone1": "👮🏻", - "cop_tone1": "👮🏻", - "police_officer_tone2": "👮🏼", - "cop_tone2": "👮🏼", - "police_officer_tone3": "👮🏽", - "cop_tone3": "👮🏽", - "police_officer_tone4": "👮🏾", - "cop_tone4": "👮🏾", - "police_officer_tone5": "👮🏿", - "cop_tone5": "👮🏿", - "woman_police_officer": "👮‍♀️", - "woman_police_officer_tone1": "👮🏻‍♀️", - "woman_police_officer_light_skin_tone": "👮🏻‍♀️", - "woman_police_officer_tone2": "👮🏼‍♀️", - "woman_police_officer_medium_light_skin_tone": "👮🏼‍♀️", - "woman_police_officer_tone3": "👮🏽‍♀️", - "woman_police_officer_medium_skin_tone": "👮🏽‍♀️", - "woman_police_officer_tone4": "👮🏾‍♀️", - "woman_police_officer_medium_dark_skin_tone": "👮🏾‍♀️", - "woman_police_officer_tone5": "👮🏿‍♀️", - "woman_police_officer_dark_skin_tone": "👮🏿‍♀️", - "man_police_officer": "👮‍♂️", - "man_police_officer_tone1": "👮🏻‍♂️", - "man_police_officer_light_skin_tone": "👮🏻‍♂️", - "man_police_officer_tone2": "👮🏼‍♂️", - "man_police_officer_medium_light_skin_tone": "👮🏼‍♂️", - "man_police_officer_tone3": "👮🏽‍♂️", - "man_police_officer_medium_skin_tone": "👮🏽‍♂️", - "man_police_officer_tone4": "👮🏾‍♂️", - "man_police_officer_medium_dark_skin_tone": "👮🏾‍♂️", - "man_police_officer_tone5": "👮🏿‍♂️", - "man_police_officer_dark_skin_tone": "👮🏿‍♂️", - "construction_worker": "👷", - "construction_worker_tone1": "👷🏻", - "construction_worker_tone2": "👷🏼", - "construction_worker_tone3": "👷🏽", - "construction_worker_tone4": "👷🏾", - "construction_worker_tone5": "👷🏿", - "woman_construction_worker": "👷‍♀️", - "woman_construction_worker_tone1": "👷🏻‍♀️", - "woman_construction_worker_light_skin_tone": "👷🏻‍♀️", - "woman_construction_worker_tone2": "👷🏼‍♀️", - "woman_construction_worker_medium_light_skin_tone": "👷🏼‍♀️", - "woman_construction_worker_tone3": "👷🏽‍♀️", - "woman_construction_worker_medium_skin_tone": "👷🏽‍♀️", - "woman_construction_worker_tone4": "👷🏾‍♀️", - "woman_construction_worker_medium_dark_skin_tone": "👷🏾‍♀️", - "woman_construction_worker_tone5": "👷🏿‍♀️", - "woman_construction_worker_dark_skin_tone": "👷🏿‍♀️", - "man_construction_worker": "👷‍♂️", - "man_construction_worker_tone1": "👷🏻‍♂️", - "man_construction_worker_light_skin_tone": "👷🏻‍♂️", - "man_construction_worker_tone2": "👷🏼‍♂️", - "man_construction_worker_medium_light_skin_tone": "👷🏼‍♂️", - "man_construction_worker_tone3": "👷🏽‍♂️", - "man_construction_worker_medium_skin_tone": "👷🏽‍♂️", - "man_construction_worker_tone4": "👷🏾‍♂️", - "man_construction_worker_medium_dark_skin_tone": "👷🏾‍♂️", - "man_construction_worker_tone5": "👷🏿‍♂️", - "man_construction_worker_dark_skin_tone": "👷🏿‍♂️", - "guard": "💂", - "guardsman": "💂", - "guard_tone1": "💂🏻", - "guardsman_tone1": "💂🏻", - "guard_tone2": "💂🏼", - "guardsman_tone2": "💂🏼", - "guard_tone3": "💂🏽", - "guardsman_tone3": "💂🏽", - "guard_tone4": "💂🏾", - "guardsman_tone4": "💂🏾", - "guard_tone5": "💂🏿", - "guardsman_tone5": "💂🏿", - "woman_guard": "💂‍♀️", - "woman_guard_tone1": "💂🏻‍♀️", - "woman_guard_light_skin_tone": "💂🏻‍♀️", - "woman_guard_tone2": "💂🏼‍♀️", - "woman_guard_medium_light_skin_tone": "💂🏼‍♀️", - "woman_guard_tone3": "💂🏽‍♀️", - "woman_guard_medium_skin_tone": "💂🏽‍♀️", - "woman_guard_tone4": "💂🏾‍♀️", - "woman_guard_medium_dark_skin_tone": "💂🏾‍♀️", - "woman_guard_tone5": "💂🏿‍♀️", - "woman_guard_dark_skin_tone": "💂🏿‍♀️", - "man_guard": "💂‍♂️", - "man_guard_tone1": "💂🏻‍♂️", - "man_guard_light_skin_tone": "💂🏻‍♂️", - "man_guard_tone2": "💂🏼‍♂️", - "man_guard_medium_light_skin_tone": "💂🏼‍♂️", - "man_guard_tone3": "💂🏽‍♂️", - "man_guard_medium_skin_tone": "💂🏽‍♂️", - "man_guard_tone4": "💂🏾‍♂️", - "man_guard_medium_dark_skin_tone": "💂🏾‍♂️", - "man_guard_tone5": "💂🏿‍♂️", - "man_guard_dark_skin_tone": "💂🏿‍♂️", - "detective": "🕵️", - "spy": "🕵️", - "sleuth_or_spy": "🕵️", - "detective_tone1": "🕵🏻", - "spy_tone1": "🕵🏻", - "sleuth_or_spy_tone1": "🕵🏻", - "detective_tone2": "🕵🏼", - "spy_tone2": "🕵🏼", - "sleuth_or_spy_tone2": "🕵🏼", - "detective_tone3": "🕵🏽", - "spy_tone3": "🕵🏽", - "sleuth_or_spy_tone3": "🕵🏽", - "detective_tone4": "🕵🏾", - "spy_tone4": "🕵🏾", - "sleuth_or_spy_tone4": "🕵🏾", - "detective_tone5": "🕵🏿", - "spy_tone5": "🕵🏿", - "sleuth_or_spy_tone5": "🕵🏿", - "woman_detective": "🕵️‍♀️", - "woman_detective_tone1": "🕵🏻‍♀️", - "woman_detective_light_skin_tone": "🕵🏻‍♀️", - "woman_detective_tone2": "🕵🏼‍♀️", - "woman_detective_medium_light_skin_tone": "🕵🏼‍♀️", - "woman_detective_tone3": "🕵🏽‍♀️", - "woman_detective_medium_skin_tone": "🕵🏽‍♀️", - "woman_detective_tone4": "🕵🏾‍♀️", - "woman_detective_medium_dark_skin_tone": "🕵🏾‍♀️", - "woman_detective_tone5": "🕵🏿‍♀️", - "woman_detective_dark_skin_tone": "🕵🏿‍♀️", - "man_detective": "🕵️‍♂️", - "man_detective_tone1": "🕵🏻‍♂️", - "man_detective_light_skin_tone": "🕵🏻‍♂️", - "man_detective_tone2": "🕵🏼‍♂️", - "man_detective_medium_light_skin_tone": "🕵🏼‍♂️", - "man_detective_tone3": "🕵🏽‍♂️", - "man_detective_medium_skin_tone": "🕵🏽‍♂️", - "man_detective_tone4": "🕵🏾‍♂️", - "man_detective_medium_dark_skin_tone": "🕵🏾‍♂️", - "man_detective_tone5": "🕵🏿‍♂️", - "man_detective_dark_skin_tone": "🕵🏿‍♂️", - "health_worker": "🧑‍⚕️", - "health_worker_tone1": "🧑🏻‍⚕️", - "health_worker_light_skin_tone": "🧑🏻‍⚕️", - "health_worker_tone2": "🧑🏼‍⚕️", - "health_worker_medium_light_skin_tone": "🧑🏼‍⚕️", - "health_worker_tone3": "🧑🏽‍⚕️", - "health_worker_medium_skin_tone": "🧑🏽‍⚕️", - "health_worker_tone4": "🧑🏾‍⚕️", - "health_worker_medium_dark_skin_tone": "🧑🏾‍⚕️", - "health_worker_tone5": "🧑🏿‍⚕️", - "health_worker_dark_skin_tone": "🧑🏿‍⚕️", - "woman_health_worker": "👩‍⚕️", - "woman_health_worker_tone1": "👩🏻‍⚕️", - "woman_health_worker_light_skin_tone": "👩🏻‍⚕️", - "woman_health_worker_tone2": "👩🏼‍⚕️", - "woman_health_worker_medium_light_skin_tone": "👩🏼‍⚕️", - "woman_health_worker_tone3": "👩🏽‍⚕️", - "woman_health_worker_medium_skin_tone": "👩🏽‍⚕️", - "woman_health_worker_tone4": "👩🏾‍⚕️", - "woman_health_worker_medium_dark_skin_tone": "👩🏾‍⚕️", - "woman_health_worker_tone5": "👩🏿‍⚕️", - "woman_health_worker_dark_skin_tone": "👩🏿‍⚕️", - "man_health_worker": "👨‍⚕️", - "man_health_worker_tone1": "👨🏻‍⚕️", - "man_health_worker_light_skin_tone": "👨🏻‍⚕️", - "man_health_worker_tone2": "👨🏼‍⚕️", - "man_health_worker_medium_light_skin_tone": "👨🏼‍⚕️", - "man_health_worker_tone3": "👨🏽‍⚕️", - "man_health_worker_medium_skin_tone": "👨🏽‍⚕️", - "man_health_worker_tone4": "👨🏾‍⚕️", - "man_health_worker_medium_dark_skin_tone": "👨🏾‍⚕️", - "man_health_worker_tone5": "👨🏿‍⚕️", - "man_health_worker_dark_skin_tone": "👨🏿‍⚕️", - "farmer": "🧑‍🌾", - "farmer_tone1": "🧑🏻‍🌾", - "farmer_light_skin_tone": "🧑🏻‍🌾", - "farmer_tone2": "🧑🏼‍🌾", - "farmer_medium_light_skin_tone": "🧑🏼‍🌾", - "farmer_tone3": "🧑🏽‍🌾", - "farmer_medium_skin_tone": "🧑🏽‍🌾", - "farmer_tone4": "🧑🏾‍🌾", - "farmer_medium_dark_skin_tone": "🧑🏾‍🌾", - "farmer_tone5": "🧑🏿‍🌾", - "farmer_dark_skin_tone": "🧑🏿‍🌾", - "woman_farmer": "👩‍🌾", - "woman_farmer_tone1": "👩🏻‍🌾", - "woman_farmer_light_skin_tone": "👩🏻‍🌾", - "woman_farmer_tone2": "👩🏼‍🌾", - "woman_farmer_medium_light_skin_tone": "👩🏼‍🌾", - "woman_farmer_tone3": "👩🏽‍🌾", - "woman_farmer_medium_skin_tone": "👩🏽‍🌾", - "woman_farmer_tone4": "👩🏾‍🌾", - "woman_farmer_medium_dark_skin_tone": "👩🏾‍🌾", - "woman_farmer_tone5": "👩🏿‍🌾", - "woman_farmer_dark_skin_tone": "👩🏿‍🌾", - "man_farmer": "👨‍🌾", - "man_farmer_tone1": "👨🏻‍🌾", - "man_farmer_light_skin_tone": "👨🏻‍🌾", - "man_farmer_tone2": "👨🏼‍🌾", - "man_farmer_medium_light_skin_tone": "👨🏼‍🌾", - "man_farmer_tone3": "👨🏽‍🌾", - "man_farmer_medium_skin_tone": "👨🏽‍🌾", - "man_farmer_tone4": "👨🏾‍🌾", - "man_farmer_medium_dark_skin_tone": "👨🏾‍🌾", - "man_farmer_tone5": "👨🏿‍🌾", - "man_farmer_dark_skin_tone": "👨🏿‍🌾", - "cook": "🧑‍🍳", - "cook_tone1": "🧑🏻‍🍳", - "cook_light_skin_tone": "🧑🏻‍🍳", - "cook_tone2": "🧑🏼‍🍳", - "cook_medium_light_skin_tone": "🧑🏼‍🍳", - "cook_tone3": "🧑🏽‍🍳", - "cook_medium_skin_tone": "🧑🏽‍🍳", - "cook_tone4": "🧑🏾‍🍳", - "cook_medium_dark_skin_tone": "🧑🏾‍🍳", - "cook_tone5": "🧑🏿‍🍳", - "cook_dark_skin_tone": "🧑🏿‍🍳", - "woman_cook": "👩‍🍳", - "woman_cook_tone1": "👩🏻‍🍳", - "woman_cook_light_skin_tone": "👩🏻‍🍳", - "woman_cook_tone2": "👩🏼‍🍳", - "woman_cook_medium_light_skin_tone": "👩🏼‍🍳", - "woman_cook_tone3": "👩🏽‍🍳", - "woman_cook_medium_skin_tone": "👩🏽‍🍳", - "woman_cook_tone4": "👩🏾‍🍳", - "woman_cook_medium_dark_skin_tone": "👩🏾‍🍳", - "woman_cook_tone5": "👩🏿‍🍳", - "woman_cook_dark_skin_tone": "👩🏿‍🍳", - "man_cook": "👨‍🍳", - "man_cook_tone1": "👨🏻‍🍳", - "man_cook_light_skin_tone": "👨🏻‍🍳", - "man_cook_tone2": "👨🏼‍🍳", - "man_cook_medium_light_skin_tone": "👨🏼‍🍳", - "man_cook_tone3": "👨🏽‍🍳", - "man_cook_medium_skin_tone": "👨🏽‍🍳", - "man_cook_tone4": "👨🏾‍🍳", - "man_cook_medium_dark_skin_tone": "👨🏾‍🍳", - "man_cook_tone5": "👨🏿‍🍳", - "man_cook_dark_skin_tone": "👨🏿‍🍳", - "student": "🧑‍🎓", - "student_tone1": "🧑🏻‍🎓", - "student_light_skin_tone": "🧑🏻‍🎓", - "student_tone2": "🧑🏼‍🎓", - "student_medium_light_skin_tone": "🧑🏼‍🎓", - "student_tone3": "🧑🏽‍🎓", - "student_medium_skin_tone": "🧑🏽‍🎓", - "student_tone4": "🧑🏾‍🎓", - "student_medium_dark_skin_tone": "🧑🏾‍🎓", - "student_tone5": "🧑🏿‍🎓", - "student_dark_skin_tone": "🧑🏿‍🎓", - "woman_student": "👩‍🎓", - "woman_student_tone1": "👩🏻‍🎓", - "woman_student_light_skin_tone": "👩🏻‍🎓", - "woman_student_tone2": "👩🏼‍🎓", - "woman_student_medium_light_skin_tone": "👩🏼‍🎓", - "woman_student_tone3": "👩🏽‍🎓", - "woman_student_medium_skin_tone": "👩🏽‍🎓", - "woman_student_tone4": "👩🏾‍🎓", - "woman_student_medium_dark_skin_tone": "👩🏾‍🎓", - "woman_student_tone5": "👩🏿‍🎓", - "woman_student_dark_skin_tone": "👩🏿‍🎓", - "man_student": "👨‍🎓", - "man_student_tone1": "👨🏻‍🎓", - "man_student_light_skin_tone": "👨🏻‍🎓", - "man_student_tone2": "👨🏼‍🎓", - "man_student_medium_light_skin_tone": "👨🏼‍🎓", - "man_student_tone3": "👨🏽‍🎓", - "man_student_medium_skin_tone": "👨🏽‍🎓", - "man_student_tone4": "👨🏾‍🎓", - "man_student_medium_dark_skin_tone": "👨🏾‍🎓", - "man_student_tone5": "👨🏿‍🎓", - "man_student_dark_skin_tone": "👨🏿‍🎓", - "singer": "🧑‍🎤", - "singer_tone1": "🧑🏻‍🎤", - "singer_light_skin_tone": "🧑🏻‍🎤", - "singer_tone2": "🧑🏼‍🎤", - "singer_medium_light_skin_tone": "🧑🏼‍🎤", - "singer_tone3": "🧑🏽‍🎤", - "singer_medium_skin_tone": "🧑🏽‍🎤", - "singer_tone4": "🧑🏾‍🎤", - "singer_medium_dark_skin_tone": "🧑🏾‍🎤", - "singer_tone5": "🧑🏿‍🎤", - "singer_dark_skin_tone": "🧑🏿‍🎤", - "woman_singer": "👩‍🎤", - "woman_singer_tone1": "👩🏻‍🎤", - "woman_singer_light_skin_tone": "👩🏻‍🎤", - "woman_singer_tone2": "👩🏼‍🎤", - "woman_singer_medium_light_skin_tone": "👩🏼‍🎤", - "woman_singer_tone3": "👩🏽‍🎤", - "woman_singer_medium_skin_tone": "👩🏽‍🎤", - "woman_singer_tone4": "👩🏾‍🎤", - "woman_singer_medium_dark_skin_tone": "👩🏾‍🎤", - "woman_singer_tone5": "👩🏿‍🎤", - "woman_singer_dark_skin_tone": "👩🏿‍🎤", - "man_singer": "👨‍🎤", - "man_singer_tone1": "👨🏻‍🎤", - "man_singer_light_skin_tone": "👨🏻‍🎤", - "man_singer_tone2": "👨🏼‍🎤", - "man_singer_medium_light_skin_tone": "👨🏼‍🎤", - "man_singer_tone3": "👨🏽‍🎤", - "man_singer_medium_skin_tone": "👨🏽‍🎤", - "man_singer_tone4": "👨🏾‍🎤", - "man_singer_medium_dark_skin_tone": "👨🏾‍🎤", - "man_singer_tone5": "👨🏿‍🎤", - "man_singer_dark_skin_tone": "👨🏿‍🎤", - "teacher": "🧑‍🏫", - "teacher_tone1": "🧑🏻‍🏫", - "teacher_light_skin_tone": "🧑🏻‍🏫", - "teacher_tone2": "🧑🏼‍🏫", - "teacher_medium_light_skin_tone": "🧑🏼‍🏫", - "teacher_tone3": "🧑🏽‍🏫", - "teacher_medium_skin_tone": "🧑🏽‍🏫", - "teacher_tone4": "🧑🏾‍🏫", - "teacher_medium_dark_skin_tone": "🧑🏾‍🏫", - "teacher_tone5": "🧑🏿‍🏫", - "teacher_dark_skin_tone": "🧑🏿‍🏫", - "woman_teacher": "👩‍🏫", - "woman_teacher_tone1": "👩🏻‍🏫", - "woman_teacher_light_skin_tone": "👩🏻‍🏫", - "woman_teacher_tone2": "👩🏼‍🏫", - "woman_teacher_medium_light_skin_tone": "👩🏼‍🏫", - "woman_teacher_tone3": "👩🏽‍🏫", - "woman_teacher_medium_skin_tone": "👩🏽‍🏫", - "woman_teacher_tone4": "👩🏾‍🏫", - "woman_teacher_medium_dark_skin_tone": "👩🏾‍🏫", - "woman_teacher_tone5": "👩🏿‍🏫", - "woman_teacher_dark_skin_tone": "👩🏿‍🏫", - "man_teacher": "👨‍🏫", - "man_teacher_tone1": "👨🏻‍🏫", - "man_teacher_light_skin_tone": "👨🏻‍🏫", - "man_teacher_tone2": "👨🏼‍🏫", - "man_teacher_medium_light_skin_tone": "👨🏼‍🏫", - "man_teacher_tone3": "👨🏽‍🏫", - "man_teacher_medium_skin_tone": "👨🏽‍🏫", - "man_teacher_tone4": "👨🏾‍🏫", - "man_teacher_medium_dark_skin_tone": "👨🏾‍🏫", - "man_teacher_tone5": "👨🏿‍🏫", - "man_teacher_dark_skin_tone": "👨🏿‍🏫", - "factory_worker": "🧑‍🏭", - "factory_worker_tone1": "🧑🏻‍🏭", - "factory_worker_light_skin_tone": "🧑🏻‍🏭", - "factory_worker_tone2": "🧑🏼‍🏭", - "factory_worker_medium_light_skin_tone": "🧑🏼‍🏭", - "factory_worker_tone3": "🧑🏽‍🏭", - "factory_worker_medium_skin_tone": "🧑🏽‍🏭", - "factory_worker_tone4": "🧑🏾‍🏭", - "factory_worker_medium_dark_skin_tone": "🧑🏾‍🏭", - "factory_worker_tone5": "🧑🏿‍🏭", - "factory_worker_dark_skin_tone": "🧑🏿‍🏭", - "woman_factory_worker": "👩‍🏭", - "woman_factory_worker_tone1": "👩🏻‍🏭", - "woman_factory_worker_light_skin_tone": "👩🏻‍🏭", - "woman_factory_worker_tone2": "👩🏼‍🏭", - "woman_factory_worker_medium_light_skin_tone": "👩🏼‍🏭", - "woman_factory_worker_tone3": "👩🏽‍🏭", - "woman_factory_worker_medium_skin_tone": "👩🏽‍🏭", - "woman_factory_worker_tone4": "👩🏾‍🏭", - "woman_factory_worker_medium_dark_skin_tone": "👩🏾‍🏭", - "woman_factory_worker_tone5": "👩🏿‍🏭", - "woman_factory_worker_dark_skin_tone": "👩🏿‍🏭", - "man_factory_worker": "👨‍🏭", - "man_factory_worker_tone1": "👨🏻‍🏭", - "man_factory_worker_light_skin_tone": "👨🏻‍🏭", - "man_factory_worker_tone2": "👨🏼‍🏭", - "man_factory_worker_medium_light_skin_tone": "👨🏼‍🏭", - "man_factory_worker_tone3": "👨🏽‍🏭", - "man_factory_worker_medium_skin_tone": "👨🏽‍🏭", - "man_factory_worker_tone4": "👨🏾‍🏭", - "man_factory_worker_medium_dark_skin_tone": "👨🏾‍🏭", - "man_factory_worker_tone5": "👨🏿‍🏭", - "man_factory_worker_dark_skin_tone": "👨🏿‍🏭", - "technologist": "🧑‍💻", - "technologist_tone1": "🧑🏻‍💻", - "technologist_light_skin_tone": "🧑🏻‍💻", - "technologist_tone2": "🧑🏼‍💻", - "technologist_medium_light_skin_tone": "🧑🏼‍💻", - "technologist_tone3": "🧑🏽‍💻", - "technologist_medium_skin_tone": "🧑🏽‍💻", - "technologist_tone4": "🧑🏾‍💻", - "technologist_medium_dark_skin_tone": "🧑🏾‍💻", - "technologist_tone5": "🧑🏿‍💻", - "technologist_dark_skin_tone": "🧑🏿‍💻", - "woman_technologist": "👩‍💻", - "woman_technologist_tone1": "👩🏻‍💻", - "woman_technologist_light_skin_tone": "👩🏻‍💻", - "woman_technologist_tone2": "👩🏼‍💻", - "woman_technologist_medium_light_skin_tone": "👩🏼‍💻", - "woman_technologist_tone3": "👩🏽‍💻", - "woman_technologist_medium_skin_tone": "👩🏽‍💻", - "woman_technologist_tone4": "👩🏾‍💻", - "woman_technologist_medium_dark_skin_tone": "👩🏾‍💻", - "woman_technologist_tone5": "👩🏿‍💻", - "woman_technologist_dark_skin_tone": "👩🏿‍💻", - "man_technologist": "👨‍💻", - "man_technologist_tone1": "👨🏻‍💻", - "man_technologist_light_skin_tone": "👨🏻‍💻", - "man_technologist_tone2": "👨🏼‍💻", - "man_technologist_medium_light_skin_tone": "👨🏼‍💻", - "man_technologist_tone3": "👨🏽‍💻", - "man_technologist_medium_skin_tone": "👨🏽‍💻", - "man_technologist_tone4": "👨🏾‍💻", - "man_technologist_medium_dark_skin_tone": "👨🏾‍💻", - "man_technologist_tone5": "👨🏿‍💻", - "man_technologist_dark_skin_tone": "👨🏿‍💻", - "office_worker": "🧑‍💼", - "office_worker_tone1": "🧑🏻‍💼", - "office_worker_light_skin_tone": "🧑🏻‍💼", - "office_worker_tone2": "🧑🏼‍💼", - "office_worker_medium_light_skin_tone": "🧑🏼‍💼", - "office_worker_tone3": "🧑🏽‍💼", - "office_worker_medium_skin_tone": "🧑🏽‍💼", - "office_worker_tone4": "🧑🏾‍💼", - "office_worker_medium_dark_skin_tone": "🧑🏾‍💼", - "office_worker_tone5": "🧑🏿‍💼", - "office_worker_dark_skin_tone": "🧑🏿‍💼", - "woman_office_worker": "👩‍💼", - "woman_office_worker_tone1": "👩🏻‍💼", - "woman_office_worker_light_skin_tone": "👩🏻‍💼", - "woman_office_worker_tone2": "👩🏼‍💼", - "woman_office_worker_medium_light_skin_tone": "👩🏼‍💼", - "woman_office_worker_tone3": "👩🏽‍💼", - "woman_office_worker_medium_skin_tone": "👩🏽‍💼", - "woman_office_worker_tone4": "👩🏾‍💼", - "woman_office_worker_medium_dark_skin_tone": "👩🏾‍💼", - "woman_office_worker_tone5": "👩🏿‍💼", - "woman_office_worker_dark_skin_tone": "👩🏿‍💼", - "man_office_worker": "👨‍💼", - "man_office_worker_tone1": "👨🏻‍💼", - "man_office_worker_light_skin_tone": "👨🏻‍💼", - "man_office_worker_tone2": "👨🏼‍💼", - "man_office_worker_medium_light_skin_tone": "👨🏼‍💼", - "man_office_worker_tone3": "👨🏽‍💼", - "man_office_worker_medium_skin_tone": "👨🏽‍💼", - "man_office_worker_tone4": "👨🏾‍💼", - "man_office_worker_medium_dark_skin_tone": "👨🏾‍💼", - "man_office_worker_tone5": "👨🏿‍💼", - "man_office_worker_dark_skin_tone": "👨🏿‍💼", - "mechanic": "🧑‍🔧", - "mechanic_tone1": "🧑🏻‍🔧", - "mechanic_light_skin_tone": "🧑🏻‍🔧", - "mechanic_tone2": "🧑🏼‍🔧", - "mechanic_medium_light_skin_tone": "🧑🏼‍🔧", - "mechanic_tone3": "🧑🏽‍🔧", - "mechanic_medium_skin_tone": "🧑🏽‍🔧", - "mechanic_tone4": "🧑🏾‍🔧", - "mechanic_medium_dark_skin_tone": "🧑🏾‍🔧", - "mechanic_tone5": "🧑🏿‍🔧", - "mechanic_dark_skin_tone": "🧑🏿‍🔧", - "woman_mechanic": "👩‍🔧", - "woman_mechanic_tone1": "👩🏻‍🔧", - "woman_mechanic_light_skin_tone": "👩🏻‍🔧", - "woman_mechanic_tone2": "👩🏼‍🔧", - "woman_mechanic_medium_light_skin_tone": "👩🏼‍🔧", - "woman_mechanic_tone3": "👩🏽‍🔧", - "woman_mechanic_medium_skin_tone": "👩🏽‍🔧", - "woman_mechanic_tone4": "👩🏾‍🔧", - "woman_mechanic_medium_dark_skin_tone": "👩🏾‍🔧", - "woman_mechanic_tone5": "👩🏿‍🔧", - "woman_mechanic_dark_skin_tone": "👩🏿‍🔧", - "man_mechanic": "👨‍🔧", - "man_mechanic_tone1": "👨🏻‍🔧", - "man_mechanic_light_skin_tone": "👨🏻‍🔧", - "man_mechanic_tone2": "👨🏼‍🔧", - "man_mechanic_medium_light_skin_tone": "👨🏼‍🔧", - "man_mechanic_tone3": "👨🏽‍🔧", - "man_mechanic_medium_skin_tone": "👨🏽‍🔧", - "man_mechanic_tone4": "👨🏾‍🔧", - "man_mechanic_medium_dark_skin_tone": "👨🏾‍🔧", - "man_mechanic_tone5": "👨🏿‍🔧", - "man_mechanic_dark_skin_tone": "👨🏿‍🔧", - "scientist": "🧑‍🔬", - "scientist_tone1": "🧑🏻‍🔬", - "scientist_light_skin_tone": "🧑🏻‍🔬", - "scientist_tone2": "🧑🏼‍🔬", - "scientist_medium_light_skin_tone": "🧑🏼‍🔬", - "scientist_tone3": "🧑🏽‍🔬", - "scientist_medium_skin_tone": "🧑🏽‍🔬", - "scientist_tone4": "🧑🏾‍🔬", - "scientist_medium_dark_skin_tone": "🧑🏾‍🔬", - "scientist_tone5": "🧑🏿‍🔬", - "scientist_dark_skin_tone": "🧑🏿‍🔬", - "woman_scientist": "👩‍🔬", - "woman_scientist_tone1": "👩🏻‍🔬", - "woman_scientist_light_skin_tone": "👩🏻‍🔬", - "woman_scientist_tone2": "👩🏼‍🔬", - "woman_scientist_medium_light_skin_tone": "👩🏼‍🔬", - "woman_scientist_tone3": "👩🏽‍🔬", - "woman_scientist_medium_skin_tone": "👩🏽‍🔬", - "woman_scientist_tone4": "👩🏾‍🔬", - "woman_scientist_medium_dark_skin_tone": "👩🏾‍🔬", - "woman_scientist_tone5": "👩🏿‍🔬", - "woman_scientist_dark_skin_tone": "👩🏿‍🔬", - "man_scientist": "👨‍🔬", - "man_scientist_tone1": "👨🏻‍🔬", - "man_scientist_light_skin_tone": "👨🏻‍🔬", - "man_scientist_tone2": "👨🏼‍🔬", - "man_scientist_medium_light_skin_tone": "👨🏼‍🔬", - "man_scientist_tone3": "👨🏽‍🔬", - "man_scientist_medium_skin_tone": "👨🏽‍🔬", - "man_scientist_tone4": "👨🏾‍🔬", - "man_scientist_medium_dark_skin_tone": "👨🏾‍🔬", - "man_scientist_tone5": "👨🏿‍🔬", - "man_scientist_dark_skin_tone": "👨🏿‍🔬", - "artist": "🧑‍🎨", - "artist_tone1": "🧑🏻‍🎨", - "artist_light_skin_tone": "🧑🏻‍🎨", - "artist_tone2": "🧑🏼‍🎨", - "artist_medium_light_skin_tone": "🧑🏼‍🎨", - "artist_tone3": "🧑🏽‍🎨", - "artist_medium_skin_tone": "🧑🏽‍🎨", - "artist_tone4": "🧑🏾‍🎨", - "artist_medium_dark_skin_tone": "🧑🏾‍🎨", - "artist_tone5": "🧑🏿‍🎨", - "artist_dark_skin_tone": "🧑🏿‍🎨", - "woman_artist": "👩‍🎨", - "woman_artist_tone1": "👩🏻‍🎨", - "woman_artist_light_skin_tone": "👩🏻‍🎨", - "woman_artist_tone2": "👩🏼‍🎨", - "woman_artist_medium_light_skin_tone": "👩🏼‍🎨", - "woman_artist_tone3": "👩🏽‍🎨", - "woman_artist_medium_skin_tone": "👩🏽‍🎨", - "woman_artist_tone4": "👩🏾‍🎨", - "woman_artist_medium_dark_skin_tone": "👩🏾‍🎨", - "woman_artist_tone5": "👩🏿‍🎨", - "woman_artist_dark_skin_tone": "👩🏿‍🎨", - "man_artist": "👨‍🎨", - "man_artist_tone1": "👨🏻‍🎨", - "man_artist_light_skin_tone": "👨🏻‍🎨", - "man_artist_tone2": "👨🏼‍🎨", - "man_artist_medium_light_skin_tone": "👨🏼‍🎨", - "man_artist_tone3": "👨🏽‍🎨", - "man_artist_medium_skin_tone": "👨🏽‍🎨", - "man_artist_tone4": "👨🏾‍🎨", - "man_artist_medium_dark_skin_tone": "👨🏾‍🎨", - "man_artist_tone5": "👨🏿‍🎨", - "man_artist_dark_skin_tone": "👨🏿‍🎨", - "firefighter": "🧑‍🚒", - "firefighter_tone1": "🧑🏻‍🚒", - "firefighter_light_skin_tone": "🧑🏻‍🚒", - "firefighter_tone2": "🧑🏼‍🚒", - "firefighter_medium_light_skin_tone": "🧑🏼‍🚒", - "firefighter_tone3": "🧑🏽‍🚒", - "firefighter_medium_skin_tone": "🧑🏽‍🚒", - "firefighter_tone4": "🧑🏾‍🚒", - "firefighter_medium_dark_skin_tone": "🧑🏾‍🚒", - "firefighter_tone5": "🧑🏿‍🚒", - "firefighter_dark_skin_tone": "🧑🏿‍🚒", - "woman_firefighter": "👩‍🚒", - "woman_firefighter_tone1": "👩🏻‍🚒", - "woman_firefighter_light_skin_tone": "👩🏻‍🚒", - "woman_firefighter_tone2": "👩🏼‍🚒", - "woman_firefighter_medium_light_skin_tone": "👩🏼‍🚒", - "woman_firefighter_tone3": "👩🏽‍🚒", - "woman_firefighter_medium_skin_tone": "👩🏽‍🚒", - "woman_firefighter_tone4": "👩🏾‍🚒", - "woman_firefighter_medium_dark_skin_tone": "👩🏾‍🚒", - "woman_firefighter_tone5": "👩🏿‍🚒", - "woman_firefighter_dark_skin_tone": "👩🏿‍🚒", - "man_firefighter": "👨‍🚒", - "man_firefighter_tone1": "👨🏻‍🚒", - "man_firefighter_light_skin_tone": "👨🏻‍🚒", - "man_firefighter_tone2": "👨🏼‍🚒", - "man_firefighter_medium_light_skin_tone": "👨🏼‍🚒", - "man_firefighter_tone3": "👨🏽‍🚒", - "man_firefighter_medium_skin_tone": "👨🏽‍🚒", - "man_firefighter_tone4": "👨🏾‍🚒", - "man_firefighter_medium_dark_skin_tone": "👨🏾‍🚒", - "man_firefighter_tone5": "👨🏿‍🚒", - "man_firefighter_dark_skin_tone": "👨🏿‍🚒", - "pilot": "🧑‍✈️", - "pilot_tone1": "🧑🏻‍✈️", - "pilot_light_skin_tone": "🧑🏻‍✈️", - "pilot_tone2": "🧑🏼‍✈️", - "pilot_medium_light_skin_tone": "🧑🏼‍✈️", - "pilot_tone3": "🧑🏽‍✈️", - "pilot_medium_skin_tone": "🧑🏽‍✈️", - "pilot_tone4": "🧑🏾‍✈️", - "pilot_medium_dark_skin_tone": "🧑🏾‍✈️", - "pilot_tone5": "🧑🏿‍✈️", - "pilot_dark_skin_tone": "🧑🏿‍✈️", - "woman_pilot": "👩‍✈️", - "woman_pilot_tone1": "👩🏻‍✈️", - "woman_pilot_light_skin_tone": "👩🏻‍✈️", - "woman_pilot_tone2": "👩🏼‍✈️", - "woman_pilot_medium_light_skin_tone": "👩🏼‍✈️", - "woman_pilot_tone3": "👩🏽‍✈️", - "woman_pilot_medium_skin_tone": "👩🏽‍✈️", - "woman_pilot_tone4": "👩🏾‍✈️", - "woman_pilot_medium_dark_skin_tone": "👩🏾‍✈️", - "woman_pilot_tone5": "👩🏿‍✈️", - "woman_pilot_dark_skin_tone": "👩🏿‍✈️", - "man_pilot": "👨‍✈️", - "man_pilot_tone1": "👨🏻‍✈️", - "man_pilot_light_skin_tone": "👨🏻‍✈️", - "man_pilot_tone2": "👨🏼‍✈️", - "man_pilot_medium_light_skin_tone": "👨🏼‍✈️", - "man_pilot_tone3": "👨🏽‍✈️", - "man_pilot_medium_skin_tone": "👨🏽‍✈️", - "man_pilot_tone4": "👨🏾‍✈️", - "man_pilot_medium_dark_skin_tone": "👨🏾‍✈️", - "man_pilot_tone5": "👨🏿‍✈️", - "man_pilot_dark_skin_tone": "👨🏿‍✈️", - "astronaut": "🧑‍🚀", - "astronaut_tone1": "🧑🏻‍🚀", - "astronaut_light_skin_tone": "🧑🏻‍🚀", - "astronaut_tone2": "🧑🏼‍🚀", - "astronaut_medium_light_skin_tone": "🧑🏼‍🚀", - "astronaut_tone3": "🧑🏽‍🚀", - "astronaut_medium_skin_tone": "🧑🏽‍🚀", - "astronaut_tone4": "🧑🏾‍🚀", - "astronaut_medium_dark_skin_tone": "🧑🏾‍🚀", - "astronaut_tone5": "🧑🏿‍🚀", - "astronaut_dark_skin_tone": "🧑🏿‍🚀", - "woman_astronaut": "👩‍🚀", - "woman_astronaut_tone1": "👩🏻‍🚀", - "woman_astronaut_light_skin_tone": "👩🏻‍🚀", - "woman_astronaut_tone2": "👩🏼‍🚀", - "woman_astronaut_medium_light_skin_tone": "👩🏼‍🚀", - "woman_astronaut_tone3": "👩🏽‍🚀", - "woman_astronaut_medium_skin_tone": "👩🏽‍🚀", - "woman_astronaut_tone4": "👩🏾‍🚀", - "woman_astronaut_medium_dark_skin_tone": "👩🏾‍🚀", - "woman_astronaut_tone5": "👩🏿‍🚀", - "woman_astronaut_dark_skin_tone": "👩🏿‍🚀", - "man_astronaut": "👨‍🚀", - "man_astronaut_tone1": "👨🏻‍🚀", - "man_astronaut_light_skin_tone": "👨🏻‍🚀", - "man_astronaut_tone2": "👨🏼‍🚀", - "man_astronaut_medium_light_skin_tone": "👨🏼‍🚀", - "man_astronaut_tone3": "👨🏽‍🚀", - "man_astronaut_medium_skin_tone": "👨🏽‍🚀", - "man_astronaut_tone4": "👨🏾‍🚀", - "man_astronaut_medium_dark_skin_tone": "👨🏾‍🚀", - "man_astronaut_tone5": "👨🏿‍🚀", - "man_astronaut_dark_skin_tone": "👨🏿‍🚀", - "judge": "🧑‍⚖️", - "judge_tone1": "🧑🏻‍⚖️", - "judge_light_skin_tone": "🧑🏻‍⚖️", - "judge_tone2": "🧑🏼‍⚖️", - "judge_medium_light_skin_tone": "🧑🏼‍⚖️", - "judge_tone3": "🧑🏽‍⚖️", - "judge_medium_skin_tone": "🧑🏽‍⚖️", - "judge_tone4": "🧑🏾‍⚖️", - "judge_medium_dark_skin_tone": "🧑🏾‍⚖️", - "judge_tone5": "🧑🏿‍⚖️", - "judge_dark_skin_tone": "🧑🏿‍⚖️", - "woman_judge": "👩‍⚖️", - "woman_judge_tone1": "👩🏻‍⚖️", - "woman_judge_light_skin_tone": "👩🏻‍⚖️", - "woman_judge_tone2": "👩🏼‍⚖️", - "woman_judge_medium_light_skin_tone": "👩🏼‍⚖️", - "woman_judge_tone3": "👩🏽‍⚖️", - "woman_judge_medium_skin_tone": "👩🏽‍⚖️", - "woman_judge_tone4": "👩🏾‍⚖️", - "woman_judge_medium_dark_skin_tone": "👩🏾‍⚖️", - "woman_judge_tone5": "👩🏿‍⚖️", - "woman_judge_dark_skin_tone": "👩🏿‍⚖️", - "man_judge": "👨‍⚖️", - "man_judge_tone1": "👨🏻‍⚖️", - "man_judge_light_skin_tone": "👨🏻‍⚖️", - "man_judge_tone2": "👨🏼‍⚖️", - "man_judge_medium_light_skin_tone": "👨🏼‍⚖️", - "man_judge_tone3": "👨🏽‍⚖️", - "man_judge_medium_skin_tone": "👨🏽‍⚖️", - "man_judge_tone4": "👨🏾‍⚖️", - "man_judge_medium_dark_skin_tone": "👨🏾‍⚖️", - "man_judge_tone5": "👨🏿‍⚖️", - "man_judge_dark_skin_tone": "👨🏿‍⚖️", - "person_with_veil": "👰", - "person_with_veil_tone1": "👰🏻", - "person_with_veil_tone2": "👰🏼", - "person_with_veil_tone3": "👰🏽", - "person_with_veil_tone4": "👰🏾", - "person_with_veil_tone5": "👰🏿", - "woman_with_veil": "👰‍♀️", - "bride_with_veil": "👰‍♀️", - "woman_with_veil_tone1": "👰🏻‍♀️", - "woman_with_veil_light_skin_tone": "👰🏻‍♀️", - "woman_with_veil_tone2": "👰🏼‍♀️", - "woman_with_veil_medium_light_skin_tone": "👰🏼‍♀️", - "woman_with_veil_tone3": "👰🏽‍♀️", - "woman_with_veil_medium_skin_tone": "👰🏽‍♀️", - "woman_with_veil_tone4": "👰🏾‍♀️", - "woman_with_veil_medium_dark_skin_tone": "👰🏾‍♀️", - "woman_with_veil_tone5": "👰🏿‍♀️", - "woman_with_veil_dark_skin_tone": "👰🏿‍♀️", - "man_with_veil": "👰‍♂️", - "man_with_veil_tone1": "👰🏻‍♂️", - "man_with_veil_light_skin_tone": "👰🏻‍♂️", - "man_with_veil_tone2": "👰🏼‍♂️", - "man_with_veil_medium_light_skin_tone": "👰🏼‍♂️", - "man_with_veil_tone3": "👰🏽‍♂️", - "man_with_veil_medium_skin_tone": "👰🏽‍♂️", - "man_with_veil_tone4": "👰🏾‍♂️", - "man_with_veil_medium_dark_skin_tone": "👰🏾‍♂️", - "man_with_veil_tone5": "👰🏿‍♂️", - "man_with_veil_dark_skin_tone": "👰🏿‍♂️", - "person_in_tuxedo": "🤵", - "person_in_tuxedo_tone1": "🤵🏻", - "tuxedo_tone1": "🤵🏻", - "person_in_tuxedo_tone2": "🤵🏼", - "tuxedo_tone2": "🤵🏼", - "person_in_tuxedo_tone3": "🤵🏽", - "tuxedo_tone3": "🤵🏽", - "person_in_tuxedo_tone4": "🤵🏾", - "tuxedo_tone4": "🤵🏾", - "person_in_tuxedo_tone5": "🤵🏿", - "tuxedo_tone5": "🤵🏿", - "woman_in_tuxedo": "🤵‍♀️", - "woman_in_tuxedo_tone1": "🤵🏻‍♀️", - "woman_in_tuxedo_light_skin_tone": "🤵🏻‍♀️", - "woman_in_tuxedo_tone2": "🤵🏼‍♀️", - "woman_in_tuxedo_medium_light_skin_tone": "🤵🏼‍♀️", - "woman_in_tuxedo_tone3": "🤵🏽‍♀️", - "woman_in_tuxedo_medium_skin_tone": "🤵🏽‍♀️", - "woman_in_tuxedo_tone4": "🤵🏾‍♀️", - "woman_in_tuxedo_medium_dark_skin_tone": "🤵🏾‍♀️", - "woman_in_tuxedo_tone5": "🤵🏿‍♀️", - "woman_in_tuxedo_dark_skin_tone": "🤵🏿‍♀️", - "man_in_tuxedo": "🤵‍♂️", - "man_in_tuxedo_tone1": "🤵🏻‍♂️", - "man_in_tuxedo_light_skin_tone": "🤵🏻‍♂️", - "man_in_tuxedo_tone2": "🤵🏼‍♂️", - "man_in_tuxedo_medium_light_skin_tone": "🤵🏼‍♂️", - "man_in_tuxedo_tone3": "🤵🏽‍♂️", - "man_in_tuxedo_medium_skin_tone": "🤵🏽‍♂️", - "man_in_tuxedo_tone4": "🤵🏾‍♂️", - "man_in_tuxedo_medium_dark_skin_tone": "🤵🏾‍♂️", - "man_in_tuxedo_tone5": "🤵🏿‍♂️", - "man_in_tuxedo_dark_skin_tone": "🤵🏿‍♂️", - "princess": "👸", - "princess_tone1": "👸🏻", - "princess_tone2": "👸🏼", - "princess_tone3": "👸🏽", - "princess_tone4": "👸🏾", - "princess_tone5": "👸🏿", - "prince": "🤴", - "prince_tone1": "🤴🏻", - "prince_tone2": "🤴🏼", - "prince_tone3": "🤴🏽", - "prince_tone4": "🤴🏾", - "prince_tone5": "🤴🏿", - "superhero": "🦸", - "superhero_tone1": "🦸🏻", - "superhero_light_skin_tone": "🦸🏻", - "superhero_tone2": "🦸🏼", - "superhero_medium_light_skin_tone": "🦸🏼", - "superhero_tone3": "🦸🏽", - "superhero_medium_skin_tone": "🦸🏽", - "superhero_tone4": "🦸🏾", - "superhero_medium_dark_skin_tone": "🦸🏾", - "superhero_tone5": "🦸🏿", - "superhero_dark_skin_tone": "🦸🏿", - "woman_superhero": "🦸‍♀️", - "woman_superhero_tone1": "🦸🏻‍♀️", - "woman_superhero_light_skin_tone": "🦸🏻‍♀️", - "woman_superhero_tone2": "🦸🏼‍♀️", - "woman_superhero_medium_light_skin_tone": "🦸🏼‍♀️", - "woman_superhero_tone3": "🦸🏽‍♀️", - "woman_superhero_medium_skin_tone": "🦸🏽‍♀️", - "woman_superhero_tone4": "🦸🏾‍♀️", - "woman_superhero_medium_dark_skin_tone": "🦸🏾‍♀️", - "woman_superhero_tone5": "🦸🏿‍♀️", - "woman_superhero_dark_skin_tone": "🦸🏿‍♀️", - "man_superhero": "🦸‍♂️", - "man_superhero_tone1": "🦸🏻‍♂️", - "man_superhero_light_skin_tone": "🦸🏻‍♂️", - "man_superhero_tone2": "🦸🏼‍♂️", - "man_superhero_medium_light_skin_tone": "🦸🏼‍♂️", - "man_superhero_tone3": "🦸🏽‍♂️", - "man_superhero_medium_skin_tone": "🦸🏽‍♂️", - "man_superhero_tone4": "🦸🏾‍♂️", - "man_superhero_medium_dark_skin_tone": "🦸🏾‍♂️", - "man_superhero_tone5": "🦸🏿‍♂️", - "man_superhero_dark_skin_tone": "🦸🏿‍♂️", - "supervillain": "🦹", - "supervillain_tone1": "🦹🏻", - "supervillain_light_skin_tone": "🦹🏻", - "supervillain_tone2": "🦹🏼", - "supervillain_medium_light_skin_tone": "🦹🏼", - "supervillain_tone3": "🦹🏽", - "supervillain_medium_skin_tone": "🦹🏽", - "supervillain_tone4": "🦹🏾", - "supervillain_medium_dark_skin_tone": "🦹🏾", - "supervillain_tone5": "🦹🏿", - "supervillain_dark_skin_tone": "🦹🏿", - "woman_supervillain": "🦹‍♀️", - "woman_supervillain_tone1": "🦹🏻‍♀️", - "woman_supervillain_light_skin_tone": "🦹🏻‍♀️", - "woman_supervillain_tone2": "🦹🏼‍♀️", - "woman_supervillain_medium_light_skin_tone": "🦹🏼‍♀️", - "woman_supervillain_tone3": "🦹🏽‍♀️", - "woman_supervillain_medium_skin_tone": "🦹🏽‍♀️", - "woman_supervillain_tone4": "🦹🏾‍♀️", - "woman_supervillain_medium_dark_skin_tone": "🦹🏾‍♀️", - "woman_supervillain_tone5": "🦹🏿‍♀️", - "woman_supervillain_dark_skin_tone": "🦹🏿‍♀️", - "man_supervillain": "🦹‍♂️", - "man_supervillain_tone1": "🦹🏻‍♂️", - "man_supervillain_light_skin_tone": "🦹🏻‍♂️", - "man_supervillain_tone2": "🦹🏼‍♂️", - "man_supervillain_medium_light_skin_tone": "🦹🏼‍♂️", - "man_supervillain_tone3": "🦹🏽‍♂️", - "man_supervillain_medium_skin_tone": "🦹🏽‍♂️", - "man_supervillain_tone4": "🦹🏾‍♂️", - "man_supervillain_medium_dark_skin_tone": "🦹🏾‍♂️", - "man_supervillain_tone5": "🦹🏿‍♂️", - "man_supervillain_dark_skin_tone": "🦹🏿‍♂️", - "ninja": "🥷", - "ninja_tone1": "🥷🏻", - "ninja_light_skin_tone": "🥷🏻", - "ninja_tone2": "🥷🏼", - "ninja_medium_light_skin_tone": "🥷🏼", - "ninja_tone3": "🥷🏽", - "ninja_medium_skin_tone": "🥷🏽", - "ninja_tone4": "🥷🏾", - "ninja_medium_dark_skin_tone": "🥷🏾", - "ninja_tone5": "🥷🏿", - "ninja_dark_skin_tone": "🥷🏿", - "mx_claus": "🧑‍🎄", - "mx_claus_tone1": "🧑🏻‍🎄", - "mx_claus_light_skin_tone": "🧑🏻‍🎄", - "mx_claus_tone2": "🧑🏼‍🎄", - "mx_claus_medium_light_skin_tone": "🧑🏼‍🎄", - "mx_claus_tone3": "🧑🏽‍🎄", - "mx_claus_medium_skin_tone": "🧑🏽‍🎄", - "mx_claus_tone4": "🧑🏾‍🎄", - "mx_claus_medium_dark_skin_tone": "🧑🏾‍🎄", - "mx_claus_tone5": "🧑🏿‍🎄", - "mx_claus_dark_skin_tone": "🧑🏿‍🎄", - "mrs_claus": "🤶", - "mother_christmas": "🤶", - "mrs_claus_tone1": "🤶🏻", - "mother_christmas_tone1": "🤶🏻", - "mrs_claus_tone2": "🤶🏼", - "mother_christmas_tone2": "🤶🏼", - "mrs_claus_tone3": "🤶🏽", - "mother_christmas_tone3": "🤶🏽", - "mrs_claus_tone4": "🤶🏾", - "mother_christmas_tone4": "🤶🏾", - "mrs_claus_tone5": "🤶🏿", - "mother_christmas_tone5": "🤶🏿", - "santa": "🎅", - "santa_tone1": "🎅🏻", - "santa_tone2": "🎅🏼", - "santa_tone3": "🎅🏽", - "santa_tone4": "🎅🏾", - "santa_tone5": "🎅🏿", - "mage": "🧙", - "mage_tone1": "🧙🏻", - "mage_light_skin_tone": "🧙🏻", - "mage_tone2": "🧙🏼", - "mage_medium_light_skin_tone": "🧙🏼", - "mage_tone3": "🧙🏽", - "mage_medium_skin_tone": "🧙🏽", - "mage_tone4": "🧙🏾", - "mage_medium_dark_skin_tone": "🧙🏾", - "mage_tone5": "🧙🏿", - "mage_dark_skin_tone": "🧙🏿", - "woman_mage": "🧙‍♀️", - "woman_mage_tone1": "🧙🏻‍♀️", - "woman_mage_light_skin_tone": "🧙🏻‍♀️", - "woman_mage_tone2": "🧙🏼‍♀️", - "woman_mage_medium_light_skin_tone": "🧙🏼‍♀️", - "woman_mage_tone3": "🧙🏽‍♀️", - "woman_mage_medium_skin_tone": "🧙🏽‍♀️", - "woman_mage_tone4": "🧙🏾‍♀️", - "woman_mage_medium_dark_skin_tone": "🧙🏾‍♀️", - "woman_mage_tone5": "🧙🏿‍♀️", - "woman_mage_dark_skin_tone": "🧙🏿‍♀️", - "man_mage": "🧙‍♂️", - "man_mage_tone1": "🧙🏻‍♂️", - "man_mage_light_skin_tone": "🧙🏻‍♂️", - "man_mage_tone2": "🧙🏼‍♂️", - "man_mage_medium_light_skin_tone": "🧙🏼‍♂️", - "man_mage_tone3": "🧙🏽‍♂️", - "man_mage_medium_skin_tone": "🧙🏽‍♂️", - "man_mage_tone4": "🧙🏾‍♂️", - "man_mage_medium_dark_skin_tone": "🧙🏾‍♂️", - "man_mage_tone5": "🧙🏿‍♂️", - "man_mage_dark_skin_tone": "🧙🏿‍♂️", - "elf": "🧝", - "elf_tone1": "🧝🏻", - "elf_light_skin_tone": "🧝🏻", - "elf_tone2": "🧝🏼", - "elf_medium_light_skin_tone": "🧝🏼", - "elf_tone3": "🧝🏽", - "elf_medium_skin_tone": "🧝🏽", - "elf_tone4": "🧝🏾", - "elf_medium_dark_skin_tone": "🧝🏾", - "elf_tone5": "🧝🏿", - "elf_dark_skin_tone": "🧝🏿", - "woman_elf": "🧝‍♀️", - "woman_elf_tone1": "🧝🏻‍♀️", - "woman_elf_light_skin_tone": "🧝🏻‍♀️", - "woman_elf_tone2": "🧝🏼‍♀️", - "woman_elf_medium_light_skin_tone": "🧝🏼‍♀️", - "woman_elf_tone3": "🧝🏽‍♀️", - "woman_elf_medium_skin_tone": "🧝🏽‍♀️", - "woman_elf_tone4": "🧝🏾‍♀️", - "woman_elf_medium_dark_skin_tone": "🧝🏾‍♀️", - "woman_elf_tone5": "🧝🏿‍♀️", - "woman_elf_dark_skin_tone": "🧝🏿‍♀️", - "man_elf": "🧝‍♂️", - "man_elf_tone1": "🧝🏻‍♂️", - "man_elf_light_skin_tone": "🧝🏻‍♂️", - "man_elf_tone2": "🧝🏼‍♂️", - "man_elf_medium_light_skin_tone": "🧝🏼‍♂️", - "man_elf_tone3": "🧝🏽‍♂️", - "man_elf_medium_skin_tone": "🧝🏽‍♂️", - "man_elf_tone4": "🧝🏾‍♂️", - "man_elf_medium_dark_skin_tone": "🧝🏾‍♂️", - "man_elf_tone5": "🧝🏿‍♂️", - "man_elf_dark_skin_tone": "🧝🏿‍♂️", - "vampire": "🧛", - "vampire_tone1": "🧛🏻", - "vampire_light_skin_tone": "🧛🏻", - "vampire_tone2": "🧛🏼", - "vampire_medium_light_skin_tone": "🧛🏼", - "vampire_tone3": "🧛🏽", - "vampire_medium_skin_tone": "🧛🏽", - "vampire_tone4": "🧛🏾", - "vampire_medium_dark_skin_tone": "🧛🏾", - "vampire_tone5": "🧛🏿", - "vampire_dark_skin_tone": "🧛🏿", - "woman_vampire": "🧛‍♀️", - "woman_vampire_tone1": "🧛🏻‍♀️", - "woman_vampire_light_skin_tone": "🧛🏻‍♀️", - "woman_vampire_tone2": "🧛🏼‍♀️", - "woman_vampire_medium_light_skin_tone": "🧛🏼‍♀️", - "woman_vampire_tone3": "🧛🏽‍♀️", - "woman_vampire_medium_skin_tone": "🧛🏽‍♀️", - "woman_vampire_tone4": "🧛🏾‍♀️", - "woman_vampire_medium_dark_skin_tone": "🧛🏾‍♀️", - "woman_vampire_tone5": "🧛🏿‍♀️", - "woman_vampire_dark_skin_tone": "🧛🏿‍♀️", - "man_vampire": "🧛‍♂️", - "man_vampire_tone1": "🧛🏻‍♂️", - "man_vampire_light_skin_tone": "🧛🏻‍♂️", - "man_vampire_tone2": "🧛🏼‍♂️", - "man_vampire_medium_light_skin_tone": "🧛🏼‍♂️", - "man_vampire_tone3": "🧛🏽‍♂️", - "man_vampire_medium_skin_tone": "🧛🏽‍♂️", - "man_vampire_tone4": "🧛🏾‍♂️", - "man_vampire_medium_dark_skin_tone": "🧛🏾‍♂️", - "man_vampire_tone5": "🧛🏿‍♂️", - "man_vampire_dark_skin_tone": "🧛🏿‍♂️", - "zombie": "🧟", - "woman_zombie": "🧟‍♀️", - "man_zombie": "🧟‍♂️", - "genie": "🧞", - "woman_genie": "🧞‍♀️", - "man_genie": "🧞‍♂️", - "merperson": "🧜", - "merperson_tone1": "🧜🏻", - "merperson_light_skin_tone": "🧜🏻", - "merperson_tone2": "🧜🏼", - "merperson_medium_light_skin_tone": "🧜🏼", - "merperson_tone3": "🧜🏽", - "merperson_medium_skin_tone": "🧜🏽", - "merperson_tone4": "🧜🏾", - "merperson_medium_dark_skin_tone": "🧜🏾", - "merperson_tone5": "🧜🏿", - "merperson_dark_skin_tone": "🧜🏿", - "mermaid": "🧜‍♀️", - "mermaid_tone1": "🧜🏻‍♀️", - "mermaid_light_skin_tone": "🧜🏻‍♀️", - "mermaid_tone2": "🧜🏼‍♀️", - "mermaid_medium_light_skin_tone": "🧜🏼‍♀️", - "mermaid_tone3": "🧜🏽‍♀️", - "mermaid_medium_skin_tone": "🧜🏽‍♀️", - "mermaid_tone4": "🧜🏾‍♀️", - "mermaid_medium_dark_skin_tone": "🧜🏾‍♀️", - "mermaid_tone5": "🧜🏿‍♀️", - "mermaid_dark_skin_tone": "🧜🏿‍♀️", - "merman": "🧜‍♂️", - "merman_tone1": "🧜🏻‍♂️", - "merman_light_skin_tone": "🧜🏻‍♂️", - "merman_tone2": "🧜🏼‍♂️", - "merman_medium_light_skin_tone": "🧜🏼‍♂️", - "merman_tone3": "🧜🏽‍♂️", - "merman_medium_skin_tone": "🧜🏽‍♂️", - "merman_tone4": "🧜🏾‍♂️", - "merman_medium_dark_skin_tone": "🧜🏾‍♂️", - "merman_tone5": "🧜🏿‍♂️", - "merman_dark_skin_tone": "🧜🏿‍♂️", - "fairy": "🧚", - "fairy_tone1": "🧚🏻", - "fairy_light_skin_tone": "🧚🏻", - "fairy_tone2": "🧚🏼", - "fairy_medium_light_skin_tone": "🧚🏼", - "fairy_tone3": "🧚🏽", - "fairy_medium_skin_tone": "🧚🏽", - "fairy_tone4": "🧚🏾", - "fairy_medium_dark_skin_tone": "🧚🏾", - "fairy_tone5": "🧚🏿", - "fairy_dark_skin_tone": "🧚🏿", - "woman_fairy": "🧚‍♀️", - "woman_fairy_tone1": "🧚🏻‍♀️", - "woman_fairy_light_skin_tone": "🧚🏻‍♀️", - "woman_fairy_tone2": "🧚🏼‍♀️", - "woman_fairy_medium_light_skin_tone": "🧚🏼‍♀️", - "woman_fairy_tone3": "🧚🏽‍♀️", - "woman_fairy_medium_skin_tone": "🧚🏽‍♀️", - "woman_fairy_tone4": "🧚🏾‍♀️", - "woman_fairy_medium_dark_skin_tone": "🧚🏾‍♀️", - "woman_fairy_tone5": "🧚🏿‍♀️", - "woman_fairy_dark_skin_tone": "🧚🏿‍♀️", - "man_fairy": "🧚‍♂️", - "man_fairy_tone1": "🧚🏻‍♂️", - "man_fairy_light_skin_tone": "🧚🏻‍♂️", - "man_fairy_tone2": "🧚🏼‍♂️", - "man_fairy_medium_light_skin_tone": "🧚🏼‍♂️", - "man_fairy_tone3": "🧚🏽‍♂️", - "man_fairy_medium_skin_tone": "🧚🏽‍♂️", - "man_fairy_tone4": "🧚🏾‍♂️", - "man_fairy_medium_dark_skin_tone": "🧚🏾‍♂️", - "man_fairy_tone5": "🧚🏿‍♂️", - "man_fairy_dark_skin_tone": "🧚🏿‍♂️", - "angel": "👼", - "angel_tone1": "👼🏻", - "angel_tone2": "👼🏼", - "angel_tone3": "👼🏽", - "angel_tone4": "👼🏾", - "angel_tone5": "👼🏿", - "pregnant_woman": "🤰", - "expecting_woman": "🤰", - "pregnant_woman_tone1": "🤰🏻", - "expecting_woman_tone1": "🤰🏻", - "pregnant_woman_tone2": "🤰🏼", - "expecting_woman_tone2": "🤰🏼", - "pregnant_woman_tone3": "🤰🏽", - "expecting_woman_tone3": "🤰🏽", - "pregnant_woman_tone4": "🤰🏾", - "expecting_woman_tone4": "🤰🏾", - "pregnant_woman_tone5": "🤰🏿", - "expecting_woman_tone5": "🤰🏿", - "breast_feeding": "🤱", - "breast_feeding_tone1": "🤱🏻", - "breast_feeding_light_skin_tone": "🤱🏻", - "breast_feeding_tone2": "🤱🏼", - "breast_feeding_medium_light_skin_tone": "🤱🏼", - "breast_feeding_tone3": "🤱🏽", - "breast_feeding_medium_skin_tone": "🤱🏽", - "breast_feeding_tone4": "🤱🏾", - "breast_feeding_medium_dark_skin_tone": "🤱🏾", - "breast_feeding_tone5": "🤱🏿", - "breast_feeding_dark_skin_tone": "🤱🏿", - "person_feeding_baby": "🧑‍🍼", - "person_feeding_baby_tone1": "🧑🏻‍🍼", - "person_feeding_baby_light_skin_tone": "🧑🏻‍🍼", - "person_feeding_baby_tone2": "🧑🏼‍🍼", - "person_feeding_baby_medium_light_skin_tone": "🧑🏼‍🍼", - "person_feeding_baby_tone3": "🧑🏽‍🍼", - "person_feeding_baby_medium_skin_tone": "🧑🏽‍🍼", - "person_feeding_baby_tone4": "🧑🏾‍🍼", - "person_feeding_baby_medium_dark_skin_tone": "🧑🏾‍🍼", - "person_feeding_baby_tone5": "🧑🏿‍🍼", - "person_feeding_baby_dark_skin_tone": "🧑🏿‍🍼", - "woman_feeding_baby": "👩‍🍼", - "woman_feeding_baby_tone1": "👩🏻‍🍼", - "woman_feeding_baby_light_skin_tone": "👩🏻‍🍼", - "woman_feeding_baby_tone2": "👩🏼‍🍼", - "woman_feeding_baby_medium_light_skin_tone": "👩🏼‍🍼", - "woman_feeding_baby_tone3": "👩🏽‍🍼", - "woman_feeding_baby_medium_skin_tone": "👩🏽‍🍼", - "woman_feeding_baby_tone4": "👩🏾‍🍼", - "woman_feeding_baby_medium_dark_skin_tone": "👩🏾‍🍼", - "woman_feeding_baby_tone5": "👩🏿‍🍼", - "woman_feeding_baby_dark_skin_tone": "👩🏿‍🍼", - "man_feeding_baby": "👨‍🍼", - "man_feeding_baby_tone1": "👨🏻‍🍼", - "man_feeding_baby_light_skin_tone": "👨🏻‍🍼", - "man_feeding_baby_tone2": "👨🏼‍🍼", - "man_feeding_baby_medium_light_skin_tone": "👨🏼‍🍼", - "man_feeding_baby_tone3": "👨🏽‍🍼", - "man_feeding_baby_medium_skin_tone": "👨🏽‍🍼", - "man_feeding_baby_tone4": "👨🏾‍🍼", - "man_feeding_baby_medium_dark_skin_tone": "👨🏾‍🍼", - "man_feeding_baby_tone5": "👨🏿‍🍼", - "man_feeding_baby_dark_skin_tone": "👨🏿‍🍼", - "person_bowing": "🙇", - "bow": "🙇", - "person_bowing_tone1": "🙇🏻", - "bow_tone1": "🙇🏻", - "person_bowing_tone2": "🙇🏼", - "bow_tone2": "🙇🏼", - "person_bowing_tone3": "🙇🏽", - "bow_tone3": "🙇🏽", - "person_bowing_tone4": "🙇🏾", - "bow_tone4": "🙇🏾", - "person_bowing_tone5": "🙇🏿", - "bow_tone5": "🙇🏿", - "woman_bowing": "🙇‍♀️", - "woman_bowing_tone1": "🙇🏻‍♀️", - "woman_bowing_light_skin_tone": "🙇🏻‍♀️", - "woman_bowing_tone2": "🙇🏼‍♀️", - "woman_bowing_medium_light_skin_tone": "🙇🏼‍♀️", - "woman_bowing_tone3": "🙇🏽‍♀️", - "woman_bowing_medium_skin_tone": "🙇🏽‍♀️", - "woman_bowing_tone4": "🙇🏾‍♀️", - "woman_bowing_medium_dark_skin_tone": "🙇🏾‍♀️", - "woman_bowing_tone5": "🙇🏿‍♀️", - "woman_bowing_dark_skin_tone": "🙇🏿‍♀️", - "man_bowing": "🙇‍♂️", - "man_bowing_tone1": "🙇🏻‍♂️", - "man_bowing_light_skin_tone": "🙇🏻‍♂️", - "man_bowing_tone2": "🙇🏼‍♂️", - "man_bowing_medium_light_skin_tone": "🙇🏼‍♂️", - "man_bowing_tone3": "🙇🏽‍♂️", - "man_bowing_medium_skin_tone": "🙇🏽‍♂️", - "man_bowing_tone4": "🙇🏾‍♂️", - "man_bowing_medium_dark_skin_tone": "🙇🏾‍♂️", - "man_bowing_tone5": "🙇🏿‍♂️", - "man_bowing_dark_skin_tone": "🙇🏿‍♂️", - "person_tipping_hand": "💁", - "information_desk_person": "💁", - "person_tipping_hand_tone1": "💁🏻", - "information_desk_person_tone1": "💁🏻", - "person_tipping_hand_tone2": "💁🏼", - "information_desk_person_tone2": "💁🏼", - "person_tipping_hand_tone3": "💁🏽", - "information_desk_person_tone3": "💁🏽", - "person_tipping_hand_tone4": "💁🏾", - "information_desk_person_tone4": "💁🏾", - "person_tipping_hand_tone5": "💁🏿", - "information_desk_person_tone5": "💁🏿", - "woman_tipping_hand": "💁‍♀️", - "woman_tipping_hand_tone1": "💁🏻‍♀️", - "woman_tipping_hand_light_skin_tone": "💁🏻‍♀️", - "woman_tipping_hand_tone2": "💁🏼‍♀️", - "woman_tipping_hand_medium_light_skin_tone": "💁🏼‍♀️", - "woman_tipping_hand_tone3": "💁🏽‍♀️", - "woman_tipping_hand_medium_skin_tone": "💁🏽‍♀️", - "woman_tipping_hand_tone4": "💁🏾‍♀️", - "woman_tipping_hand_medium_dark_skin_tone": "💁🏾‍♀️", - "woman_tipping_hand_tone5": "💁🏿‍♀️", - "woman_tipping_hand_dark_skin_tone": "💁🏿‍♀️", - "man_tipping_hand": "💁‍♂️", - "man_tipping_hand_tone1": "💁🏻‍♂️", - "man_tipping_hand_light_skin_tone": "💁🏻‍♂️", - "man_tipping_hand_tone2": "💁🏼‍♂️", - "man_tipping_hand_medium_light_skin_tone": "💁🏼‍♂️", - "man_tipping_hand_tone3": "💁🏽‍♂️", - "man_tipping_hand_medium_skin_tone": "💁🏽‍♂️", - "man_tipping_hand_tone4": "💁🏾‍♂️", - "man_tipping_hand_medium_dark_skin_tone": "💁🏾‍♂️", - "man_tipping_hand_tone5": "💁🏿‍♂️", - "man_tipping_hand_dark_skin_tone": "💁🏿‍♂️", - "person_gesturing_no": "🙅", - "no_good": "🙅", - "person_gesturing_no_tone1": "🙅🏻", - "no_good_tone1": "🙅🏻", - "person_gesturing_no_tone2": "🙅🏼", - "no_good_tone2": "🙅🏼", - "person_gesturing_no_tone3": "🙅🏽", - "no_good_tone3": "🙅🏽", - "person_gesturing_no_tone4": "🙅🏾", - "no_good_tone4": "🙅🏾", - "person_gesturing_no_tone5": "🙅🏿", - "no_good_tone5": "🙅🏿", - "woman_gesturing_no": "🙅‍♀️", - "woman_gesturing_no_tone1": "🙅🏻‍♀️", - "woman_gesturing_no_light_skin_tone": "🙅🏻‍♀️", - "woman_gesturing_no_tone2": "🙅🏼‍♀️", - "woman_gesturing_no_medium_light_skin_tone": "🙅🏼‍♀️", - "woman_gesturing_no_tone3": "🙅🏽‍♀️", - "woman_gesturing_no_medium_skin_tone": "🙅🏽‍♀️", - "woman_gesturing_no_tone4": "🙅🏾‍♀️", - "woman_gesturing_no_medium_dark_skin_tone": "🙅🏾‍♀️", - "woman_gesturing_no_tone5": "🙅🏿‍♀️", - "woman_gesturing_no_dark_skin_tone": "🙅🏿‍♀️", - "man_gesturing_no": "🙅‍♂️", - "man_gesturing_no_tone1": "🙅🏻‍♂️", - "man_gesturing_no_light_skin_tone": "🙅🏻‍♂️", - "man_gesturing_no_tone2": "🙅🏼‍♂️", - "man_gesturing_no_medium_light_skin_tone": "🙅🏼‍♂️", - "man_gesturing_no_tone3": "🙅🏽‍♂️", - "man_gesturing_no_medium_skin_tone": "🙅🏽‍♂️", - "man_gesturing_no_tone4": "🙅🏾‍♂️", - "man_gesturing_no_medium_dark_skin_tone": "🙅🏾‍♂️", - "man_gesturing_no_tone5": "🙅🏿‍♂️", - "man_gesturing_no_dark_skin_tone": "🙅🏿‍♂️", - "person_gesturing_ok": "🙆", - "ok_woman": "🙆", - "person_gesturing_ok_tone1": "🙆🏻", - "ok_woman_tone1": "🙆🏻", - "person_gesturing_ok_tone2": "🙆🏼", - "ok_woman_tone2": "🙆🏼", - "person_gesturing_ok_tone3": "🙆🏽", - "ok_woman_tone3": "🙆🏽", - "person_gesturing_ok_tone4": "🙆🏾", - "ok_woman_tone4": "🙆🏾", - "person_gesturing_ok_tone5": "🙆🏿", - "ok_woman_tone5": "🙆🏿", - "woman_gesturing_ok": "🙆‍♀️", - "woman_gesturing_ok_tone1": "🙆🏻‍♀️", - "woman_gesturing_ok_light_skin_tone": "🙆🏻‍♀️", - "woman_gesturing_ok_tone2": "🙆🏼‍♀️", - "woman_gesturing_ok_medium_light_skin_tone": "🙆🏼‍♀️", - "woman_gesturing_ok_tone3": "🙆🏽‍♀️", - "woman_gesturing_ok_medium_skin_tone": "🙆🏽‍♀️", - "woman_gesturing_ok_tone4": "🙆🏾‍♀️", - "woman_gesturing_ok_medium_dark_skin_tone": "🙆🏾‍♀️", - "woman_gesturing_ok_tone5": "🙆🏿‍♀️", - "woman_gesturing_ok_dark_skin_tone": "🙆🏿‍♀️", - "man_gesturing_ok": "🙆‍♂️", - "man_gesturing_ok_tone1": "🙆🏻‍♂️", - "man_gesturing_ok_light_skin_tone": "🙆🏻‍♂️", - "man_gesturing_ok_tone2": "🙆🏼‍♂️", - "man_gesturing_ok_medium_light_skin_tone": "🙆🏼‍♂️", - "man_gesturing_ok_tone3": "🙆🏽‍♂️", - "man_gesturing_ok_medium_skin_tone": "🙆🏽‍♂️", - "man_gesturing_ok_tone4": "🙆🏾‍♂️", - "man_gesturing_ok_medium_dark_skin_tone": "🙆🏾‍♂️", - "man_gesturing_ok_tone5": "🙆🏿‍♂️", - "man_gesturing_ok_dark_skin_tone": "🙆🏿‍♂️", - "person_raising_hand": "🙋", - "raising_hand": "🙋", - "person_raising_hand_tone1": "🙋🏻", - "raising_hand_tone1": "🙋🏻", - "person_raising_hand_tone2": "🙋🏼", - "raising_hand_tone2": "🙋🏼", - "person_raising_hand_tone3": "🙋🏽", - "raising_hand_tone3": "🙋🏽", - "person_raising_hand_tone4": "🙋🏾", - "raising_hand_tone4": "🙋🏾", - "person_raising_hand_tone5": "🙋🏿", - "raising_hand_tone5": "🙋🏿", - "woman_raising_hand": "🙋‍♀️", - "woman_raising_hand_tone1": "🙋🏻‍♀️", - "woman_raising_hand_light_skin_tone": "🙋🏻‍♀️", - "woman_raising_hand_tone2": "🙋🏼‍♀️", - "woman_raising_hand_medium_light_skin_tone": "🙋🏼‍♀️", - "woman_raising_hand_tone3": "🙋🏽‍♀️", - "woman_raising_hand_medium_skin_tone": "🙋🏽‍♀️", - "woman_raising_hand_tone4": "🙋🏾‍♀️", - "woman_raising_hand_medium_dark_skin_tone": "🙋🏾‍♀️", - "woman_raising_hand_tone5": "🙋🏿‍♀️", - "woman_raising_hand_dark_skin_tone": "🙋🏿‍♀️", - "man_raising_hand": "🙋‍♂️", - "man_raising_hand_tone1": "🙋🏻‍♂️", - "man_raising_hand_light_skin_tone": "🙋🏻‍♂️", - "man_raising_hand_tone2": "🙋🏼‍♂️", - "man_raising_hand_medium_light_skin_tone": "🙋🏼‍♂️", - "man_raising_hand_tone3": "🙋🏽‍♂️", - "man_raising_hand_medium_skin_tone": "🙋🏽‍♂️", - "man_raising_hand_tone4": "🙋🏾‍♂️", - "man_raising_hand_medium_dark_skin_tone": "🙋🏾‍♂️", - "man_raising_hand_tone5": "🙋🏿‍♂️", - "man_raising_hand_dark_skin_tone": "🙋🏿‍♂️", - "deaf_person": "🧏", - "deaf_person_tone1": "🧏🏻", - "deaf_person_light_skin_tone": "🧏🏻", - "deaf_person_tone2": "🧏🏼", - "deaf_person_medium_light_skin_tone": "🧏🏼", - "deaf_person_tone3": "🧏🏽", - "deaf_person_medium_skin_tone": "🧏🏽", - "deaf_person_tone4": "🧏🏾", - "deaf_person_medium_dark_skin_tone": "🧏🏾", - "deaf_person_tone5": "🧏🏿", - "deaf_person_dark_skin_tone": "🧏🏿", - "deaf_woman": "🧏‍♀️", - "deaf_woman_tone1": "🧏🏻‍♀️", - "deaf_woman_light_skin_tone": "🧏🏻‍♀️", - "deaf_woman_tone2": "🧏🏼‍♀️", - "deaf_woman_medium_light_skin_tone": "🧏🏼‍♀️", - "deaf_woman_tone3": "🧏🏽‍♀️", - "deaf_woman_medium_skin_tone": "🧏🏽‍♀️", - "deaf_woman_tone4": "🧏🏾‍♀️", - "deaf_woman_medium_dark_skin_tone": "🧏🏾‍♀️", - "deaf_woman_tone5": "🧏🏿‍♀️", - "deaf_woman_dark_skin_tone": "🧏🏿‍♀️", - "deaf_man": "🧏‍♂️", - "deaf_man_tone1": "🧏🏻‍♂️", - "deaf_man_light_skin_tone": "🧏🏻‍♂️", - "deaf_man_tone2": "🧏🏼‍♂️", - "deaf_man_medium_light_skin_tone": "🧏🏼‍♂️", - "deaf_man_tone3": "🧏🏽‍♂️", - "deaf_man_medium_skin_tone": "🧏🏽‍♂️", - "deaf_man_tone4": "🧏🏾‍♂️", - "deaf_man_medium_dark_skin_tone": "🧏🏾‍♂️", - "deaf_man_tone5": "🧏🏿‍♂️", - "deaf_man_dark_skin_tone": "🧏🏿‍♂️", - "person_facepalming": "🤦", - "face_palm": "🤦", - "facepalm": "🤦", - "person_facepalming_tone1": "🤦🏻", - "face_palm_tone1": "🤦🏻", - "facepalm_tone1": "🤦🏻", - "person_facepalming_tone2": "🤦🏼", - "face_palm_tone2": "🤦🏼", - "facepalm_tone2": "🤦🏼", - "person_facepalming_tone3": "🤦🏽", - "face_palm_tone3": "🤦🏽", - "facepalm_tone3": "🤦🏽", - "person_facepalming_tone4": "🤦🏾", - "face_palm_tone4": "🤦🏾", - "facepalm_tone4": "🤦🏾", - "person_facepalming_tone5": "🤦🏿", - "face_palm_tone5": "🤦🏿", - "facepalm_tone5": "🤦🏿", - "woman_facepalming": "🤦‍♀️", - "woman_facepalming_tone1": "🤦🏻‍♀️", - "woman_facepalming_light_skin_tone": "🤦🏻‍♀️", - "woman_facepalming_tone2": "🤦🏼‍♀️", - "woman_facepalming_medium_light_skin_tone": "🤦🏼‍♀️", - "woman_facepalming_tone3": "🤦🏽‍♀️", - "woman_facepalming_medium_skin_tone": "🤦🏽‍♀️", - "woman_facepalming_tone4": "🤦🏾‍♀️", - "woman_facepalming_medium_dark_skin_tone": "🤦🏾‍♀️", - "woman_facepalming_tone5": "🤦🏿‍♀️", - "woman_facepalming_dark_skin_tone": "🤦🏿‍♀️", - "man_facepalming": "🤦‍♂️", - "man_facepalming_tone1": "🤦🏻‍♂️", - "man_facepalming_light_skin_tone": "🤦🏻‍♂️", - "man_facepalming_tone2": "🤦🏼‍♂️", - "man_facepalming_medium_light_skin_tone": "🤦🏼‍♂️", - "man_facepalming_tone3": "🤦🏽‍♂️", - "man_facepalming_medium_skin_tone": "🤦🏽‍♂️", - "man_facepalming_tone4": "🤦🏾‍♂️", - "man_facepalming_medium_dark_skin_tone": "🤦🏾‍♂️", - "man_facepalming_tone5": "🤦🏿‍♂️", - "man_facepalming_dark_skin_tone": "🤦🏿‍♂️", - "person_shrugging": "🤷", - "shrug": "🤷", - "person_shrugging_tone1": "🤷🏻", - "shrug_tone1": "🤷🏻", - "person_shrugging_tone2": "🤷🏼", - "shrug_tone2": "🤷🏼", - "person_shrugging_tone3": "🤷🏽", - "shrug_tone3": "🤷🏽", - "person_shrugging_tone4": "🤷🏾", - "shrug_tone4": "🤷🏾", - "person_shrugging_tone5": "🤷🏿", - "shrug_tone5": "🤷🏿", - "woman_shrugging": "🤷‍♀️", - "woman_shrugging_tone1": "🤷🏻‍♀️", - "woman_shrugging_light_skin_tone": "🤷🏻‍♀️", - "woman_shrugging_tone2": "🤷🏼‍♀️", - "woman_shrugging_medium_light_skin_tone": "🤷🏼‍♀️", - "woman_shrugging_tone3": "🤷🏽‍♀️", - "woman_shrugging_medium_skin_tone": "🤷🏽‍♀️", - "woman_shrugging_tone4": "🤷🏾‍♀️", - "woman_shrugging_medium_dark_skin_tone": "🤷🏾‍♀️", - "woman_shrugging_tone5": "🤷🏿‍♀️", - "woman_shrugging_dark_skin_tone": "🤷🏿‍♀️", - "man_shrugging": "🤷‍♂️", - "man_shrugging_tone1": "🤷🏻‍♂️", - "man_shrugging_light_skin_tone": "🤷🏻‍♂️", - "man_shrugging_tone2": "🤷🏼‍♂️", - "man_shrugging_medium_light_skin_tone": "🤷🏼‍♂️", - "man_shrugging_tone3": "🤷🏽‍♂️", - "man_shrugging_medium_skin_tone": "🤷🏽‍♂️", - "man_shrugging_tone4": "🤷🏾‍♂️", - "man_shrugging_medium_dark_skin_tone": "🤷🏾‍♂️", - "man_shrugging_tone5": "🤷🏿‍♂️", - "man_shrugging_dark_skin_tone": "🤷🏿‍♂️", - "person_pouting": "🙎", - "person_with_pouting_face": "🙎", - "person_pouting_tone1": "🙎🏻", - "person_with_pouting_face_tone1": "🙎🏻", - "person_pouting_tone2": "🙎🏼", - "person_with_pouting_face_tone2": "🙎🏼", - "person_pouting_tone3": "🙎🏽", - "person_with_pouting_face_tone3": "🙎🏽", - "person_pouting_tone4": "🙎🏾", - "person_with_pouting_face_tone4": "🙎🏾", - "person_pouting_tone5": "🙎🏿", - "person_with_pouting_face_tone5": "🙎🏿", - "woman_pouting": "🙎‍♀️", - "woman_pouting_tone1": "🙎🏻‍♀️", - "woman_pouting_light_skin_tone": "🙎🏻‍♀️", - "woman_pouting_tone2": "🙎🏼‍♀️", - "woman_pouting_medium_light_skin_tone": "🙎🏼‍♀️", - "woman_pouting_tone3": "🙎🏽‍♀️", - "woman_pouting_medium_skin_tone": "🙎🏽‍♀️", - "woman_pouting_tone4": "🙎🏾‍♀️", - "woman_pouting_medium_dark_skin_tone": "🙎🏾‍♀️", - "woman_pouting_tone5": "🙎🏿‍♀️", - "woman_pouting_dark_skin_tone": "🙎🏿‍♀️", - "man_pouting": "🙎‍♂️", - "man_pouting_tone1": "🙎🏻‍♂️", - "man_pouting_light_skin_tone": "🙎🏻‍♂️", - "man_pouting_tone2": "🙎🏼‍♂️", - "man_pouting_medium_light_skin_tone": "🙎🏼‍♂️", - "man_pouting_tone3": "🙎🏽‍♂️", - "man_pouting_medium_skin_tone": "🙎🏽‍♂️", - "man_pouting_tone4": "🙎🏾‍♂️", - "man_pouting_medium_dark_skin_tone": "🙎🏾‍♂️", - "man_pouting_tone5": "🙎🏿‍♂️", - "man_pouting_dark_skin_tone": "🙎🏿‍♂️", - "person_frowning": "🙍", - "person_frowning_tone1": "🙍🏻", - "person_frowning_tone2": "🙍🏼", - "person_frowning_tone3": "🙍🏽", - "person_frowning_tone4": "🙍🏾", - "person_frowning_tone5": "🙍🏿", - "woman_frowning": "🙍‍♀️", - "woman_frowning_tone1": "🙍🏻‍♀️", - "woman_frowning_light_skin_tone": "🙍🏻‍♀️", - "woman_frowning_tone2": "🙍🏼‍♀️", - "woman_frowning_medium_light_skin_tone": "🙍🏼‍♀️", - "woman_frowning_tone3": "🙍🏽‍♀️", - "woman_frowning_medium_skin_tone": "🙍🏽‍♀️", - "woman_frowning_tone4": "🙍🏾‍♀️", - "woman_frowning_medium_dark_skin_tone": "🙍🏾‍♀️", - "woman_frowning_tone5": "🙍🏿‍♀️", - "woman_frowning_dark_skin_tone": "🙍🏿‍♀️", - "man_frowning": "🙍‍♂️", - "man_frowning_tone1": "🙍🏻‍♂️", - "man_frowning_light_skin_tone": "🙍🏻‍♂️", - "man_frowning_tone2": "🙍🏼‍♂️", - "man_frowning_medium_light_skin_tone": "🙍🏼‍♂️", - "man_frowning_tone3": "🙍🏽‍♂️", - "man_frowning_medium_skin_tone": "🙍🏽‍♂️", - "man_frowning_tone4": "🙍🏾‍♂️", - "man_frowning_medium_dark_skin_tone": "🙍🏾‍♂️", - "man_frowning_tone5": "🙍🏿‍♂️", - "man_frowning_dark_skin_tone": "🙍🏿‍♂️", - "person_getting_haircut": "💇", - "haircut": "💇", - "person_getting_haircut_tone1": "💇🏻", - "haircut_tone1": "💇🏻", - "person_getting_haircut_tone2": "💇🏼", - "haircut_tone2": "💇🏼", - "person_getting_haircut_tone3": "💇🏽", - "haircut_tone3": "💇🏽", - "person_getting_haircut_tone4": "💇🏾", - "haircut_tone4": "💇🏾", - "person_getting_haircut_tone5": "💇🏿", - "haircut_tone5": "💇🏿", - "woman_getting_haircut": "💇‍♀️", - "woman_getting_haircut_tone1": "💇🏻‍♀️", - "woman_getting_haircut_light_skin_tone": "💇🏻‍♀️", - "woman_getting_haircut_tone2": "💇🏼‍♀️", - "woman_getting_haircut_medium_light_skin_tone": "💇🏼‍♀️", - "woman_getting_haircut_tone3": "💇🏽‍♀️", - "woman_getting_haircut_medium_skin_tone": "💇🏽‍♀️", - "woman_getting_haircut_tone4": "💇🏾‍♀️", - "woman_getting_haircut_medium_dark_skin_tone": "💇🏾‍♀️", - "woman_getting_haircut_tone5": "💇🏿‍♀️", - "woman_getting_haircut_dark_skin_tone": "💇🏿‍♀️", - "man_getting_haircut": "💇‍♂️", - "man_getting_haircut_tone1": "💇🏻‍♂️", - "man_getting_haircut_light_skin_tone": "💇🏻‍♂️", - "man_getting_haircut_tone2": "💇🏼‍♂️", - "man_getting_haircut_medium_light_skin_tone": "💇🏼‍♂️", - "man_getting_haircut_tone3": "💇🏽‍♂️", - "man_getting_haircut_medium_skin_tone": "💇🏽‍♂️", - "man_getting_haircut_tone4": "💇🏾‍♂️", - "man_getting_haircut_medium_dark_skin_tone": "💇🏾‍♂️", - "man_getting_haircut_tone5": "💇🏿‍♂️", - "man_getting_haircut_dark_skin_tone": "💇🏿‍♂️", - "person_getting_massage": "💆", - "massage": "💆", - "person_getting_massage_tone1": "💆🏻", - "massage_tone1": "💆🏻", - "person_getting_massage_tone2": "💆🏼", - "massage_tone2": "💆🏼", - "person_getting_massage_tone3": "💆🏽", - "massage_tone3": "💆🏽", - "person_getting_massage_tone4": "💆🏾", - "massage_tone4": "💆🏾", - "person_getting_massage_tone5": "💆🏿", - "massage_tone5": "💆🏿", - "woman_getting_face_massage": "💆‍♀️", - "woman_getting_face_massage_tone1": "💆🏻‍♀️", - "woman_getting_face_massage_light_skin_tone": "💆🏻‍♀️", - "woman_getting_face_massage_tone2": "💆🏼‍♀️", - "woman_getting_face_massage_medium_light_skin_tone": "💆🏼‍♀️", - "woman_getting_face_massage_tone3": "💆🏽‍♀️", - "woman_getting_face_massage_medium_skin_tone": "💆🏽‍♀️", - "woman_getting_face_massage_tone4": "💆🏾‍♀️", - "woman_getting_face_massage_medium_dark_skin_tone": "💆🏾‍♀️", - "woman_getting_face_massage_tone5": "💆🏿‍♀️", - "woman_getting_face_massage_dark_skin_tone": "💆🏿‍♀️", - "man_getting_face_massage": "💆‍♂️", - "man_getting_face_massage_tone1": "💆🏻‍♂️", - "man_getting_face_massage_light_skin_tone": "💆🏻‍♂️", - "man_getting_face_massage_tone2": "💆🏼‍♂️", - "man_getting_face_massage_medium_light_skin_tone": "💆🏼‍♂️", - "man_getting_face_massage_tone3": "💆🏽‍♂️", - "man_getting_face_massage_medium_skin_tone": "💆🏽‍♂️", - "man_getting_face_massage_tone4": "💆🏾‍♂️", - "man_getting_face_massage_medium_dark_skin_tone": "💆🏾‍♂️", - "man_getting_face_massage_tone5": "💆🏿‍♂️", - "man_getting_face_massage_dark_skin_tone": "💆🏿‍♂️", - "person_in_steamy_room": "🧖", - "person_in_steamy_room_tone1": "🧖🏻", - "person_in_steamy_room_light_skin_tone": "🧖🏻", - "person_in_steamy_room_tone2": "🧖🏼", - "person_in_steamy_room_medium_light_skin_tone": "🧖🏼", - "person_in_steamy_room_tone3": "🧖🏽", - "person_in_steamy_room_medium_skin_tone": "🧖🏽", - "person_in_steamy_room_tone4": "🧖🏾", - "person_in_steamy_room_medium_dark_skin_tone": "🧖🏾", - "person_in_steamy_room_tone5": "🧖🏿", - "person_in_steamy_room_dark_skin_tone": "🧖🏿", - "woman_in_steamy_room": "🧖‍♀️", - "woman_in_steamy_room_tone1": "🧖🏻‍♀️", - "woman_in_steamy_room_light_skin_tone": "🧖🏻‍♀️", - "woman_in_steamy_room_tone2": "🧖🏼‍♀️", - "woman_in_steamy_room_medium_light_skin_tone": "🧖🏼‍♀️", - "woman_in_steamy_room_tone3": "🧖🏽‍♀️", - "woman_in_steamy_room_medium_skin_tone": "🧖🏽‍♀️", - "woman_in_steamy_room_tone4": "🧖🏾‍♀️", - "woman_in_steamy_room_medium_dark_skin_tone": "🧖🏾‍♀️", - "woman_in_steamy_room_tone5": "🧖🏿‍♀️", - "woman_in_steamy_room_dark_skin_tone": "🧖🏿‍♀️", - "man_in_steamy_room": "🧖‍♂️", - "man_in_steamy_room_tone1": "🧖🏻‍♂️", - "man_in_steamy_room_light_skin_tone": "🧖🏻‍♂️", - "man_in_steamy_room_tone2": "🧖🏼‍♂️", - "man_in_steamy_room_medium_light_skin_tone": "🧖🏼‍♂️", - "man_in_steamy_room_tone3": "🧖🏽‍♂️", - "man_in_steamy_room_medium_skin_tone": "🧖🏽‍♂️", - "man_in_steamy_room_tone4": "🧖🏾‍♂️", - "man_in_steamy_room_medium_dark_skin_tone": "🧖🏾‍♂️", - "man_in_steamy_room_tone5": "🧖🏿‍♂️", - "man_in_steamy_room_dark_skin_tone": "🧖🏿‍♂️", - "nail_care": "💅", - "nail_care_tone1": "💅🏻", - "nail_care_tone2": "💅🏼", - "nail_care_tone3": "💅🏽", - "nail_care_tone4": "💅🏾", - "nail_care_tone5": "💅🏿", - "selfie": "🤳", - "selfie_tone1": "🤳🏻", - "selfie_tone2": "🤳🏼", - "selfie_tone3": "🤳🏽", - "selfie_tone4": "🤳🏾", - "selfie_tone5": "🤳🏿", - "dancer": "💃", - "dancer_tone1": "💃🏻", - "dancer_tone2": "💃🏼", - "dancer_tone3": "💃🏽", - "dancer_tone4": "💃🏾", - "dancer_tone5": "💃🏿", - "man_dancing": "🕺", - "male_dancer": "🕺", - "man_dancing_tone1": "🕺🏻", - "male_dancer_tone1": "🕺🏻", - "man_dancing_tone2": "🕺🏼", - "male_dancer_tone2": "🕺🏼", - "man_dancing_tone3": "🕺🏽", - "male_dancer_tone3": "🕺🏽", - "man_dancing_tone5": "🕺🏿", - "male_dancer_tone5": "🕺🏿", - "man_dancing_tone4": "🕺🏾", - "male_dancer_tone4": "🕺🏾", - "people_with_bunny_ears_partying": "👯", - "dancers": "👯", - "women_with_bunny_ears_partying": "👯‍♀️", - "men_with_bunny_ears_partying": "👯‍♂️", - "levitate": "🕴️", - "man_in_business_suit_levitating": "🕴️", - "levitate_tone1": "🕴🏻", - "man_in_business_suit_levitating_tone1": "🕴🏻", - "man_in_business_suit_levitating_light_skin_tone": "🕴🏻", - "levitate_tone2": "🕴🏼", - "man_in_business_suit_levitating_tone2": "🕴🏼", - "man_in_business_suit_levitating_medium_light_skin_tone": "🕴🏼", - "levitate_tone3": "🕴🏽", - "man_in_business_suit_levitating_tone3": "🕴🏽", - "man_in_business_suit_levitating_medium_skin_tone": "🕴🏽", - "levitate_tone4": "🕴🏾", - "man_in_business_suit_levitating_tone4": "🕴🏾", - "man_in_business_suit_levitating_medium_dark_skin_tone": "🕴🏾", - "levitate_tone5": "🕴🏿", - "man_in_business_suit_levitating_tone5": "🕴🏿", - "man_in_business_suit_levitating_dark_skin_tone": "🕴🏿", - "person_in_manual_wheelchair": "🧑‍🦽", - "person_in_manual_wheelchair_tone1": "🧑🏻‍🦽", - "person_in_manual_wheelchair_light_skin_tone": "🧑🏻‍🦽", - "person_in_manual_wheelchair_tone2": "🧑🏼‍🦽", - "person_in_manual_wheelchair_medium_light_skin_tone": "🧑🏼‍🦽", - "person_in_manual_wheelchair_tone3": "🧑🏽‍🦽", - "person_in_manual_wheelchair_medium_skin_tone": "🧑🏽‍🦽", - "person_in_manual_wheelchair_tone4": "🧑🏾‍🦽", - "person_in_manual_wheelchair_medium_dark_skin_tone": "🧑🏾‍🦽", - "person_in_manual_wheelchair_tone5": "🧑🏿‍🦽", - "person_in_manual_wheelchair_dark_skin_tone": "🧑🏿‍🦽", - "woman_in_manual_wheelchair": "👩‍🦽", - "woman_in_manual_wheelchair_tone1": "👩🏻‍🦽", - "woman_in_manual_wheelchair_light_skin_tone": "👩🏻‍🦽", - "woman_in_manual_wheelchair_tone2": "👩🏼‍🦽", - "woman_in_manual_wheelchair_medium_light_skin_tone": "👩🏼‍🦽", - "woman_in_manual_wheelchair_tone3": "👩🏽‍🦽", - "woman_in_manual_wheelchair_medium_skin_tone": "👩🏽‍🦽", - "woman_in_manual_wheelchair_tone4": "👩🏾‍🦽", - "woman_in_manual_wheelchair_medium_dark_skin_tone": "👩🏾‍🦽", - "woman_in_manual_wheelchair_tone5": "👩🏿‍🦽", - "woman_in_manual_wheelchair_dark_skin_tone": "👩🏿‍🦽", - "man_in_manual_wheelchair": "👨‍🦽", - "man_in_manual_wheelchair_tone1": "👨🏻‍🦽", - "man_in_manual_wheelchair_light_skin_tone": "👨🏻‍🦽", - "man_in_manual_wheelchair_tone2": "👨🏼‍🦽", - "man_in_manual_wheelchair_medium_light_skin_tone": "👨🏼‍🦽", - "man_in_manual_wheelchair_tone3": "👨🏽‍🦽", - "man_in_manual_wheelchair_medium_skin_tone": "👨🏽‍🦽", - "man_in_manual_wheelchair_tone4": "👨🏾‍🦽", - "man_in_manual_wheelchair_medium_dark_skin_tone": "👨🏾‍🦽", - "man_in_manual_wheelchair_tone5": "👨🏿‍🦽", - "man_in_manual_wheelchair_dark_skin_tone": "👨🏿‍🦽", - "person_in_motorized_wheelchair": "🧑‍🦼", - "person_in_motorized_wheelchair_tone1": "🧑🏻‍🦼", - "person_in_motorized_wheelchair_light_skin_tone": "🧑🏻‍🦼", - "person_in_motorized_wheelchair_tone2": "🧑🏼‍🦼", - "person_in_motorized_wheelchair_medium_light_skin_tone": "🧑🏼‍🦼", - "person_in_motorized_wheelchair_tone3": "🧑🏽‍🦼", - "person_in_motorized_wheelchair_medium_skin_tone": "🧑🏽‍🦼", - "person_in_motorized_wheelchair_tone4": "🧑🏾‍🦼", - "person_in_motorized_wheelchair_medium_dark_skin_tone": "🧑🏾‍🦼", - "person_in_motorized_wheelchair_tone5": "🧑🏿‍🦼", - "person_in_motorized_wheelchair_dark_skin_tone": "🧑🏿‍🦼", - "woman_in_motorized_wheelchair": "👩‍🦼", - "woman_in_motorized_wheelchair_tone1": "👩🏻‍🦼", - "woman_in_motorized_wheelchair_light_skin_tone": "👩🏻‍🦼", - "woman_in_motorized_wheelchair_tone2": "👩🏼‍🦼", - "woman_in_motorized_wheelchair_medium_light_skin_tone": "👩🏼‍🦼", - "woman_in_motorized_wheelchair_tone3": "👩🏽‍🦼", - "woman_in_motorized_wheelchair_medium_skin_tone": "👩🏽‍🦼", - "woman_in_motorized_wheelchair_tone4": "👩🏾‍🦼", - "woman_in_motorized_wheelchair_medium_dark_skin_tone": "👩🏾‍🦼", - "woman_in_motorized_wheelchair_tone5": "👩🏿‍🦼", - "woman_in_motorized_wheelchair_dark_skin_tone": "👩🏿‍🦼", - "man_in_motorized_wheelchair": "👨‍🦼", - "man_in_motorized_wheelchair_tone1": "👨🏻‍🦼", - "man_in_motorized_wheelchair_light_skin_tone": "👨🏻‍🦼", - "man_in_motorized_wheelchair_tone2": "👨🏼‍🦼", - "man_in_motorized_wheelchair_medium_light_skin_tone": "👨🏼‍🦼", - "man_in_motorized_wheelchair_tone3": "👨🏽‍🦼", - "man_in_motorized_wheelchair_medium_skin_tone": "👨🏽‍🦼", - "man_in_motorized_wheelchair_tone4": "👨🏾‍🦼", - "man_in_motorized_wheelchair_medium_dark_skin_tone": "👨🏾‍🦼", - "man_in_motorized_wheelchair_tone5": "👨🏿‍🦼", - "man_in_motorized_wheelchair_dark_skin_tone": "👨🏿‍🦼", - "person_walking": "🚶", - "walking": "🚶", - "person_walking_tone1": "🚶🏻", - "walking_tone1": "🚶🏻", - "person_walking_tone2": "🚶🏼", - "walking_tone2": "🚶🏼", - "person_walking_tone3": "🚶🏽", - "walking_tone3": "🚶🏽", - "person_walking_tone4": "🚶🏾", - "walking_tone4": "🚶🏾", - "person_walking_tone5": "🚶🏿", - "walking_tone5": "🚶🏿", - "woman_walking": "🚶‍♀️", - "woman_walking_tone1": "🚶🏻‍♀️", - "woman_walking_light_skin_tone": "🚶🏻‍♀️", - "woman_walking_tone2": "🚶🏼‍♀️", - "woman_walking_medium_light_skin_tone": "🚶🏼‍♀️", - "woman_walking_tone3": "🚶🏽‍♀️", - "woman_walking_medium_skin_tone": "🚶🏽‍♀️", - "woman_walking_tone4": "🚶🏾‍♀️", - "woman_walking_medium_dark_skin_tone": "🚶🏾‍♀️", - "woman_walking_tone5": "🚶🏿‍♀️", - "woman_walking_dark_skin_tone": "🚶🏿‍♀️", - "man_walking": "🚶‍♂️", - "man_walking_tone1": "🚶🏻‍♂️", - "man_walking_light_skin_tone": "🚶🏻‍♂️", - "man_walking_tone2": "🚶🏼‍♂️", - "man_walking_medium_light_skin_tone": "🚶🏼‍♂️", - "man_walking_tone3": "🚶🏽‍♂️", - "man_walking_medium_skin_tone": "🚶🏽‍♂️", - "man_walking_tone4": "🚶🏾‍♂️", - "man_walking_medium_dark_skin_tone": "🚶🏾‍♂️", - "man_walking_tone5": "🚶🏿‍♂️", - "man_walking_dark_skin_tone": "🚶🏿‍♂️", - "person_with_probing_cane": "🧑‍🦯", - "person_with_probing_cane_tone1": "🧑🏻‍🦯", - "person_with_probing_cane_light_skin_tone": "🧑🏻‍🦯", - "person_with_probing_cane_tone2": "🧑🏼‍🦯", - "person_with_probing_cane_medium_light_skin_tone": "🧑🏼‍🦯", - "person_with_probing_cane_tone3": "🧑🏽‍🦯", - "person_with_probing_cane_medium_skin_tone": "🧑🏽‍🦯", - "person_with_probing_cane_tone4": "🧑🏾‍🦯", - "person_with_probing_cane_medium_dark_skin_tone": "🧑🏾‍🦯", - "person_with_probing_cane_tone5": "🧑🏿‍🦯", - "person_with_probing_cane_dark_skin_tone": "🧑🏿‍🦯", - "woman_with_probing_cane": "👩‍🦯", - "woman_with_probing_cane_tone1": "👩🏻‍🦯", - "woman_with_probing_cane_light_skin_tone": "👩🏻‍🦯", - "woman_with_probing_cane_tone2": "👩🏼‍🦯", - "woman_with_probing_cane_medium_light_skin_tone": "👩🏼‍🦯", - "woman_with_probing_cane_tone3": "👩🏽‍🦯", - "woman_with_probing_cane_medium_skin_tone": "👩🏽‍🦯", - "woman_with_probing_cane_tone4": "👩🏾‍🦯", - "woman_with_probing_cane_medium_dark_skin_tone": "👩🏾‍🦯", - "woman_with_probing_cane_tone5": "👩🏿‍🦯", - "woman_with_probing_cane_dark_skin_tone": "👩🏿‍🦯", - "man_with_probing_cane": "👨‍🦯", - "man_with_probing_cane_tone1": "👨🏻‍🦯", - "man_with_probing_cane_light_skin_tone": "👨🏻‍🦯", - "man_with_probing_cane_tone3": "👨🏽‍🦯", - "man_with_probing_cane_medium_skin_tone": "👨🏽‍🦯", - "man_with_probing_cane_tone2": "👨🏼‍🦯", - "man_with_probing_cane_medium_light_skin_tone": "👨🏼‍🦯", - "man_with_probing_cane_tone4": "👨🏾‍🦯", - "man_with_probing_cane_medium_dark_skin_tone": "👨🏾‍🦯", - "man_with_probing_cane_tone5": "👨🏿‍🦯", - "man_with_probing_cane_dark_skin_tone": "👨🏿‍🦯", - "person_kneeling": "🧎", - "person_kneeling_tone1": "🧎🏻", - "person_kneeling_light_skin_tone": "🧎🏻", - "person_kneeling_tone2": "🧎🏼", - "person_kneeling_medium_light_skin_tone": "🧎🏼", - "person_kneeling_tone3": "🧎🏽", - "person_kneeling_medium_skin_tone": "🧎🏽", - "person_kneeling_tone4": "🧎🏾", - "person_kneeling_medium_dark_skin_tone": "🧎🏾", - "person_kneeling_tone5": "🧎🏿", - "person_kneeling_dark_skin_tone": "🧎🏿", - "woman_kneeling": "🧎‍♀️", - "woman_kneeling_tone1": "🧎🏻‍♀️", - "woman_kneeling_light_skin_tone": "🧎🏻‍♀️", - "woman_kneeling_tone2": "🧎🏼‍♀️", - "woman_kneeling_medium_light_skin_tone": "🧎🏼‍♀️", - "woman_kneeling_tone3": "🧎🏽‍♀️", - "woman_kneeling_medium_skin_tone": "🧎🏽‍♀️", - "woman_kneeling_tone4": "🧎🏾‍♀️", - "woman_kneeling_medium_dark_skin_tone": "🧎🏾‍♀️", - "woman_kneeling_tone5": "🧎🏿‍♀️", - "woman_kneeling_dark_skin_tone": "🧎🏿‍♀️", - "man_kneeling": "🧎‍♂️", - "man_kneeling_tone1": "🧎🏻‍♂️", - "man_kneeling_light_skin_tone": "🧎🏻‍♂️", - "man_kneeling_tone2": "🧎🏼‍♂️", - "man_kneeling_medium_light_skin_tone": "🧎🏼‍♂️", - "man_kneeling_tone3": "🧎🏽‍♂️", - "man_kneeling_medium_skin_tone": "🧎🏽‍♂️", - "man_kneeling_tone4": "🧎🏾‍♂️", - "man_kneeling_medium_dark_skin_tone": "🧎🏾‍♂️", - "man_kneeling_tone5": "🧎🏿‍♂️", - "man_kneeling_dark_skin_tone": "🧎🏿‍♂️", - "person_running": "🏃", - "runner": "🏃", - "person_running_tone1": "🏃🏻", - "runner_tone1": "🏃🏻", - "person_running_tone2": "🏃🏼", - "runner_tone2": "🏃🏼", - "person_running_tone3": "🏃🏽", - "runner_tone3": "🏃🏽", - "person_running_tone4": "🏃🏾", - "runner_tone4": "🏃🏾", - "person_running_tone5": "🏃🏿", - "runner_tone5": "🏃🏿", - "woman_running": "🏃‍♀️", - "woman_running_tone1": "🏃🏻‍♀️", - "woman_running_light_skin_tone": "🏃🏻‍♀️", - "woman_running_tone2": "🏃🏼‍♀️", - "woman_running_medium_light_skin_tone": "🏃🏼‍♀️", - "woman_running_tone3": "🏃🏽‍♀️", - "woman_running_medium_skin_tone": "🏃🏽‍♀️", - "woman_running_tone4": "🏃🏾‍♀️", - "woman_running_medium_dark_skin_tone": "🏃🏾‍♀️", - "woman_running_tone5": "🏃🏿‍♀️", - "woman_running_dark_skin_tone": "🏃🏿‍♀️", - "man_running": "🏃‍♂️", - "man_running_tone1": "🏃🏻‍♂️", - "man_running_light_skin_tone": "🏃🏻‍♂️", - "man_running_tone2": "🏃🏼‍♂️", - "man_running_medium_light_skin_tone": "🏃🏼‍♂️", - "man_running_tone3": "🏃🏽‍♂️", - "man_running_medium_skin_tone": "🏃🏽‍♂️", - "man_running_tone4": "🏃🏾‍♂️", - "man_running_medium_dark_skin_tone": "🏃🏾‍♂️", - "man_running_tone5": "🏃🏿‍♂️", - "man_running_dark_skin_tone": "🏃🏿‍♂️", - "person_standing": "🧍", - "person_standing_tone1": "🧍🏻", - "person_standing_light_skin_tone": "🧍🏻", - "person_standing_tone2": "🧍🏼", - "person_standing_medium_light_skin_tone": "🧍🏼", - "person_standing_tone3": "🧍🏽", - "person_standing_medium_skin_tone": "🧍🏽", - "person_standing_tone4": "🧍🏾", - "person_standing_medium_dark_skin_tone": "🧍🏾", - "person_standing_tone5": "🧍🏿", - "person_standing_dark_skin_tone": "🧍🏿", - "woman_standing": "🧍‍♀️", - "woman_standing_tone1": "🧍🏻‍♀️", - "woman_standing_light_skin_tone": "🧍🏻‍♀️", - "woman_standing_tone2": "🧍🏼‍♀️", - "woman_standing_medium_light_skin_tone": "🧍🏼‍♀️", - "woman_standing_tone3": "🧍🏽‍♀️", - "woman_standing_medium_skin_tone": "🧍🏽‍♀️", - "woman_standing_tone4": "🧍🏾‍♀️", - "woman_standing_medium_dark_skin_tone": "🧍🏾‍♀️", - "woman_standing_tone5": "🧍🏿‍♀️", - "woman_standing_dark_skin_tone": "🧍🏿‍♀️", - "man_standing": "🧍‍♂️", - "man_standing_tone1": "🧍🏻‍♂️", - "man_standing_light_skin_tone": "🧍🏻‍♂️", - "man_standing_tone2": "🧍🏼‍♂️", - "man_standing_medium_light_skin_tone": "🧍🏼‍♂️", - "man_standing_tone3": "🧍🏽‍♂️", - "man_standing_medium_skin_tone": "🧍🏽‍♂️", - "man_standing_tone4": "🧍🏾‍♂️", - "man_standing_medium_dark_skin_tone": "🧍🏾‍♂️", - "man_standing_tone5": "🧍🏿‍♂️", - "man_standing_dark_skin_tone": "🧍🏿‍♂️", - "people_holding_hands": "🧑‍🤝‍🧑", - "people_holding_hands_tone1": "🧑🏻‍🤝‍🧑🏻", - "people_holding_hands_light_skin_tone": "🧑🏻‍🤝‍🧑🏻", - "people_holding_hands_tone1_tone2": "🧑🏻‍🤝‍🧑🏼", - "people_holding_hands_light_skin_tone_medium_light_skin_tone": "🧑🏻‍🤝‍🧑🏼", - "people_holding_hands_tone1_tone3": "🧑🏻‍🤝‍🧑🏽", - "people_holding_hands_light_skin_tone_medium_skin_tone": "🧑🏻‍🤝‍🧑🏽", - "people_holding_hands_tone1_tone4": "🧑🏻‍🤝‍🧑🏾", - "people_holding_hands_light_skin_tone_medium_dark_skin_tone": "🧑🏻‍🤝‍🧑🏾", - "people_holding_hands_tone1_tone5": "🧑🏻‍🤝‍🧑🏿", - "people_holding_hands_light_skin_tone_dark_skin_tone": "🧑🏻‍🤝‍🧑🏿", - "people_holding_hands_tone2_tone1": "🧑🏼‍🤝‍🧑🏻", - "people_holding_hands_medium_light_skin_tone_light_skin_tone": "🧑🏼‍🤝‍🧑🏻", - "people_holding_hands_tone2": "🧑🏼‍🤝‍🧑🏼", - "people_holding_hands_medium_light_skin_tone": "🧑🏼‍🤝‍🧑🏼", - "people_holding_hands_tone2_tone3": "🧑🏼‍🤝‍🧑🏽", - "people_holding_hands_medium_light_skin_tone_medium_skin_tone": "🧑🏼‍🤝‍🧑🏽", - "people_holding_hands_tone2_tone4": "🧑🏼‍🤝‍🧑🏾", - "people_holding_hands_medium_light_skin_tone_medium_dark_skin_tone": "🧑🏼‍🤝‍🧑🏾", - "people_holding_hands_tone2_tone5": "🧑🏼‍🤝‍🧑🏿", - "people_holding_hands_medium_light_skin_tone_dark_skin_tone": "🧑🏼‍🤝‍🧑🏿", - "people_holding_hands_tone3_tone1": "🧑🏽‍🤝‍🧑🏻", - "people_holding_hands_medium_skin_tone_light_skin_tone": "🧑🏽‍🤝‍🧑🏻", - "people_holding_hands_tone3_tone2": "🧑🏽‍🤝‍🧑🏼", - "people_holding_hands_medium_skin_tone_medium_light_skin_tone": "🧑🏽‍🤝‍🧑🏼", - "people_holding_hands_tone3": "🧑🏽‍🤝‍🧑🏽", - "people_holding_hands_medium_skin_tone": "🧑🏽‍🤝‍🧑🏽", - "people_holding_hands_tone3_tone4": "🧑🏽‍🤝‍🧑🏾", - "people_holding_hands_medium_skin_tone_medium_dark_skin_tone": "🧑🏽‍🤝‍🧑🏾", - "people_holding_hands_tone3_tone5": "🧑🏽‍🤝‍🧑🏿", - "people_holding_hands_medium_skin_tone_dark_skin_tone": "🧑🏽‍🤝‍🧑🏿", - "people_holding_hands_tone4_tone1": "🧑🏾‍🤝‍🧑🏻", - "people_holding_hands_medium_dark_skin_tone_light_skin_tone": "🧑🏾‍🤝‍🧑🏻", - "people_holding_hands_tone4_tone2": "🧑🏾‍🤝‍🧑🏼", - "people_holding_hands_medium_dark_skin_tone_medium_light_skin_tone": "🧑🏾‍🤝‍🧑🏼", - "people_holding_hands_tone4_tone3": "🧑🏾‍🤝‍🧑🏽", - "people_holding_hands_medium_dark_skin_tone_medium_skin_tone": "🧑🏾‍🤝‍🧑🏽", - "people_holding_hands_tone4": "🧑🏾‍🤝‍🧑🏾", - "people_holding_hands_medium_dark_skin_tone": "🧑🏾‍🤝‍🧑🏾", - "people_holding_hands_tone4_tone5": "🧑🏾‍🤝‍🧑🏿", - "people_holding_hands_medium_dark_skin_tone_dark_skin_tone": "🧑🏾‍🤝‍🧑🏿", - "people_holding_hands_tone5_tone1": "🧑🏿‍🤝‍🧑🏻", - "people_holding_hands_dark_skin_tone_light_skin_tone": "🧑🏿‍🤝‍🧑🏻", - "people_holding_hands_tone5_tone2": "🧑🏿‍🤝‍🧑🏼", - "people_holding_hands_dark_skin_tone_medium_light_skin_tone": "🧑🏿‍🤝‍🧑🏼", - "people_holding_hands_tone5_tone3": "🧑🏿‍🤝‍🧑🏽", - "people_holding_hands_dark_skin_tone_medium_skin_tone": "🧑🏿‍🤝‍🧑🏽", - "people_holding_hands_tone5_tone4": "🧑🏿‍🤝‍🧑🏾", - "people_holding_hands_dark_skin_tone_medium_dark_skin_tone": "🧑🏿‍🤝‍🧑🏾", - "people_holding_hands_tone5": "🧑🏿‍🤝‍🧑🏿", - "people_holding_hands_dark_skin_tone": "🧑🏿‍🤝‍🧑🏿", - "couple": "👫", - "woman_and_man_holding_hands_tone1": "👫🏻", - "woman_and_man_holding_hands_light_skin_tone": "👫🏻", - "woman_and_man_holding_hands_tone1_tone2": "👩🏻‍🤝‍👨🏼", - "woman_and_man_holding_hands_light_skin_tone_medium_light_skin_tone": "👩🏻‍🤝‍👨🏼", - "woman_and_man_holding_hands_tone1_tone3": "👩🏻‍🤝‍👨🏽", - "woman_and_man_holding_hands_light_skin_tone_medium_skin_tone": "👩🏻‍🤝‍👨🏽", - "woman_and_man_holding_hands_tone1_tone4": "👩🏻‍🤝‍👨🏾", - "woman_and_man_holding_hands_light_skin_tone_medium_dark_skin_tone": "👩🏻‍🤝‍👨🏾", - "woman_and_man_holding_hands_tone1_tone5": "👩🏻‍🤝‍👨🏿", - "woman_and_man_holding_hands_light_skin_tone_dark_skin_tone": "👩🏻‍🤝‍👨🏿", - "woman_and_man_holding_hands_tone2_tone1": "👩🏼‍🤝‍👨🏻", - "woman_and_man_holding_hands_medium_light_skin_tone_light_skin_tone": "👩🏼‍🤝‍👨🏻", - "woman_and_man_holding_hands_tone2": "👫🏼", - "woman_and_man_holding_hands_medium_light_skin_tone": "👫🏼", - "woman_and_man_holding_hands_tone2_tone3": "👩🏼‍🤝‍👨🏽", - "woman_and_man_holding_hands_medium_light_skin_tone_medium_skin_tone": "👩🏼‍🤝‍👨🏽", - "woman_and_man_holding_hands_tone2_tone4": "👩🏼‍🤝‍👨🏾", - "woman_and_man_holding_hands_medium_light_skin_tone_medium_dark_skin_tone": "👩🏼‍🤝‍👨🏾", - "woman_and_man_holding_hands_tone2_tone5": "👩🏼‍🤝‍👨🏿", - "woman_and_man_holding_hands_medium_light_skin_tone_dark_skin_tone": "👩🏼‍🤝‍👨🏿", - "woman_and_man_holding_hands_tone3_tone1": "👩🏽‍🤝‍👨🏻", - "woman_and_man_holding_hands_medium_skin_tone_light_skin_tone": "👩🏽‍🤝‍👨🏻", - "woman_and_man_holding_hands_tone3_tone2": "👩🏽‍🤝‍👨🏼", - "woman_and_man_holding_hands_medium_skin_tone_medium_light_skin_tone": "👩🏽‍🤝‍👨🏼", - "woman_and_man_holding_hands_tone3": "👫🏽", - "woman_and_man_holding_hands_medium_skin_tone": "👫🏽", - "woman_and_man_holding_hands_tone3_tone4": "👩🏽‍🤝‍👨🏾", - "woman_and_man_holding_hands_medium_skin_tone_medium_dark_skin_tone": "👩🏽‍🤝‍👨🏾", - "woman_and_man_holding_hands_tone3_tone5": "👩🏽‍🤝‍👨🏿", - "woman_and_man_holding_hands_medium_skin_tone_dark_skin_tone": "👩🏽‍🤝‍👨🏿", - "woman_and_man_holding_hands_tone4_tone1": "👩🏾‍🤝‍👨🏻", - "woman_and_man_holding_hands_medium_dark_skin_tone_light_skin_tone": "👩🏾‍🤝‍👨🏻", - "woman_and_man_holding_hands_tone4_tone2": "👩🏾‍🤝‍👨🏼", - "woman_and_man_holding_hands_medium_dark_skin_tone_medium_light_skin_tone": "👩🏾‍🤝‍👨🏼", - "woman_and_man_holding_hands_tone4_tone3": "👩🏾‍🤝‍👨🏽", - "woman_and_man_holding_hands_medium_dark_skin_tone_medium_skin_tone": "👩🏾‍🤝‍👨🏽", - "woman_and_man_holding_hands_tone4": "👫🏾", - "woman_and_man_holding_hands_medium_dark_skin_tone": "👫🏾", - "woman_and_man_holding_hands_tone4_tone5": "👩🏾‍🤝‍👨🏿", - "woman_and_man_holding_hands_medium_dark_skin_tone_dark_skin_tone": "👩🏾‍🤝‍👨🏿", - "woman_and_man_holding_hands_tone5_tone1": "👩🏿‍🤝‍👨🏻", - "woman_and_man_holding_hands_dark_skin_tone_light_skin_tone": "👩🏿‍🤝‍👨🏻", - "woman_and_man_holding_hands_tone5_tone2": "👩🏿‍🤝‍👨🏼", - "woman_and_man_holding_hands_dark_skin_tone_medium_light_skin_tone": "👩🏿‍🤝‍👨🏼", - "woman_and_man_holding_hands_tone5_tone3": "👩🏿‍🤝‍👨🏽", - "woman_and_man_holding_hands_dark_skin_tone_medium_skin_tone": "👩🏿‍🤝‍👨🏽", - "woman_and_man_holding_hands_tone5_tone4": "👩🏿‍🤝‍👨🏾", - "woman_and_man_holding_hands_dark_skin_tone_medium_dark_skin_tone": "👩🏿‍🤝‍👨🏾", - "woman_and_man_holding_hands_tone5": "👫🏿", - "woman_and_man_holding_hands_dark_skin_tone": "👫🏿", - "two_women_holding_hands": "👭", - "women_holding_hands_tone1": "👭🏻", - "women_holding_hands_light_skin_tone": "👭🏻", - "women_holding_hands_tone1_tone2": "👩🏻‍🤝‍👩🏼", - "women_holding_hands_light_skin_tone_medium_light_skin_tone": "👩🏻‍🤝‍👩🏼", - "women_holding_hands_tone1_tone3": "👩🏻‍🤝‍👩🏽", - "women_holding_hands_light_skin_tone_medium_skin_tone": "👩🏻‍🤝‍👩🏽", - "women_holding_hands_tone1_tone4": "👩🏻‍🤝‍👩🏾", - "women_holding_hands_light_skin_tone_medium_dark_skin_tone": "👩🏻‍🤝‍👩🏾", - "women_holding_hands_tone1_tone5": "👩🏻‍🤝‍👩🏿", - "women_holding_hands_light_skin_tone_dark_skin_tone": "👩🏻‍🤝‍👩🏿", - "women_holding_hands_tone2_tone1": "👩🏼‍🤝‍👩🏻", - "women_holding_hands_medium_light_skin_tone_light_skin_tone": "👩🏼‍🤝‍👩🏻", - "women_holding_hands_tone2": "👭🏼", - "women_holding_hands_medium_light_skin_tone": "👭🏼", - "women_holding_hands_tone2_tone3": "👩🏼‍🤝‍👩🏽", - "women_holding_hands_medium_light_skin_tone_medium_skin_tone": "👩🏼‍🤝‍👩🏽", - "women_holding_hands_tone2_tone4": "👩🏼‍🤝‍👩🏾", - "women_holding_hands_medium_light_skin_tone_medium_dark_skin_tone": "👩🏼‍🤝‍👩🏾", - "women_holding_hands_tone2_tone5": "👩🏼‍🤝‍👩🏿", - "women_holding_hands_medium_light_skin_tone_dark_skin_tone": "👩🏼‍🤝‍👩🏿", - "women_holding_hands_tone3_tone1": "👩🏽‍🤝‍👩🏻", - "women_holding_hands_medium_skin_tone_light_skin_tone": "👩🏽‍🤝‍👩🏻", - "women_holding_hands_tone3_tone2": "👩🏽‍🤝‍👩🏼", - "women_holding_hands_medium_skin_tone_medium_light_skin_tone": "👩🏽‍🤝‍👩🏼", - "women_holding_hands_tone3": "👭🏽", - "women_holding_hands_medium_skin_tone": "👭🏽", - "women_holding_hands_tone3_tone4": "👩🏽‍🤝‍👩🏾", - "women_holding_hands_medium_skin_tone_medium_dark_skin_tone": "👩🏽‍🤝‍👩🏾", - "women_holding_hands_tone3_tone5": "👩🏽‍🤝‍👩🏿", - "women_holding_hands_medium_skin_tone_dark_skin_tone": "👩🏽‍🤝‍👩🏿", - "women_holding_hands_tone4_tone1": "👩🏾‍🤝‍👩🏻", - "women_holding_hands_medium_dark_skin_tone_light_skin_tone": "👩🏾‍🤝‍👩🏻", - "women_holding_hands_tone4_tone2": "👩🏾‍🤝‍👩🏼", - "women_holding_hands_medium_dark_skin_tone_medium_light_skin_tone": "👩🏾‍🤝‍👩🏼", - "women_holding_hands_tone4_tone3": "👩🏾‍🤝‍👩🏽", - "women_holding_hands_medium_dark_skin_tone_medium_skin_tone": "👩🏾‍🤝‍👩🏽", - "women_holding_hands_tone4": "👭🏾", - "women_holding_hands_medium_dark_skin_tone": "👭🏾", - "women_holding_hands_tone4_tone5": "👩🏾‍🤝‍👩🏿", - "women_holding_hands_medium_dark_skin_tone_dark_skin_tone": "👩🏾‍🤝‍👩🏿", - "women_holding_hands_tone5_tone1": "👩🏿‍🤝‍👩🏻", - "women_holding_hands_dark_skin_tone_light_skin_tone": "👩🏿‍🤝‍👩🏻", - "women_holding_hands_tone5_tone2": "👩🏿‍🤝‍👩🏼", - "women_holding_hands_dark_skin_tone_medium_light_skin_tone": "👩🏿‍🤝‍👩🏼", - "women_holding_hands_tone5_tone3": "👩🏿‍🤝‍👩🏽", - "women_holding_hands_dark_skin_tone_medium_skin_tone": "👩🏿‍🤝‍👩🏽", - "women_holding_hands_tone5_tone4": "👩🏿‍🤝‍👩🏾", - "women_holding_hands_dark_skin_tone_medium_dark_skin_tone": "👩🏿‍🤝‍👩🏾", - "women_holding_hands_tone5": "👭🏿", - "women_holding_hands_dark_skin_tone": "👭🏿", - "two_men_holding_hands": "👬", - "men_holding_hands_tone1": "👬🏻", - "men_holding_hands_light_skin_tone": "👬🏻", - "men_holding_hands_tone1_tone2": "👨🏻‍🤝‍👨🏼", - "men_holding_hands_light_skin_tone_medium_light_skin_tone": "👨🏻‍🤝‍👨🏼", - "men_holding_hands_tone1_tone3": "👨🏻‍🤝‍👨🏽", - "men_holding_hands_light_skin_tone_medium_skin_tone": "👨🏻‍🤝‍👨🏽", - "men_holding_hands_tone1_tone4": "👨🏻‍🤝‍👨🏾", - "men_holding_hands_light_skin_tone_medium_dark_skin_tone": "👨🏻‍🤝‍👨🏾", - "men_holding_hands_tone1_tone5": "👨🏻‍🤝‍👨🏿", - "men_holding_hands_light_skin_tone_dark_skin_tone": "👨🏻‍🤝‍👨🏿", - "men_holding_hands_tone2_tone1": "👨🏼‍🤝‍👨🏻", - "men_holding_hands_medium_light_skin_tone_light_skin_tone": "👨🏼‍🤝‍👨🏻", - "men_holding_hands_tone2": "👬🏼", - "men_holding_hands_medium_light_skin_tone": "👬🏼", - "men_holding_hands_tone2_tone3": "👨🏼‍🤝‍👨🏽", - "men_holding_hands_medium_light_skin_tone_medium_skin_tone": "👨🏼‍🤝‍👨🏽", - "men_holding_hands_tone2_tone4": "👨🏼‍🤝‍👨🏾", - "men_holding_hands_medium_light_skin_tone_medium_dark_skin_tone": "👨🏼‍🤝‍👨🏾", - "men_holding_hands_tone2_tone5": "👨🏼‍🤝‍👨🏿", - "men_holding_hands_medium_light_skin_tone_dark_skin_tone": "👨🏼‍🤝‍👨🏿", - "men_holding_hands_tone3_tone1": "👨🏽‍🤝‍👨🏻", - "men_holding_hands_medium_skin_tone_light_skin_tone": "👨🏽‍🤝‍👨🏻", - "men_holding_hands_tone3_tone2": "👨🏽‍🤝‍👨🏼", - "men_holding_hands_medium_skin_tone_medium_light_skin_tone": "👨🏽‍🤝‍👨🏼", - "men_holding_hands_tone3": "👬🏽", - "men_holding_hands_medium_skin_tone": "👬🏽", - "men_holding_hands_tone3_tone4": "👨🏽‍🤝‍👨🏾", - "men_holding_hands_medium_skin_tone_medium_dark_skin_tone": "👨🏽‍🤝‍👨🏾", - "men_holding_hands_tone3_tone5": "👨🏽‍🤝‍👨🏿", - "men_holding_hands_medium_skin_tone_dark_skin_tone": "👨🏽‍🤝‍👨🏿", - "men_holding_hands_tone4_tone1": "👨🏾‍🤝‍👨🏻", - "men_holding_hands_medium_dark_skin_tone_light_skin_tone": "👨🏾‍🤝‍👨🏻", - "men_holding_hands_tone4_tone2": "👨🏾‍🤝‍👨🏼", - "men_holding_hands_medium_dark_skin_tone_medium_light_skin_tone": "👨🏾‍🤝‍👨🏼", - "men_holding_hands_tone4_tone3": "👨🏾‍🤝‍👨🏽", - "men_holding_hands_medium_dark_skin_tone_medium_skin_tone": "👨🏾‍🤝‍👨🏽", - "men_holding_hands_tone4": "👬🏾", - "men_holding_hands_medium_dark_skin_tone": "👬🏾", - "men_holding_hands_tone4_tone5": "👨🏾‍🤝‍👨🏿", - "men_holding_hands_medium_dark_skin_tone_dark_skin_tone": "👨🏾‍🤝‍👨🏿", - "men_holding_hands_tone5_tone1": "👨🏿‍🤝‍👨🏻", - "men_holding_hands_dark_skin_tone_light_skin_tone": "👨🏿‍🤝‍👨🏻", - "men_holding_hands_tone5_tone2": "👨🏿‍🤝‍👨🏼", - "men_holding_hands_dark_skin_tone_medium_light_skin_tone": "👨🏿‍🤝‍👨🏼", - "men_holding_hands_tone5_tone3": "👨🏿‍🤝‍👨🏽", - "men_holding_hands_dark_skin_tone_medium_skin_tone": "👨🏿‍🤝‍👨🏽", - "men_holding_hands_tone5_tone4": "👨🏿‍🤝‍👨🏾", - "men_holding_hands_dark_skin_tone_medium_dark_skin_tone": "👨🏿‍🤝‍👨🏾", - "men_holding_hands_tone5": "👬🏿", - "men_holding_hands_dark_skin_tone": "👬🏿", - "couple_with_heart": "💑", - "couple_with_heart_tone1": "💑🏻", - "couple_with_heart_light_skin_tone": "💑🏻", - "couple_with_heart_person_person_tone1_tone2": "🧑🏻‍❤️‍🧑🏼", - "couple_with_heart_person_person_light_skin_tone_medium_light_skin_tone": "🧑🏻‍❤️‍🧑🏼", - "couple_with_heart_person_person_tone1_tone3": "🧑🏻‍❤️‍🧑🏽", - "couple_with_heart_person_person_light_skin_tone_medium_skin_tone": "🧑🏻‍❤️‍🧑🏽", - "couple_with_heart_person_person_tone1_tone4": "🧑🏻‍❤️‍🧑🏾", - "couple_with_heart_person_person_light_skin_tone_medium_dark_skin_tone": "🧑🏻‍❤️‍🧑🏾", - "couple_with_heart_person_person_tone1_tone5": "🧑🏻‍❤️‍🧑🏿", - "couple_with_heart_person_person_light_skin_tone_dark_skin_tone": "🧑🏻‍❤️‍🧑🏿", - "couple_with_heart_person_person_tone2_tone1": "🧑🏼‍❤️‍🧑🏻", - "couple_with_heart_person_person_medium_light_skin_tone_light_skin_tone": "🧑🏼‍❤️‍🧑🏻", - "couple_with_heart_tone2": "💑🏼", - "couple_with_heart_medium_light_skin_tone": "💑🏼", - "couple_with_heart_person_person_tone2_tone3": "🧑🏼‍❤️‍🧑🏽", - "couple_with_heart_person_person_medium_light_skin_tone_medium_skin_tone": "🧑🏼‍❤️‍🧑🏽", - "couple_with_heart_person_person_tone2_tone4": "🧑🏼‍❤️‍🧑🏾", - "couple_with_heart_person_person_medium_light_skin_tone_medium_dark_skin_tone": "🧑🏼‍❤️‍🧑🏾", - "couple_with_heart_person_person_tone2_tone5": "🧑🏼‍❤️‍🧑🏿", - "couple_with_heart_person_person_medium_light_skin_tone_dark_skin_tone": "🧑🏼‍❤️‍🧑🏿", - "couple_with_heart_person_person_tone3_tone1": "🧑🏽‍❤️‍🧑🏻", - "couple_with_heart_person_person_medium_skin_tone_light_skin_tone": "🧑🏽‍❤️‍🧑🏻", - "couple_with_heart_person_person_tone3_tone2": "🧑🏽‍❤️‍🧑🏼", - "couple_with_heart_person_person_medium_skin_tone_medium_light_skin_tone": "🧑🏽‍❤️‍🧑🏼", - "couple_with_heart_tone3": "💑🏽", - "couple_with_heart_medium_skin_tone": "💑🏽", - "couple_with_heart_person_person_tone3_tone4": "🧑🏽‍❤️‍🧑🏾", - "couple_with_heart_person_person_medium_skin_tone_medium_dark_skin_tone": "🧑🏽‍❤️‍🧑🏾", - "couple_with_heart_person_person_tone3_tone5": "🧑🏽‍❤️‍🧑🏿", - "couple_with_heart_person_person_medium_skin_tone_dark_skin_tone": "🧑🏽‍❤️‍🧑🏿", - "couple_with_heart_person_person_tone4_tone1": "🧑🏾‍❤️‍🧑🏻", - "couple_with_heart_person_person_medium_dark_skin_tone_light_skin_tone": "🧑🏾‍❤️‍🧑🏻", - "couple_with_heart_person_person_tone4_tone2": "🧑🏾‍❤️‍🧑🏼", - "couple_with_heart_person_person_medium_dark_skin_tone_medium_light_skin_tone": "🧑🏾‍❤️‍🧑🏼", - "couple_with_heart_person_person_tone4_tone3": "🧑🏾‍❤️‍🧑🏽", - "couple_with_heart_person_person_medium_dark_skin_tone_medium_skin_tone": "🧑🏾‍❤️‍🧑🏽", - "couple_with_heart_tone4": "💑🏾", - "couple_with_heart_medium_dark_skin_tone": "💑🏾", - "couple_with_heart_person_person_tone4_tone5": "🧑🏾‍❤️‍🧑🏿", - "couple_with_heart_person_person_medium_dark_skin_tone_dark_skin_tone": "🧑🏾‍❤️‍🧑🏿", - "couple_with_heart_person_person_tone5_tone1": "🧑🏿‍❤️‍🧑🏻", - "couple_with_heart_person_person_dark_skin_tone_light_skin_tone": "🧑🏿‍❤️‍🧑🏻", - "couple_with_heart_person_person_tone5_tone2": "🧑🏿‍❤️‍🧑🏼", - "couple_with_heart_person_person_dark_skin_tone_medium_light_skin_tone": "🧑🏿‍❤️‍🧑🏼", - "couple_with_heart_person_person_tone5_tone3": "🧑🏿‍❤️‍🧑🏽", - "couple_with_heart_person_person_dark_skin_tone_medium_skin_tone": "🧑🏿‍❤️‍🧑🏽", - "couple_with_heart_person_person_tone5_tone4": "🧑🏿‍❤️‍🧑🏾", - "couple_with_heart_person_person_dark_skin_tone_medium_dark_skin_tone": "🧑🏿‍❤️‍🧑🏾", - "couple_with_heart_tone5": "💑🏿", - "couple_with_heart_dark_skin_tone": "💑🏿", - "couple_with_heart_woman_man": "👩‍❤️‍👨", - "couple_with_heart_woman_man_tone1": "👩🏻‍❤️‍👨🏻", - "couple_with_heart_woman_man_light_skin_tone": "👩🏻‍❤️‍👨🏻", - "couple_with_heart_woman_man_tone1_tone2": "👩🏻‍❤️‍👨🏼", - "couple_with_heart_woman_man_light_skin_tone_medium_light_skin_tone": "👩🏻‍❤️‍👨🏼", - "couple_with_heart_woman_man_tone1_tone3": "👩🏻‍❤️‍👨🏽", - "couple_with_heart_woman_man_light_skin_tone_medium_skin_tone": "👩🏻‍❤️‍👨🏽", - "couple_with_heart_woman_man_tone1_tone4": "👩🏻‍❤️‍👨🏾", - "couple_with_heart_woman_man_light_skin_tone_medium_dark_skin_tone": "👩🏻‍❤️‍👨🏾", - "couple_with_heart_woman_man_tone1_tone5": "👩🏻‍❤️‍👨🏿", - "couple_with_heart_woman_man_light_skin_tone_dark_skin_tone": "👩🏻‍❤️‍👨🏿", - "couple_with_heart_woman_man_tone2_tone1": "👩🏼‍❤️‍👨🏻", - "couple_with_heart_woman_man_medium_light_skin_tone_light_skin_tone": "👩🏼‍❤️‍👨🏻", - "couple_with_heart_woman_man_tone2": "👩🏼‍❤️‍👨🏼", - "couple_with_heart_woman_man_medium_light_skin_tone": "👩🏼‍❤️‍👨🏼", - "couple_with_heart_woman_man_tone2_tone3": "👩🏼‍❤️‍👨🏽", - "couple_with_heart_woman_man_medium_light_skin_tone_medium_skin_tone": "👩🏼‍❤️‍👨🏽", - "couple_with_heart_woman_man_tone2_tone4": "👩🏼‍❤️‍👨🏾", - "couple_with_heart_woman_man_medium_light_skin_tone_medium_dark_skin_tone": "👩🏼‍❤️‍👨🏾", - "couple_with_heart_woman_man_tone2_tone5": "👩🏼‍❤️‍👨🏿", - "couple_with_heart_woman_man_medium_light_skin_tone_dark_skin_tone": "👩🏼‍❤️‍👨🏿", - "couple_with_heart_woman_man_tone3_tone1": "👩🏽‍❤️‍👨🏻", - "couple_with_heart_woman_man_medium_skin_tone_light_skin_tone": "👩🏽‍❤️‍👨🏻", - "couple_with_heart_woman_man_tone3_tone2": "👩🏽‍❤️‍👨🏼", - "couple_with_heart_woman_man_medium_skin_tone_medium_light_skin_tone": "👩🏽‍❤️‍👨🏼", - "couple_with_heart_woman_man_tone3": "👩🏽‍❤️‍👨🏽", - "couple_with_heart_woman_man_medium_skin_tone": "👩🏽‍❤️‍👨🏽", - "couple_with_heart_woman_man_tone3_tone4": "👩🏽‍❤️‍👨🏾", - "couple_with_heart_woman_man_medium_skin_tone_medium_dark_skin_tone": "👩🏽‍❤️‍👨🏾", - "couple_with_heart_woman_man_tone3_tone5": "👩🏽‍❤️‍👨🏿", - "couple_with_heart_woman_man_medium_skin_tone_dark_skin_tone": "👩🏽‍❤️‍👨🏿", - "couple_with_heart_woman_man_tone4_tone1": "👩🏾‍❤️‍👨🏻", - "couple_with_heart_woman_man_medium_dark_skin_tone_light_skin_tone": "👩🏾‍❤️‍👨🏻", - "couple_with_heart_woman_man_tone4_tone2": "👩🏾‍❤️‍👨🏼", - "couple_with_heart_woman_man_medium_dark_skin_tone_medium_light_skin_tone": "👩🏾‍❤️‍👨🏼", - "couple_with_heart_woman_man_tone4_tone3": "👩🏾‍❤️‍👨🏽", - "couple_with_heart_woman_man_medium_dark_skin_tone_medium_skin_tone": "👩🏾‍❤️‍👨🏽", - "couple_with_heart_woman_man_tone4": "👩🏾‍❤️‍👨🏾", - "couple_with_heart_woman_man_medium_dark_skin_tone": "👩🏾‍❤️‍👨🏾", - "couple_with_heart_woman_man_tone4_tone5": "👩🏾‍❤️‍👨🏿", - "couple_with_heart_woman_man_medium_dark_skin_tone_dark_skin_tone": "👩🏾‍❤️‍👨🏿", - "couple_with_heart_woman_man_tone5_tone1": "👩🏿‍❤️‍👨🏻", - "couple_with_heart_woman_man_dark_skin_tone_light_skin_tone": "👩🏿‍❤️‍👨🏻", - "couple_with_heart_woman_man_tone5_tone2": "👩🏿‍❤️‍👨🏼", - "couple_with_heart_woman_man_dark_skin_tone_medium_light_skin_tone": "👩🏿‍❤️‍👨🏼", - "couple_with_heart_woman_man_tone5_tone3": "👩🏿‍❤️‍👨🏽", - "couple_with_heart_woman_man_dark_skin_tone_medium_skin_tone": "👩🏿‍❤️‍👨🏽", - "couple_with_heart_woman_man_tone5_tone4": "👩🏿‍❤️‍👨🏾", - "couple_with_heart_woman_man_dark_skin_tone_medium_dark_skin_tone": "👩🏿‍❤️‍👨🏾", - "couple_with_heart_woman_man_tone5": "👩🏿‍❤️‍👨🏿", - "couple_with_heart_woman_man_dark_skin_tone": "👩🏿‍❤️‍👨🏿", - "couple_ww": "👩‍❤️‍👩", - "couple_with_heart_ww": "👩‍❤️‍👩", - "couple_with_heart_woman_woman_tone1": "👩🏻‍❤️‍👩🏻", - "couple_with_heart_woman_woman_light_skin_tone": "👩🏻‍❤️‍👩🏻", - "couple_with_heart_woman_woman_tone1_tone2": "👩🏻‍❤️‍👩🏼", - "couple_with_heart_woman_woman_light_skin_tone_medium_light_skin_tone": "👩🏻‍❤️‍👩🏼", - "couple_with_heart_woman_woman_tone1_tone3": "👩🏻‍❤️‍👩🏽", - "couple_with_heart_woman_woman_light_skin_tone_medium_skin_tone": "👩🏻‍❤️‍👩🏽", - "couple_with_heart_woman_woman_tone1_tone4": "👩🏻‍❤️‍👩🏾", - "couple_with_heart_woman_woman_light_skin_tone_medium_dark_skin_tone": "👩🏻‍❤️‍👩🏾", - "couple_with_heart_woman_woman_tone1_tone5": "👩🏻‍❤️‍👩🏿", - "couple_with_heart_woman_woman_light_skin_tone_dark_skin_tone": "👩🏻‍❤️‍👩🏿", - "couple_with_heart_woman_woman_tone2_tone1": "👩🏼‍❤️‍👩🏻", - "couple_with_heart_woman_woman_medium_light_skin_tone_light_skin_tone": "👩🏼‍❤️‍👩🏻", - "couple_with_heart_woman_woman_tone2": "👩🏼‍❤️‍👩🏼", - "couple_with_heart_woman_woman_medium_light_skin_tone": "👩🏼‍❤️‍👩🏼", - "couple_with_heart_woman_woman_tone2_tone3": "👩🏼‍❤️‍👩🏽", - "couple_with_heart_woman_woman_medium_light_skin_tone_medium_skin_tone": "👩🏼‍❤️‍👩🏽", - "couple_with_heart_woman_woman_tone2_tone4": "👩🏼‍❤️‍👩🏾", - "couple_with_heart_woman_woman_medium_light_skin_tone_medium_dark_skin_tone": "👩🏼‍❤️‍👩🏾", - "couple_with_heart_woman_woman_tone2_tone5": "👩🏼‍❤️‍👩🏿", - "couple_with_heart_woman_woman_medium_light_skin_tone_dark_skin_tone": "👩🏼‍❤️‍👩🏿", - "couple_with_heart_woman_woman_tone3_tone1": "👩🏽‍❤️‍👩🏻", - "couple_with_heart_woman_woman_medium_skin_tone_light_skin_tone": "👩🏽‍❤️‍👩🏻", - "couple_with_heart_woman_woman_tone3_tone2": "👩🏽‍❤️‍👩🏼", - "couple_with_heart_woman_woman_medium_skin_tone_medium_light_skin_tone": "👩🏽‍❤️‍👩🏼", - "couple_with_heart_woman_woman_tone3": "👩🏽‍❤️‍👩🏽", - "couple_with_heart_woman_woman_medium_skin_tone": "👩🏽‍❤️‍👩🏽", - "couple_with_heart_woman_woman_tone3_tone4": "👩🏽‍❤️‍👩🏾", - "couple_with_heart_woman_woman_medium_skin_tone_medium_dark_skin_tone": "👩🏽‍❤️‍👩🏾", - "couple_with_heart_woman_woman_tone3_tone5": "👩🏽‍❤️‍👩🏿", - "couple_with_heart_woman_woman_medium_skin_tone_dark_skin_tone": "👩🏽‍❤️‍👩🏿", - "couple_with_heart_woman_woman_tone4_tone1": "👩🏾‍❤️‍👩🏻", - "couple_with_heart_woman_woman_medium_dark_skin_tone_light_skin_tone": "👩🏾‍❤️‍👩🏻", - "couple_with_heart_woman_woman_tone4_tone2": "👩🏾‍❤️‍👩🏼", - "couple_with_heart_woman_woman_medium_dark_skin_tone_medium_light_skin_tone": "👩🏾‍❤️‍👩🏼", - "couple_with_heart_woman_woman_tone4_tone3": "👩🏾‍❤️‍👩🏽", - "couple_with_heart_woman_woman_medium_dark_skin_tone_medium_skin_tone": "👩🏾‍❤️‍👩🏽", - "couple_with_heart_woman_woman_tone4": "👩🏾‍❤️‍👩🏾", - "couple_with_heart_woman_woman_medium_dark_skin_tone": "👩🏾‍❤️‍👩🏾", - "couple_with_heart_woman_woman_tone4_tone5": "👩🏾‍❤️‍👩🏿", - "couple_with_heart_woman_woman_medium_dark_skin_tone_dark_skin_tone": "👩🏾‍❤️‍👩🏿", - "couple_with_heart_woman_woman_tone5_tone1": "👩🏿‍❤️‍👩🏻", - "couple_with_heart_woman_woman_dark_skin_tone_light_skin_tone": "👩🏿‍❤️‍👩🏻", - "couple_with_heart_woman_woman_tone5_tone2": "👩🏿‍❤️‍👩🏼", - "couple_with_heart_woman_woman_dark_skin_tone_medium_light_skin_tone": "👩🏿‍❤️‍👩🏼", - "couple_with_heart_woman_woman_tone5_tone3": "👩🏿‍❤️‍👩🏽", - "couple_with_heart_woman_woman_dark_skin_tone_medium_skin_tone": "👩🏿‍❤️‍👩🏽", - "couple_with_heart_woman_woman_tone5_tone4": "👩🏿‍❤️‍👩🏾", - "couple_with_heart_woman_woman_dark_skin_tone_medium_dark_skin_tone": "👩🏿‍❤️‍👩🏾", - "couple_with_heart_woman_woman_tone5": "👩🏿‍❤️‍👩🏿", - "couple_with_heart_woman_woman_dark_skin_tone": "👩🏿‍❤️‍👩🏿", - "couple_mm": "👨‍❤️‍👨", - "couple_with_heart_mm": "👨‍❤️‍👨", - "couple_with_heart_man_man_tone1": "👨🏻‍❤️‍👨🏻", - "couple_with_heart_man_man_light_skin_tone": "👨🏻‍❤️‍👨🏻", - "couple_with_heart_man_man_tone1_tone2": "👨🏻‍❤️‍👨🏼", - "couple_with_heart_man_man_light_skin_tone_medium_light_skin_tone": "👨🏻‍❤️‍👨🏼", - "couple_with_heart_man_man_tone1_tone3": "👨🏻‍❤️‍👨🏽", - "couple_with_heart_man_man_light_skin_tone_medium_skin_tone": "👨🏻‍❤️‍👨🏽", - "couple_with_heart_man_man_tone1_tone4": "👨🏻‍❤️‍👨🏾", - "couple_with_heart_man_man_light_skin_tone_medium_dark_skin_tone": "👨🏻‍❤️‍👨🏾", - "couple_with_heart_man_man_tone1_tone5": "👨🏻‍❤️‍👨🏿", - "couple_with_heart_man_man_light_skin_tone_dark_skin_tone": "👨🏻‍❤️‍👨🏿", - "couple_with_heart_man_man_tone2_tone1": "👨🏼‍❤️‍👨🏻", - "couple_with_heart_man_man_medium_light_skin_tone_light_skin_tone": "👨🏼‍❤️‍👨🏻", - "couple_with_heart_man_man_tone2": "👨🏼‍❤️‍👨🏼", - "couple_with_heart_man_man_medium_light_skin_tone": "👨🏼‍❤️‍👨🏼", - "couple_with_heart_man_man_tone2_tone3": "👨🏼‍❤️‍👨🏽", - "couple_with_heart_man_man_medium_light_skin_tone_medium_skin_tone": "👨🏼‍❤️‍👨🏽", - "couple_with_heart_man_man_tone2_tone4": "👨🏼‍❤️‍👨🏾", - "couple_with_heart_man_man_medium_light_skin_tone_medium_dark_skin_tone": "👨🏼‍❤️‍👨🏾", - "couple_with_heart_man_man_tone2_tone5": "👨🏼‍❤️‍👨🏿", - "couple_with_heart_man_man_medium_light_skin_tone_dark_skin_tone": "👨🏼‍❤️‍👨🏿", - "couple_with_heart_man_man_tone3_tone1": "👨🏽‍❤️‍👨🏻", - "couple_with_heart_man_man_medium_skin_tone_light_skin_tone": "👨🏽‍❤️‍👨🏻", - "couple_with_heart_man_man_tone3_tone2": "👨🏽‍❤️‍👨🏼", - "couple_with_heart_man_man_medium_skin_tone_medium_light_skin_tone": "👨🏽‍❤️‍👨🏼", - "couple_with_heart_man_man_tone3": "👨🏽‍❤️‍👨🏽", - "couple_with_heart_man_man_medium_skin_tone": "👨🏽‍❤️‍👨🏽", - "couple_with_heart_man_man_tone3_tone4": "👨🏽‍❤️‍👨🏾", - "couple_with_heart_man_man_medium_skin_tone_medium_dark_skin_tone": "👨🏽‍❤️‍👨🏾", - "couple_with_heart_man_man_tone3_tone5": "👨🏽‍❤️‍👨🏿", - "couple_with_heart_man_man_medium_skin_tone_dark_skin_tone": "👨🏽‍❤️‍👨🏿", - "couple_with_heart_man_man_tone4_tone1": "👨🏾‍❤️‍👨🏻", - "couple_with_heart_man_man_medium_dark_skin_tone_light_skin_tone": "👨🏾‍❤️‍👨🏻", - "couple_with_heart_man_man_tone4_tone2": "👨🏾‍❤️‍👨🏼", - "couple_with_heart_man_man_medium_dark_skin_tone_medium_light_skin_tone": "👨🏾‍❤️‍👨🏼", - "couple_with_heart_man_man_tone4_tone3": "👨🏾‍❤️‍👨🏽", - "couple_with_heart_man_man_medium_dark_skin_tone_medium_skin_tone": "👨🏾‍❤️‍👨🏽", - "couple_with_heart_man_man_tone4": "👨🏾‍❤️‍👨🏾", - "couple_with_heart_man_man_medium_dark_skin_tone": "👨🏾‍❤️‍👨🏾", - "couple_with_heart_man_man_tone4_tone5": "👨🏾‍❤️‍👨🏿", - "couple_with_heart_man_man_medium_dark_skin_tone_dark_skin_tone": "👨🏾‍❤️‍👨🏿", - "couple_with_heart_man_man_tone5_tone1": "👨🏿‍❤️‍👨🏻", - "couple_with_heart_man_man_dark_skin_tone_light_skin_tone": "👨🏿‍❤️‍👨🏻", - "couple_with_heart_man_man_tone5_tone2": "👨🏿‍❤️‍👨🏼", - "couple_with_heart_man_man_dark_skin_tone_medium_light_skin_tone": "👨🏿‍❤️‍👨🏼", - "couple_with_heart_man_man_tone5_tone3": "👨🏿‍❤️‍👨🏽", - "couple_with_heart_man_man_dark_skin_tone_medium_skin_tone": "👨🏿‍❤️‍👨🏽", - "couple_with_heart_man_man_tone5_tone4": "👨🏿‍❤️‍👨🏾", - "couple_with_heart_man_man_dark_skin_tone_medium_dark_skin_tone": "👨🏿‍❤️‍👨🏾", - "couple_with_heart_man_man_tone5": "👨🏿‍❤️‍👨🏿", - "couple_with_heart_man_man_dark_skin_tone": "👨🏿‍❤️‍👨🏿", - "couplekiss": "💏", - "kiss_person_person_tone5_tone4": "🧑🏿‍❤️‍💋‍🧑🏾", - "kiss_person_person_dark_skin_tone_medium_dark_skin_tone": "🧑🏿‍❤️‍💋‍🧑🏾", - "kiss_tone1": "💏🏻", - "kiss_light_skin_tone": "💏🏻", - "kiss_person_person_tone1_tone2": "🧑🏻‍❤️‍💋‍🧑🏼", - "kiss_person_person_light_skin_tone_medium_light_skin_tone": "🧑🏻‍❤️‍💋‍🧑🏼", - "kiss_person_person_tone1_tone3": "🧑🏻‍❤️‍💋‍🧑🏽", - "kiss_person_person_light_skin_tone_medium_skin_tone": "🧑🏻‍❤️‍💋‍🧑🏽", - "kiss_person_person_tone1_tone4": "🧑🏻‍❤️‍💋‍🧑🏾", - "kiss_person_person_light_skin_tone_medium_dark_skin_tone": "🧑🏻‍❤️‍💋‍🧑🏾", - "kiss_person_person_tone1_tone5": "🧑🏻‍❤️‍💋‍🧑🏿", - "kiss_person_person_light_skin_tone_dark_skin_tone": "🧑🏻‍❤️‍💋‍🧑🏿", - "kiss_person_person_tone2_tone1": "🧑🏼‍❤️‍💋‍🧑🏻", - "kiss_person_person_medium_light_skin_tone_light_skin_tone": "🧑🏼‍❤️‍💋‍🧑🏻", - "kiss_tone2": "💏🏼", - "kiss_medium_light_skin_tone": "💏🏼", - "kiss_person_person_tone2_tone3": "🧑🏼‍❤️‍💋‍🧑🏽", - "kiss_person_person_medium_light_skin_tone_medium_skin_tone": "🧑🏼‍❤️‍💋‍🧑🏽", - "kiss_person_person_tone2_tone4": "🧑🏼‍❤️‍💋‍🧑🏾", - "kiss_person_person_medium_light_skin_tone_medium_dark_skin_tone": "🧑🏼‍❤️‍💋‍🧑🏾", - "kiss_person_person_tone2_tone5": "🧑🏼‍❤️‍💋‍🧑🏿", - "kiss_person_person_medium_light_skin_tone_dark_skin_tone": "🧑🏼‍❤️‍💋‍🧑🏿", - "kiss_person_person_tone3_tone1": "🧑🏽‍❤️‍💋‍🧑🏻", - "kiss_person_person_medium_skin_tone_light_skin_tone": "🧑🏽‍❤️‍💋‍🧑🏻", - "kiss_person_person_tone3_tone2": "🧑🏽‍❤️‍💋‍🧑🏼", - "kiss_person_person_medium_skin_tone_medium_light_skin_tone": "🧑🏽‍❤️‍💋‍🧑🏼", - "kiss_tone3": "💏🏽", - "kiss_medium_skin_tone": "💏🏽", - "kiss_person_person_tone3_tone4": "🧑🏽‍❤️‍💋‍🧑🏾", - "kiss_person_person_medium_skin_tone_medium_dark_skin_tone": "🧑🏽‍❤️‍💋‍🧑🏾", - "kiss_person_person_tone3_tone5": "🧑🏽‍❤️‍💋‍🧑🏿", - "kiss_person_person_medium_skin_tone_dark_skin_tone": "🧑🏽‍❤️‍💋‍🧑🏿", - "kiss_person_person_tone4_tone1": "🧑🏾‍❤️‍💋‍🧑🏻", - "kiss_person_person_medium_dark_skin_tone_light_skin_tone": "🧑🏾‍❤️‍💋‍🧑🏻", - "kiss_person_person_tone4_tone2": "🧑🏾‍❤️‍💋‍🧑🏼", - "kiss_person_person_medium_dark_skin_tone_medium_light_skin_tone": "🧑🏾‍❤️‍💋‍🧑🏼", - "kiss_person_person_tone4_tone3": "🧑🏾‍❤️‍💋‍🧑🏽", - "kiss_person_person_medium_dark_skin_tone_medium_skin_tone": "🧑🏾‍❤️‍💋‍🧑🏽", - "kiss_tone4": "💏🏾", - "kiss_medium_dark_skin_tone": "💏🏾", - "kiss_person_person_tone4_tone5": "🧑🏾‍❤️‍💋‍🧑🏿", - "kiss_person_person_medium_dark_skin_tone_dark_skin_tone": "🧑🏾‍❤️‍💋‍🧑🏿", - "kiss_person_person_tone5_tone1": "🧑🏿‍❤️‍💋‍🧑🏻", - "kiss_person_person_dark_skin_tone_light_skin_tone": "🧑🏿‍❤️‍💋‍🧑🏻", - "kiss_person_person_tone5_tone2": "🧑🏿‍❤️‍💋‍🧑🏼", - "kiss_person_person_dark_skin_tone_medium_light_skin_tone": "🧑🏿‍❤️‍💋‍🧑🏼", - "kiss_person_person_tone5_tone3": "🧑🏿‍❤️‍💋‍🧑🏽", - "kiss_person_person_dark_skin_tone_medium_skin_tone": "🧑🏿‍❤️‍💋‍🧑🏽", - "kiss_tone5": "💏🏿", - "kiss_dark_skin_tone": "💏🏿", - "kiss_woman_man": "👩‍❤️‍💋‍👨", - "kiss_woman_man_tone1": "👩🏻‍❤️‍💋‍👨🏻", - "kiss_woman_man_light_skin_tone": "👩🏻‍❤️‍💋‍👨🏻", - "kiss_woman_man_tone1_tone2": "👩🏻‍❤️‍💋‍👨🏼", - "kiss_woman_man_light_skin_tone_medium_light_skin_tone": "👩🏻‍❤️‍💋‍👨🏼", - "kiss_woman_man_tone1_tone3": "👩🏻‍❤️‍💋‍👨🏽", - "kiss_woman_man_light_skin_tone_medium_skin_tone": "👩🏻‍❤️‍💋‍👨🏽", - "kiss_woman_man_tone1_tone4": "👩🏻‍❤️‍💋‍👨🏾", - "kiss_woman_man_light_skin_tone_medium_dark_skin_tone": "👩🏻‍❤️‍💋‍👨🏾", - "kiss_woman_man_tone1_tone5": "👩🏻‍❤️‍💋‍👨🏿", - "kiss_woman_man_light_skin_tone_dark_skin_tone": "👩🏻‍❤️‍💋‍👨🏿", - "kiss_woman_man_tone2_tone1": "👩🏼‍❤️‍💋‍👨🏻", - "kiss_woman_man_medium_light_skin_tone_light_skin_tone": "👩🏼‍❤️‍💋‍👨🏻", - "kiss_woman_man_tone2": "👩🏼‍❤️‍💋‍👨🏼", - "kiss_woman_man_medium_light_skin_tone": "👩🏼‍❤️‍💋‍👨🏼", - "kiss_woman_man_tone2_tone3": "👩🏼‍❤️‍💋‍👨🏽", - "kiss_woman_man_medium_light_skin_tone_medium_skin_tone": "👩🏼‍❤️‍💋‍👨🏽", - "kiss_woman_man_tone2_tone4": "👩🏼‍❤️‍💋‍👨🏾", - "kiss_woman_man_medium_light_skin_tone_medium_dark_skin_tone": "👩🏼‍❤️‍💋‍👨🏾", - "kiss_woman_man_tone2_tone5": "👩🏼‍❤️‍💋‍👨🏿", - "kiss_woman_man_medium_light_skin_tone_dark_skin_tone": "👩🏼‍❤️‍💋‍👨🏿", - "kiss_woman_man_tone3_tone1": "👩🏽‍❤️‍💋‍👨🏻", - "kiss_woman_man_medium_skin_tone_light_skin_tone": "👩🏽‍❤️‍💋‍👨🏻", - "kiss_woman_man_tone3_tone2": "👩🏽‍❤️‍💋‍👨🏼", - "kiss_woman_man_medium_skin_tone_medium_light_skin_tone": "👩🏽‍❤️‍💋‍👨🏼", - "kiss_woman_man_tone3": "👩🏽‍❤️‍💋‍👨🏽", - "kiss_woman_man_medium_skin_tone": "👩🏽‍❤️‍💋‍👨🏽", - "kiss_woman_man_tone3_tone4": "👩🏽‍❤️‍💋‍👨🏾", - "kiss_woman_man_medium_skin_tone_medium_dark_skin_tone": "👩🏽‍❤️‍💋‍👨🏾", - "kiss_woman_man_tone3_tone5": "👩🏽‍❤️‍💋‍👨🏿", - "kiss_woman_man_medium_skin_tone_dark_skin_tone": "👩🏽‍❤️‍💋‍👨🏿", - "kiss_woman_man_tone4_tone1": "👩🏾‍❤️‍💋‍👨🏻", - "kiss_woman_man_medium_dark_skin_tone_light_skin_tone": "👩🏾‍❤️‍💋‍👨🏻", - "kiss_woman_man_tone4_tone2": "👩🏾‍❤️‍💋‍👨🏼", - "kiss_woman_man_medium_dark_skin_tone_medium_light_skin_tone": "👩🏾‍❤️‍💋‍👨🏼", - "kiss_woman_man_tone4_tone3": "👩🏾‍❤️‍💋‍👨🏽", - "kiss_woman_man_medium_dark_skin_tone_medium_skin_tone": "👩🏾‍❤️‍💋‍👨🏽", - "kiss_woman_man_tone4": "👩🏾‍❤️‍💋‍👨🏾", - "kiss_woman_man_medium_dark_skin_tone": "👩🏾‍❤️‍💋‍👨🏾", - "kiss_woman_man_tone4_tone5": "👩🏾‍❤️‍💋‍👨🏿", - "kiss_woman_man_medium_dark_skin_tone_dark_skin_tone": "👩🏾‍❤️‍💋‍👨🏿", - "kiss_woman_man_tone5_tone1": "👩🏿‍❤️‍💋‍👨🏻", - "kiss_woman_man_dark_skin_tone_light_skin_tone": "👩🏿‍❤️‍💋‍👨🏻", - "kiss_woman_man_tone5_tone2": "👩🏿‍❤️‍💋‍👨🏼", - "kiss_woman_man_dark_skin_tone_medium_light_skin_tone": "👩🏿‍❤️‍💋‍👨🏼", - "kiss_woman_man_tone5_tone3": "👩🏿‍❤️‍💋‍👨🏽", - "kiss_woman_man_dark_skin_tone_medium_skin_tone": "👩🏿‍❤️‍💋‍👨🏽", - "kiss_woman_man_tone5_tone4": "👩🏿‍❤️‍💋‍👨🏾", - "kiss_woman_man_dark_skin_tone_medium_dark_skin_tone": "👩🏿‍❤️‍💋‍👨🏾", - "kiss_woman_man_tone5": "👩🏿‍❤️‍💋‍👨🏿", - "kiss_woman_man_dark_skin_tone": "👩🏿‍❤️‍💋‍👨🏿", - "kiss_ww": "👩‍❤️‍💋‍👩", - "couplekiss_ww": "👩‍❤️‍💋‍👩", - "kiss_woman_woman_tone1": "👩🏻‍❤️‍💋‍👩🏻", - "kiss_woman_woman_light_skin_tone": "👩🏻‍❤️‍💋‍👩🏻", - "kiss_woman_woman_tone1_tone2": "👩🏻‍❤️‍💋‍👩🏼", - "kiss_woman_woman_light_skin_tone_medium_light_skin_tone": "👩🏻‍❤️‍💋‍👩🏼", - "kiss_woman_woman_tone1_tone3": "👩🏻‍❤️‍💋‍👩🏽", - "kiss_woman_woman_light_skin_tone_medium_skin_tone": "👩🏻‍❤️‍💋‍👩🏽", - "kiss_woman_woman_tone1_tone4": "👩🏻‍❤️‍💋‍👩🏾", - "kiss_woman_woman_light_skin_tone_medium_dark_skin_tone": "👩🏻‍❤️‍💋‍👩🏾", - "kiss_woman_woman_tone1_tone5": "👩🏻‍❤️‍💋‍👩🏿", - "kiss_woman_woman_light_skin_tone_dark_skin_tone": "👩🏻‍❤️‍💋‍👩🏿", - "kiss_woman_woman_tone2_tone1": "👩🏼‍❤️‍💋‍👩🏻", - "kiss_woman_woman_medium_light_skin_tone_light_skin_tone": "👩🏼‍❤️‍💋‍👩🏻", - "kiss_woman_woman_tone2": "👩🏼‍❤️‍💋‍👩🏼", - "kiss_woman_woman_medium_light_skin_tone": "👩🏼‍❤️‍💋‍👩🏼", - "kiss_woman_woman_tone2_tone3": "👩🏼‍❤️‍💋‍👩🏽", - "kiss_woman_woman_medium_light_skin_tone_medium_skin_tone": "👩🏼‍❤️‍💋‍👩🏽", - "kiss_woman_woman_tone2_tone4": "👩🏼‍❤️‍💋‍👩🏾", - "kiss_woman_woman_medium_light_skin_tone_medium_dark_skin_tone": "👩🏼‍❤️‍💋‍👩🏾", - "kiss_woman_woman_tone2_tone5": "👩🏼‍❤️‍💋‍👩🏿", - "kiss_woman_woman_medium_light_skin_tone_dark_skin_tone": "👩🏼‍❤️‍💋‍👩🏿", - "kiss_woman_woman_tone3_tone1": "👩🏽‍❤️‍💋‍👩🏻", - "kiss_woman_woman_medium_skin_tone_light_skin_tone": "👩🏽‍❤️‍💋‍👩🏻", - "kiss_woman_woman_tone3_tone2": "👩🏽‍❤️‍💋‍👩🏼", - "kiss_woman_woman_medium_skin_tone_medium_light_skin_tone": "👩🏽‍❤️‍💋‍👩🏼", - "kiss_woman_woman_tone3": "👩🏽‍❤️‍💋‍👩🏽", - "kiss_woman_woman_medium_skin_tone": "👩🏽‍❤️‍💋‍👩🏽", - "kiss_woman_woman_tone3_tone4": "👩🏽‍❤️‍💋‍👩🏾", - "kiss_woman_woman_medium_skin_tone_medium_dark_skin_tone": "👩🏽‍❤️‍💋‍👩🏾", - "kiss_woman_woman_tone3_tone5": "👩🏽‍❤️‍💋‍👩🏿", - "kiss_woman_woman_medium_skin_tone_dark_skin_tone": "👩🏽‍❤️‍💋‍👩🏿", - "kiss_woman_woman_tone4_tone1": "👩🏾‍❤️‍💋‍👩🏻", - "kiss_woman_woman_medium_dark_skin_tone_light_skin_tone": "👩🏾‍❤️‍💋‍👩🏻", - "kiss_woman_woman_tone4_tone2": "👩🏾‍❤️‍💋‍👩🏼", - "kiss_woman_woman_medium_dark_skin_tone_medium_light_skin_tone": "👩🏾‍❤️‍💋‍👩🏼", - "kiss_woman_woman_tone4_tone3": "👩🏾‍❤️‍💋‍👩🏽", - "kiss_woman_woman_medium_dark_skin_tone_medium_skin_tone": "👩🏾‍❤️‍💋‍👩🏽", - "kiss_woman_woman_tone4": "👩🏾‍❤️‍💋‍👩🏾", - "kiss_woman_woman_medium_dark_skin_tone": "👩🏾‍❤️‍💋‍👩🏾", - "kiss_woman_woman_tone4_tone5": "👩🏾‍❤️‍💋‍👩🏿", - "kiss_woman_woman_medium_dark_skin_tone_dark_skin_tone": "👩🏾‍❤️‍💋‍👩🏿", - "kiss_woman_woman_tone5_tone1": "👩🏿‍❤️‍💋‍👩🏻", - "kiss_woman_woman_dark_skin_tone_light_skin_tone": "👩🏿‍❤️‍💋‍👩🏻", - "kiss_woman_woman_tone5_tone2": "👩🏿‍❤️‍💋‍👩🏼", - "kiss_woman_woman_dark_skin_tone_medium_light_skin_tone": "👩🏿‍❤️‍💋‍👩🏼", - "kiss_woman_woman_tone5_tone3": "👩🏿‍❤️‍💋‍👩🏽", - "kiss_woman_woman_dark_skin_tone_medium_skin_tone": "👩🏿‍❤️‍💋‍👩🏽", - "kiss_woman_woman_tone5_tone4": "👩🏿‍❤️‍💋‍👩🏾", - "kiss_woman_woman_dark_skin_tone_medium_dark_skin_tone": "👩🏿‍❤️‍💋‍👩🏾", - "kiss_woman_woman_tone5": "👩🏿‍❤️‍💋‍👩🏿", - "kiss_woman_woman_dark_skin_tone": "👩🏿‍❤️‍💋‍👩🏿", - "kiss_mm": "👨‍❤️‍💋‍👨", - "couplekiss_mm": "👨‍❤️‍💋‍👨", - "kiss_man_man_tone1": "👨🏻‍❤️‍💋‍👨🏻", - "kiss_man_man_light_skin_tone": "👨🏻‍❤️‍💋‍👨🏻", - "kiss_man_man_tone1_tone2": "👨🏻‍❤️‍💋‍👨🏼", - "kiss_man_man_light_skin_tone_medium_light_skin_tone": "👨🏻‍❤️‍💋‍👨🏼", - "kiss_man_man_tone1_tone3": "👨🏻‍❤️‍💋‍👨🏽", - "kiss_man_man_light_skin_tone_medium_skin_tone": "👨🏻‍❤️‍💋‍👨🏽", - "kiss_man_man_tone1_tone4": "👨🏻‍❤️‍💋‍👨🏾", - "kiss_man_man_light_skin_tone_medium_dark_skin_tone": "👨🏻‍❤️‍💋‍👨🏾", - "kiss_man_man_tone1_tone5": "👨🏻‍❤️‍💋‍👨🏿", - "kiss_man_man_light_skin_tone_dark_skin_tone": "👨🏻‍❤️‍💋‍👨🏿", - "kiss_man_man_tone2_tone1": "👨🏼‍❤️‍💋‍👨🏻", - "kiss_man_man_medium_light_skin_tone_light_skin_tone": "👨🏼‍❤️‍💋‍👨🏻", - "kiss_man_man_tone2": "👨🏼‍❤️‍💋‍👨🏼", - "kiss_man_man_medium_light_skin_tone": "👨🏼‍❤️‍💋‍👨🏼", - "kiss_man_man_tone2_tone3": "👨🏼‍❤️‍💋‍👨🏽", - "kiss_man_man_medium_light_skin_tone_medium_skin_tone": "👨🏼‍❤️‍💋‍👨🏽", - "kiss_man_man_tone2_tone4": "👨🏼‍❤️‍💋‍👨🏾", - "kiss_man_man_medium_light_skin_tone_medium_dark_skin_tone": "👨🏼‍❤️‍💋‍👨🏾", - "kiss_man_man_tone2_tone5": "👨🏼‍❤️‍💋‍👨🏿", - "kiss_man_man_medium_light_skin_tone_dark_skin_tone": "👨🏼‍❤️‍💋‍👨🏿", - "kiss_man_man_tone3_tone1": "👨🏽‍❤️‍💋‍👨🏻", - "kiss_man_man_medium_skin_tone_light_skin_tone": "👨🏽‍❤️‍💋‍👨🏻", - "kiss_man_man_tone3_tone2": "👨🏽‍❤️‍💋‍👨🏼", - "kiss_man_man_medium_skin_tone_medium_light_skin_tone": "👨🏽‍❤️‍💋‍👨🏼", - "kiss_man_man_tone3": "👨🏽‍❤️‍💋‍👨🏽", - "kiss_man_man_medium_skin_tone": "👨🏽‍❤️‍💋‍👨🏽", - "kiss_man_man_tone3_tone4": "👨🏽‍❤️‍💋‍👨🏾", - "kiss_man_man_medium_skin_tone_medium_dark_skin_tone": "👨🏽‍❤️‍💋‍👨🏾", - "kiss_man_man_tone3_tone5": "👨🏽‍❤️‍💋‍👨🏿", - "kiss_man_man_medium_skin_tone_dark_skin_tone": "👨🏽‍❤️‍💋‍👨🏿", - "kiss_man_man_tone4_tone1": "👨🏾‍❤️‍💋‍👨🏻", - "kiss_man_man_medium_dark_skin_tone_light_skin_tone": "👨🏾‍❤️‍💋‍👨🏻", - "kiss_man_man_tone4_tone2": "👨🏾‍❤️‍💋‍👨🏼", - "kiss_man_man_medium_dark_skin_tone_medium_light_skin_tone": "👨🏾‍❤️‍💋‍👨🏼", - "kiss_man_man_tone4_tone3": "👨🏾‍❤️‍💋‍👨🏽", - "kiss_man_man_medium_dark_skin_tone_medium_skin_tone": "👨🏾‍❤️‍💋‍👨🏽", - "kiss_man_man_tone4": "👨🏾‍❤️‍💋‍👨🏾", - "kiss_man_man_medium_dark_skin_tone": "👨🏾‍❤️‍💋‍👨🏾", - "kiss_man_man_tone4_tone5": "👨🏾‍❤️‍💋‍👨🏿", - "kiss_man_man_medium_dark_skin_tone_dark_skin_tone": "👨🏾‍❤️‍💋‍👨🏿", - "kiss_man_man_tone5_tone1": "👨🏿‍❤️‍💋‍👨🏻", - "kiss_man_man_dark_skin_tone_light_skin_tone": "👨🏿‍❤️‍💋‍👨🏻", - "kiss_man_man_tone5_tone2": "👨🏿‍❤️‍💋‍👨🏼", - "kiss_man_man_dark_skin_tone_medium_light_skin_tone": "👨🏿‍❤️‍💋‍👨🏼", - "kiss_man_man_tone5_tone3": "👨🏿‍❤️‍💋‍👨🏽", - "kiss_man_man_dark_skin_tone_medium_skin_tone": "👨🏿‍❤️‍💋‍👨🏽", - "kiss_man_man_tone5_tone4": "👨🏿‍❤️‍💋‍👨🏾", - "kiss_man_man_dark_skin_tone_medium_dark_skin_tone": "👨🏿‍❤️‍💋‍👨🏾", - "kiss_man_man_tone5": "👨🏿‍❤️‍💋‍👨🏿", - "kiss_man_man_dark_skin_tone": "👨🏿‍❤️‍💋‍👨🏿", - "family": "👪", - "family_man_woman_boy": "👨‍👩‍👦", - "family_mwg": "👨‍👩‍👧", - "family_mwgb": "👨‍👩‍👧‍👦", - "family_mwbb": "👨‍👩‍👦‍👦", - "family_mwgg": "👨‍👩‍👧‍👧", - "family_wwb": "👩‍👩‍👦", - "family_wwg": "👩‍👩‍👧", - "family_wwgb": "👩‍👩‍👧‍👦", - "family_wwbb": "👩‍👩‍👦‍👦", - "family_wwgg": "👩‍👩‍👧‍👧", - "family_mmb": "👨‍👨‍👦", - "family_mmg": "👨‍👨‍👧", - "family_mmgb": "👨‍👨‍👧‍👦", - "family_mmbb": "👨‍👨‍👦‍👦", - "family_mmgg": "👨‍👨‍👧‍👧", - "family_woman_boy": "👩‍👦", - "family_woman_girl": "👩‍👧", - "family_woman_girl_boy": "👩‍👧‍👦", - "family_woman_boy_boy": "👩‍👦‍👦", - "family_woman_girl_girl": "👩‍👧‍👧", - "family_man_boy": "👨‍👦", - "family_man_girl": "👨‍👧", - "family_man_girl_boy": "👨‍👧‍👦", - "family_man_boy_boy": "👨‍👦‍👦", - "family_man_girl_girl": "👨‍👧‍👧", - "yarn": "🧶", - "thread": "🧵", - "coat": "🧥", - "lab_coat": "🥼", - "safety_vest": "🦺", - "womans_clothes": "👚", - "shirt": "👕", - "jeans": "👖", - "briefs": "🩲", - "shorts": "🩳", - "necktie": "👔", - "dress": "👗", - "bikini": "👙", - "one_piece_swimsuit": "🩱", - "kimono": "👘", - "sari": "🥻", - "womans_flat_shoe": "🥿", - "high_heel": "👠", - "sandal": "👡", - "boot": "👢", - "mans_shoe": "👞", - "athletic_shoe": "👟", - "hiking_boot": "🥾", - "thong_sandal": "🩴", - "socks": "🧦", - "gloves": "🧤", - "scarf": "🧣", - "tophat": "🎩", - "billed_cap": "🧢", - "womans_hat": "👒", - "mortar_board": "🎓", - "helmet_with_cross": "⛑️", - "helmet_with_white_cross": "⛑️", - "military_helmet": "🪖", - "crown": "👑", - "ring": "💍", - "pouch": "👝", - "purse": "👛", - "handbag": "👜", - "briefcase": "💼", - "school_satchel": "🎒", - "luggage": "🧳", - "eyeglasses": "👓", - "dark_sunglasses": "🕶️", - "goggles": "🥽", - "closed_umbrella": "🌂" - }, - "nature": { - "dog": "🐶", - "cat": "🐱", - "mouse": "🐭", - "hamster": "🐹", - "rabbit": "🐰", - "fox": "🦊", - "fox_face": "🦊", - "bear": "🐻", - "panda_face": "🐼", - "polar_bear": "🐻‍❄️", - "koala": "🐨", - "tiger": "🐯", - "lion_face": "🦁", - "lion": "🦁", - "cow": "🐮", - "pig": "🐷", - "pig_nose": "🐽", - "frog": "🐸", - "monkey_face": "🐵", - "see_no_evil": "🙈", - "hear_no_evil": "🙉", - "speak_no_evil": "🙊", - "monkey": "🐒", - "chicken": "🐔", - "penguin": "🐧", - "bird": "🐦", - "baby_chick": "🐤", - "hatching_chick": "🐣", - "hatched_chick": "🐥", - "duck": "🦆", - "dodo": "🦤", - "eagle": "🦅", - "owl": "🦉", - "bat": "🦇", - "wolf": "🐺", - "boar": "🐗", - "horse": "🐴", - "unicorn": "🦄", - "unicorn_face": "🦄", - "bee": "🐝", - "bug": "🐛", - "butterfly": "🦋", - "snail": "🐌", - "worm": "🪱", - "lady_beetle": "🐞", - "ant": "🐜", - "fly": "🪰", - "mosquito": "🦟", - "cockroach": "🪳", - "beetle": "🪲", - "cricket": "🦗", - "spider": "🕷️", - "spider_web": "🕸️", - "scorpion": "🦂", - "turtle": "🐢", - "snake": "🐍", - "lizard": "🦎", - "t_rex": "🦖", - "sauropod": "🦕", - "octopus": "🐙", - "squid": "🦑", - "shrimp": "🦐", - "lobster": "🦞", - "crab": "🦀", - "blowfish": "🐡", - "tropical_fish": "🐠", - "fish": "🐟", - "seal": "🦭", - "dolphin": "🐬", - "whale": "🐳", - "whale2": "🐋", - "shark": "🦈", - "crocodile": "🐊", - "tiger2": "🐅", - "leopard": "🐆", - "zebra": "🦓", - "gorilla": "🦍", - "orangutan": "🦧", - "elephant": "🐘", - "mammoth": "🦣", - "bison": "🦬", - "hippopotamus": "🦛", - "rhino": "🦏", - "rhinoceros": "🦏", - "dromedary_camel": "🐪", - "camel": "🐫", - "giraffe": "🦒", - "kangaroo": "🦘", - "water_buffalo": "🐃", - "ox": "🐂", - "cow2": "🐄", - "racehorse": "🐎", - "pig2": "🐖", - "ram": "🐏", - "sheep": "🐑", - "llama": "🦙", - "goat": "🐐", - "deer": "🦌", - "dog2": "🐕", - "poodle": "🐩", - "guide_dog": "🦮", - "service_dog": "🐕‍🦺", - "cat2": "🐈", - "black_cat": "🐈‍⬛", - "rooster": "🐓", - "turkey": "🦃", - "peacock": "🦚", - "parrot": "🦜", - "swan": "🦢", - "flamingo": "🦩", - "dove": "🕊️", - "dove_of_peace": "🕊️", - "rabbit2": "🐇", - "raccoon": "🦝", - "skunk": "🦨", - "badger": "🦡", - "beaver": "🦫", - "otter": "🦦", - "sloth": "🦥", - "mouse2": "🐁", - "rat": "🐀", - "chipmunk": "🐿️", - "hedgehog": "🦔", - "feet": "🐾", - "paw_prints": "🐾", - "dragon": "🐉", - "dragon_face": "🐲", - "cactus": "🌵", - "christmas_tree": "🎄", - "evergreen_tree": "🌲", - "deciduous_tree": "🌳", - "palm_tree": "🌴", - "seedling": "🌱", - "herb": "🌿", - "shamrock": "☘️", - "four_leaf_clover": "🍀", - "bamboo": "🎍", - "tanabata_tree": "🎋", - "leaves": "🍃", - "fallen_leaf": "🍂", - "maple_leaf": "🍁", - "feather": "🪶", - "mushroom": "🍄", - "shell": "🐚", - "rock": "🪨", - "wood": "🪵", - "ear_of_rice": "🌾", - "potted_plant": "🪴", - "bouquet": "💐", - "tulip": "🌷", - "rose": "🌹", - "wilted_rose": "🥀", - "wilted_flower": "🥀", - "hibiscus": "🌺", - "cherry_blossom": "🌸", - "blossom": "🌼", - "sunflower": "🌻", - "sun_with_face": "🌞", - "full_moon_with_face": "🌝", - "first_quarter_moon_with_face": "🌛", - "last_quarter_moon_with_face": "🌜", - "new_moon_with_face": "🌚", - "full_moon": "🌕", - "waning_gibbous_moon": "🌖", - "last_quarter_moon": "🌗", - "waning_crescent_moon": "🌘", - "new_moon": "🌑", - "waxing_crescent_moon": "🌒", - "first_quarter_moon": "🌓", - "waxing_gibbous_moon": "🌔", - "crescent_moon": "🌙", - "earth_americas": "🌎", - "earth_africa": "🌍", - "earth_asia": "🌏", - "ringed_planet": "🪐", - "dizzy": "💫", - "star": "⭐", - "star2": "🌟", - "sparkles": "✨", - "zap": "⚡", - "comet": "☄️", - "boom": "💥", - "fire": "🔥", - "flame": "🔥", - "cloud_tornado": "🌪️", - "cloud_with_tornado": "🌪️", - "rainbow": "🌈", - "sunny": "☀️", - "white_sun_small_cloud": "🌤️", - "white_sun_with_small_cloud": "🌤️", - "partly_sunny": "⛅", - "white_sun_cloud": "🌥️", - "white_sun_behind_cloud": "🌥️", - "cloud": "☁️", - "white_sun_rain_cloud": "🌦️", - "white_sun_behind_cloud_with_rain": "🌦️", - "cloud_rain": "🌧️", - "cloud_with_rain": "🌧️", - "thunder_cloud_rain": "⛈️", - "thunder_cloud_and_rain": "⛈️", - "cloud_lightning": "🌩️", - "cloud_with_lightning": "🌩️", - "cloud_snow": "🌨️", - "cloud_with_snow": "🌨️", - "snowflake": "❄️", - "snowman2": "☃️", - "snowman": "⛄", - "wind_blowing_face": "🌬️", - "dash": "💨", - "droplet": "💧", - "sweat_drops": "💦", - "umbrella": "☔", - "umbrella2": "☂️", - "ocean": "🌊", - "fog": "🌫️" - }, - "food": { - "green_apple": "🍏", - "apple": "🍎", - "pear": "🍐", - "tangerine": "🍊", - "lemon": "🍋", - "banana": "🍌", - "watermelon": "🍉", - "grapes": "🍇", - "blueberries": "🫐", - "strawberry": "🍓", - "melon": "🍈", - "cherries": "🍒", - "peach": "🍑", - "mango": "🥭", - "pineapple": "🍍", - "coconut": "🥥", - "kiwi": "🥝", - "kiwifruit": "🥝", - "tomato": "🍅", - "eggplant": "🍆", - "avocado": "🥑", - "olive": "🫒", - "broccoli": "🥦", - "leafy_green": "🥬", - "bell_pepper": "🫑", - "cucumber": "🥒", - "hot_pepper": "🌶️", - "corn": "🌽", - "carrot": "🥕", - "garlic": "🧄", - "onion": "🧅", - "potato": "🥔", - "sweet_potato": "🍠", - "croissant": "🥐", - "bagel": "🥯", - "bread": "🍞", - "french_bread": "🥖", - "baguette_bread": "🥖", - "flatbread": "🫓", - "pretzel": "🥨", - "cheese": "🧀", - "cheese_wedge": "🧀", - "egg": "🥚", - "cooking": "🍳", - "butter": "🧈", - "pancakes": "🥞", - "waffle": "🧇", - "bacon": "🥓", - "cut_of_meat": "🥩", - "poultry_leg": "🍗", - "meat_on_bone": "🍖", - "hotdog": "🌭", - "hot_dog": "🌭", - "hamburger": "🍔", - "fries": "🍟", - "pizza": "🍕", - "sandwich": "🥪", - "stuffed_flatbread": "🥙", - "stuffed_pita": "🥙", - "falafel": "🧆", - "taco": "🌮", - "burrito": "🌯", - "tamale": "🫔", - "salad": "🥗", - "green_salad": "🥗", - "shallow_pan_of_food": "🥘", - "paella": "🥘", - "fondue": "🫕", - "canned_food": "🥫", - "spaghetti": "🍝", - "ramen": "🍜", - "stew": "🍲", - "curry": "🍛", - "sushi": "🍣", - "bento": "🍱", - "dumpling": "🥟", - "oyster": "🦪", - "fried_shrimp": "🍤", - "rice_ball": "🍙", - "rice": "🍚", - "rice_cracker": "🍘", - "fish_cake": "🍥", - "fortune_cookie": "🥠", - "moon_cake": "🥮", - "oden": "🍢", - "dango": "🍡", - "shaved_ice": "🍧", - "ice_cream": "🍨", - "icecream": "🍦", - "pie": "🥧", - "cupcake": "🧁", - "cake": "🍰", - "birthday": "🎂", - "custard": "🍮", - "pudding": "🍮", - "flan": "🍮", - "lollipop": "🍭", - "candy": "🍬", - "chocolate_bar": "🍫", - "popcorn": "🍿", - "doughnut": "🍩", - "cookie": "🍪", - "chestnut": "🌰", - "peanuts": "🥜", - "shelled_peanut": "🥜", - "honey_pot": "🍯", - "milk": "🥛", - "glass_of_milk": "🥛", - "baby_bottle": "🍼", - "coffee": "☕", - "tea": "🍵", - "teapot": "🫖", - "mate": "🧉", - "bubble_tea": "🧋", - "beverage_box": "🧃", - "cup_with_straw": "🥤", - "sake": "🍶", - "beer": "🍺", - "beers": "🍻", - "champagne_glass": "🥂", - "clinking_glass": "🥂", - "wine_glass": "🍷", - "tumbler_glass": "🥃", - "whisky": "🥃", - "cocktail": "🍸", - "tropical_drink": "🍹", - "champagne": "🍾", - "bottle_with_popping_cork": "🍾", - "ice_cube": "🧊", - "spoon": "🥄", - "fork_and_knife": "🍴", - "fork_knife_plate": "🍽️", - "fork_and_knife_with_plate": "🍽️", - "bowl_with_spoon": "🥣", - "takeout_box": "🥡", - "chopsticks": "🥢", - "salt": "🧂" - }, - "activity": { - "soccer": "⚽", - "basketball": "🏀", - "football": "🏈", - "baseball": "⚾", - "softball": "🥎", - "tennis": "🎾", - "volleyball": "🏐", - "rugby_football": "🏉", - "flying_disc": "🥏", - "boomerang": "🪃", - "8ball": "🎱", - "yo_yo": "🪀", - "ping_pong": "🏓", - "table_tennis": "🏓", - "badminton": "🏸", - "hockey": "🏒", - "field_hockey": "🏑", - "lacrosse": "🥍", - "cricket_game": "🏏", - "cricket_bat_ball": "🏏", - "goal": "🥅", - "goal_net": "🥅", - "golf": "⛳", - "kite": "🪁", - "bow_and_arrow": "🏹", - "archery": "🏹", - "fishing_pole_and_fish": "🎣", - "diving_mask": "🤿", - "boxing_glove": "🥊", - "boxing_gloves": "🥊", - "martial_arts_uniform": "🥋", - "karate_uniform": "🥋", - "running_shirt_with_sash": "🎽", - "skateboard": "🛹", - "roller_skate": "🛼", - "sled": "🛷", - "ice_skate": "⛸️", - "curling_stone": "🥌", - "ski": "🎿", - "skier": "⛷️", - "snowboarder": "🏂", - "snowboarder_tone1": "🏂🏻", - "snowboarder_light_skin_tone": "🏂🏻", - "snowboarder_tone2": "🏂🏼", - "snowboarder_medium_light_skin_tone": "🏂🏼", - "snowboarder_tone3": "🏂🏽", - "snowboarder_medium_skin_tone": "🏂🏽", - "snowboarder_tone4": "🏂🏾", - "snowboarder_medium_dark_skin_tone": "🏂🏾", - "snowboarder_tone5": "🏂🏿", - "snowboarder_dark_skin_tone": "🏂🏿", - "parachute": "🪂", - "person_lifting_weights": "🏋️", - "lifter": "🏋️", - "weight_lifter": "🏋️", - "person_lifting_weights_tone1": "🏋🏻", - "lifter_tone1": "🏋🏻", - "weight_lifter_tone1": "🏋🏻", - "person_lifting_weights_tone2": "🏋🏼", - "lifter_tone2": "🏋🏼", - "weight_lifter_tone2": "🏋🏼", - "person_lifting_weights_tone3": "🏋🏽", - "lifter_tone3": "🏋🏽", - "weight_lifter_tone3": "🏋🏽", - "person_lifting_weights_tone4": "🏋🏾", - "lifter_tone4": "🏋🏾", - "weight_lifter_tone4": "🏋🏾", - "person_lifting_weights_tone5": "🏋🏿", - "lifter_tone5": "🏋🏿", - "weight_lifter_tone5": "🏋🏿", - "woman_lifting_weights": "🏋️‍♀️", - "woman_lifting_weights_tone1": "🏋🏻‍♀️", - "woman_lifting_weights_light_skin_tone": "🏋🏻‍♀️", - "woman_lifting_weights_tone2": "🏋🏼‍♀️", - "woman_lifting_weights_medium_light_skin_tone": "🏋🏼‍♀️", - "woman_lifting_weights_tone3": "🏋🏽‍♀️", - "woman_lifting_weights_medium_skin_tone": "🏋🏽‍♀️", - "woman_lifting_weights_tone4": "🏋🏾‍♀️", - "woman_lifting_weights_medium_dark_skin_tone": "🏋🏾‍♀️", - "woman_lifting_weights_tone5": "🏋🏿‍♀️", - "woman_lifting_weights_dark_skin_tone": "🏋🏿‍♀️", - "man_lifting_weights": "🏋️‍♂️", - "man_lifting_weights_tone1": "🏋🏻‍♂️", - "man_lifting_weights_light_skin_tone": "🏋🏻‍♂️", - "man_lifting_weights_tone2": "🏋🏼‍♂️", - "man_lifting_weights_medium_light_skin_tone": "🏋🏼‍♂️", - "man_lifting_weights_tone3": "🏋🏽‍♂️", - "man_lifting_weights_medium_skin_tone": "🏋🏽‍♂️", - "man_lifting_weights_tone4": "🏋🏾‍♂️", - "man_lifting_weights_medium_dark_skin_tone": "🏋🏾‍♂️", - "man_lifting_weights_tone5": "🏋🏿‍♂️", - "man_lifting_weights_dark_skin_tone": "🏋🏿‍♂️", - "people_wrestling": "🤼", - "wrestlers": "🤼", - "wrestling": "🤼", - "women_wrestling": "🤼‍♀️", - "men_wrestling": "🤼‍♂️", - "person_doing_cartwheel": "🤸", - "cartwheel": "🤸", - "person_doing_cartwheel_tone1": "🤸🏻", - "cartwheel_tone1": "🤸🏻", - "person_doing_cartwheel_tone2": "🤸🏼", - "cartwheel_tone2": "🤸🏼", - "person_doing_cartwheel_tone3": "🤸🏽", - "cartwheel_tone3": "🤸🏽", - "person_doing_cartwheel_tone4": "🤸🏾", - "cartwheel_tone4": "🤸🏾", - "person_doing_cartwheel_tone5": "🤸🏿", - "cartwheel_tone5": "🤸🏿", - "woman_cartwheeling": "🤸‍♀️", - "woman_cartwheeling_tone1": "🤸🏻‍♀️", - "woman_cartwheeling_light_skin_tone": "🤸🏻‍♀️", - "woman_cartwheeling_tone2": "🤸🏼‍♀️", - "woman_cartwheeling_medium_light_skin_tone": "🤸🏼‍♀️", - "woman_cartwheeling_tone3": "🤸🏽‍♀️", - "woman_cartwheeling_medium_skin_tone": "🤸🏽‍♀️", - "woman_cartwheeling_tone4": "🤸🏾‍♀️", - "woman_cartwheeling_medium_dark_skin_tone": "🤸🏾‍♀️", - "woman_cartwheeling_tone5": "🤸🏿‍♀️", - "woman_cartwheeling_dark_skin_tone": "🤸🏿‍♀️", - "man_cartwheeling": "🤸‍♂️", - "man_cartwheeling_tone1": "🤸🏻‍♂️", - "man_cartwheeling_light_skin_tone": "🤸🏻‍♂️", - "man_cartwheeling_tone2": "🤸🏼‍♂️", - "man_cartwheeling_medium_light_skin_tone": "🤸🏼‍♂️", - "man_cartwheeling_tone3": "🤸🏽‍♂️", - "man_cartwheeling_medium_skin_tone": "🤸🏽‍♂️", - "man_cartwheeling_tone4": "🤸🏾‍♂️", - "man_cartwheeling_medium_dark_skin_tone": "🤸🏾‍♂️", - "man_cartwheeling_tone5": "🤸🏿‍♂️", - "man_cartwheeling_dark_skin_tone": "🤸🏿‍♂️", - "person_bouncing_ball": "⛹️", - "basketball_player": "⛹️", - "person_with_ball": "⛹️", - "person_bouncing_ball_tone1": "⛹🏻", - "basketball_player_tone1": "⛹🏻", - "person_with_ball_tone1": "⛹🏻", - "person_bouncing_ball_tone2": "⛹🏼", - "basketball_player_tone2": "⛹🏼", - "person_with_ball_tone2": "⛹🏼", - "person_bouncing_ball_tone3": "⛹🏽", - "basketball_player_tone3": "⛹🏽", - "person_with_ball_tone3": "⛹🏽", - "person_bouncing_ball_tone4": "⛹🏾", - "basketball_player_tone4": "⛹🏾", - "person_with_ball_tone4": "⛹🏾", - "person_bouncing_ball_tone5": "⛹🏿", - "basketball_player_tone5": "⛹🏿", - "person_with_ball_tone5": "⛹🏿", - "woman_bouncing_ball": "⛹️‍♀️", - "woman_bouncing_ball_tone1": "⛹🏻‍♀️", - "woman_bouncing_ball_light_skin_tone": "⛹🏻‍♀️", - "woman_bouncing_ball_tone2": "⛹🏼‍♀️", - "woman_bouncing_ball_medium_light_skin_tone": "⛹🏼‍♀️", - "woman_bouncing_ball_tone3": "⛹🏽‍♀️", - "woman_bouncing_ball_medium_skin_tone": "⛹🏽‍♀️", - "woman_bouncing_ball_tone4": "⛹🏾‍♀️", - "woman_bouncing_ball_medium_dark_skin_tone": "⛹🏾‍♀️", - "woman_bouncing_ball_tone5": "⛹🏿‍♀️", - "woman_bouncing_ball_dark_skin_tone": "⛹🏿‍♀️", - "man_bouncing_ball": "⛹️‍♂️", - "man_bouncing_ball_tone1": "⛹🏻‍♂️", - "man_bouncing_ball_light_skin_tone": "⛹🏻‍♂️", - "man_bouncing_ball_tone2": "⛹🏼‍♂️", - "man_bouncing_ball_medium_light_skin_tone": "⛹🏼‍♂️", - "man_bouncing_ball_tone3": "⛹🏽‍♂️", - "man_bouncing_ball_medium_skin_tone": "⛹🏽‍♂️", - "man_bouncing_ball_tone4": "⛹🏾‍♂️", - "man_bouncing_ball_medium_dark_skin_tone": "⛹🏾‍♂️", - "man_bouncing_ball_tone5": "⛹🏿‍♂️", - "man_bouncing_ball_dark_skin_tone": "⛹🏿‍♂️", - "person_fencing": "🤺", - "fencer": "🤺", - "fencing": "🤺", - "person_playing_handball": "🤾", - "handball": "🤾", - "person_playing_handball_tone1": "🤾🏻", - "handball_tone1": "🤾🏻", - "person_playing_handball_tone2": "🤾🏼", - "handball_tone2": "🤾🏼", - "person_playing_handball_tone3": "🤾🏽", - "handball_tone3": "🤾🏽", - "person_playing_handball_tone4": "🤾🏾", - "handball_tone4": "🤾🏾", - "person_playing_handball_tone5": "🤾🏿", - "handball_tone5": "🤾🏿", - "woman_playing_handball": "🤾‍♀️", - "woman_playing_handball_tone1": "🤾🏻‍♀️", - "woman_playing_handball_light_skin_tone": "🤾🏻‍♀️", - "woman_playing_handball_tone2": "🤾🏼‍♀️", - "woman_playing_handball_medium_light_skin_tone": "🤾🏼‍♀️", - "woman_playing_handball_tone3": "🤾🏽‍♀️", - "woman_playing_handball_medium_skin_tone": "🤾🏽‍♀️", - "woman_playing_handball_tone4": "🤾🏾‍♀️", - "woman_playing_handball_medium_dark_skin_tone": "🤾🏾‍♀️", - "woman_playing_handball_tone5": "🤾🏿‍♀️", - "woman_playing_handball_dark_skin_tone": "🤾🏿‍♀️", - "man_playing_handball": "🤾‍♂️", - "man_playing_handball_tone1": "🤾🏻‍♂️", - "man_playing_handball_light_skin_tone": "🤾🏻‍♂️", - "man_playing_handball_tone2": "🤾🏼‍♂️", - "man_playing_handball_medium_light_skin_tone": "🤾🏼‍♂️", - "man_playing_handball_tone3": "🤾🏽‍♂️", - "man_playing_handball_medium_skin_tone": "🤾🏽‍♂️", - "man_playing_handball_tone4": "🤾🏾‍♂️", - "man_playing_handball_medium_dark_skin_tone": "🤾🏾‍♂️", - "man_playing_handball_tone5": "🤾🏿‍♂️", - "man_playing_handball_dark_skin_tone": "🤾🏿‍♂️", - "person_golfing": "🏌️", - "golfer": "🏌️", - "person_golfing_tone1": "🏌🏻", - "person_golfing_light_skin_tone": "🏌🏻", - "person_golfing_tone2": "🏌🏼", - "person_golfing_medium_light_skin_tone": "🏌🏼", - "person_golfing_tone3": "🏌🏽", - "person_golfing_medium_skin_tone": "🏌🏽", - "person_golfing_tone4": "🏌🏾", - "person_golfing_medium_dark_skin_tone": "🏌🏾", - "person_golfing_tone5": "🏌🏿", - "person_golfing_dark_skin_tone": "🏌🏿", - "woman_golfing": "🏌️‍♀️", - "woman_golfing_tone1": "🏌🏻‍♀️", - "woman_golfing_light_skin_tone": "🏌🏻‍♀️", - "woman_golfing_tone2": "🏌🏼‍♀️", - "woman_golfing_medium_light_skin_tone": "🏌🏼‍♀️", - "woman_golfing_tone3": "🏌🏽‍♀️", - "woman_golfing_medium_skin_tone": "🏌🏽‍♀️", - "woman_golfing_tone4": "🏌🏾‍♀️", - "woman_golfing_medium_dark_skin_tone": "🏌🏾‍♀️", - "woman_golfing_tone5": "🏌🏿‍♀️", - "woman_golfing_dark_skin_tone": "🏌🏿‍♀️", - "man_golfing": "🏌️‍♂️", - "man_golfing_tone1": "🏌🏻‍♂️", - "man_golfing_light_skin_tone": "🏌🏻‍♂️", - "man_golfing_tone2": "🏌🏼‍♂️", - "man_golfing_medium_light_skin_tone": "🏌🏼‍♂️", - "man_golfing_tone3": "🏌🏽‍♂️", - "man_golfing_medium_skin_tone": "🏌🏽‍♂️", - "man_golfing_tone4": "🏌🏾‍♂️", - "man_golfing_medium_dark_skin_tone": "🏌🏾‍♂️", - "man_golfing_tone5": "🏌🏿‍♂️", - "man_golfing_dark_skin_tone": "🏌🏿‍♂️", - "horse_racing": "🏇", - "horse_racing_tone1": "🏇🏻", - "horse_racing_tone2": "🏇🏼", - "horse_racing_tone3": "🏇🏽", - "horse_racing_tone4": "🏇🏾", - "horse_racing_tone5": "🏇🏿", - "person_in_lotus_position": "🧘", - "person_in_lotus_position_tone1": "🧘🏻", - "person_in_lotus_position_light_skin_tone": "🧘🏻", - "person_in_lotus_position_tone2": "🧘🏼", - "person_in_lotus_position_medium_light_skin_tone": "🧘🏼", - "person_in_lotus_position_tone3": "🧘🏽", - "person_in_lotus_position_medium_skin_tone": "🧘🏽", - "person_in_lotus_position_tone4": "🧘🏾", - "person_in_lotus_position_medium_dark_skin_tone": "🧘🏾", - "person_in_lotus_position_tone5": "🧘🏿", - "person_in_lotus_position_dark_skin_tone": "🧘🏿", - "woman_in_lotus_position": "🧘‍♀️", - "woman_in_lotus_position_tone1": "🧘🏻‍♀️", - "woman_in_lotus_position_light_skin_tone": "🧘🏻‍♀️", - "woman_in_lotus_position_tone2": "🧘🏼‍♀️", - "woman_in_lotus_position_medium_light_skin_tone": "🧘🏼‍♀️", - "woman_in_lotus_position_tone3": "🧘🏽‍♀️", - "woman_in_lotus_position_medium_skin_tone": "🧘🏽‍♀️", - "woman_in_lotus_position_tone4": "🧘🏾‍♀️", - "woman_in_lotus_position_medium_dark_skin_tone": "🧘🏾‍♀️", - "woman_in_lotus_position_tone5": "🧘🏿‍♀️", - "woman_in_lotus_position_dark_skin_tone": "🧘🏿‍♀️", - "man_in_lotus_position": "🧘‍♂️", - "man_in_lotus_position_tone1": "🧘🏻‍♂️", - "man_in_lotus_position_light_skin_tone": "🧘🏻‍♂️", - "man_in_lotus_position_tone2": "🧘🏼‍♂️", - "man_in_lotus_position_medium_light_skin_tone": "🧘🏼‍♂️", - "man_in_lotus_position_tone3": "🧘🏽‍♂️", - "man_in_lotus_position_medium_skin_tone": "🧘🏽‍♂️", - "man_in_lotus_position_tone4": "🧘🏾‍♂️", - "man_in_lotus_position_medium_dark_skin_tone": "🧘🏾‍♂️", - "man_in_lotus_position_tone5": "🧘🏿‍♂️", - "man_in_lotus_position_dark_skin_tone": "🧘🏿‍♂️", - "person_surfing": "🏄", - "surfer": "🏄", - "person_surfing_tone1": "🏄🏻", - "surfer_tone1": "🏄🏻", - "person_surfing_tone2": "🏄🏼", - "surfer_tone2": "🏄🏼", - "person_surfing_tone3": "🏄🏽", - "surfer_tone3": "🏄🏽", - "person_surfing_tone4": "🏄🏾", - "surfer_tone4": "🏄🏾", - "person_surfing_tone5": "🏄🏿", - "surfer_tone5": "🏄🏿", - "woman_surfing": "🏄‍♀️", - "woman_surfing_tone1": "🏄🏻‍♀️", - "woman_surfing_light_skin_tone": "🏄🏻‍♀️", - "woman_surfing_tone2": "🏄🏼‍♀️", - "woman_surfing_medium_light_skin_tone": "🏄🏼‍♀️", - "woman_surfing_tone3": "🏄🏽‍♀️", - "woman_surfing_medium_skin_tone": "🏄🏽‍♀️", - "woman_surfing_tone4": "🏄🏾‍♀️", - "woman_surfing_medium_dark_skin_tone": "🏄🏾‍♀️", - "woman_surfing_tone5": "🏄🏿‍♀️", - "woman_surfing_dark_skin_tone": "🏄🏿‍♀️", - "man_surfing": "🏄‍♂️", - "man_surfing_tone1": "🏄🏻‍♂️", - "man_surfing_light_skin_tone": "🏄🏻‍♂️", - "man_surfing_tone2": "🏄🏼‍♂️", - "man_surfing_medium_light_skin_tone": "🏄🏼‍♂️", - "man_surfing_tone3": "🏄🏽‍♂️", - "man_surfing_medium_skin_tone": "🏄🏽‍♂️", - "man_surfing_tone4": "🏄🏾‍♂️", - "man_surfing_medium_dark_skin_tone": "🏄🏾‍♂️", - "man_surfing_tone5": "🏄🏿‍♂️", - "man_surfing_dark_skin_tone": "🏄🏿‍♂️", - "person_swimming": "🏊", - "swimmer": "🏊", - "person_swimming_tone1": "🏊🏻", - "swimmer_tone1": "🏊🏻", - "person_swimming_tone2": "🏊🏼", - "swimmer_tone2": "🏊🏼", - "person_swimming_tone3": "🏊🏽", - "swimmer_tone3": "🏊🏽", - "person_swimming_tone4": "🏊🏾", - "swimmer_tone4": "🏊🏾", - "person_swimming_tone5": "🏊🏿", - "swimmer_tone5": "🏊🏿", - "woman_swimming": "🏊‍♀️", - "woman_swimming_tone1": "🏊🏻‍♀️", - "woman_swimming_light_skin_tone": "🏊🏻‍♀️", - "woman_swimming_tone2": "🏊🏼‍♀️", - "woman_swimming_medium_light_skin_tone": "🏊🏼‍♀️", - "woman_swimming_tone3": "🏊🏽‍♀️", - "woman_swimming_medium_skin_tone": "🏊🏽‍♀️", - "woman_swimming_tone4": "🏊🏾‍♀️", - "woman_swimming_medium_dark_skin_tone": "🏊🏾‍♀️", - "woman_swimming_tone5": "🏊🏿‍♀️", - "woman_swimming_dark_skin_tone": "🏊🏿‍♀️", - "man_swimming": "🏊‍♂️", - "man_swimming_tone1": "🏊🏻‍♂️", - "man_swimming_light_skin_tone": "🏊🏻‍♂️", - "man_swimming_tone2": "🏊🏼‍♂️", - "man_swimming_medium_light_skin_tone": "🏊🏼‍♂️", - "man_swimming_tone3": "🏊🏽‍♂️", - "man_swimming_medium_skin_tone": "🏊🏽‍♂️", - "man_swimming_tone4": "🏊🏾‍♂️", - "man_swimming_medium_dark_skin_tone": "🏊🏾‍♂️", - "man_swimming_tone5": "🏊🏿‍♂️", - "man_swimming_dark_skin_tone": "🏊🏿‍♂️", - "person_playing_water_polo": "🤽", - "water_polo": "🤽", - "person_playing_water_polo_tone1": "🤽🏻", - "water_polo_tone1": "🤽🏻", - "person_playing_water_polo_tone2": "🤽🏼", - "water_polo_tone2": "🤽🏼", - "person_playing_water_polo_tone3": "🤽🏽", - "water_polo_tone3": "🤽🏽", - "person_playing_water_polo_tone4": "🤽🏾", - "water_polo_tone4": "🤽🏾", - "person_playing_water_polo_tone5": "🤽🏿", - "water_polo_tone5": "🤽🏿", - "woman_playing_water_polo": "🤽‍♀️", - "woman_playing_water_polo_tone1": "🤽🏻‍♀️", - "woman_playing_water_polo_light_skin_tone": "🤽🏻‍♀️", - "woman_playing_water_polo_tone2": "🤽🏼‍♀️", - "woman_playing_water_polo_medium_light_skin_tone": "🤽🏼‍♀️", - "woman_playing_water_polo_tone3": "🤽🏽‍♀️", - "woman_playing_water_polo_medium_skin_tone": "🤽🏽‍♀️", - "woman_playing_water_polo_tone4": "🤽🏾‍♀️", - "woman_playing_water_polo_medium_dark_skin_tone": "🤽🏾‍♀️", - "woman_playing_water_polo_tone5": "🤽🏿‍♀️", - "woman_playing_water_polo_dark_skin_tone": "🤽🏿‍♀️", - "man_playing_water_polo": "🤽‍♂️", - "man_playing_water_polo_tone1": "🤽🏻‍♂️", - "man_playing_water_polo_light_skin_tone": "🤽🏻‍♂️", - "man_playing_water_polo_tone2": "🤽🏼‍♂️", - "man_playing_water_polo_medium_light_skin_tone": "🤽🏼‍♂️", - "man_playing_water_polo_tone3": "🤽🏽‍♂️", - "man_playing_water_polo_medium_skin_tone": "🤽🏽‍♂️", - "man_playing_water_polo_tone4": "🤽🏾‍♂️", - "man_playing_water_polo_medium_dark_skin_tone": "🤽🏾‍♂️", - "man_playing_water_polo_tone5": "🤽🏿‍♂️", - "man_playing_water_polo_dark_skin_tone": "🤽🏿‍♂️", - "person_rowing_boat": "🚣", - "rowboat": "🚣", - "person_rowing_boat_tone1": "🚣🏻", - "rowboat_tone1": "🚣🏻", - "person_rowing_boat_tone2": "🚣🏼", - "rowboat_tone2": "🚣🏼", - "person_rowing_boat_tone3": "🚣🏽", - "rowboat_tone3": "🚣🏽", - "person_rowing_boat_tone4": "🚣🏾", - "rowboat_tone4": "🚣🏾", - "person_rowing_boat_tone5": "🚣🏿", - "rowboat_tone5": "🚣🏿", - "woman_rowing_boat": "🚣‍♀️", - "woman_rowing_boat_tone1": "🚣🏻‍♀️", - "woman_rowing_boat_light_skin_tone": "🚣🏻‍♀️", - "woman_rowing_boat_tone2": "🚣🏼‍♀️", - "woman_rowing_boat_medium_light_skin_tone": "🚣🏼‍♀️", - "woman_rowing_boat_tone3": "🚣🏽‍♀️", - "woman_rowing_boat_medium_skin_tone": "🚣🏽‍♀️", - "woman_rowing_boat_tone4": "🚣🏾‍♀️", - "woman_rowing_boat_medium_dark_skin_tone": "🚣🏾‍♀️", - "woman_rowing_boat_tone5": "🚣🏿‍♀️", - "woman_rowing_boat_dark_skin_tone": "🚣🏿‍♀️", - "man_rowing_boat": "🚣‍♂️", - "man_rowing_boat_tone1": "🚣🏻‍♂️", - "man_rowing_boat_light_skin_tone": "🚣🏻‍♂️", - "man_rowing_boat_tone2": "🚣🏼‍♂️", - "man_rowing_boat_medium_light_skin_tone": "🚣🏼‍♂️", - "man_rowing_boat_tone3": "🚣🏽‍♂️", - "man_rowing_boat_medium_skin_tone": "🚣🏽‍♂️", - "man_rowing_boat_tone4": "🚣🏾‍♂️", - "man_rowing_boat_medium_dark_skin_tone": "🚣🏾‍♂️", - "man_rowing_boat_tone5": "🚣🏿‍♂️", - "man_rowing_boat_dark_skin_tone": "🚣🏿‍♂️", - "person_climbing": "🧗", - "person_climbing_tone1": "🧗🏻", - "person_climbing_light_skin_tone": "🧗🏻", - "person_climbing_tone2": "🧗🏼", - "person_climbing_medium_light_skin_tone": "🧗🏼", - "person_climbing_tone3": "🧗🏽", - "person_climbing_medium_skin_tone": "🧗🏽", - "person_climbing_tone4": "🧗🏾", - "person_climbing_medium_dark_skin_tone": "🧗🏾", - "person_climbing_tone5": "🧗🏿", - "person_climbing_dark_skin_tone": "🧗🏿", - "woman_climbing": "🧗‍♀️", - "woman_climbing_tone1": "🧗🏻‍♀️", - "woman_climbing_light_skin_tone": "🧗🏻‍♀️", - "woman_climbing_tone2": "🧗🏼‍♀️", - "woman_climbing_medium_light_skin_tone": "🧗🏼‍♀️", - "woman_climbing_tone3": "🧗🏽‍♀️", - "woman_climbing_medium_skin_tone": "🧗🏽‍♀️", - "woman_climbing_tone4": "🧗🏾‍♀️", - "woman_climbing_medium_dark_skin_tone": "🧗🏾‍♀️", - "woman_climbing_tone5": "🧗🏿‍♀️", - "woman_climbing_dark_skin_tone": "🧗🏿‍♀️", - "man_climbing": "🧗‍♂️", - "man_climbing_tone1": "🧗🏻‍♂️", - "man_climbing_light_skin_tone": "🧗🏻‍♂️", - "man_climbing_tone2": "🧗🏼‍♂️", - "man_climbing_medium_light_skin_tone": "🧗🏼‍♂️", - "man_climbing_tone3": "🧗🏽‍♂️", - "man_climbing_medium_skin_tone": "🧗🏽‍♂️", - "man_climbing_tone4": "🧗🏾‍♂️", - "man_climbing_medium_dark_skin_tone": "🧗🏾‍♂️", - "man_climbing_tone5": "🧗🏿‍♂️", - "man_climbing_dark_skin_tone": "🧗🏿‍♂️", - "person_mountain_biking": "🚵", - "mountain_bicyclist": "🚵", - "person_mountain_biking_tone1": "🚵🏻", - "mountain_bicyclist_tone1": "🚵🏻", - "person_mountain_biking_tone2": "🚵🏼", - "mountain_bicyclist_tone2": "🚵🏼", - "person_mountain_biking_tone3": "🚵🏽", - "mountain_bicyclist_tone3": "🚵🏽", - "person_mountain_biking_tone4": "🚵🏾", - "mountain_bicyclist_tone4": "🚵🏾", - "person_mountain_biking_tone5": "🚵🏿", - "mountain_bicyclist_tone5": "🚵🏿", - "woman_mountain_biking": "🚵‍♀️", - "woman_mountain_biking_tone1": "🚵🏻‍♀️", - "woman_mountain_biking_light_skin_tone": "🚵🏻‍♀️", - "woman_mountain_biking_tone2": "🚵🏼‍♀️", - "woman_mountain_biking_medium_light_skin_tone": "🚵🏼‍♀️", - "woman_mountain_biking_tone3": "🚵🏽‍♀️", - "woman_mountain_biking_medium_skin_tone": "🚵🏽‍♀️", - "woman_mountain_biking_tone4": "🚵🏾‍♀️", - "woman_mountain_biking_medium_dark_skin_tone": "🚵🏾‍♀️", - "woman_mountain_biking_tone5": "🚵🏿‍♀️", - "woman_mountain_biking_dark_skin_tone": "🚵🏿‍♀️", - "man_mountain_biking": "🚵‍♂️", - "man_mountain_biking_tone1": "🚵🏻‍♂️", - "man_mountain_biking_light_skin_tone": "🚵🏻‍♂️", - "man_mountain_biking_tone2": "🚵🏼‍♂️", - "man_mountain_biking_medium_light_skin_tone": "🚵🏼‍♂️", - "man_mountain_biking_tone3": "🚵🏽‍♂️", - "man_mountain_biking_medium_skin_tone": "🚵🏽‍♂️", - "man_mountain_biking_tone4": "🚵🏾‍♂️", - "man_mountain_biking_medium_dark_skin_tone": "🚵🏾‍♂️", - "man_mountain_biking_tone5": "🚵🏿‍♂️", - "man_mountain_biking_dark_skin_tone": "🚵🏿‍♂️", - "person_biking": "🚴", - "bicyclist": "🚴", - "person_biking_tone1": "🚴🏻", - "bicyclist_tone1": "🚴🏻", - "person_biking_tone2": "🚴🏼", - "bicyclist_tone2": "🚴🏼", - "person_biking_tone3": "🚴🏽", - "bicyclist_tone3": "🚴🏽", - "person_biking_tone4": "🚴🏾", - "bicyclist_tone4": "🚴🏾", - "person_biking_tone5": "🚴🏿", - "bicyclist_tone5": "🚴🏿", - "woman_biking": "🚴‍♀️", - "woman_biking_tone1": "🚴🏻‍♀️", - "woman_biking_light_skin_tone": "🚴🏻‍♀️", - "woman_biking_tone2": "🚴🏼‍♀️", - "woman_biking_medium_light_skin_tone": "🚴🏼‍♀️", - "woman_biking_tone3": "🚴🏽‍♀️", - "woman_biking_medium_skin_tone": "🚴🏽‍♀️", - "woman_biking_tone4": "🚴🏾‍♀️", - "woman_biking_medium_dark_skin_tone": "🚴🏾‍♀️", - "woman_biking_tone5": "🚴🏿‍♀️", - "woman_biking_dark_skin_tone": "🚴🏿‍♀️", - "man_biking": "🚴‍♂️", - "man_biking_tone1": "🚴🏻‍♂️", - "man_biking_light_skin_tone": "🚴🏻‍♂️", - "man_biking_tone2": "🚴🏼‍♂️", - "man_biking_medium_light_skin_tone": "🚴🏼‍♂️", - "man_biking_tone3": "🚴🏽‍♂️", - "man_biking_medium_skin_tone": "🚴🏽‍♂️", - "man_biking_tone4": "🚴🏾‍♂️", - "man_biking_medium_dark_skin_tone": "🚴🏾‍♂️", - "man_biking_tone5": "🚴🏿‍♂️", - "man_biking_dark_skin_tone": "🚴🏿‍♂️", - "trophy": "🏆", - "first_place": "🥇", - "first_place_medal": "🥇", - "second_place": "🥈", - "second_place_medal": "🥈", - "third_place": "🥉", - "third_place_medal": "🥉", - "medal": "🏅", - "sports_medal": "🏅", - "military_medal": "🎖️", - "rosette": "🏵️", - "reminder_ribbon": "🎗️", - "ticket": "🎫", - "tickets": "🎟️", - "admission_tickets": "🎟️", - "circus_tent": "🎪", - "person_juggling": "🤹", - "juggling": "🤹", - "juggler": "🤹", - "person_juggling_tone1": "🤹🏻", - "juggling_tone1": "🤹🏻", - "juggler_tone1": "🤹🏻", - "person_juggling_tone2": "🤹🏼", - "juggling_tone2": "🤹🏼", - "juggler_tone2": "🤹🏼", - "person_juggling_tone3": "🤹🏽", - "juggling_tone3": "🤹🏽", - "juggler_tone3": "🤹🏽", - "person_juggling_tone4": "🤹🏾", - "juggling_tone4": "🤹🏾", - "juggler_tone4": "🤹🏾", - "person_juggling_tone5": "🤹🏿", - "juggling_tone5": "🤹🏿", - "juggler_tone5": "🤹🏿", - "woman_juggling": "🤹‍♀️", - "woman_juggling_tone1": "🤹🏻‍♀️", - "woman_juggling_light_skin_tone": "🤹🏻‍♀️", - "woman_juggling_tone2": "🤹🏼‍♀️", - "woman_juggling_medium_light_skin_tone": "🤹🏼‍♀️", - "woman_juggling_tone3": "🤹🏽‍♀️", - "woman_juggling_medium_skin_tone": "🤹🏽‍♀️", - "woman_juggling_tone4": "🤹🏾‍♀️", - "woman_juggling_medium_dark_skin_tone": "🤹🏾‍♀️", - "woman_juggling_tone5": "🤹🏿‍♀️", - "woman_juggling_dark_skin_tone": "🤹🏿‍♀️", - "man_juggling": "🤹‍♂️", - "man_juggling_tone1": "🤹🏻‍♂️", - "man_juggling_light_skin_tone": "🤹🏻‍♂️", - "man_juggling_tone2": "🤹🏼‍♂️", - "man_juggling_medium_light_skin_tone": "🤹🏼‍♂️", - "man_juggling_tone3": "🤹🏽‍♂️", - "man_juggling_medium_skin_tone": "🤹🏽‍♂️", - "man_juggling_tone4": "🤹🏾‍♂️", - "man_juggling_medium_dark_skin_tone": "🤹🏾‍♂️", - "man_juggling_tone5": "🤹🏿‍♂️", - "man_juggling_dark_skin_tone": "🤹🏿‍♂️", - "performing_arts": "🎭", - "ballet_shoes": "🩰", - "art": "🎨", - "clapper": "🎬", - "microphone": "🎤", - "headphones": "🎧", - "musical_score": "🎼", - "musical_keyboard": "🎹", - "drum": "🥁", - "drum_with_drumsticks": "🥁", - "long_drum": "🪘", - "saxophone": "🎷", - "trumpet": "🎺", - "guitar": "🎸", - "banjo": "🪕", - "violin": "🎻", - "accordion": "🪗", - "game_die": "🎲", - "chess_pawn": "♟️", - "dart": "🎯", - "bowling": "🎳", - "video_game": "🎮", - "slot_machine": "🎰", - "jigsaw": "🧩" - }, - "travel": { - "red_car": "🚗", - "taxi": "🚕", - "blue_car": "🚙", - "pickup_truck": "🛻", - "bus": "🚌", - "trolleybus": "🚎", - "race_car": "🏎️", - "racing_car": "🏎️", - "police_car": "🚓", - "ambulance": "🚑", - "fire_engine": "🚒", - "minibus": "🚐", - "truck": "🚚", - "articulated_lorry": "🚛", - "tractor": "🚜", - "probing_cane": "🦯", - "manual_wheelchair": "🦽", - "motorized_wheelchair": "🦼", - "scooter": "🛴", - "bike": "🚲", - "motor_scooter": "🛵", - "motorbike": "🛵", - "motorcycle": "🏍️", - "racing_motorcycle": "🏍️", - "auto_rickshaw": "🛺", - "rotating_light": "🚨", - "oncoming_police_car": "🚔", - "oncoming_bus": "🚍", - "oncoming_automobile": "🚘", - "oncoming_taxi": "🚖", - "aerial_tramway": "🚡", - "mountain_cableway": "🚠", - "suspension_railway": "🚟", - "railway_car": "🚃", - "train": "🚋", - "mountain_railway": "🚞", - "monorail": "🚝", - "bullettrain_side": "🚄", - "bullettrain_front": "🚅", - "light_rail": "🚈", - "steam_locomotive": "🚂", - "train2": "🚆", - "metro": "🚇", - "tram": "🚊", - "station": "🚉", - "airplane": "✈️", - "airplane_departure": "🛫", - "airplane_arriving": "🛬", - "airplane_small": "🛩️", - "small_airplane": "🛩️", - "seat": "💺", - "satellite_orbital": "🛰️", - "rocket": "🚀", - "flying_saucer": "🛸", - "helicopter": "🚁", - "canoe": "🛶", - "kayak": "🛶", - "sailboat": "⛵", - "speedboat": "🚤", - "motorboat": "🛥️", - "cruise_ship": "🛳️", - "passenger_ship": "🛳️", - "ferry": "⛴️", - "ship": "🚢", - "anchor": "⚓", - "fuelpump": "⛽", - "construction": "🚧", - "vertical_traffic_light": "🚦", - "traffic_light": "🚥", - "busstop": "🚏", - "map": "🗺️", - "world_map": "🗺️", - "moyai": "🗿", - "statue_of_liberty": "🗽", - "tokyo_tower": "🗼", - "european_castle": "🏰", - "japanese_castle": "🏯", - "stadium": "🏟️", - "ferris_wheel": "🎡", - "roller_coaster": "🎢", - "carousel_horse": "🎠", - "fountain": "⛲", - "beach_umbrella": "⛱️", - "umbrella_on_ground": "⛱️", - "beach": "🏖️", - "beach_with_umbrella": "🏖️", - "island": "🏝️", - "desert_island": "🏝️", - "desert": "🏜️", - "volcano": "🌋", - "mountain": "⛰️", - "mountain_snow": "🏔️", - "snow_capped_mountain": "🏔️", - "mount_fuji": "🗻", - "camping": "🏕️", - "tent": "⛺", - "house": "🏠", - "house_with_garden": "🏡", - "homes": "🏘️", - "house_buildings": "🏘️", - "house_abandoned": "🏚️", - "derelict_house_building": "🏚️", - "hut": "🛖", - "construction_site": "🏗️", - "building_construction": "🏗️", - "factory": "🏭", - "office": "🏢", - "department_store": "🏬", - "post_office": "🏣", - "european_post_office": "🏤", - "hospital": "🏥", - "bank": "🏦", - "hotel": "🏨", - "convenience_store": "🏪", - "school": "🏫", - "love_hotel": "🏩", - "wedding": "💒", - "classical_building": "🏛️", - "church": "⛪", - "mosque": "🕌", - "synagogue": "🕍", - "hindu_temple": "🛕", - "kaaba": "🕋", - "shinto_shrine": "⛩️", - "railway_track": "🛤️", - "railroad_track": "🛤️", - "motorway": "🛣️", - "japan": "🗾", - "rice_scene": "🎑", - "park": "🏞️", - "national_park": "🏞️", - "sunrise": "🌅", - "sunrise_over_mountains": "🌄", - "stars": "🌠", - "sparkler": "🎇", - "fireworks": "🎆", - "city_sunset": "🌇", - "city_sunrise": "🌇", - "city_dusk": "🌆", - "cityscape": "🏙️", - "night_with_stars": "🌃", - "milky_way": "🌌", - "bridge_at_night": "🌉", - "foggy": "🌁" - }, - "objects": { - "watch": "⌚", - "mobile_phone": "📱", - "iphone": "📱", - "calling": "📲", - "computer": "💻", - "keyboard": "⌨️", - "desktop": "🖥️", - "desktop_computer": "🖥️", - "printer": "🖨️", - "mouse_three_button": "🖱️", - "three_button_mouse": "🖱️", - "trackball": "🖲️", - "joystick": "🕹️", - "compression": "🗜️", - "minidisc": "💽", - "floppy_disk": "💾", - "cd": "💿", - "dvd": "📀", - "vhs": "📼", - "camera": "📷", - "camera_with_flash": "📸", - "video_camera": "📹", - "movie_camera": "🎥", - "projector": "📽️", - "film_projector": "📽️", - "film_frames": "🎞️", - "telephone_receiver": "📞", - "telephone": "☎️", - "pager": "📟", - "fax": "📠", - "tv": "📺", - "radio": "📻", - "microphone2": "🎙️", - "studio_microphone": "🎙️", - "level_slider": "🎚️", - "control_knobs": "🎛️", - "compass": "🧭", - "stopwatch": "⏱️", - "timer": "⏲️", - "timer_clock": "⏲️", - "alarm_clock": "⏰", - "clock": "🕰️", - "mantlepiece_clock": "🕰️", - "hourglass": "⌛", - "hourglass_flowing_sand": "⏳", - "satellite": "📡", - "battery": "🔋", - "electric_plug": "🔌", - "bulb": "💡", - "flashlight": "🔦", - "candle": "🕯️", - "diya_lamp": "🪔", - "fire_extinguisher": "🧯", - "oil": "🛢️", - "oil_drum": "🛢️", - "money_with_wings": "💸", - "dollar": "💵", - "yen": "💴", - "euro": "💶", - "pound": "💷", - "coin": "🪙", - "moneybag": "💰", - "credit_card": "💳", - "gem": "💎", - "scales": "⚖️", - "ladder": "🪜", - "toolbox": "🧰", - "screwdriver": "🪛", - "wrench": "🔧", - "hammer": "🔨", - "hammer_pick": "⚒️", - "hammer_and_pick": "⚒️", - "tools": "🛠️", - "hammer_and_wrench": "🛠️", - "pick": "⛏️", - "nut_and_bolt": "🔩", - "gear": "⚙️", - "bricks": "🧱", - "chains": "⛓️", - "hook": "🪝", - "knot": "🪢", - "magnet": "🧲", - "gun": "🔫", - "bomb": "💣", - "firecracker": "🧨", - "axe": "🪓", - "carpentry_saw": "🪚", - "knife": "🔪", - "dagger": "🗡️", - "dagger_knife": "🗡️", - "crossed_swords": "⚔️", - "shield": "🛡️", - "smoking": "🚬", - "coffin": "⚰️", - "headstone": "🪦", - "urn": "⚱️", - "funeral_urn": "⚱️", - "amphora": "🏺", - "magic_wand": "🪄", - "crystal_ball": "🔮", - "prayer_beads": "📿", - "nazar_amulet": "🧿", - "barber": "💈", - "alembic": "⚗️", - "telescope": "🔭", - "microscope": "🔬", - "hole": "🕳️", - "window": "🪟", - "adhesive_bandage": "🩹", - "stethoscope": "🩺", - "pill": "💊", - "syringe": "💉", - "drop_of_blood": "🩸", - "dna": "🧬", - "microbe": "🦠", - "petri_dish": "🧫", - "test_tube": "🧪", - "thermometer": "🌡️", - "mouse_trap": "🪤", - "broom": "🧹", - "basket": "🧺", - "sewing_needle": "🪡", - "roll_of_paper": "🧻", - "toilet": "🚽", - "plunger": "🪠", - "bucket": "🪣", - "potable_water": "🚰", - "shower": "🚿", - "bathtub": "🛁", - "bath": "🛀", - "bath_tone1": "🛀🏻", - "bath_tone2": "🛀🏼", - "bath_tone3": "🛀🏽", - "bath_tone4": "🛀🏾", - "bath_tone5": "🛀🏿", - "toothbrush": "🪥", - "soap": "🧼", - "razor": "🪒", - "sponge": "🧽", - "squeeze_bottle": "🧴", - "bellhop": "🛎️", - "bellhop_bell": "🛎️", - "key": "🔑", - "key2": "🗝️", - "old_key": "🗝️", - "door": "🚪", - "chair": "🪑", - "mirror": "🪞", - "couch": "🛋️", - "couch_and_lamp": "🛋️", - "bed": "🛏️", - "sleeping_accommodation": "🛌", - "person_in_bed_tone1": "🛌🏻", - "person_in_bed_light_skin_tone": "🛌🏻", - "person_in_bed_tone2": "🛌🏼", - "person_in_bed_medium_light_skin_tone": "🛌🏼", - "person_in_bed_tone3": "🛌🏽", - "person_in_bed_medium_skin_tone": "🛌🏽", - "person_in_bed_tone4": "🛌🏾", - "person_in_bed_medium_dark_skin_tone": "🛌🏾", - "person_in_bed_tone5": "🛌🏿", - "person_in_bed_dark_skin_tone": "🛌🏿", - "teddy_bear": "🧸", - "frame_photo": "🖼️", - "frame_with_picture": "🖼️", - "shopping_bags": "🛍️", - "shopping_cart": "🛒", - "shopping_trolley": "🛒", - "gift": "🎁", - "balloon": "🎈", - "flags": "🎏", - "ribbon": "🎀", - "confetti_ball": "🎊", - "tada": "🎉", - "piñata": "🪅", - "nesting_dolls": "🪆", - "dolls": "🎎", - "izakaya_lantern": "🏮", - "wind_chime": "🎐", - "red_envelope": "🧧", - "envelope": "✉️", - "envelope_with_arrow": "📩", - "incoming_envelope": "📨", - "e_mail": "📧", - "email": "📧", - "love_letter": "💌", - "inbox_tray": "📥", - "outbox_tray": "📤", - "package": "📦", - "label": "🏷️", - "mailbox_closed": "📪", - "mailbox": "📫", - "mailbox_with_mail": "📬", - "mailbox_with_no_mail": "📭", - "postbox": "📮", - "postal_horn": "📯", - "placard": "🪧", - "scroll": "📜", - "page_with_curl": "📃", - "page_facing_up": "📄", - "bookmark_tabs": "📑", - "receipt": "🧾", - "bar_chart": "📊", - "chart_with_upwards_trend": "📈", - "chart_with_downwards_trend": "📉", - "notepad_spiral": "🗒️", - "spiral_note_pad": "🗒️", - "calendar_spiral": "🗓️", - "spiral_calendar_pad": "🗓️", - "calendar": "📆", - "date": "📅", - "wastebasket": "🗑️", - "card_index": "📇", - "card_box": "🗃️", - "card_file_box": "🗃️", - "ballot_box": "🗳️", - "ballot_box_with_ballot": "🗳️", - "file_cabinet": "🗄️", - "clipboard": "📋", - "file_folder": "📁", - "open_file_folder": "📂", - "dividers": "🗂️", - "card_index_dividers": "🗂️", - "newspaper2": "🗞️", - "rolled_up_newspaper": "🗞️", - "newspaper": "📰", - "notebook": "📓", - "notebook_with_decorative_cover": "📔", - "ledger": "📒", - "closed_book": "📕", - "green_book": "📗", - "blue_book": "📘", - "orange_book": "📙", - "books": "📚", - "book": "📖", - "bookmark": "🔖", - "safety_pin": "🧷", - "link": "🔗", - "paperclip": "📎", - "paperclips": "🖇️", - "linked_paperclips": "🖇️", - "triangular_ruler": "📐", - "straight_ruler": "📏", - "abacus": "🧮", - "pushpin": "📌", - "round_pushpin": "📍", - "scissors": "✂️", - "pen_ballpoint": "🖊️", - "lower_left_ballpoint_pen": "🖊️", - "pen_fountain": "🖋️", - "lower_left_fountain_pen": "🖋️", - "black_nib": "✒️", - "paintbrush": "🖌️", - "lower_left_paintbrush": "🖌️", - "crayon": "🖍️", - "lower_left_crayon": "🖍️", - "pencil": "📝", - "memo": "📝", - "pencil2": "✏️", - "mag": "🔍", - "mag_right": "🔎", - "lock_with_ink_pen": "🔏", - "closed_lock_with_key": "🔐", - "lock": "🔒", - "unlock": "🔓" - }, - "symbols": { - "100": "💯", - "1234": "🔢", - "heart": "❤️", - "orange_heart": "🧡", - "yellow_heart": "💛", - "green_heart": "💚", - "blue_heart": "💙", - "purple_heart": "💜", - "black_heart": "🖤", - "brown_heart": "🤎", - "white_heart": "🤍", - "broken_heart": "💔", - "heart_exclamation": "❣️", - "heavy_heart_exclamation_mark_ornament": "❣️", - "two_hearts": "💕", - "revolving_hearts": "💞", - "heartbeat": "💓", - "heartpulse": "💗", - "sparkling_heart": "💖", - "cupid": "💘", - "gift_heart": "💝", - "mending_heart": "❤️‍🩹", - "heart_on_fire": "❤️‍🔥", - "heart_decoration": "💟", - "peace": "☮️", - "peace_symbol": "☮️", - "cross": "✝️", - "latin_cross": "✝️", - "star_and_crescent": "☪️", - "om_symbol": "🕉️", - "wheel_of_dharma": "☸️", - "star_of_david": "✡️", - "six_pointed_star": "🔯", - "menorah": "🕎", - "yin_yang": "☯️", - "orthodox_cross": "☦️", - "place_of_worship": "🛐", - "worship_symbol": "🛐", - "ophiuchus": "⛎", - "aries": "♈", - "taurus": "♉", - "gemini": "♊", - "cancer": "♋", - "leo": "♌", - "virgo": "♍", - "libra": "♎", - "scorpius": "♏", - "sagittarius": "♐", - "capricorn": "♑", - "aquarius": "♒", - "pisces": "♓", - "id": "🆔", - "atom": "⚛️", - "atom_symbol": "⚛️", - "accept": "🉑", - "radioactive": "☢️", - "radioactive_sign": "☢️", - "biohazard": "☣️", - "biohazard_sign": "☣️", - "mobile_phone_off": "📴", - "vibration_mode": "📳", - "u6709": "🈶", - "u7121": "🈚", - "u7533": "🈸", - "u55b6": "🈺", - "u6708": "🈷️", - "eight_pointed_black_star": "✴️", - "vs": "🆚", - "white_flower": "💮", - "ideograph_advantage": "🉐", - "secret": "㊙️", - "congratulations": "㊗️", - "u5408": "🈴", - "u6e80": "🈵", - "u5272": "🈹", - "u7981": "🈲", - "a": "🅰️", - "b": "🅱️", - "ab": "🆎", - "cl": "🆑", - "o2": "🅾️", - "sos": "🆘", - "x": "❌", - "o": "⭕", - "octagonal_sign": "🛑", - "stop_sign": "🛑", - "no_entry": "⛔", - "name_badge": "📛", - "no_entry_sign": "🚫", - "anger": "💢", - "hotsprings": "♨️", - "no_pedestrians": "🚷", - "do_not_litter": "🚯", - "no_bicycles": "🚳", - "non_potable_water": "🚱", - "underage": "🔞", - "no_mobile_phones": "📵", - "no_smoking": "🚭", - "exclamation": "❗", - "grey_exclamation": "❕", - "question": "❓", - "grey_question": "❔", - "bangbang": "‼️", - "interrobang": "⁉️", - "low_brightness": "🔅", - "high_brightness": "🔆", - "part_alternation_mark": "〽️", - "warning": "⚠️", - "children_crossing": "🚸", - "trident": "🔱", - "fleur_de_lis": "⚜️", - "beginner": "🔰", - "recycle": "♻️", - "white_check_mark": "✅", - "u6307": "🈯", - "chart": "💹", - "sparkle": "❇️", - "eight_spoked_asterisk": "✳️", - "negative_squared_cross_mark": "❎", - "globe_with_meridians": "🌐", - "diamond_shape_with_a_dot_inside": "💠", - "m": "Ⓜ️", - "cyclone": "🌀", - "zzz": "💤", - "atm": "🏧", - "wc": "🚾", - "wheelchair": "♿", - "parking": "🅿️", - "u7a7a": "🈳", - "sa": "🈂️", - "passport_control": "🛂", - "customs": "🛃", - "baggage_claim": "🛄", - "left_luggage": "🛅", - "elevator": "🛗", - "mens": "🚹", - "womens": "🚺", - "baby_symbol": "🚼", - "restroom": "🚻", - "put_litter_in_its_place": "🚮", - "cinema": "🎦", - "signal_strength": "📶", - "koko": "🈁", - "symbols": "🔣", - "information_source": "ℹ️", - "abc": "🔤", - "abcd": "🔡", - "capital_abcd": "🔠", - "ng": "🆖", - "ok": "🆗", - "up": "🆙", - "cool": "🆒", - "new": "🆕", - "free": "🆓", - "zero": "0️⃣", - "one": "1️⃣", - "two": "2️⃣", - "three": "3️⃣", - "four": "4️⃣", - "five": "5️⃣", - "six": "6️⃣", - "seven": "7️⃣", - "eight": "8️⃣", - "nine": "9️⃣", - "keycap_ten": "🔟", - "hash": "#️⃣", - "asterisk": "*️⃣", - "keycap_asterisk": "*️⃣", - "eject": "⏏️", - "eject_symbol": "⏏️", - "arrow_forward": "▶️", - "pause_button": "⏸️", - "double_vertical_bar": "⏸️", - "play_pause": "⏯️", - "stop_button": "⏹️", - "record_button": "⏺️", - "track_next": "⏭️", - "next_track": "⏭️", - "track_previous": "⏮️", - "previous_track": "⏮️", - "fast_forward": "⏩", - "rewind": "⏪", - "arrow_double_up": "⏫", - "arrow_double_down": "⏬", - "arrow_backward": "◀️", - "arrow_up_small": "🔼", - "arrow_down_small": "🔽", - "arrow_right": "➡️", - "arrow_left": "⬅️", - "arrow_up": "⬆️", - "arrow_down": "⬇️", - "arrow_upper_right": "↗️", - "arrow_lower_right": "↘️", - "arrow_lower_left": "↙️", - "arrow_upper_left": "↖️", - "arrow_up_down": "↕️", - "left_right_arrow": "↔️", - "arrow_right_hook": "↪️", - "leftwards_arrow_with_hook": "↩️", - "arrow_heading_up": "⤴️", - "arrow_heading_down": "⤵️", - "twisted_rightwards_arrows": "🔀", - "repeat": "🔁", - "repeat_one": "🔂", - "arrows_counterclockwise": "🔄", - "arrows_clockwise": "🔃", - "musical_note": "🎵", - "notes": "🎶", - "heavy_plus_sign": "➕", - "heavy_minus_sign": "➖", - "heavy_division_sign": "➗", - "heavy_multiplication_x": "✖️", - "infinity": "♾️", - "heavy_dollar_sign": "💲", - "currency_exchange": "💱", - "tm": "™️", - "copyright": "©️", - "registered": "®️", - "wavy_dash": "〰️", - "curly_loop": "➰", - "loop": "➿", - "end": "🔚", - "back": "🔙", - "on": "🔛", - "top": "🔝", - "soon": "🔜", - "heavy_check_mark": "✔️", - "ballot_box_with_check": "☑️", - "radio_button": "🔘", - "white_circle": "⚪", - "black_circle": "⚫", - "red_circle": "🔴", - "blue_circle": "🔵", - "brown_circle": "🟤", - "purple_circle": "🟣", - "green_circle": "🟢", - "yellow_circle": "🟡", - "orange_circle": "🟠", - "small_red_triangle": "🔺", - "small_red_triangle_down": "🔻", - "small_orange_diamond": "🔸", - "small_blue_diamond": "🔹", - "large_orange_diamond": "🔶", - "large_blue_diamond": "🔷", - "white_square_button": "🔳", - "black_square_button": "🔲", - "black_small_square": "▪️", - "white_small_square": "▫️", - "black_medium_small_square": "◾", - "white_medium_small_square": "◽", - "black_medium_square": "◼️", - "white_medium_square": "◻️", - "black_large_square": "⬛", - "white_large_square": "⬜", - "orange_square": "🟧", - "blue_square": "🟦", - "red_square": "🟥", - "brown_square": "🟫", - "purple_square": "🟪", - "green_square": "🟩", - "yellow_square": "🟨", - "speaker": "🔈", - "mute": "🔇", - "sound": "🔉", - "loud_sound": "🔊", - "bell": "🔔", - "no_bell": "🔕", - "mega": "📣", - "loudspeaker": "📢", - "speech_left": "🗨️", - "left_speech_bubble": "🗨️", - "eye_in_speech_bubble": "👁‍🗨", - "speech_balloon": "💬", - "thought_balloon": "💭", - "anger_right": "🗯️", - "right_anger_bubble": "🗯️", - "spades": "♠️", - "clubs": "♣️", - "hearts": "♥️", - "diamonds": "♦️", - "black_joker": "🃏", - "flower_playing_cards": "🎴", - "mahjong": "🀄", - "clock1": "🕐", - "clock2": "🕑", - "clock3": "🕒", - "clock4": "🕓", - "clock5": "🕔", - "clock6": "🕕", - "clock7": "🕖", - "clock8": "🕗", - "clock9": "🕘", - "clock10": "🕙", - "clock11": "🕚", - "clock12": "🕛", - "clock130": "🕜", - "clock230": "🕝", - "clock330": "🕞", - "clock430": "🕟", - "clock530": "🕠", - "clock630": "🕡", - "clock730": "🕢", - "clock830": "🕣", - "clock930": "🕤", - "clock1030": "🕥", - "clock1130": "🕦", - "clock1230": "🕧", - "female_sign": "♀️", - "male_sign": "♂️", - "transgender_symbol": "⚧", - "medical_symbol": "⚕️", - "regional_indicator_z": "🇿", - "regional_indicator_y": "🇾", - "regional_indicator_x": "🇽", - "regional_indicator_w": "🇼", - "regional_indicator_v": "🇻", - "regional_indicator_u": "🇺", - "regional_indicator_t": "🇹", - "regional_indicator_s": "🇸", - "regional_indicator_r": "🇷", - "regional_indicator_q": "🇶", - "regional_indicator_p": "🇵", - "regional_indicator_o": "🇴", - "regional_indicator_n": "🇳", - "regional_indicator_m": "🇲", - "regional_indicator_l": "🇱", - "regional_indicator_k": "🇰", - "regional_indicator_j": "🇯", - "regional_indicator_i": "🇮", - "regional_indicator_h": "🇭", - "regional_indicator_g": "🇬", - "regional_indicator_f": "🇫", - "regional_indicator_e": "🇪", - "regional_indicator_d": "🇩", - "regional_indicator_c": "🇨", - "regional_indicator_b": "🇧", - "regional_indicator_a": "🇦" - }, - "flags": { - "flag_white": "🏳️", - "flag_black": "🏴", - "checkered_flag": "🏁", - "triangular_flag_on_post": "🚩", - "rainbow_flag": "🏳️‍🌈", - "gay_pride_flag": "🏳️‍🌈", - "transgender_flag": "🏳️‍⚧️", - "pirate_flag": "🏴‍☠️", - "flag_af": "🇦🇫", - "flag_ax": "🇦🇽", - "flag_al": "🇦🇱", - "flag_dz": "🇩🇿", - "flag_as": "🇦🇸", - "flag_ad": "🇦🇩", - "flag_ao": "🇦🇴", - "flag_ai": "🇦🇮", - "flag_aq": "🇦🇶", - "flag_ag": "🇦🇬", - "flag_ar": "🇦🇷", - "flag_am": "🇦🇲", - "flag_aw": "🇦🇼", - "flag_au": "🇦🇺", - "flag_at": "🇦🇹", - "flag_az": "🇦🇿", - "flag_bs": "🇧🇸", - "flag_bh": "🇧🇭", - "flag_bd": "🇧🇩", - "flag_bb": "🇧🇧", - "flag_by": "🇧🇾", - "flag_be": "🇧🇪", - "flag_bz": "🇧🇿", - "flag_bj": "🇧🇯", - "flag_bm": "🇧🇲", - "flag_bt": "🇧🇹", - "flag_bo": "🇧🇴", - "flag_ba": "🇧🇦", - "flag_bw": "🇧🇼", - "flag_br": "🇧🇷", - "flag_io": "🇮🇴", - "flag_vg": "🇻🇬", - "flag_bn": "🇧🇳", - "flag_bg": "🇧🇬", - "flag_bf": "🇧🇫", - "flag_bi": "🇧🇮", - "flag_kh": "🇰🇭", - "flag_cm": "🇨🇲", - "flag_ca": "🇨🇦", - "flag_ic": "🇮🇨", - "flag_cv": "🇨🇻", - "flag_bq": "🇧🇶", - "flag_ky": "🇰🇾", - "flag_cf": "🇨🇫", - "flag_td": "🇹🇩", - "flag_cl": "🇨🇱", - "flag_cn": "🇨🇳", - "flag_cx": "🇨🇽", - "flag_cc": "🇨🇨", - "flag_co": "🇨🇴", - "flag_km": "🇰🇲", - "flag_cg": "🇨🇬", - "flag_cd": "🇨🇩", - "flag_ck": "🇨🇰", - "flag_cr": "🇨🇷", - "flag_ci": "🇨🇮", - "flag_hr": "🇭🇷", - "flag_cu": "🇨🇺", - "flag_cw": "🇨🇼", - "flag_cy": "🇨🇾", - "flag_cz": "🇨🇿", - "flag_dk": "🇩🇰", - "flag_dj": "🇩🇯", - "flag_dm": "🇩🇲", - "flag_do": "🇩🇴", - "flag_ec": "🇪🇨", - "flag_eg": "🇪🇬", - "flag_sv": "🇸🇻", - "flag_gq": "🇬🇶", - "flag_er": "🇪🇷", - "flag_ee": "🇪🇪", - "flag_et": "🇪🇹", - "flag_eu": "🇪🇺", - "flag_fk": "🇫🇰", - "flag_fo": "🇫🇴", - "flag_fj": "🇫🇯", - "flag_fi": "🇫🇮", - "flag_fr": "🇫🇷", - "flag_gf": "🇬🇫", - "flag_pf": "🇵🇫", - "flag_tf": "🇹🇫", - "flag_ga": "🇬🇦", - "flag_gm": "🇬🇲", - "flag_ge": "🇬🇪", - "flag_de": "🇩🇪", - "flag_gh": "🇬🇭", - "flag_gi": "🇬🇮", - "flag_gr": "🇬🇷", - "flag_gl": "🇬🇱", - "flag_gd": "🇬🇩", - "flag_gp": "🇬🇵", - "flag_gu": "🇬🇺", - "flag_gt": "🇬🇹", - "flag_gg": "🇬🇬", - "flag_gn": "🇬🇳", - "flag_gw": "🇬🇼", - "flag_gy": "🇬🇾", - "flag_ht": "🇭🇹", - "flag_hn": "🇭🇳", - "flag_hk": "🇭🇰", - "flag_hu": "🇭🇺", - "flag_is": "🇮🇸", - "flag_in": "🇮🇳", - "flag_id": "🇮🇩", - "flag_ir": "🇮🇷", - "flag_iq": "🇮🇶", - "flag_ie": "🇮🇪", - "flag_im": "🇮🇲", - "flag_il": "🇮🇱", - "flag_it": "🇮🇹", - "flag_jm": "🇯🇲", - "flag_jp": "🇯🇵", - "crossed_flags": "🎌", - "flag_je": "🇯🇪", - "flag_jo": "🇯🇴", - "flag_kz": "🇰🇿", - "flag_ke": "🇰🇪", - "flag_ki": "🇰🇮", - "flag_xk": "🇽🇰", - "flag_kw": "🇰🇼", - "flag_kg": "🇰🇬", - "flag_la": "🇱🇦", - "flag_lv": "🇱🇻", - "flag_lb": "🇱🇧", - "flag_ls": "🇱🇸", - "flag_lr": "🇱🇷", - "flag_ly": "🇱🇾", - "flag_li": "🇱🇮", - "flag_lt": "🇱🇹", - "flag_lu": "🇱🇺", - "flag_mo": "🇲🇴", - "flag_mk": "🇲🇰", - "flag_mg": "🇲🇬", - "flag_mw": "🇲🇼", - "flag_my": "🇲🇾", - "flag_mv": "🇲🇻", - "flag_ml": "🇲🇱", - "flag_mt": "🇲🇹", - "flag_mh": "🇲🇭", - "flag_mq": "🇲🇶", - "flag_mr": "🇲🇷", - "flag_mu": "🇲🇺", - "flag_yt": "🇾🇹", - "flag_mx": "🇲🇽", - "flag_fm": "🇫🇲", - "flag_md": "🇲🇩", - "flag_mc": "🇲🇨", - "flag_mn": "🇲🇳", - "flag_me": "🇲🇪", - "flag_ms": "🇲🇸", - "flag_ma": "🇲🇦", - "flag_mz": "🇲🇿", - "flag_mm": "🇲🇲", - "flag_na": "🇳🇦", - "flag_nr": "🇳🇷", - "flag_np": "🇳🇵", - "flag_nl": "🇳🇱", - "flag_nc": "🇳🇨", - "flag_nz": "🇳🇿", - "flag_ni": "🇳🇮", - "flag_ne": "🇳🇪", - "flag_ng": "🇳🇬", - "flag_nu": "🇳🇺", - "flag_nf": "🇳🇫", - "flag_kp": "🇰🇵", - "flag_mp": "🇲🇵", - "flag_no": "🇳🇴", - "flag_om": "🇴🇲", - "flag_pk": "🇵🇰", - "flag_pw": "🇵🇼", - "flag_ps": "🇵🇸", - "flag_pa": "🇵🇦", - "flag_pg": "🇵🇬", - "flag_py": "🇵🇾", - "flag_pe": "🇵🇪", - "flag_ph": "🇵🇭", - "flag_pn": "🇵🇳", - "flag_pl": "🇵🇱", - "flag_pt": "🇵🇹", - "flag_pr": "🇵🇷", - "flag_qa": "🇶🇦", - "flag_re": "🇷🇪", - "flag_ro": "🇷🇴", - "flag_ru": "🇷🇺", - "flag_rw": "🇷🇼", - "flag_ws": "🇼🇸", - "flag_sm": "🇸🇲", - "flag_st": "🇸🇹", - "flag_sa": "🇸🇦", - "flag_sn": "🇸🇳", - "flag_rs": "🇷🇸", - "flag_sc": "🇸🇨", - "flag_sl": "🇸🇱", - "flag_sg": "🇸🇬", - "flag_sx": "🇸🇽", - "flag_sk": "🇸🇰", - "flag_si": "🇸🇮", - "flag_gs": "🇬🇸", - "flag_sb": "🇸🇧", - "flag_so": "🇸🇴", - "flag_za": "🇿🇦", - "flag_kr": "🇰🇷", - "flag_ss": "🇸🇸", - "flag_es": "🇪🇸", - "flag_lk": "🇱🇰", - "flag_bl": "🇧🇱", - "flag_sh": "🇸🇭", - "flag_kn": "🇰🇳", - "flag_lc": "🇱🇨", - "flag_pm": "🇵🇲", - "flag_vc": "🇻🇨", - "flag_sd": "🇸🇩", - "flag_sr": "🇸🇷", - "flag_sz": "🇸🇿", - "flag_se": "🇸🇪", - "flag_ch": "🇨🇭", - "flag_sy": "🇸🇾", - "flag_tw": "🇹🇼", - "flag_tj": "🇹🇯", - "flag_tz": "🇹🇿", - "flag_th": "🇹🇭", - "flag_tl": "🇹🇱", - "flag_tg": "🇹🇬", - "flag_tk": "🇹🇰", - "flag_to": "🇹🇴", - "flag_tt": "🇹🇹", - "flag_tn": "🇹🇳", - "flag_tr": "🇹🇷", - "flag_tm": "🇹🇲", - "flag_tc": "🇹🇨", - "flag_vi": "🇻🇮", - "flag_tv": "🇹🇻", - "flag_ug": "🇺🇬", - "flag_ua": "🇺🇦", - "flag_ae": "🇦🇪", - "flag_gb": "🇬🇧", - "england": "🏴󠁧󠁢󠁥󠁮󠁧󠁿", - "scotland": "🏴󠁧󠁢󠁳󠁣󠁴󠁿", - "wales": "🏴󠁧󠁢󠁷󠁬󠁳󠁿", - "flag_us": "🇺🇸", - "flag_uy": "🇺🇾", - "flag_uz": "🇺🇿", - "flag_vu": "🇻🇺", - "flag_va": "🇻🇦", - "flag_ve": "🇻🇪", - "flag_vn": "🇻🇳", - "flag_wf": "🇼🇫", - "flag_eh": "🇪🇭", - "flag_ye": "🇾🇪", - "flag_zm": "🇿🇲", - "flag_zw": "🇿🇼", - "flag_ac": "🇦🇨", - "flag_bv": "🇧🇻", - "flag_cp": "🇨🇵", - "flag_ea": "🇪🇦", - "flag_dg": "🇩🇬", - "flag_hm": "🇭🇲", - "flag_mf": "🇲🇫", - "flag_sj": "🇸🇯", - "flag_ta": "🇹🇦", - "flag_um": "🇺🇲", - "united_nations": "🇺🇳" - } -} diff --git a/emojiinfo/emojiinfo.py b/emojiinfo/emojiinfo.py deleted file mode 100644 index 7413e6e..0000000 --- a/emojiinfo/emojiinfo.py +++ /dev/null @@ -1,129 +0,0 @@ -import io -from typing import Any, Literal - -import aiohttp -import discord -from colorthief import ColorThief -from red_commons.logging import RedTraceLogger, getLogger -from redbot.core import app_commands, commands -from redbot.core.bot import Red -from redbot.core.utils.chat_formatting import bold, humanize_list - -from .model import PartialEmoji - - -class EmojiInfo(commands.Cog): - """Retrieve information about emojis.""" - - __author__: list[str] = ["SeaswimmerTheFsh"] - __version__: str = "1.0.0" - __documentation__: str = "https://seacogs.coastalcommits.com/emojiinfo/" - - def __init__(self, bot: Red) -> None: - super().__init__() - self.bot: Red = bot - self.logger: RedTraceLogger = getLogger(name="red.SeaCogs.Emoji") - - def format_help_for_context(self, ctx: commands.Context) -> str: - pre_processed: Any | Literal[''] = super().format_help_for_context(ctx) or "" - n: Literal['\n'] | Literal[''] = "\n" if "\n\n" not in pre_processed else "" - text: list[str] = [ - f"{pre_processed}{n}", - f"Cog Version: **{self.__version__}**", - f"Author: {humanize_list(items=self.__author__)}", - f"Documentation: {self.__documentation__}", - ] - return "\n".join(text) - - async def fetch_twemoji(self, unicode_emoji) -> str: - base_url = "https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest/assets/72x72/" - emoji_codepoint = "-".join([hex(ord(char))[2:] for char in unicode_emoji]) - segments = emoji_codepoint.split("-") - valid_segments = [seg for seg in segments if len(seg) >= 4] - emoji_url = f"{base_url}{valid_segments[0]}.png" - return emoji_url - - async def fetch_primary_color(self, emoji_url: str) -> discord.Color | None: - async with aiohttp.ClientSession() as session: - async with session.get(emoji_url) as response: - if response.status != 200: - return None - image = await response.read() - dominant_color = ColorThief(io.BytesIO(image)).get_color(quality=1) - color = discord.Color.from_rgb(*dominant_color) - return color - - async def get_emoji_info(self, emoji: PartialEmoji) -> tuple[str, str]: - if emoji.is_unicode_emoji(): - try: - emoji_url = await self.fetch_twemoji(unicode_emoji=emoji.name) - except IndexError as e: - raise e - else: - emoji_url = emoji.url - - if emoji.id is not None: - emoji_id = f"{bold('ID:')} `{emoji.id}`\n" - markdown = f"`<{'a' if emoji.animated else ''}:{emoji.name}:{emoji.id}>`" - name = f"{bold('Name:')} {emoji.name}\n" - aliases = "" - group = "" - else: - emoji_id = "" - markdown = f"`{emoji}`" - name = f"{bold('Name:')} {emoji.aliases.pop(0)}\n" - aliases = f"{bold('Aliases:')} {', '.join(emoji.aliases)}\n" if emoji.aliases else "" - group = f"{bold('Group:')} {emoji.group}\n" - - return ( - f"{name}" - f"{emoji_id}" - f"{bold('Native:')} {emoji.is_unicode_emoji()}\n" - f"{group}" - f"{aliases}" - f"{bold('Animated:')} {emoji.animated}\n" - f"{bold('Markdown:')} {markdown}\n" - f"{bold('URL:')} [Click Here]({emoji_url})" - ), emoji_url - - @app_commands.command(name="emoji") - @app_commands.describe( - emoji="What emoji would you like to get information on?", - ephemeral="Would you like the response to be hidden?" - ) - async def emoji_slash(self, interaction: discord.Interaction, emoji: str, ephemeral: bool = True) -> None: - """Retrieve information about an emoji.""" - await interaction.response.defer(ephemeral=ephemeral) - - try: - emoji: PartialEmoji = PartialEmoji.from_str(self, value=emoji) - string, emoji_url, = await self.get_emoji_info(emoji) - self.logger.verbose(f"Emoji:\n{string}") - except (IndexError, UnboundLocalError): - return await interaction.followup.send("Please provide a valid emoji!") - - if await self.bot.embed_requested(channel=interaction.channel): - embed = embed = discord.Embed(title="Emoji Information", description=string, color = await self.fetch_primary_color(emoji_url) or await self.bot.get_embed_color(interaction.channel)) - embed.set_thumbnail(url=emoji_url) - - await interaction.followup.send(embed=embed) - else: - await interaction.followup.send(content=string) - - @commands.command(name="emoji") - async def emoji(self, ctx: commands.Context, *, emoji: str) -> None: - """Retrieve information about an emoji.""" - try: - emoji: PartialEmoji = PartialEmoji.from_str(self, value=emoji) - string, emoji_url, = await self.get_emoji_info(emoji) - self.logger.verbose(f"Emoji:\n{string}") - except (IndexError, UnboundLocalError): - return await ctx.send("Please provide a valid emoji!") - - if await ctx.embed_requested(): - embed = embed = discord.Embed(title="Emoji Information", description=string, color = await self.fetch_primary_color(emoji_url) or await ctx.embed_color) - embed.set_thumbnail(url=emoji_url) - - await ctx.send(embed=embed) - else: - await ctx.send(content=string) diff --git a/emojiinfo/info.json b/emojiinfo/info.json deleted file mode 100644 index febea9b..0000000 --- a/emojiinfo/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "author" : ["SeaswimmerTheFsh (seasw.)"], - "install_msg" : "Thank you for installing Emoji!", - "name" : "Emoji", - "short" : "Retrieve information about emojis.", - "description" : "Retrieve information about emojis.", - "end_user_data_statement" : "This cog does not store end user data.", - "hidden": false, - "disabled": false, - "min_bot_version": "3.5.0", - "min_python_version": [3, 10, 0], - "requirements": ["colorthief"], - "tags": [ - "utility" - ] -} diff --git a/emojiinfo/model.py b/emojiinfo/model.py deleted file mode 100644 index cc8a468..0000000 --- a/emojiinfo/model.py +++ /dev/null @@ -1,91 +0,0 @@ -import json - -import discord -from redbot.core import commands, data_manager - - -class PartialEmoji(discord.PartialEmoji): - """Represents a "partial" emoji. Subclasses `discord.PartialEmoji` - - .. container:: operations - - .. describe:: x == y - - Checks if two emoji are the same. - - .. describe:: x != y - - Checks if two emoji are not the same. - - .. describe:: hash(x) - - Return the emoji's hash. - - .. describe:: str(x) - - Returns the emoji rendered for discord. - - Attributes - ----------- - name: Optional[:class:`str`] - The custom emoji name, if applicable, or the unicode codepoint - of the non-custom emoji. This can be ``None`` if the emoji - got deleted (e.g. removing a reaction with a deleted emoji). - animated: :class:`bool` - Whether the emoji is animated or not. - id: Optional[:class:`int`] - The ID of the custom emoji, if applicable. - group: Optional[:class:`str`] - The group name of the emoji if it is a native emoji. - """ - - def __init__(self, *, name: str, animated: bool = False, id: int | None = None, group: str | None = None, aliases: list | None = None) -> None: # pylint: disable=redefined-builtin - super().__init__(name=name, animated=animated, id=id) - self.group = group - self.aliases = aliases - - @classmethod - def from_str(cls, coginstance: commands.Cog, value: str) -> "PartialEmoji": - """Converts a Discord string representation of an emoji to a :class:`PartialEmoji`. - - The formats accepted are: - - - ``a:name:id`` - - ```` - - ``name:id`` - - ``<:name:id>`` - - If the format does not match then it is assumed to be a unicode emoji. - - .. versionadded:: 2.0 - - Parameters - ------------ - value: :class:`str` - The string representation of an emoji. - - Returns - -------- - :class:`PartialEmoji` - The partial emoji from this string. - """ - match = cls._CUSTOM_EMOJI_RE.match(value) - if match is not None: - groups = match.groupdict() - animated = bool(groups['animated']) - emoji_id = int(groups['id']) - name = groups['name'] - return cls(name=name, animated=animated, id=emoji_id) - - path: data_manager.Path = data_manager.bundled_data_path(coginstance) / "emojis.json" - with open(path, "r", encoding="UTF-8") as file: - emojis: dict = json.load(file) - emoji_aliases = [] - emoji_group = None - for dict_name, group in emojis.items(): - for k, v in group.items(): - if v == value: - emoji_group = dict_name - if k not in emoji_aliases: - emoji_aliases.append(k) - return cls(name=value, animated=False, id=None, group=emoji_group, aliases=emoji_aliases) diff --git a/info.json b/info.json index 816e30b..04f29ab 100644 --- a/info.json +++ b/info.json @@ -3,7 +3,7 @@ "SeaswimmerTheFsh (seasw.)" ], "install_msg": "Thanks for installing my repo!\n\nIf you have any issues with any of the cogs, please create an issue [here](https://coastalcommits.com/SeaswimmerTheFsh/SeaCogs/issues) or join my [Discord Server](https://discord.gg/eMUMe77Yb8 ).", - "index_name": "sea-cogs", + "name": "SeaCogs", "short": "Various cogs for Red, by SeaswimmerTheFsh (seasw.)", "description": "Various cogs for Red, by SeaswimmerTheFsh (seasw.)" } diff --git a/mkdocs.yml b/mkdocs.yml index 2777b5f..2a0ea7d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -18,7 +18,6 @@ nav: - Configuration: aurora/configuration.md - Bible: bible.md - Backup: backup.md - - EmojiInfo: emojiinfo.md - Nerdify: nerdify.md - Pterodactyl: - pterodactyl/index.md @@ -30,7 +29,7 @@ nav: plugins: - git-authors - search - #- social + - social - git-revision-date-localized: enable_creation_date: true type: timeago diff --git a/nerdify/nerdify.py b/nerdify/nerdify.py index 76307b1..dc97886 100644 --- a/nerdify/nerdify.py +++ b/nerdify/nerdify.py @@ -18,8 +18,7 @@ class Nerdify(commands.Cog): """Nerdify your text.""" __author__ = ["SeaswimmerTheFsh"] - __version__ = "1.3.4" - __documentation__ = "https://seacogs.coastalcommits.com/nerdify/" + __version__ = "1.3.3" def __init__(self, bot): self.bot = bot @@ -31,7 +30,6 @@ class Nerdify(commands.Cog): f"{pre_processed}{n}", f"Cog Version: **{self.__version__}**", f"Author: {chat_formatting.humanize_list(self.__author__)}", - f"Documentation: {self.__documentation__}" ] return "\n".join(text) diff --git a/poetry.lock b/poetry.lock index 017d640..c93e524 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,99 +1,126 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "aiodns" +version = "3.0.0" +description = "Simple DNS resolver for asyncio" +optional = false +python-versions = "*" +files = [ + {file = "aiodns-3.0.0-py3-none-any.whl", hash = "sha256:2b19bc5f97e5c936638d28e665923c093d8af2bf3aa88d35c43417fa25d136a2"}, + {file = "aiodns-3.0.0.tar.gz", hash = "sha256:946bdfabe743fceeeb093c8a010f5d1645f708a241be849e17edfb0e49e08cd6"}, +] + +[package.dependencies] +pycares = ">=4.0.0" [[package]] name = "aiohttp" -version = "3.9.3" +version = "3.8.5" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.6" files = [ - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52"}, - {file = "aiohttp-3.9.3-cp310-cp310-win32.whl", hash = "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b"}, - {file = "aiohttp-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4"}, - {file = "aiohttp-3.9.3-cp311-cp311-win32.whl", hash = "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5"}, - {file = "aiohttp-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f"}, - {file = "aiohttp-3.9.3-cp312-cp312-win32.whl", hash = "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38"}, - {file = "aiohttp-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2"}, - {file = "aiohttp-3.9.3-cp38-cp38-win32.whl", hash = "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63"}, - {file = "aiohttp-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d"}, - {file = "aiohttp-3.9.3-cp39-cp39-win32.whl", hash = "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051"}, - {file = "aiohttp-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc"}, - {file = "aiohttp-3.9.3.tar.gz", hash = "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, + {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, + {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, + {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, + {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, + {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, + {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, + {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, + {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, + {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, + {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, + {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, + {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, + {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, + {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, + {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, + {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, + {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, + {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, + {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, + {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, + {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, + {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, + {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, + {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, + {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, + {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, + {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, + {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, + {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, ] [package.dependencies] aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns", "cchardet"] [[package]] name = "aiohttp-json-rpc" @@ -125,63 +152,63 @@ frozenlist = ">=1.1.0" [[package]] name = "apsw" -version = "3.45.2.0" +version = "3.43.1.0" description = "Another Python SQLite Wrapper" optional = false python-versions = ">=3.8" files = [ - {file = "apsw-3.45.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1873cf5edb291fddbad0bbfd193ee5ec6fc05ea3dbc39ab801a90c211673734e"}, - {file = "apsw-3.45.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e08849bdee202f536fe0e1da68f5cf94bf74e9981bbac6df4e60dd478da31aab"}, - {file = "apsw-3.45.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ae4e74e5a208a78a8f289425f38bec4a4561b5cf97b854f35f28efeb00a45a6"}, - {file = "apsw-3.45.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:372f741aa038e188cc860fa5a76af63376b8673996fc5b7d2f9ed5f20002edd5"}, - {file = "apsw-3.45.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae16d9dc225d297d48b4fdd96f51745f4233c38fa2a3b6bfffd7e43c9bd99e13"}, - {file = "apsw-3.45.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1cb2c450ce9d56965be213f432eb4a3f12cbee202a2cf9fe84c1a956e1516798"}, - {file = "apsw-3.45.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c9c53f08af854768e3d2d4fb15ab2c869317a97ec8b722183904ee0cc7a00a3f"}, - {file = "apsw-3.45.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:13a8ebb90021b8c0812571477a0d1c12ef2d52ee1feec3ae5ad07e53b46c537c"}, - {file = "apsw-3.45.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b2cc8887247fdbcc9b935b7c4a2288a17fe85a30009798b65a886e57c08bcb76"}, - {file = "apsw-3.45.2.0-cp310-cp310-win32.whl", hash = "sha256:d755c164d593d822e4ff4e26e415a81a6dc0d9956883ec8c4a8900b4e4e15e97"}, - {file = "apsw-3.45.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:ff5a16c611a461bdb84b531d1ce70fc95d6e4b5a9d3b46a6367374f7ed351f1c"}, - {file = "apsw-3.45.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:967f25f8a7d296b2a4af105b1a8db3d5700d011eb22e91f4db39f833eca429b0"}, - {file = "apsw-3.45.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:919808b4abe466a66a3aacfb53b5db29e0e694f0b846edd3ce804abe829b88de"}, - {file = "apsw-3.45.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:858e09db02f44f40305d5199c1f4e6820d4083273f050d047c4c944481d24fca"}, - {file = "apsw-3.45.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb886ad478f3bb9414e7e812f128cecb3601fc37f97e4f892c6f224edced0d9"}, - {file = "apsw-3.45.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1018ff485277e1b5adeca2a5470b760d9a5ca9a1720c8889678a9afbf8d51a77"}, - {file = "apsw-3.45.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c580467ef70e5618006dcae965783d1db4fb6016738ee7c6f610acecf9d42425"}, - {file = "apsw-3.45.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8f8baf12a21e017559528bf9159eb91cfa0209eba17356150c16d4a4223e95e1"}, - {file = "apsw-3.45.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3e6aef31244dfaaee475eeece7d866cadad872c25d0df2158d64f6259cf8614f"}, - {file = "apsw-3.45.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:455182f76ba6caa105964ce38bfb523e58ef47a07a5854c4f77c7695c95cd42a"}, - {file = "apsw-3.45.2.0-cp311-cp311-win32.whl", hash = "sha256:16944708c503887c6cdedadf5ac79a25bdfa5a67b937a5d64d74cf42803606c8"}, - {file = "apsw-3.45.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:e94d007441e1df2c2c990c7985d39f7f1037758f02940ee987ecbcc1383402d8"}, - {file = "apsw-3.45.2.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f12f78b4ec5cdaea391673d7396bb4117c4ef6a2ad91287c66a06fe17f7e067d"}, - {file = "apsw-3.45.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5353c872476c79613511bdc0a60668d760a0dfeda2d56f2b5b616fc4a261fcb4"}, - {file = "apsw-3.45.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:94427f8cb4b37dc67d208c34faa37bed3be683ac181e0d4a9e007f23dda0f65e"}, - {file = "apsw-3.45.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d6f0d1786574db07aa0fbfbfd4db75ae02942e16b0d6d2f20e4a7736c93375"}, - {file = "apsw-3.45.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bd4b72c85e95d9eb2c93e78d27083df68fe9287a7be22eaacacebfa941c2ac4"}, - {file = "apsw-3.45.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e1c8e7a5b7244ec5a714cf5244c405198577a1e9eacc0ce5957974d4232498"}, - {file = "apsw-3.45.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b3ebddf63536382500562349d33f72310d340239085defbc9d6affe987007f"}, - {file = "apsw-3.45.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f1620ca1eb6ceab90fd5bd3fb5b2d5449c09b63994292ca54efb1605118dfd0e"}, - {file = "apsw-3.45.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7c968cc31104812de006cff832a9b29c15fa71ad0cf8c825d2e4e8393840e797"}, - {file = "apsw-3.45.2.0-cp312-cp312-win32.whl", hash = "sha256:3f96754fa0baa7933b769d3f782f73f3761bfdd581ff79f9ed117e33988daf5b"}, - {file = "apsw-3.45.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:cb081d1ab72b65ce104784460a3c07c1a3d7501f432570f912b81a4aabf5bbd1"}, - {file = "apsw-3.45.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6a8ab86d33043bf47ef584498b82b435cb9de79eee5f99737e0eaa056e1f6b62"}, - {file = "apsw-3.45.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:75f0e2be1aee0c8db1ed7e9cf41625df0cc971c780be0a598f25e14eb9863ab6"}, - {file = "apsw-3.45.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5ddf42eb2fc59aa59f720fc7b5df626907ff71b7b5d13dad16f4d201a376431f"}, - {file = "apsw-3.45.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:632f5b590059b9242e4a710082c50972b71916ee8f121051a7bbaed6bafbdc55"}, - {file = "apsw-3.45.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b400cd5cb4029e8f55a7526b10af680340c5dd7a75c6a175fccc6047602e393f"}, - {file = "apsw-3.45.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:34dd353b3351a421e12dd71bf0e3cded710a40c38acc88f64df11ba912a2b15d"}, - {file = "apsw-3.45.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fe857ea56cf11a0256cd7dd7076a51c2cfb0c0ee07b8e85c7eb10c88e8fc2bae"}, - {file = "apsw-3.45.2.0-cp38-cp38-win32.whl", hash = "sha256:083ef86ba378a6ee2cd717c6d521554792e2f9eea157e2a0cf9a5059cfc43af2"}, - {file = "apsw-3.45.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:efe0f06b58b3b1a79dd86c2b6ef32feca9ca31baf8e8bcede08fb7a77b494431"}, - {file = "apsw-3.45.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:dce665254a76dc41fcce6bc22f9001fb1e84c7e8efeeb0591a9111e3225b4fb2"}, - {file = "apsw-3.45.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fd17728f715df34b976ad14e5dc712877e3313f963cb595c4b17f24022712253"}, - {file = "apsw-3.45.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6f6800583c5b6daa98f825fc27b534f5c312b9b125657aeb7e21ba9ee835617c"}, - {file = "apsw-3.45.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8c20642b3b4ffdc9640c69ca66b1c557106d6a6caae5131758d9910d81e86d5"}, - {file = "apsw-3.45.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abdc314e4b4e6ce3fd1e027c452b5ac0f3d1326adf8f321c568c9384646ae93d"}, - {file = "apsw-3.45.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:26dea875572859c073cfa747f909c595604a0636149bf375e4f14a16da12aa33"}, - {file = "apsw-3.45.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:122c60f673804b79d08fc59c32e667ac82691ac0817151b8341a8b4b4272a16b"}, - {file = "apsw-3.45.2.0-cp39-cp39-win32.whl", hash = "sha256:24d001fcfe8a7decb92722d94a9f9e756564c65ba3806d4156ad827f4bdf9247"}, - {file = "apsw-3.45.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:01319f1332020407c0af54144c8100c0258add40ec4a661416b5261a0d2150f0"}, - {file = "apsw-3.45.2.0.tar.gz", hash = "sha256:4fe81f5e390969d08d3048f357a68b347316b8f09455ff4657d94c56acfa255c"}, + {file = "apsw-3.43.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb37e563cac333b276c9374d67f629319fa52b122d779e0da3f104a96c608149"}, + {file = "apsw-3.43.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e17d33f189cc7054bee7b8958d105946458c6721391152cbe21501319fa5f8b0"}, + {file = "apsw-3.43.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c92dae70e33719907091f8bd789d9b4a17d93782a88961b16bb52d260d9b3f30"}, + {file = "apsw-3.43.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:962180d60eedf37f5d880d35ca4c6517a7a83c087a84f7e96b7703f859c89196"}, + {file = "apsw-3.43.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f86dd863b38164b22316445f131d923a9b362ac885b937ac21ac6f4931c8287d"}, + {file = "apsw-3.43.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb4a386d44dce8e3fda996a9e8f712a7d83a48e742ac9b790389983a9c5a5b7"}, + {file = "apsw-3.43.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:53ba8459f68ab8a480693462606c445ec45885833c3d559dc6f7fbf9cda69c89"}, + {file = "apsw-3.43.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d39f2d1aa25cd8ad040b43faf71ace9560c3e5e9532445e78a6713366b43f9a2"}, + {file = "apsw-3.43.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d05931e7e9757faa224f9bed4f97761bb2f106f208b359ca3bff2116fa24e41a"}, + {file = "apsw-3.43.1.0-cp310-cp310-win32.whl", hash = "sha256:ea6590b36506200aae48934cff9c23cd544b81af6e2fdc920c9e8c42ca289880"}, + {file = "apsw-3.43.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:10e64d6c80c630b775e86e849e9c56a52df8cf36fd13a8d4a58eb4ae77422cc9"}, + {file = "apsw-3.43.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5fbd5369a17e9f34bc9c5a28fb6712df4147ce92ae3885d9dda37ae5b74f0627"}, + {file = "apsw-3.43.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:00704fc3ccd2336f01559ffa05dd8aefad8b9d476322e0164b7e6d98636e63e9"}, + {file = "apsw-3.43.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:09c9a8fc8e452fea6a96a5af6a5d8813435dd07f98402315c07492fd7bc4dcb9"}, + {file = "apsw-3.43.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab9f963106f41a5eeb48084a993acc7196a2e698c2c45ac540fac8aa54995e15"}, + {file = "apsw-3.43.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a4795840f6300173cdd45785cff35cc9d7294b660b57a1fc30aa65e245dd4d6"}, + {file = "apsw-3.43.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57e32195f2fd9decfb8520c7826a35e6a486547a49624eed9a471f45ce544fce"}, + {file = "apsw-3.43.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b496a42f1899e6113ceede4f633f186e3665d918fb0aad8e41e638b45c4fb7cd"}, + {file = "apsw-3.43.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0df9557e8cbbee826a8d0ada2f4bc69df2b9c74ba7be39b493a054617ff18741"}, + {file = "apsw-3.43.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:663999a3998b38a855e4e61d11f051289f1a687416e3109503efea8c2e611b7c"}, + {file = "apsw-3.43.1.0-cp311-cp311-win32.whl", hash = "sha256:900e0ce793bd5771a4908c997384895a7dbf7c4dba8cf1f91d460dbeeb715fa4"}, + {file = "apsw-3.43.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:9505d9b5ee6fbd8bcc27fe27795cfb17a9d8634b8f7c346dafb4e092374e6cc0"}, + {file = "apsw-3.43.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5bd6bfb59f95bdf07fdb4365e3d6ccc94be310b583ad60cddebd892527973dff"}, + {file = "apsw-3.43.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ea2151b6e836637b8a8425a27978880916a87fb48e3833acfeabdfa25caabaf1"}, + {file = "apsw-3.43.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c88b680cd311b1a1ceba3f8e82ab97ededb4046a738822120a0aa65583abb058"}, + {file = "apsw-3.43.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ae19356528befc07a99789a0a5c58d24cf71c1e80623a2d8660525833070df"}, + {file = "apsw-3.43.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d614af7d9827c868b5ed61b74b41e33fd9805b19820b54a7d4892f071ce5509e"}, + {file = "apsw-3.43.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:06c3831a8142c1e3458bd4e450c9243558f6c1c3224b322d8664c4e7762e23c0"}, + {file = "apsw-3.43.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:853ef200e07894697aaaf5baa03c0bfd46c2bb988e09f5664d87d6504a07fa8e"}, + {file = "apsw-3.43.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36e4e250340d247c95da439cfc67855e7412c806080031d75d37f0a1362a9d73"}, + {file = "apsw-3.43.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f23a22d54fd92c57d5e3421103652ae4322c27be48da97266760278a1a0408c3"}, + {file = "apsw-3.43.1.0-cp312-cp312-win32.whl", hash = "sha256:d5033fcb9781b484752d63395efce9b0f278e5b7c6c7c002da1c7f15eabe90c7"}, + {file = "apsw-3.43.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:4fb2ef4762c3aba99f6794606b7c8b5c35b8d7719c51a76bbbda4ac3fefff79c"}, + {file = "apsw-3.43.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:46aaf0c10b758c2a213a87bdb5c83dd9bd218b5fb5866eb3206b2cd1344a905b"}, + {file = "apsw-3.43.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a84d01994d57ab8526688dfb99c24067707442a02177002d0212295b35c4288"}, + {file = "apsw-3.43.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:55965ee1a6eb008c96b1da1bfd8485407964df600b4a3744f89dd87a9321894c"}, + {file = "apsw-3.43.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63d7f4a9a6b37eb66ebc3cd977265d1c9fe929e7b208e90498eb3112029a0c4f"}, + {file = "apsw-3.43.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ec3a678c60e63bb9e4fd870ee065a63ac13ea01ef5b9aa224dc4eac7ba377d9"}, + {file = "apsw-3.43.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99e513c743b8d2c20b1914a9bc8df8c9b22dfbfa82cb384958bf76ac856e7771"}, + {file = "apsw-3.43.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5a06ed873bf7f5f80c022e288e26930ba57c90910875d1f416af5a643a40f09e"}, + {file = "apsw-3.43.1.0-cp38-cp38-win32.whl", hash = "sha256:3ef1c25ac0e51d9b62cdc980bbc09addcfd785b881655ac5db1cec3bafaa8b74"}, + {file = "apsw-3.43.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b6a7c401f0684c146086d4592b0e06c6850b1174142e4829984f96f771ed39a8"}, + {file = "apsw-3.43.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:979999820225991f1d85d8212bd7074220acbb561663e79f91ba270e019deb50"}, + {file = "apsw-3.43.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ac8947db1bb92e820839729ce64468da3eca6ef9e9896409ec22c23ed9aa1f8"}, + {file = "apsw-3.43.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:45d0ec300e31a789aa90fa94825c50b84f1a9f390f29d3081592732425d34c52"}, + {file = "apsw-3.43.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0513079eade996db380dda5d8da266dee0da7eda53ed2e815335466d1654f23e"}, + {file = "apsw-3.43.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12f4e37f906c4b9cf7667af8d36fb4c3112f4b0702dbc09a4d272ed29ec004fb"}, + {file = "apsw-3.43.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:786a5110e2b57013104be4f8064d67a94131e469f16601afbfe3cef2f92add19"}, + {file = "apsw-3.43.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c4d574c5e36523259a63b453747fd7c13e7bc8124752482b8a16bd6617debf35"}, + {file = "apsw-3.43.1.0-cp39-cp39-win32.whl", hash = "sha256:7cb5ca320b91e6b2e4a043f045d2e2f1e3c4d54b7f20980409d52fa4d2ad3324"}, + {file = "apsw-3.43.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca75a53efd01f6ca4725d45ffecf34a2cc1e461cf72cdbb2f4675ec6b76f05ca"}, + {file = "apsw-3.43.1.0.tar.gz", hash = "sha256:7e2cbbb407b6d1146bbd966de5843688b4deaa2cb07d98690689a42d00363cdd"}, ] [[package]] @@ -195,60 +222,46 @@ files = [ {file = "astroid-3.1.0.tar.gz", hash = "sha256:ac248253bfa4bd924a0de213707e7ebeeb3138abeb48d798784ead1e56d419d4"}, ] +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + [[package]] name = "attrs" -version = "23.2.0" +version = "23.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] +dev = ["attrs[docs,tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.14.0" +version = "2.12.1" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, ] -[package.extras] -dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] - -[[package]] -name = "beautifulsoup4" -version = "4.12.3" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, - {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, -] - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -cchardet = ["cchardet"] -chardet = ["chardet"] -charset-normalizer = ["charset-normalizer"] -html5lib = ["html5lib"] -lxml = ["lxml"] - [[package]] name = "brotli" version = "1.1.0" @@ -395,63 +408,75 @@ files = [ [[package]] name = "cffi" -version = "1.16.0" +version = "1.15.1" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, - {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, - {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, - {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, - {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, - {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, - {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, - {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, - {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, - {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, - {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, - {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, - {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, - {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, - {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, ] [package.dependencies] @@ -459,101 +484,86 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] @@ -581,20 +591,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "colorthief" -version = "0.2.1" -description = "A module for grabbing the color palette from an image." -optional = false -python-versions = "*" -files = [ - {file = "colorthief-0.2.1-py2.py3-none-any.whl", hash = "sha256:b04fc8ce5cf9c888768745e29cb19b7b688d5711af6fba26e8057debabec56b9"}, - {file = "colorthief-0.2.1.tar.gz", hash = "sha256:079cb0c95bdd669c4643e2f7494de13b0b6029d5cdbe2d74d5d3c3386bd57221"}, -] - -[package.dependencies] -Pillow = "*" - [[package]] name = "contextlib2" version = "21.6.0" @@ -673,99 +669,83 @@ voice = ["PyNaCl (>=1.3.0,<1.6)"] [[package]] name = "distro" -version = "1.9.0" +version = "1.8.0" description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" files = [ - {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, - {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, + {file = "distro-1.8.0-py3-none-any.whl", hash = "sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff"}, + {file = "distro-1.8.0.tar.gz", hash = "sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8"}, ] [[package]] name = "frozenlist" -version = "1.4.1" +version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, ] [[package]] @@ -818,29 +798,62 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre [[package]] name = "griffe" -version = "0.42.1" +version = "0.41.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.42.1-py3-none-any.whl", hash = "sha256:7e805e35617601355edcac0d3511cedc1ed0cb1f7645e2d336ae4b05bbae7b3b"}, - {file = "griffe-0.42.1.tar.gz", hash = "sha256:57046131384043ed078692b85d86b76568a686266cc036b9b56b704466f803ce"}, + {file = "griffe-0.41.0-py3-none-any.whl", hash = "sha256:8aa7fc6eb00cb80af9c0198178c6b7110cb59fa2c5187bb13ea25eebbe4dd928"}, + {file = "griffe-0.41.0.tar.gz", hash = "sha256:850128c3198c18713eaf0a6cc8572e590a16b1965f72a4e871e66cf84740903f"}, ] [package.dependencies] colorama = ">=0.4" +[[package]] +name = "humanize" +version = "4.9.0" +description = "Python humanize utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "humanize-4.9.0-py3-none-any.whl", hash = "sha256:ce284a76d5b1377fd8836733b983bfb0b76f1aa1c090de2566fcf008d7f6ab16"}, + {file = "humanize-4.9.0.tar.gz", hash = "sha256:582a265c931c683a7e9b8ed9559089dea7edcf6cc95be39a3cbc2c5d5ac2bcfa"}, +] + +[package.extras] +tests = ["freezegun", "pytest", "pytest-cov"] + [[package]] name = "idna" -version = "3.6" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + [[package]] name = "isort" version = "5.13.2" @@ -874,17 +887,17 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "markdown" -version = "3.6" +version = "3.4.4" description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, - {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, + {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, + {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, ] [package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] testing = ["coverage", "pyyaml"] [[package]] @@ -911,21 +924,6 @@ profiling = ["gprof2dot"] rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] -[[package]] -name = "markdownify" -version = "0.12.1" -description = "Convert HTML to markdown." -optional = false -python-versions = "*" -files = [ - {file = "markdownify-0.12.1-py3-none-any.whl", hash = "sha256:a3805abd8166dbb7b27783c5599d91f54f10d79894b2621404d85b333c7ce561"}, - {file = "markdownify-0.12.1.tar.gz", hash = "sha256:1fb08c618b30e0ee7a31a39b998f44a18fb28ab254f55f4af06b6d35a2179e27"}, -] - -[package.dependencies] -beautifulsoup4 = ">=4.9,<5" -six = ">=1.15,<2" - [[package]] name = "markupsafe" version = "2.1.5" @@ -1060,13 +1058,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-autorefs" -version = "1.0.1" +version = "1.0.0" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_autorefs-1.0.1-py3-none-any.whl", hash = "sha256:aacdfae1ab197780fb7a2dac92ad8a3d8f7ca8049a9cbe56a4218cd52e8da570"}, - {file = "mkdocs_autorefs-1.0.1.tar.gz", hash = "sha256:f684edf847eced40b570b57846b15f0bf57fb93ac2c510450775dcf16accb971"}, + {file = "mkdocs_autorefs-1.0.0-py3-none-any.whl", hash = "sha256:2b6d288f0582589d1be7c99ce4470c8e7c5077892014051ff0d4ff574a73dbe8"}, + {file = "mkdocs_autorefs-1.0.0.tar.gz", hash = "sha256:1b20db41cade632b07b7a73dee818977b52e869c9deb438f6f20e2896ff01859"}, ] [package.dependencies] @@ -1107,13 +1105,13 @@ pytz = "*" [[package]] name = "mkdocs-material" -version = "9.5.15" +version = "9.5.11" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, - {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, + {file = "mkdocs_material-9.5.11-py3-none-any.whl", hash = "sha256:788ee0f3e036dca2dc20298d65e480297d348a44c9d7b2ee05c5262983e66072"}, + {file = "mkdocs_material-9.5.11.tar.gz", hash = "sha256:7af7f8af0dea16175558f3fb9245d26c83a17199baa5f157755e63d7437bf971"}, ] [package.dependencies] @@ -1209,217 +1207,165 @@ mkdocstrings = ">=0.20" [[package]] name = "multidict" -version = "6.0.5" +version = "6.0.4" description = "multidict implementation" optional = false python-versions = ">=3.7" files = [ - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, - {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, - {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, - {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, - {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, - {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, - {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, - {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, - {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, - {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, - {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, - {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, - {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, - {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, - {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, - {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, -] - -[[package]] -name = "numpy" -version = "1.26.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] [[package]] name = "orjson" -version = "3.10.0" +version = "3.9.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "orjson-3.10.0-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47af5d4b850a2d1328660661f0881b67fdbe712aea905dadd413bdea6f792c33"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c90681333619d78360d13840c7235fdaf01b2b129cb3a4f1647783b1971542b6"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:400c5b7c4222cb27b5059adf1fb12302eebcabf1978f33d0824aa5277ca899bd"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dcb32e949eae80fb335e63b90e5808b4b0f64e31476b3777707416b41682db5"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7d507c7493252c0a0264b5cc7e20fa2f8622b8a83b04d819b5ce32c97cf57b"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e286a51def6626f1e0cc134ba2067dcf14f7f4b9550f6dd4535fd9d79000040b"}, - {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8acd4b82a5f3a3ec8b1dc83452941d22b4711964c34727eb1e65449eead353ca"}, - {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:30707e646080dd3c791f22ce7e4a2fc2438765408547c10510f1f690bd336217"}, - {file = "orjson-3.10.0-cp310-none-win32.whl", hash = "sha256:115498c4ad34188dcb73464e8dc80e490a3e5e88a925907b6fedcf20e545001a"}, - {file = "orjson-3.10.0-cp310-none-win_amd64.whl", hash = "sha256:6735dd4a5a7b6df00a87d1d7a02b84b54d215fb7adac50dd24da5997ffb4798d"}, - {file = "orjson-3.10.0-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9587053e0cefc284e4d1cd113c34468b7d3f17666d22b185ea654f0775316a26"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bef1050b1bdc9ea6c0d08468e3e61c9386723633b397e50b82fda37b3563d72"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d16c6963ddf3b28c0d461641517cd312ad6b3cf303d8b87d5ef3fa59d6844337"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4251964db47ef090c462a2d909f16c7c7d5fe68e341dabce6702879ec26d1134"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73bbbdc43d520204d9ef0817ac03fa49c103c7f9ea94f410d2950755be2c349c"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:414e5293b82373606acf0d66313aecb52d9c8c2404b1900683eb32c3d042dbd7"}, - {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:feaed5bb09877dc27ed0d37f037ddef6cb76d19aa34b108db270d27d3d2ef747"}, - {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5127478260db640323cea131ee88541cb1a9fbce051f0b22fa2f0892f44da302"}, - {file = "orjson-3.10.0-cp311-none-win32.whl", hash = "sha256:b98345529bafe3c06c09996b303fc0a21961820d634409b8639bc16bd4f21b63"}, - {file = "orjson-3.10.0-cp311-none-win_amd64.whl", hash = "sha256:658ca5cee3379dd3d37dbacd43d42c1b4feee99a29d847ef27a1cb18abdfb23f"}, - {file = "orjson-3.10.0-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4329c1d24fd130ee377e32a72dc54a3c251e6706fccd9a2ecb91b3606fddd998"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef0f19fdfb6553342b1882f438afd53c7cb7aea57894c4490c43e4431739c700"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4f60db24161534764277f798ef53b9d3063092f6d23f8f962b4a97edfa997a0"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1de3fd5c7b208d836f8ecb4526995f0d5877153a4f6f12f3e9bf11e49357de98"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f93e33f67729d460a177ba285002035d3f11425ed3cebac5f6ded4ef36b28344"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:237ba922aef472761acd697eef77fef4831ab769a42e83c04ac91e9f9e08fa0e"}, - {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98c1bfc6a9bec52bc8f0ab9b86cc0874b0299fccef3562b793c1576cf3abb570"}, - {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:30d795a24be16c03dca0c35ca8f9c8eaaa51e3342f2c162d327bd0225118794a"}, - {file = "orjson-3.10.0-cp312-none-win32.whl", hash = "sha256:6a3f53dc650bc860eb26ec293dfb489b2f6ae1cbfc409a127b01229980e372f7"}, - {file = "orjson-3.10.0-cp312-none-win_amd64.whl", hash = "sha256:983db1f87c371dc6ffc52931eb75f9fe17dc621273e43ce67bee407d3e5476e9"}, - {file = "orjson-3.10.0-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9a667769a96a72ca67237224a36faf57db0c82ab07d09c3aafc6f956196cfa1b"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade1e21dfde1d37feee8cf6464c20a2f41fa46c8bcd5251e761903e46102dc6b"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23c12bb4ced1c3308eff7ba5c63ef8f0edb3e4c43c026440247dd6c1c61cea4b"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2d014cf8d4dc9f03fc9f870de191a49a03b1bcda51f2a957943fb9fafe55aac"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eadecaa16d9783affca33597781328e4981b048615c2ddc31c47a51b833d6319"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd583341218826f48bd7c6ebf3310b4126216920853cbc471e8dbeaf07b0b80e"}, - {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:90bfc137c75c31d32308fd61951d424424426ddc39a40e367704661a9ee97095"}, - {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13b5d3c795b09a466ec9fcf0bd3ad7b85467d91a60113885df7b8d639a9d374b"}, - {file = "orjson-3.10.0-cp38-none-win32.whl", hash = "sha256:5d42768db6f2ce0162544845facb7c081e9364a5eb6d2ef06cd17f6050b048d8"}, - {file = "orjson-3.10.0-cp38-none-win_amd64.whl", hash = "sha256:33e6655a2542195d6fd9f850b428926559dee382f7a862dae92ca97fea03a5ad"}, - {file = "orjson-3.10.0-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4050920e831a49d8782a1720d3ca2f1c49b150953667eed6e5d63a62e80f46a2"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1897aa25a944cec774ce4a0e1c8e98fb50523e97366c637b7d0cddabc42e6643"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9bf565a69e0082ea348c5657401acec3cbbb31564d89afebaee884614fba36b4"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6ebc17cfbbf741f5c1a888d1854354536f63d84bee537c9a7c0335791bb9009"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2817877d0b69f78f146ab305c5975d0618df41acf8811249ee64231f5953fee"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57d017863ec8aa4589be30a328dacd13c2dc49de1c170bc8d8c8a98ece0f2925"}, - {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:22c2f7e377ac757bd3476ecb7480c8ed79d98ef89648f0176deb1da5cd014eb7"}, - {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e62ba42bfe64c60c1bc84799944f80704e996592c6b9e14789c8e2a303279912"}, - {file = "orjson-3.10.0-cp39-none-win32.whl", hash = "sha256:60c0b1bdbccd959ebd1575bd0147bd5e10fc76f26216188be4a36b691c937077"}, - {file = "orjson-3.10.0-cp39-none-win_amd64.whl", hash = "sha256:175a41500ebb2fdf320bf78e8b9a75a1279525b62ba400b2b2444e274c2c8bee"}, - {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, + {file = "orjson-3.9.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a19e4074bc98793458b4b3ba35a9a1d132179345e60e152a1bb48c538ab863c4"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80acafe396ab689a326ab0d80f8cc61dec0dd2c5dca5b4b3825e7b1e0132c101"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:355efdbbf0cecc3bd9b12589b8f8e9f03c813a115efa53f8dc2a523bfdb01334"}, + {file = "orjson-3.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3aab72d2cef7f1dd6104c89b0b4d6b416b0db5ca87cc2fac5f79c5601f549cc2"}, + {file = "orjson-3.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36b1df2e4095368ee388190687cb1b8557c67bc38400a942a1a77713580b50ae"}, + {file = "orjson-3.9.7-cp310-none-win32.whl", hash = "sha256:e94b7b31aa0d65f5b7c72dd8f8227dbd3e30354b99e7a9af096d967a77f2a580"}, + {file = "orjson-3.9.7-cp310-none-win_amd64.whl", hash = "sha256:82720ab0cf5bb436bbd97a319ac529aee06077ff7e61cab57cee04a596c4f9b4"}, + {file = "orjson-3.9.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1f8b47650f90e298b78ecf4df003f66f54acdba6a0f763cc4df1eab048fe3738"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f738fee63eb263530efd4d2e9c76316c1f47b3bbf38c1bf45ae9625feed0395e"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38e34c3a21ed41a7dbd5349e24c3725be5416641fdeedf8f56fcbab6d981c900"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21a3344163be3b2c7e22cef14fa5abe957a892b2ea0525ee86ad8186921b6cf0"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23be6b22aab83f440b62a6f5975bcabeecb672bc627face6a83bc7aeb495dc7e"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5205ec0dfab1887dd383597012199f5175035e782cdb013c542187d280ca443"}, + {file = "orjson-3.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8769806ea0b45d7bf75cad253fba9ac6700b7050ebb19337ff6b4e9060f963fa"}, + {file = "orjson-3.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f9e01239abea2f52a429fe9d95c96df95f078f0172489d691b4a848ace54a476"}, + {file = "orjson-3.9.7-cp311-none-win32.whl", hash = "sha256:8bdb6c911dae5fbf110fe4f5cba578437526334df381b3554b6ab7f626e5eeca"}, + {file = "orjson-3.9.7-cp311-none-win_amd64.whl", hash = "sha256:9d62c583b5110e6a5cf5169ab616aa4ec71f2c0c30f833306f9e378cf51b6c86"}, + {file = "orjson-3.9.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1c3cee5c23979deb8d1b82dc4cc49be59cccc0547999dbe9adb434bb7af11cf7"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a347d7b43cb609e780ff8d7b3107d4bcb5b6fd09c2702aa7bdf52f15ed09fa09"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:154fd67216c2ca38a2edb4089584504fbb6c0694b518b9020ad35ecc97252bb9"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ea3e63e61b4b0beeb08508458bdff2daca7a321468d3c4b320a758a2f554d31"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb0b0b2476f357eb2975ff040ef23978137aa674cd86204cfd15d2d17318588"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b9a20a03576c6b7022926f614ac5a6b0914486825eac89196adf3267c6489d"}, + {file = "orjson-3.9.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:915e22c93e7b7b636240c5a79da5f6e4e84988d699656c8e27f2ac4c95b8dcc0"}, + {file = "orjson-3.9.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f26fb3e8e3e2ee405c947ff44a3e384e8fa1843bc35830fe6f3d9a95a1147b6e"}, + {file = "orjson-3.9.7-cp312-none-win_amd64.whl", hash = "sha256:d8692948cada6ee21f33db5e23460f71c8010d6dfcfe293c9b96737600a7df78"}, + {file = "orjson-3.9.7-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7bab596678d29ad969a524823c4e828929a90c09e91cc438e0ad79b37ce41166"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63ef3d371ea0b7239ace284cab9cd00d9c92b73119a7c274b437adb09bda35e6"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f8fcf696bbbc584c0c7ed4adb92fd2ad7d153a50258842787bc1524e50d7081"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90fe73a1f0321265126cbba13677dcceb367d926c7a65807bd80916af4c17047"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45a47f41b6c3beeb31ac5cf0ff7524987cfcce0a10c43156eb3ee8d92d92bf22"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a2937f528c84e64be20cb80e70cea76a6dfb74b628a04dab130679d4454395c"}, + {file = "orjson-3.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b4fb306c96e04c5863d52ba8d65137917a3d999059c11e659eba7b75a69167bd"}, + {file = "orjson-3.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:410aa9d34ad1089898f3db461b7b744d0efcf9252a9415bbdf23540d4f67589f"}, + {file = "orjson-3.9.7-cp37-none-win32.whl", hash = "sha256:26ffb398de58247ff7bde895fe30817a036f967b0ad0e1cf2b54bda5f8dcfdd9"}, + {file = "orjson-3.9.7-cp37-none-win_amd64.whl", hash = "sha256:bcb9a60ed2101af2af450318cd89c6b8313e9f8df4e8fb12b657b2e97227cf08"}, + {file = "orjson-3.9.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5da9032dac184b2ae2da4bce423edff7db34bfd936ebd7d4207ea45840f03905"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7951af8f2998045c656ba8062e8edf5e83fd82b912534ab1de1345de08a41d2b"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8e59650292aa3a8ea78073fc84184538783966528e442a1b9ed653aa282edcf"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9274ba499e7dfb8a651ee876d80386b481336d3868cba29af839370514e4dce0"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca1706e8b8b565e934c142db6a9592e6401dc430e4b067a97781a997070c5378"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cc275cf6dcb1a248e1876cdefd3f9b5f01063854acdfd687ec360cd3c9712a"}, + {file = "orjson-3.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:11c10f31f2c2056585f89d8229a56013bc2fe5de51e095ebc71868d070a8dd81"}, + {file = "orjson-3.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cf334ce1d2fadd1bf3e5e9bf15e58e0c42b26eb6590875ce65bd877d917a58aa"}, + {file = "orjson-3.9.7-cp38-none-win32.whl", hash = "sha256:76a0fc023910d8a8ab64daed8d31d608446d2d77c6474b616b34537aa7b79c7f"}, + {file = "orjson-3.9.7-cp38-none-win_amd64.whl", hash = "sha256:7a34a199d89d82d1897fd4a47820eb50947eec9cda5fd73f4578ff692a912f89"}, + {file = "orjson-3.9.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e7e7f44e091b93eb39db88bb0cb765db09b7a7f64aea2f35e7d86cbf47046c65"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d647b2a9c45a23a84c3e70e19d120011cba5f56131d185c1b78685457320bb"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0eb850a87e900a9c484150c414e21af53a6125a13f6e378cf4cc11ae86c8f9c5"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f4b0042d8388ac85b8330b65406c84c3229420a05068445c13ca28cc222f1f7"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd3e7aae977c723cc1dbb82f97babdb5e5fbce109630fbabb2ea5053523c89d3"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c616b796358a70b1f675a24628e4823b67d9e376df2703e893da58247458956"}, + {file = "orjson-3.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3ba725cf5cf87d2d2d988d39c6a2a8b6fc983d78ff71bc728b0be54c869c884"}, + {file = "orjson-3.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4891d4c934f88b6c29b56395dfc7014ebf7e10b9e22ffd9877784e16c6b2064f"}, + {file = "orjson-3.9.7-cp39-none-win32.whl", hash = "sha256:14d3fb6cd1040a4a4a530b28e8085131ed94ebc90d72793c59a713de34b60838"}, + {file = "orjson-3.9.7-cp39-none-win_amd64.whl", hash = "sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677"}, + {file = "orjson-3.9.7.tar.gz", hash = "sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142"}, ] [[package]] name = "packaging" -version = "24.0" +version = "23.1" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -1445,80 +1391,79 @@ files = [ [[package]] name = "pillow" -version = "10.3.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, - {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, - {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, - {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, - {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, - {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, - {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, - {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, - {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, - {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, - {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, - {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, - {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, - {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, - {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, - {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, - {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] @@ -1531,42 +1476,40 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.2.0" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "psutil" -version = "5.9.8" +version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, ] [package.extras] @@ -1586,6 +1529,73 @@ files = [ [package.dependencies] requests = ">=2.21.0" +[[package]] +name = "pycares" +version = "4.3.0" +description = "Python interface for c-ares" +optional = false +python-versions = "*" +files = [ + {file = "pycares-4.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:19c9cdd3322d422931982939773e453e491dfc5c0b2e23d7266959315c7a0824"}, + {file = "pycares-4.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9e56e9cdf46a092970dc4b75bbabddea9f480be5eeadc3fcae3eb5c6807c4136"}, + {file = "pycares-4.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c75a6241c79b935048272cb77df498da64b8defc8c4b29fdf9870e43ba4cbb4"}, + {file = "pycares-4.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d8654fac3742791b8bef59d1fbb3e19ae6a5c48876a6d98659f7c66ee546c4"}, + {file = "pycares-4.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebf50b049a245880f1aa16a6f72c4408e0a65b49ea1d3bf13383a44a2cabd2bf"}, + {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:84daf560962763c0359fd79c750ef480f0fda40c08b57765088dbe362e8dc452"}, + {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:978d10da7ee74b9979c494afa8b646411119ad0186a29c7f13c72bb4295630c6"}, + {file = "pycares-4.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c5b9d7fe52eb3d243f5ead58d5c0011884226d961df8360a34618c38c7515"}, + {file = "pycares-4.3.0-cp310-cp310-win32.whl", hash = "sha256:da7c7089ae617317d2cbe38baefd3821387b3bfef7b3ee5b797b871cb1257974"}, + {file = "pycares-4.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:7106dc683db30e1d851283b7b9df7a5ea4964d6bdd000d918d91d4b1f9bed329"}, + {file = "pycares-4.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4e7a24ecef0b1933f2a3fdbf328d1b529a76cda113f8364fa0742e5b3bd76566"}, + {file = "pycares-4.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7abccc2aa4771c06994e4d9ed596453061e2b8846f887d9c98a64ccdaf4790a"}, + {file = "pycares-4.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531fed46c5ed798a914c3207be4ae7b297c4d09e4183d3cf8fd9ee59a55d5080"}, + {file = "pycares-4.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c9335175af0c64a1e0ba67bdd349eb62d4eea0ad02c235ccdf0d535fd20f323"}, + {file = "pycares-4.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f0e95535027d2dcd51e780410632b0d3ed7e9e5ceb25dc0fe937f2c2960079"}, + {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3692179ce5fb96908ba342e1e5303608d0c976f0d5d4619fa9d3d6d9d5a9a1b4"}, + {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c4cb6cc7fe8e0606d30b60367f59fe26d1472e88555d61e202db70dea5c8edb"}, + {file = "pycares-4.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3215445396c74103e2054e6b349d9e85883ceda2006d0039fc2d58c9b11818a2"}, + {file = "pycares-4.3.0-cp311-cp311-win32.whl", hash = "sha256:6a0c0c3a0adf490bba9dbb37dbd07ec81e4a6584f095036ac34f06a633710ffe"}, + {file = "pycares-4.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:995cb37cc39bd40ca87bb16555a0f7724f3be30d9f9059a4caab2fde45b1b903"}, + {file = "pycares-4.3.0-cp36-cp36m-win32.whl", hash = "sha256:4c9187be72449c975c11daa1d94d7ddcc494f8a4c37a6c18f977cd7024a531d9"}, + {file = "pycares-4.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d7405ba10a2903a58b8b0faedcb54994c9ee002ad01963587fabf93e7e479783"}, + {file = "pycares-4.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:40aaa12081495f879f11f4cfc95edfec1ea14711188563102f9e33fe98728fac"}, + {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4972cac24b66c5997f3a3e2cb608e408066d80103d443e36d626a88a287b9ae7"}, + {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35886dba7aa5b73affca8729aeb5a1f5e94d3d9a764adb1b7e75bafca44eeca5"}, + {file = "pycares-4.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5cea6e1f3be016f155d60f27f16c1074d58b4d6e123228fdbc3326d076016af8"}, + {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3a9fd2665b053afb39226ac6f8137a60910ca7729358456df2fb94866f4297de"}, + {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e8e9195f869120e44e0aa0a6098bb5c19947f4753054365891f592e6f9eab3ef"}, + {file = "pycares-4.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:674486ecf2afb25ee219171b07cdaba481a1aaa2dabb155779c7be9ded03eaa9"}, + {file = "pycares-4.3.0-cp37-cp37m-win32.whl", hash = "sha256:1b6cd3161851499b6894d1e23bfd633e7b775472f5af35ae35409c4a47a2d45e"}, + {file = "pycares-4.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:710120c97b9afdba443564350c3f5f72fd9aae74d95b73dc062ca8ac3d7f36d7"}, + {file = "pycares-4.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9103649bd29d84bc6bcfaf09def9c0592bbc766018fad19d76d09989608b915d"}, + {file = "pycares-4.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c072dbaf73cb5434279578dc35322867d8d5df053e14fdcdcc589994ba4804ae"}, + {file = "pycares-4.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008531733f9c7a976b59c7760a3672b191159fd69ae76c01ca051f20b5e44164"}, + {file = "pycares-4.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2aae02d97d77dcff840ab55f86cb8b99bf644acbca17e1edb7048408b9782088"}, + {file = "pycares-4.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:257953ae6d400a934fd9193aeb20990ac84a78648bdf5978e998bd007a4045cd"}, + {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c28d481efae26936ec08cb6beea305f4b145503b152cf2c4dc68cc4ad9644f0e"}, + {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:976249b39037dbfb709ccf7e1c40d2785905a0065536385d501b94570cfed96d"}, + {file = "pycares-4.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:98568c30cfab6b327d94ae1acdf85bbba4cffd415980804985d34ca07e6f4791"}, + {file = "pycares-4.3.0-cp38-cp38-win32.whl", hash = "sha256:a2f3c4f49f43162f7e684419d9834c2c8ec165e54cb8dc47aa9dc0c2132701c0"}, + {file = "pycares-4.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:1730ef93e33e4682fbbf0e7fb19df2ed9822779d17de8ea6e20d5b0d71c1d2be"}, + {file = "pycares-4.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a26b3f1684557025da26ce65d076619890c82b95e38cc7284ce51c3539a1ce8"}, + {file = "pycares-4.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86112cce01655b9f63c5e53b74722084e88e784a7a8ad138d373440337c591c9"}, + {file = "pycares-4.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01465a191dc78e923884bb45cd63c7e012623e520cf7ed67e542413ee334804"}, + {file = "pycares-4.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9fd5d6012f3ee8c8038cbfe16e988bbd17b2f21eea86650874bf63757ee6161"}, + {file = "pycares-4.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa36b8ea91eae20b5c7205f3e6654423f066af24a1df02b274770a96cbcafaa7"}, + {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:61019151130557c1788cae52e4f2f388a7520c9d92574f3a0d61c974c6740db0"}, + {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:231962bb46274c52632469a1e686fab065dbd106dbef586de4f7fb101e297587"}, + {file = "pycares-4.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6c979512fa51c7ccef5204fe10ed4e5c44c2bce5f335fe98a3e423f1672bd7d4"}, + {file = "pycares-4.3.0-cp39-cp39-win32.whl", hash = "sha256:655cf0df862ce3847a60e1a106dafa2ba2c14e6636bac49e874347acdc7312dc"}, + {file = "pycares-4.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:36f2251ad0f99a5ce13df45c94c3161d9734c9e9fa2b9b4cc163b853ca170dc5"}, + {file = "pycares-4.3.0.tar.gz", hash = "sha256:c542696f6dac978e9d99192384745a65f80a7d9450501151e4a7563e06010d45"}, +] + +[package.dependencies] +cffi = ">=1.5.0" + +[package.extras] +idna = ["idna (>=2.1)"] + [[package]] name = "pycparser" version = "2.21" @@ -1599,18 +1609,17 @@ files = [ [[package]] name = "pygments" -version = "2.17.2" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] plugins = ["importlib-metadata"] -windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pylint" @@ -1638,17 +1647,17 @@ testutils = ["gitpython (>3)"] [[package]] name = "pymdown-extensions" -version = "10.7.1" +version = "10.4" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, - {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, + {file = "pymdown_extensions-10.4-py3-none-any.whl", hash = "sha256:cfc28d6a09d19448bcbf8eee3ce098c7d17ff99f7bd3069db4819af181212037"}, + {file = "pymdown_extensions-10.4.tar.gz", hash = "sha256:bc46f11749ecd4d6b71cf62396104b4a200bad3498cb0f5dad1b8502fe461a35"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.2" pyyaml = "*" [package.extras] @@ -1656,27 +1665,41 @@ extra = ["pygments (>=2.12)"] [[package]] name = "python-dateutil" -version = "2.9.0.post0" +version = "2.8.2" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] [package.dependencies] six = ">=1.5" +[[package]] +name = "pytimeparse2" +version = "1.7.1" +description = "Time expression parser." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytimeparse2-1.7.1-py3-none-any.whl", hash = "sha256:a162ea6a7707fd0bb82dd99556efb783935f51885c8bdced0fce3fffe85ab002"}, + {file = "pytimeparse2-1.7.1.tar.gz", hash = "sha256:98668cdcba4890e1789e432e8ea0059ccf72402f13f5d52be15bdfaeb3a8b253"}, +] + +[package.extras] +dateutil = ["python-dateutil (>=2.8.2,<2.9.0)"] + [[package]] name = "pytz" -version = "2024.1" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -1755,101 +1778,119 @@ pyyaml = "*" [[package]] name = "rapidfuzz" -version = "3.7.0" +version = "3.3.0" description = "rapid fuzzy string matching" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "rapidfuzz-3.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:860f438238f1807532aa5c5c25e74c284232ccc115fe84697b78e25d48f364f7"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bb9285abeb0477cdb2f8ea0cf7fd4b5f72ed5a9a7d3f0c0bb4a5239db2fc1ed"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:08671280e0c04d2bb3f39511f13cae5914e6690036fd1eefc3d47a47f9fae634"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04bae4d9c16ce1bab6447d196fb8258d98139ed8f9b288a38b84887985e4227b"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1efa2268b51b68156fb84d18ca1720311698a58051c4a19c40d670057ce60519"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:600b4d4315f33ec0356c0dab3991a5d5761102420bcff29e0773706aa48936e8"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18bc2f13c73d5d34499ff6ada55b052c445d3aa64d22c2639e5ab45472568046"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e11c5e6593be41a555475c9c20320342c1f5585d635a064924956944c465ad4"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d7878025248b99ccca3285891899373f98548f2ca13835d83619ffc42241c626"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b4a7e37fe136022d944374fcd8a2f72b8a19f7b648d2cdfb946667e9ede97f9f"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b5881856f830351aaabd869151124f64a80bf61560546d9588a630a4e933a5de"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:c788b11565cc176fab8fab6dfcd469031e906927db94bf7e422afd8ef8f88a5a"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9e17a3092e74025d896ef1d67ac236c83494da37a78ef84c712e4e2273c115f1"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-win32.whl", hash = "sha256:e499c823206c9ffd9d89aa11f813a4babdb9219417d4efe4c8a6f8272da00e98"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:91f798cc00cd94a0def43e9befc6e867c9bd8fa8f882d1eaa40042f528b7e2c7"}, - {file = "rapidfuzz-3.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:d5a3872f35bec89f07b993fa1c5401d11b9e68bcdc1b9737494e279308a38a5f"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ef6b6ab64c4c91c57a6b58e1d690b59453bfa1f1e9757a7e52e59b4079e36631"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f9070b42c0ba030b045bba16a35bdb498a0d6acb0bdb3ff4e325960e685e290"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:63044c63565f50818d885bfcd40ac369947da4197de56b4d6c26408989d48edf"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49b0c47860c733a3d73a4b70b97b35c8cbf24ef24f8743732f0d1c412a8c85de"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1b14489b038f007f425a06fcf28ac6313c02cb603b54e3a28d9cfae82198cc0"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be08f39e397a618aab907887465d7fabc2d1a4d15d1a67cb8b526a7fb5202a3e"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16895dc62a7b92028f9c8b6d22830f1cbc77306ee794f461afc6028e1a8d7539"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:579cce49dfa57ffd8c8227b3fb53cced54b4df70cec502e63e9799b4d1f44004"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:40998c8dc35fdd221790b8b5134a8d7499adbfab9a5dd9ec626c7e92e17a43ed"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:dc3fdb4738a6b83ae27f1d8923b00d3a9c2b5c50da75b9f8b81841839c6e3e1f"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:92b8146fbfb37ac358ef7e0f6b79619e4f793fbbe894b99ea87920f9c0a9d77d"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1dfceaa7c2914585bb8a043265c39ec09078f13fbf53b5525722fc074306b6fa"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f332d61f51b0b9c8b55a0fb052b4764b6ad599ea8ce948ac47a4388e9083c35e"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-win32.whl", hash = "sha256:dfd1e4819f1f3c47141f86159b44b7360ecb19bf675080b3b40437bf97273ab9"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:594b9c33fc1a86784962043ee3fbaaed875fbaadff72e467c2f7a83cd6c5d69d"}, - {file = "rapidfuzz-3.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:0b13a6823a1b83ae43f8bf35955df35032bee7bec0daf9b5ab836e0286067434"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:075a419a0ec29be44b3d7f4bcfa5cb7e91e419379a85fc05eb33de68315bd96f"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:51a5b96d2081c3afbef1842a61d63e55d0a5a201473e6975a80190ff2d6f22ca"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9460d8fddac7ea46dff9298eee9aa950dbfe79f2eb509a9f18fbaefcd10894c"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39eb1513ee139ba6b5c01fe47ddf2d87e9560dd7fdee1068f7f6efbae70de34"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eace9fdde58a425d4c9a93021b24a0cac830df167a5b2fc73299e2acf9f41493"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cc77237242303733de47829028a0a8b6ab9188b23ec9d9ff0a674fdcd3c8e7f"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74e692357dd324dff691d379ef2c094c9ec526c0ce83ed43a066e4e68fe70bf6"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2075ac9ee5c15d33d24a1efc8368d095602b5fd9634c5b5f24d83e41903528"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5a8ba64d72329a940ff6c74b721268c2004eecc48558f648a38e96915b5d1c1b"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a1f268a2a37cd22573b4a06eccd481c04504b246d3cadc2d8e8dfa64b575636d"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:42c2e8a2341363c7caf276efdbe1a673fc5267a02568c47c8e980f12e9bc8727"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a9acca34b34fb895ee6a84c436bb919f3b9cd8f43e7003d43e9573a1d990ff74"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9bad6a0fe3bc1753dacaa6229a8ba7d9844eb7ae24d44d17c5f4c51c91a8a95e"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-win32.whl", hash = "sha256:c86bc4b1d2380739e6485396195e30021df509b4923f3f757914e171587bce7c"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d7361608c8e73a1dc0203a87d151cddebdade0098a047c46da43c469c07df964"}, - {file = "rapidfuzz-3.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:8fdc26e7863e0f63c2185d53bb61f5173ad4451c1c8287b535b30ea25a419a5a"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9b6167468f76779a14b9af66210f68741af94d32d086f19118de4e919f00585c"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bd394e28ff221557ea4d8152fcec3e66d9f620557feca5f2bedc4c21f8cf2f9"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8e70f876ca89a6df344f8157ac60384e8c05a0dfb442da2490c3f1c45238ccf5"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c837f89d86a5affe9ee6574dad6b195475676a6ab171a67920fc99966f2ab2c"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cda4550a98658f9a8bcdc03d0498ed1565c1563880e3564603a9eaae28d51b2a"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecd70212fd9f1f8b1d3bdd8bcb05acc143defebd41148bdab43e573b043bb241"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:187db4cc8fb54f8c49c67b7f38ef3a122ce23be273032fa2ff34112a2694c3d8"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4604dfc1098920c4eb6d0c6b5cc7bdd4bf95b48633e790c1d3f100a25870691d"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01581b688c5f4f6665b779135e32db0edab1d78028abf914bb91469928efa383"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0828b55ec8ad084febdf4ab0c942eb1f81c97c0935f1cb0be0b4ea84ce755988"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:150c98b65faff17b917b9d36bff8a4d37b6173579c6bc2e38ff2044e209d37a4"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7e4eea225d2bff1aff4c85fcc44716596d3699374d99eb5906b7a7560297460e"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7bc944d7e830cfce0f8b4813875f05904207017b66e25ab7ee757507001310a9"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-win32.whl", hash = "sha256:3e55f02105c451ab6ff0edaaba57cab1b6c0a0241cfb2b306d4e8e1503adba50"}, - {file = "rapidfuzz-3.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:41851620d2900791d66d9b6092fc163441d7dd91a460c73b07957ff1c517bc30"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e8041c6b2d339766efe6298fa272f79d6dd799965df364ef4e50f488c101c899"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4e09d81008e212fc824ea23603ff5270d75886e72372fa6c7c41c1880bcb57ed"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:419c8961e861fb5fc5590056c66a279623d1ea27809baea17e00cdc313f1217a"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1522eaab91b9400b3ef16eebe445940a19e70035b5bc5d98aef23d66e9ac1df0"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:611278ce3136f4544d596af18ab8849827d64372e1d8888d9a8d071bf4a3f44d"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4efa9bfc5b955b6474ee077eee154e240441842fa304f280b06e6b6aa58a1d1e"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0cc9d3c8261457af3f8756b1f71a9fdc4892978a9e8b967976d2803e08bf972"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce728e2b582fd396bc2559160ee2e391e6a4b5d2e455624044699d96abe8a396"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a6a36c9299e059e0bee3409218bc5235a46570c20fc980cdee5ed21ea6110ad"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9ea720db8def684c1eb71dadad1f61c9b52f4d979263eb5d443f2b22b0d5430a"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:358692f1df3f8aebcd48e69c77c948c9283b44c0efbaf1eeea01739efe3cd9a6"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:faded69ffe79adcefa8da08f414a0fd52375e2b47f57be79471691dad9656b5a"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7f9f3dc14fadbd553975f824ac48c381f42192cec9d7e5711b528357662a8d8e"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-win32.whl", hash = "sha256:7be5f460ff42d7d27729115bfe8a02e83fa0284536d8630ee900d17b75c29e65"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:dd5ad2c12dab2b98340c4b7b9592c8f349730bda9a2e49675ea592bbcbc1360b"}, - {file = "rapidfuzz-3.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:aa163257a0ac4e70f9009d25e5030bdd83a8541dfa3ba78dc86b35c9e16a80b4"}, - {file = "rapidfuzz-3.7.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4e50840a8a8e0229563eeaf22e21a203359859557db8829f4d0285c17126c5fb"}, - {file = "rapidfuzz-3.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:632f09e19365ace5ff2670008adc8bf23d03d668b03a30230e5b60ff9317ee93"}, - {file = "rapidfuzz-3.7.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:209dda6ae66b702f74a78cef555397cdc2a83d7f48771774a20d2fc30808b28c"}, - {file = "rapidfuzz-3.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bc0b78572626af6ab134895e4dbfe4f4d615d18dcc43b8d902d8e45471aabba"}, - {file = "rapidfuzz-3.7.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ba14850cc8258b3764ea16b8a4409ac2ba16d229bde7a5f495dd479cd9ccd56"}, - {file = "rapidfuzz-3.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b917764fd2b267addc9d03a96d26f751f6117a95f617428c44a069057653b528"}, - {file = "rapidfuzz-3.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1252ca156e1b053e84e5ae1c8e9e062ee80468faf23aa5c543708212a42795fd"}, - {file = "rapidfuzz-3.7.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86c7676a32d7524e40bc73546e511a408bc831ae5b163029d325ea3a2027d089"}, - {file = "rapidfuzz-3.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20e7d729af2e5abb29caa070ec048aba042f134091923d9ca2ac662b5604577e"}, - {file = "rapidfuzz-3.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86eea3e6c314a9238de568254a9c591ec73c2985f125675ed5f171d869c47773"}, - {file = "rapidfuzz-3.7.0.tar.gz", hash = "sha256:620df112c39c6d27316dc1e22046dc0382d6d91fd60d7c51bd41ca0333d867e9"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6bec4903d4127d1eaa20a62105a03b38184ddaef40e18393caa1d98ae3de6a0c"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2e6c4580b0de835156671390959efad13741d0fb35cc355bc546d1dbf399db5e"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66b92484cc5ea1b546d2adef50407aa011df8c92fcc22ec9b9803eff2d917dcc"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5103c8f4aca404d1db4ba65c393d85d8a78f2547ce7d4a434921a4a1383aa67"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cf3d37e38e7a205758269cd8c8a2ae506214732ef2a82bb1ef01c695963b3f5"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efb8cc7da41926e4e68773afcdb2fa9bb6a32caefbc297c818526232a58ad5d7"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8b22e1973009e89ac0e1ad157ff978a15021c2acddfa15371456ef58156aa47"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:307c6b9e1e47afe9dc274e2e5bccb81be0941f90f395a38f77405f1d7216bc0a"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:404b6bf53ac0b2b0b1f901f51953e04b758bf6905e1ee1cc29001b1cdfa55316"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:dfccefebbda76796164f8ec6ec04999d635be2d86d83b09d703b8a1f312234c7"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:4f77055d29ab2af3d3be16d50ecabb3ade6ea61bb1768b578f84cf558be5ef1a"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7ea934a589a7b3d522cbc358e9f8bdf6fae38c65d35596b12616f78c1c3089ec"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:536238d37c9918b235899cc0e330a45304ab3c25be963912b7a969b61bbb309f"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-win32.whl", hash = "sha256:c7070a163017739bfaf4c8c31d66d347d7ab401c4bdb136b268508c24410aa58"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:e45e5930d9f4f78f8d4b34baf4700f150b845cf8ed31bb2fb9149e29e07c6bb8"}, + {file = "rapidfuzz-3.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:783d082341785a832c65010a5dbba3f0c3d500f919edb25f076ddd5991fc8fba"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:12fd4e7c7d8a58fc43a9fbbe76b577c599403174740160937f852be4e78734e7"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a661302b2a93afd3cbeed7a2c43d671d65de1f503c129e745255507c8a91a24"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba3421dd0f5048403acdad536b451d59bccda7b050144928c07d5830af1fb127"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b047aca009e7978a39b85f36a2ab3dbea2bec773d0cab739caa5c6c3e51fe051"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed199d15bfac7a9692bba218f63d117b558f5e08d44c678e2bc9bb43931a701b"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d91e0d03dce17d5e80fc3f12c0c1d1b304f1ad7c26e79e9378236772ab5de393"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c72aafd9f4a83d504c898473e084548ddd3fb2b2eb56121513a13807544a8d6"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:324bc1b508a32972bcf267d1fbf5fddf831da0bbb9c052ffaf733d0be30819f4"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8fd22c2fc3218614991abff75989a55ca9d99c50f69376457246515ce95e27d"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8f5793a577570211f5dc9b08a9c53d9b7e649372a6dcb8756f3eb823504778eb"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1370bb6decb505b7fee362ffd2f111ca0c369e62a35eac35386b87a8c8f29a38"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:906ddf3902ac4537bf21b2140c9b089c5cf4b203fdba72b447d89d6e8137132b"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb60f7d2bbdabcd41059ccb68a8aea2353f96147a8402fac6581391e7edf809a"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-win32.whl", hash = "sha256:ab7b2c2cb65075d68a9c0f28513ce5154c6e7520fe13b76755971eb135138e74"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cae783ac3830a20fe32e80c53a406654d3a75b9b5d3351e81ac75ce470f24ad2"}, + {file = "rapidfuzz-3.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:f4b8fd0acbbddaf0d96c1f01e949d645073ad54f8fee1a59af6aa914340ae331"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9558411d11dfcf85d4b080e0bc005114868e217c41f0a36cc13dc2c8ec91eacc"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0965b30b84687107658cb6dc0852d1e14e2a80a93036320264128c8940643db7"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5724ba0f4ac93ad43cc80407cbca2c598a36daf7f65c14279deaf3ad159f00ac"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6467e0adfcb43b4d5bdd92a009cf7c8b952189b943c55050a9f1a8cd8180865"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da5d006f329518eb797c9ed12e05bb8332663c3afa5d2a508032f64f7232766c"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:343f863df7000f212156ed030196ed20215f5231ca54749228a5d6a317b626e8"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:113fb1020be6f4727ecbd4fb29a510e14effe85910edf22cafb6c5d1eea75694"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78e0d6d061835b16ad42df98fe826e4a0a3380621568f80c6ee2fa230d8d7020"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:47ddf5d075e09d0baccc3d499c5eba36e2605771da65a6d95fcc72e22c5e36b9"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bc354de84a2a56890a68a526b0d689dd010df1003794d24f222ee5ba6405d39d"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:2a58279ee1595838dfc2b80562e0a89f6cb98b427c738b57ea146318604dba11"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:f3b40aa31c7a970696967ff43d6d5bf3be4f6c008c9ad661cf8721af9c7c81fc"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7437bfcef4b2b1417731293b97343cb45f1ca46ced381d511cd601ea41b8ab49"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-win32.whl", hash = "sha256:bd6ec3ad3fa5a490dfce534bb87429c122faf6239c97d6c2763353ef61ddab08"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:3ef0cf46d84bc307100f48212966e58f7a55c6045cb4ce9fb3e386313e0fc3a1"}, + {file = "rapidfuzz-3.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:cfa1345d5007efc1bdad6f40d2bbdc42fc83bb6b9fcb8cd3cc830180ccf360b9"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fbafe4e45086b9245e12d97d0c4232e866a52469221acef05192bdb2a9b96a21"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e053d10f01f06d0e10a8a229f2d82845f6d5ec13d67b6a6c11910f49f6e46b2"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2ca9583c9e0361144138f4884b59e7165daa56b5983f15bbc1441de3d548a9"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1441d18aa459e72c5aeacf6ec140878c2ec6debdbbabfd68cd5968ac07ac9b2b"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2de666fb4d3558847b229b4a06909557628a6a1fe5ccdc68e522eed90f442e6f"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b632178ac063e8ad5b8d8bf051bd2436170c3822e865eab63e45a3289b80683"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7f3da8741463e0345480e49d8bc89b83713d802c5c2851d590bd7ba1aaeace87"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4839f1760c7d5e1f1d01230065a111773f2f78277df5d66a55902bdef77f3f93"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:78641fecf74571d0f693cda9aaeb70db581c1df4f0ce6a9077b05558e7c5b6f5"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5df1d384283aa2491ecdc23d00d3b2c2f1ed745f9ca42813b3e51e39a180f9b2"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b13dc341f4deb2f599db3fe0ad52ab87f7bb1fc09911b4823ac618925fa400e0"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:ca3c582e57df2407c5e07db26edb4ef19c2a7882ce2bf0fc1c5a6394986f84e5"}, + {file = "rapidfuzz-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:483299d57306c29a2bb1eb5d978f4d25a5e8d67ffee18b4155847bf9fc422b82"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4671cd2e0d7e861b7c7aea8ed529b93e7ebec9ec4f6858cd72c395a99074826b"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9bb2690f0d760ebfb4a943f51deb7b3d689b1fa7f87f8de1f005b19574f59259"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8a1bba2aa6af58ff04e9fdde40747dfdb3f1bc836bbb86533e317f9a4b6a607d"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a6f8edd755d29ac7a9804382780d4b383f494fed894514819932b9a484fa117"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eb377265e4d2f9e6c21a0adc865dddd52b1cd90ecd2552e99b386bb1effe38a"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:319e67f8c1d7b9b45386821ace33edd289ec0995d80361775f5d6d15d684c6a6"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9837f4528071e5dc695fb30098d9b49341e62fab32ef5c15094be260df1a48e4"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29acfc446d091e723caa65e2a7e1b2d7669ac927d02effc5cc636bcd2f41bba5"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:25704f21afa6fc767902e9d0b840623c008d28f58022904c282e26e4f38b770d"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e5051c47a2a00b10c62b51bf1c4aefd2adb34d837b56fe16cfe505db7b7cc2be"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a441e90ec5ac09746d3960221df1268e7a7f0b47978c388e7dcae83e23ae3462"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e7f8056826ba8342f6d9c199750cddce70d1d90254320494115c26480fac44cc"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:78c73efada660cc548d166f08970aeff0ee4dd0a66fa4f27bd24ac6c31551503"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-win32.whl", hash = "sha256:9acd9cd547089b8835ac36223888a43bdfd2492064a8c5ee00cdaf6ef010de4b"}, + {file = "rapidfuzz-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:93bdb512798f8226cd4b785a73c70efa582f26a7287d55337b9216b384946494"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5b8cdcf915c7058815321f2c0c30d20097722459bbb1fd2e1cae574bd03a39db"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:376b87d6b7c83b6b2923f0916fea6fb7288ab66b1b1f3b0cc39e601bb09488cf"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3363beb1da090be877e8a22ac6daefe8e0a6f6aeec10cebc4ec39db3abece897"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1dbf0b3dcb5b9615ea5b90619eb5d7756c2d377770d53c4101ce728de53a8e"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c4628e165910aeb96099dd42822ad32819511c2a4061dbf62169302d7299f6e"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f25757cb21df937daed9727b628435390ce86af7734cbb3b5c055a1c57ffb434"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4aad090c40474f26578a968e4fbcc9418a4292201a3a0f96a2290465f5aaeec"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ddf7a03740420bfae76ca5d86f934389729cc231285b669fd3d1c913b84005"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:888c096f29f1dbfa6614ffc2780d2c766033e6c2906413d4d6d1f04e5cda05d7"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a62d1435ef7d897ac37c5975d1f672f5e73857eb183bec821a174ed937f53fb"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ecc437ad773d40217e0a4704ee60002f7e699383dffbf576f41ed7ae6f4a8acc"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59462ea2f94c809fdea2426a7cd2fe219f171cc7d0dfdbc5681176f86884da4"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:68484409517617feccac3092ec879d5630253890e6895ffbe7880f063329d114"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-win32.whl", hash = "sha256:78abf9f6e3e60d4004f66085bf4618cb5480ca6155d39d17277db7d29388e49d"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:56dec09e716fb12c9fa10649b5980e4bad9563b2b7dc74776618b84603740f6c"}, + {file = "rapidfuzz-3.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:3dfe9f4cdd9f9087f7bdd7c9f4e9304557ca8c44d4a1b1eca69230535e9ab2df"}, + {file = "rapidfuzz-3.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c089bf351657a16a31b911ddab3e2f19b04062f7c8244cea1ec5a40f490e0829"}, + {file = "rapidfuzz-3.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e737bd4f30917643c50694df1486ce1a5f869bbf523f38b867076a775ca1a00"}, + {file = "rapidfuzz-3.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68800fe792718b5b2a5ff7febbb6e4cc551ef767704873ec04062f642c9f5901"}, + {file = "rapidfuzz-3.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:557a736c8c6e01e2d844211eb4f6f7913f54a912f6578fdf8d72312ae906929c"}, + {file = "rapidfuzz-3.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e809367f75b1d65ea5524a6acfcc4dcced79f4f2d19dbad8f17175ad4864515b"}, + {file = "rapidfuzz-3.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a2cc8ea602e030dd5a220e537cc6bbb241ecfe293614415076d8045dd198acd8"}, + {file = "rapidfuzz-3.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0861477cb2d21ed3e3a96a98adba6b24ecaaf50021991fdd72794f963a8f8e9"}, + {file = "rapidfuzz-3.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fa079737a22e5b098545476be428a90635bf7c89bf3ea5587fa2d07645b1569"}, + {file = "rapidfuzz-3.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada0258e3d23518b74af2363bb4062cfe492ec0c7c4c752aff6cd084d6917830"}, + {file = "rapidfuzz-3.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:50b2b2b96b9c7841f6e2ab001153cd0bfcf707c427f20fed2f1f3849a99bd3fc"}, + {file = "rapidfuzz-3.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:062a5ed305a6d45798cf5548c780d4a434d1f188cc10b971c5c389d11fa356e7"}, + {file = "rapidfuzz-3.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18b51a2858e7adc950407bdb21382256d499472ba5c5d870eada0fa880d854eb"}, + {file = "rapidfuzz-3.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0f0b3587ee7dd0f8d96078c33ba88e583dab8834dd658b18df29cfced360cc6"}, + {file = "rapidfuzz-3.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f9a40cc64ef814ae60d567c3c9ad01ce92243a9ed6746b31bcddebc1ecc2284"}, + {file = "rapidfuzz-3.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cd254dc3436347a12e683c9d1984230228270009ff0985a38cbf5cbd25e8bc8c"}, + {file = "rapidfuzz-3.3.0.tar.gz", hash = "sha256:5e71bc5829f41e78b2d009431aedeb308ee3699d2bbbc68b7739db9b40bd1465"}, ] [package.extras] @@ -1871,58 +1912,67 @@ dev = ["black (==22.1.0)", "flake8 (==4.0.1)", "isort (==5.10.1)"] [[package]] name = "red-discordbot" -version = "3.5.9" +version = "3.5.5" description = "A highly customisable Discord bot" optional = false -python-versions = "<3.12,>=3.8.1" +python-versions = ">=3.8.1,<3.12" files = [ - {file = "Red_DiscordBot-3.5.9-py3-none-any.whl", hash = "sha256:d392c4947f95151435792e99cc74afb7c440b11fb516fa59927f5e462c61385f"}, - {file = "red_discordbot-3.5.9.tar.gz", hash = "sha256:1f50e508b6923868ea4d7bb0eb80a2b1dbdeae248cf0a57717539ca6f5c5874f"}, + {file = "Red-DiscordBot-3.5.5.tar.gz", hash = "sha256:ae85701645804d3ef265ff8ec609ab53bb31196d7375890acbd53fd2edd501ba"}, + {file = "Red_DiscordBot-3.5.5-py3-none-any.whl", hash = "sha256:ee4cae3b4bc84ecb24c46b6fe6d0bb699748139eaa3ae1c8c682505b0f17c301"}, ] [package.dependencies] -aiohttp = "3.9.3" +aiodns = "3.0.0" +aiohttp = "3.8.5" aiohttp-json-rpc = "0.13.3" aiosignal = "1.3.1" -apsw = "3.45.2.0" -attrs = "23.2.0" -babel = "2.14.0" +apsw = "3.43.1.0" +async-timeout = "4.0.3" +attrs = "23.1.0" +babel = "2.12.1" brotli = "1.1.0" +cffi = "1.15.1" +charset-normalizer = "3.2.0" click = "8.1.7" colorama = {version = "0.4.6", markers = "sys_platform == \"win32\""} contextlib2 = "21.6.0" discord-py = "2.3.2" -distro = {version = "1.9.0", markers = "sys_platform == \"linux\""} -frozenlist = "1.4.1" -idna = "3.6" -markdown = "3.6" +distro = {version = "1.8.0", markers = "sys_platform == \"linux\""} +frozenlist = "1.4.0" +idna = "3.4" +importlib-metadata = "6.8.0" +markdown = "3.4.4" markdown-it-py = "3.0.0" mdurl = "0.1.2" -multidict = "6.0.5" -orjson = "3.10.0" -packaging = "24.0" -platformdirs = "4.2.0" -psutil = "5.9.8" -pygments = "2.17.2" -python-dateutil = "2.9.0.post0" +multidict = "6.0.4" +orjson = "3.9.7" +packaging = "23.1" +platformdirs = "3.10.0" +psutil = "5.9.5" +pycares = "4.3.0" +pycparser = "2.21" +pygments = "2.16.1" +python-dateutil = "2.8.2" +pytz = "2023.3.post1" pyyaml = "6.0.1" -rapidfuzz = "3.7.0" +rapidfuzz = "3.3.0" red-commons = "1.0.0" red-lavalink = "0.11.0" -rich = "13.7.1" +rich = "13.5.2" schema = "0.7.5" six = "1.16.0" -typing-extensions = "4.10.0" -uvloop = {version = "0.19.0", markers = "sys_platform != \"win32\" and platform_python_implementation == \"CPython\""} -yarl = "1.9.4" +typing-extensions = "4.7.1" +uvloop = {version = "0.17.0", markers = "sys_platform != \"win32\" and platform_python_implementation == \"CPython\""} +yarl = "1.9.2" +zipp = "3.16.2" [package.extras] -all = ["async-timeout (==4.0.3)", "asyncpg (==0.29.0)"] -dev = ["alabaster (==0.7.13)", "astroid (==3.1.0)", "async-timeout (==4.0.3)", "asyncpg (==0.29.0)", "black (==23.12.1)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "dill (==0.3.8)", "docutils (==0.20.1)", "exceptiongroup (==1.2.0)", "imagesize (==1.4.1)", "importlib-metadata (==7.1.0)", "iniconfig (==2.0.0)", "isort (==5.13.2)", "jinja2 (==3.1.3)", "markupsafe (==2.1.5)", "mccabe (==0.7.0)", "mypy-extensions (==1.0.0)", "pathspec (==0.12.1)", "pluggy (==1.4.0)", "pylint (==3.1.0)", "pytest (==7.4.4)", "pytest-asyncio (==0.21.1)", "pytest-mock (==3.14.0)", "pytz (==2024.1)", "requests (==2.31.0)", "snowballstemmer (==2.2.0)", "sphinx (==7.1.2)", "sphinx-prompt (==1.7.0)", "sphinx-rtd-theme (==2.0.0)", "sphinxcontrib-applehelp (==1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (==2.0.1)", "sphinxcontrib-jquery (==4.1)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-trio (==1.1.2)", "tomli (==2.0.1)", "tomli (==2.0.1)", "tomlkit (==0.12.4)", "urllib3 (==2.2.1)", "zipp (==3.18.1)"] -doc = ["alabaster (==0.7.13)", "certifi (==2024.2.2)", "charset-normalizer (==3.3.2)", "docutils (==0.20.1)", "imagesize (==1.4.1)", "importlib-metadata (==7.1.0)", "jinja2 (==3.1.3)", "markupsafe (==2.1.5)", "pytz (==2024.1)", "requests (==2.31.0)", "snowballstemmer (==2.2.0)", "sphinx (==7.1.2)", "sphinx-prompt (==1.7.0)", "sphinx-rtd-theme (==2.0.0)", "sphinxcontrib-applehelp (==1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (==2.0.1)", "sphinxcontrib-jquery (==4.1)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-trio (==1.1.2)", "urllib3 (==2.2.1)", "zipp (==3.18.1)"] -postgres = ["async-timeout (==4.0.3)", "asyncpg (==0.29.0)"] -style = ["black (==23.12.1)", "mypy-extensions (==1.0.0)", "pathspec (==0.12.1)", "tomli (==2.0.1)"] -test = ["astroid (==3.1.0)", "dill (==0.3.8)", "exceptiongroup (==1.2.0)", "iniconfig (==2.0.0)", "isort (==5.13.2)", "mccabe (==0.7.0)", "pluggy (==1.4.0)", "pylint (==3.1.0)", "pytest (==7.4.4)", "pytest-asyncio (==0.21.1)", "pytest-mock (==3.14.0)", "tomli (==2.0.1)", "tomlkit (==0.12.4)"] +all = ["asyncpg (==0.28.0)"] +dev = ["alabaster (==0.7.13)", "astroid (==2.15.6)", "asyncpg (==0.28.0)", "black (==23.9.1)", "certifi (==2023.7.22)", "dill (==0.3.7)", "docutils (==0.18.1)", "exceptiongroup (==1.1.3)", "imagesize (==1.4.1)", "iniconfig (==2.0.0)", "isort (==5.12.0)", "jinja2 (==3.1.2)", "lazy-object-proxy (==1.9.0)", "markupsafe (==2.1.3)", "mccabe (==0.7.0)", "mypy-extensions (==1.0.0)", "pathspec (==0.11.2)", "pluggy (==1.3.0)", "pylint (==2.17.5)", "pytest (==7.4.2)", "pytest-asyncio (==0.21.1)", "pytest-mock (==3.11.1)", "requests (==2.31.0)", "snowballstemmer (==2.2.0)", "sphinx (==7.1.2)", "sphinx-prompt (==1.7.0)", "sphinx-rtd-theme (==1.3.0)", "sphinxcontrib-applehelp (==1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (==2.0.1)", "sphinxcontrib-jquery (==4.1)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-trio (==1.1.2)", "tomli (==2.0.1)", "tomlkit (==0.12.1)", "urllib3 (==2.0.4)", "wrapt (==1.15.0)"] +doc = ["alabaster (==0.7.13)", "certifi (==2023.7.22)", "docutils (==0.18.1)", "imagesize (==1.4.1)", "jinja2 (==3.1.2)", "markupsafe (==2.1.3)", "requests (==2.31.0)", "snowballstemmer (==2.2.0)", "sphinx (==7.1.2)", "sphinx-prompt (==1.7.0)", "sphinx-rtd-theme (==1.3.0)", "sphinxcontrib-applehelp (==1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (==2.0.1)", "sphinxcontrib-jquery (==4.1)", "sphinxcontrib-jsmath (==1.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)", "sphinxcontrib-trio (==1.1.2)", "urllib3 (==2.0.4)"] +postgres = ["asyncpg (==0.28.0)"] +style = ["black (==23.9.1)", "mypy-extensions (==1.0.0)", "pathspec (==0.11.2)", "tomli (==2.0.1)"] +test = ["astroid (==2.15.6)", "dill (==0.3.7)", "exceptiongroup (==1.1.3)", "iniconfig (==2.0.0)", "isort (==5.12.0)", "lazy-object-proxy (==1.9.0)", "mccabe (==0.7.0)", "pluggy (==1.3.0)", "pylint (==2.17.5)", "pytest (==7.4.2)", "pytest-asyncio (==0.21.1)", "pytest-mock (==3.11.1)", "tomli (==2.0.1)", "tomlkit (==0.12.1)", "wrapt (==1.15.0)"] [[package]] name = "red-lavalink" @@ -2069,13 +2119,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rich" -version = "13.7.1" +version = "13.5.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, - {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, + {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"}, + {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"}, ] [package.dependencies] @@ -2087,28 +2137,28 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "ruff" -version = "0.3.4" +version = "0.2.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378"}, - {file = "ruff-0.3.4-py3-none-win32.whl", hash = "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102"}, - {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, - {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, - {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, + {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6"}, + {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001"}, + {file = "ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e"}, + {file = "ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9"}, + {file = "ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325"}, + {file = "ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d"}, + {file = "ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd"}, + {file = "ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d"}, ] [[package]] @@ -2147,17 +2197,6 @@ files = [ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] -[[package]] -name = "soupsieve" -version = "2.5" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.8" -files = [ - {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, - {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, -] - [[package]] name = "tinycss2" version = "1.2.1" @@ -2189,13 +2228,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.10.0" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] @@ -2217,47 +2256,47 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvloop" -version = "0.19.0" +version = "0.17.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.7" files = [ - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, - {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, + {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, + {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, + {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, + {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, + {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, + {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, + {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, + {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, + {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, + {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, + {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, + {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, + {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, + {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, + {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, + {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, + {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, + {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, + {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, + {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, + {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, + {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, + {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, + {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, + {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, + {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, + {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, + {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, + {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, + {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, ] [package.extras] +dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] +test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] [[package]] name = "watchdog" @@ -2394,108 +2433,107 @@ files = [ [[package]] name = "yarl" -version = "1.9.4" +version = "1.9.2" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, + {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, + {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, + {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, + {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, + {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, + {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, + {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, + {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, + {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, + {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, + {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, + {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, + {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, + {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, + {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, + {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, + {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, + {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, + {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, + {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, + {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, + {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, + {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, + {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, + {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, + {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" +[[package]] +name = "zipp" +version = "3.16.2" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + [metadata] lock-version = "2.0" python-versions = ">=3.11,<3.12" -content-hash = "229d7fd39618cf708f3cd5409dde2e6e25b822e4f936e14b3ade9800bf00daab" +content-hash = "f9f78f0ab56a0a981f792cfca9a7729a747fee41777f8d169162a98e382c5ecd" diff --git a/pterodactyl/config.py b/pterodactyl/config.py index 28fecd8..770c631 100644 --- a/pterodactyl/config.py +++ b/pterodactyl/config.py @@ -7,7 +7,6 @@ def register_config(config_obj: Config) -> None: base_url=None, server_id=None, console_channel=None, - console_commands_enabled=False, current_status='', chat_regex=r"^\[\d{2}:\d{2}:\d{2}\sINFO\]: (?!\[(?:Server|Rcon)\])(?:<|\[)(\w+)(?:>|\]) (.*)", server_regex=r"^\[\d{2}:\d{2}:\d{2} INFO\]:(?: \[Not Secure\])? \[(?:Server|Rcon)\] (.*)", @@ -15,9 +14,6 @@ def register_config(config_obj: Config) -> None: leave_regex=r"^\[\d{2}:\d{2}:\d{2} INFO\]: ([^<\n]+) left the game$", achievement_regex=r"^\[\d{2}:\d{2}:\d{2} INFO\]: (.*) has (made the advancement|completed the challenge) \[(.*)\]$", chat_command='tellraw @a ["",{"text":".$N ","color":".$C","insertion":"<@.$I>","hoverEvent":{"action":"show_text","contents":"Shift click to mention this user inside Discord"}},{"text":"(DISCORD):","color":"blue","clickEvent":{"action":"open_url","value":".$V"},"hoverEvent":{"action":"show_text","contents":"Click to join the Discord Server"}},{"text":" .$M","color":"white"}]', # noqa: E501 - topic='Server IP: .$H\nServer Players: .$P/.$M', - topic_hostname=None, - topic_port=25565, api_endpoint="minecraft", chat_channel=None, startup_msg='Server started!', diff --git a/pterodactyl/logger.py b/pterodactyl/logger.py index 64b005f..482fefc 100644 --- a/pterodactyl/logger.py +++ b/pterodactyl/logger.py @@ -1,9 +1,4 @@ -from red_commons import logging from red_commons.logging import getLogger -logger = getLogger('red.SeaCogs.Pterodactyl') -websocket_logger = getLogger('red.SeaCogs.Pterodactyl.websocket') -if logger.level >= logging.VERBOSE: - websocket_logger.setLevel(logging.logging.INFO) -elif logger.level < logging.VERBOSE: - websocket_logger.setLevel(logging.logging.DEBUG) +logger = getLogger('red.seacogs.pterodactyl') +websocket_logger = getLogger('red.seacogs.pterodactyl.websocket') diff --git a/pterodactyl/mcsrvstatus.py b/pterodactyl/mcsrvstatus.py deleted file mode 100644 index e51827a..0000000 --- a/pterodactyl/mcsrvstatus.py +++ /dev/null @@ -1,10 +0,0 @@ -import aiohttp - - -async def get_status(host: str, port: int = 25565) -> tuple[bool, dict]: - async with aiohttp.ClientSession() as session: - async with session.get(f'https://api.mcsrvstat.us/2/{host}:{port}') as response: - response = await response.json() - if response['online']: - return (True, response) - return (False, response) diff --git a/pterodactyl/pterodactyl.py b/pterodactyl/pterodactyl.py index 43396dd..ba8c80a 100644 --- a/pterodactyl/pterodactyl.py +++ b/pterodactyl/pterodactyl.py @@ -1,18 +1,16 @@ import asyncio import json -from typing import Mapping, Optional, Tuple, Union +from typing import Mapping, Optional, Union import discord import websockets -from discord.ext import tasks from pydactyl import PterodactylClient from redbot.core import app_commands, commands from redbot.core.app_commands import Choice from redbot.core.bot import Red -from redbot.core.utils.chat_formatting import box, error, humanize_list +from redbot.core.utils.chat_formatting import box, error from redbot.core.utils.views import ConfirmView -from pterodactyl import mcsrvstatus from pterodactyl.config import config, register_config from pterodactyl.logger import logger @@ -20,10 +18,6 @@ from pterodactyl.logger import logger class Pterodactyl(commands.Cog): """Pterodactyl allows you to manage your Pterodactyl Panel from Discord.""" - __author__ = ["SeaswimmerTheFsh"] - __version__ = "2.0.0" - __documentation__ = "https://seacogs.coastalcommits.com/pterodactyl/" - def __init__(self, bot: Red): self.bot = bot self.client: Optional[PterodactylClient] = None @@ -31,22 +25,12 @@ class Pterodactyl(commands.Cog): self.websocket: Optional[websockets.WebSocketClientProtocol] = None self.retry_counter: int = 0 register_config(config) - self.task = self.get_task() - self.update_topic.start() - def format_help_for_context(self, ctx: commands.Context) -> str: - pre_processed = super().format_help_for_context(ctx) or "" - n = "\n" if "\n\n" not in pre_processed else "" - text = [ - f"{pre_processed}{n}", - f"Cog Version: **{self.__version__}**", - f"Author: {humanize_list(self.__author__)}", - f"Documentation: {self.__documentation__}", - ] - return "\n".join(text) + async def cog_load(self) -> None: + self.retry_counter = 0 + self.task = self.get_task() async def cog_unload(self) -> None: - self.update_topic.cancel() self.task.cancel() self.retry_counter = 0 await self.client._session.close() # pylint: disable=protected-access @@ -72,26 +56,11 @@ class Pterodactyl(commands.Cog): else: logger.info("Retry limit reached. Stopping task.") - @tasks.loop(minutes=6) - async def update_topic(self): - await self.bot.wait_until_red_ready() - topic = await self.get_topic() - console = self.bot.get_channel(await config.console_channel()) - chat = self.bot.get_channel(await config.chat_channel()) - if console: - await console.edit(topic=topic) - if chat: - await chat.edit(topic=topic) - @commands.Cog.listener() async def on_message_without_command(self, message: discord.Message) -> None: if message.channel.id == await config.console_channel() and message.author.bot is False: - if await config.console_commands_enabled() is False: - await message.channel.send("Console commands are disabled.") - logger.debug("Received console command from %s, but console commands are disabled: %s", message.author.id, message.content) - return logger.debug("Received console command from %s: %s", message.author.id, message.content) - await message.channel.send(f"Received console command from {message.author.id}: {message.content[:1900]}", allowed_mentions=discord.AllowedMentions.none()) + await message.channel.send(f"Received console command from {message.author.id}: {message.content[:1900]}") try: await self.websocket.send(json.dumps({"event": "send command", "args": [message.content]})) except websockets.exceptions.ConnectionClosed as e: @@ -103,7 +72,7 @@ class Pterodactyl(commands.Cog): logger.debug("Received chat message from %s: %s", message.author.id, message.content) channel = self.bot.get_channel(await config.console_channel()) if channel: - await channel.send(f"Received chat message from {message.author.id}: {message.content[:1900]}", allowed_mentions=discord.AllowedMentions.none()) + await channel.send(f"Received chat message from {message.author.id}: {message.content[:1900]}") msg = json.dumps({"event": "send command", "args": [await self.get_chat_command(message)]}) logger.debug("Sending chat message to server:\n%s", msg) try: @@ -114,41 +83,13 @@ class Pterodactyl(commands.Cog): self.retry_counter = 0 self.task = self.get_task() - async def get_topic(self) -> str: - topic: str = await config.topic() - placeholders = { - "H": await config.topic_hostname() or "unset", - "O": str(await config.topic_port()), - } - if await config.api_endpoint() == "minecraft": - status, response = await mcsrvstatus.get_status(await config.topic_hostname(), await config.topic_port()) - if status: - placeholders.update({ - "I": response['ip'], - "M": str(response['players']['max']), - "P": str(response['players']['online']), - "V": response['version'], - "D": response['motd']['clean'][0] if response['motd']['clean'] else "unset", - }) - else: - placeholders.update({ - "I": response['ip'], - "M": "0", - "P": "0", - "V": "Server Offline", - "D": "Server Offline", - }) - for key, value in placeholders.items(): - topic = topic.replace('.$' + key, value) - return topic - async def get_chat_command(self, message: discord.Message) -> str: command: str = await config.chat_command() placeholders = { "C": str(message.author.color), "D": message.author.discriminator, "I": str(message.author.id), - "M": message.content.replace('"','').replace("\n", " "), + "M": message.content.replace('"',''), "N": message.author.display_name, "U": message.author.name, "V": await config.invite() or "use [p]pterodactyl config invite to change me", @@ -157,22 +98,6 @@ class Pterodactyl(commands.Cog): command = command.replace('.$' + key, value) return command - async def get_player_list(self) -> Optional[Tuple[str, list]]: - if await config.api_endpoint() == "minecraft": - status, response = await mcsrvstatus.get_status(await config.topic_hostname(), await config.topic_port()) - if status and 'list' in response['players']: - output_str = '\n'.join(response['players']['list']) - return output_str, response['players']['list'] - return None - - async def get_player_list_embed(self, ctx: Union[commands.Context, discord.Interaction]) -> Optional[discord.Embed]: - player_list = await self.get_player_list() - if player_list: - embed = discord.Embed(color=await self.bot.get_embed_color(ctx.channel), title="Players Online") - embed.description = player_list[0] - return embed - return None - async def power(self, ctx: Union[discord.Interaction, commands.Context], action: str, action_ing: str, warning: str = '') -> None: if isinstance(ctx, discord.Interaction): author = ctx.user @@ -186,7 +111,7 @@ class Pterodactyl(commands.Cog): return await ctx.response.send_message(f"Server is already {action_ing}.", ephemeral=True) return await ctx.send(f"Server is already {action_ing}.") - if current_status in ["starting", "stopping"] and action != "kill": + if current_status in ["starting", "stopping"]: if isinstance(ctx, discord.Interaction): return await ctx.response.send_message("Another power action is already in progress.", ephemeral=True) return await ctx.send("Another power action is already in progress.") @@ -223,7 +148,7 @@ class Pterodactyl(commands.Cog): channel = self.bot.get_channel(await config.console_channel()) if isinstance(ctx, discord.Interaction): if channel: - await channel.send(f"Received console command from {ctx.user.id}: {command[:1900]}", allowed_mentions=discord.AllowedMentions.none()) + await channel.send(f"Received console command from {ctx.user.id}: {command[:1900]}") try: await self.websocket.send(json.dumps({"event": "send command", "args": [command]})) await ctx.response.send_message(f"Command sent to server. {box(command, 'json')}", ephemeral=True) @@ -235,7 +160,7 @@ class Pterodactyl(commands.Cog): self.task = self.get_task() else: if channel: - await channel.send(f"Received console command from {ctx.author.id}: {command[:1900]}", allowed_mentions=discord.AllowedMentions.none()) + await channel.send(f"Received console command from {ctx.author.id}: {command[:1900]}") try: await self.websocket.send(json.dumps({"event": "send command", "args": [command]})) await ctx.send(f"Command sent to server. {box(command, 'json')}") @@ -266,15 +191,6 @@ class Pterodactyl(commands.Cog): The command to send to the server.""" return await self.send_command(interaction, command) - @slash_pterodactyl.command(name = "players", description = "Retrieve a list of players on the server.") - async def slash_pterodactyl_players(self, interaction: discord.Interaction) -> None: - """Retrieve a list of players on the server.""" - e = await self.get_player_list_embed(interaction) - if e: - await interaction.response.send_message(embed=e, ephemeral=True) - else: - await interaction.response.send_message("No players online.", ephemeral=True) - @slash_pterodactyl.command(name = "power", description = "Send power actions to the server.") @app_commands.choices(action=[ Choice(name="Start", value="start"), @@ -291,23 +207,12 @@ class Pterodactyl(commands.Cog): The action to perform on the server.""" if action.value == "kill": return await self.power(interaction, action.value, "stopping... (forcefully killed)", warning="**⚠️ Forcefully killing the server process can corrupt data in some cases. ⚠️**\n") - if action.value == "stop": - return await self.power(interaction, action.value, "stopping...") return await self.power(interaction, action.value, f"{action.value}ing...") @commands.group(autohelp = True, name = "pterodactyl", aliases = ["ptero"]) async def pterodactyl(self, ctx: commands.Context) -> None: """Pterodactyl allows you to manage your Pterodactyl Panel from Discord.""" - @pterodactyl.command(name = "players", aliases=["list", "online", "playerlist", "who"]) - async def pterodactyl_players(self, ctx: commands.Context) -> None: - """Retrieve a list of players on the server.""" - e = await self.get_player_list_embed(ctx) - if e: - await ctx.send(embed=e) - else: - await ctx.send("No players online.") - @pterodactyl.command(name = "command", aliases = ["cmd", "execute", "exec"]) @commands.admin() async def pterodactyl_command(self, ctx: commands.Context, *, command: str) -> None: @@ -367,60 +272,18 @@ class Pterodactyl(commands.Cog): self.retry_counter = 0 self.task = self.get_task() - @pterodactyl_config.group(name = "console") - async def pterodactyl_config_console(self, ctx: commands.Context): - """Configure console settings.""" - - @pterodactyl_config_console.command(name = "channel") + @pterodactyl_config.command(name = "consolechannel") async def pterodactyl_config_console_channel(self, ctx: commands.Context, channel: discord.TextChannel) -> None: """Set the channel to send console output to.""" await config.console_channel.set(channel.id) await ctx.send(f"Console channel set to {channel.mention}") - @pterodactyl_config_console.command(name = "commands") - async def pterodactyl_config_console_commands(self, ctx: commands.Context, enabled: bool) -> None: - """Enable or disable console commands.""" - await config.console_commands_enabled.set(enabled) - await ctx.send(f"Console commands set to {enabled}") - @pterodactyl_config.command(name = "invite") async def pterodactyl_config_invite(self, ctx: commands.Context, invite: str) -> None: """Set the invite link for your server.""" await config.invite.set(invite) await ctx.send(f"Invite link set to {invite}") - @pterodactyl_config.group(name = "topic") - async def pterodactyl_config_topic(self, ctx: commands.Context): - """Set the topic for the console and chat channels.""" - - @pterodactyl_config_topic.command(name = "host", aliases = ["hostname", "ip"]) - async def pterodactyl_config_topic_host(self, ctx: commands.Context, host: str) -> None: - """Set the hostname or IP address of your server.""" - await config.topic_hostname.set(host) - await ctx.send(f"Hostname/IP set to `{host}`") - - @pterodactyl_config_topic.command(name = "port") - async def pterodactyl_config_topic_port(self, ctx: commands.Context, port: int) -> None: - """Set the port of your server.""" - await config.topic_port.set(port) - await ctx.send(f"Port set to `{port}`") - - @pterodactyl_config_topic.command(name = "text") - async def pterodactyl_config_topic_text(self, ctx: commands.Context, *, text: str) -> None: - """Set the text for the console and chat channels. - - Available placeholders: - - `.$H` (hostname) - - `.$O` (port) - Available for Minecraft servers: - - `.$I` (ip) - - `.$M` (max players) - - `.$P` (players online) - - `.$V` (version) - - `.$D` (description / Message of the Day)""" - await config.topic.set(text) - await ctx.send(f"Topic set to:\n{box(text, 'yaml')}") - @pterodactyl_config.group(name = "chat") async def pterodactyl_config_chat(self, ctx: commands.Context): """Configure chat settings.""" @@ -545,7 +408,7 @@ class Pterodactyl(commands.Cog): await view.wait() if view.result is True: blacklist.update({name: regex}) - await msg.edit(content=f"Updated `{name}` in the regex blacklist.\n{box(regex, 're')}") + await msg.edit(f"Updated `{name}` in the regex blacklist.\n{box(regex, 're')}") else: await msg.edit(content="Cancelled.") @@ -560,7 +423,7 @@ class Pterodactyl(commands.Cog): await view.wait() if view.result is True: del blacklist[name] - await msg.edit(content=f"Removed `{name}` from the regex blacklist.") + await msg.edit(content="Removed `{name}` from the regex blacklist.") else: await msg.edit(content="Cancelled.") else: @@ -572,7 +435,6 @@ class Pterodactyl(commands.Cog): base_url = await config.base_url() server_id = await config.server_id() console_channel = await config.console_channel() - console_commands_enabled = await config.console_commands_enabled() chat_channel = await config.chat_channel() chat_command = await config.chat_command() chat_regex = await config.chat_regex() @@ -588,14 +450,10 @@ class Pterodactyl(commands.Cog): api_endpoint = await config.api_endpoint() invite = await config.invite() regex_blacklist: dict = await config.regex_blacklist() - topic_text = await config.topic() - topic_hostname = await config.topic_hostname() - topic_port = await config.topic_port() embed = discord.Embed(color = await ctx.embed_color(), title="Pterodactyl Configuration") embed.description = f"""**Base URL:** {base_url} **Server ID:** `{server_id}` **Console Channel:** <#{console_channel}> - **Console Commands:** {self.get_bool_str(console_commands_enabled)} **Chat Channel:** <#{chat_channel}> **Startup Message:** {startup_msg} **Shutdown Message:** {shutdown_msg} @@ -605,10 +463,6 @@ class Pterodactyl(commands.Cog): **API Endpoint:** `{api_endpoint}` **Invite:** {invite} - **Topic Hostname:** `{topic_hostname}` - **Topic Port:** `{topic_port}` - **Topic Text:** {box(topic_text, 'yaml')} - **Chat Command:** {box(chat_command, 'json')} **Chat Regex:** {box(chat_regex, 're')} **Server Regex:** {box(server_regex, 're')} diff --git a/pterodactyl/websocket.py b/pterodactyl/websocket.py index cb09002..716e3d8 100644 --- a/pterodactyl/websocket.py +++ b/pterodactyl/websocket.py @@ -15,7 +15,6 @@ from pterodactyl.pterodactyl import Pterodactyl async def establish_websocket_connection(coginstance: Pterodactyl) -> None: - await coginstance.bot.wait_until_red_ready() base_url = await config.base_url() base_url = base_url[:-1] if base_url.endswith('/') else base_url @@ -53,18 +52,18 @@ async def establish_websocket_connection(coginstance: Pterodactyl) -> None: if await config.mask_ip() is True: content = mask_ip(content) - console_channel = coginstance.bot.get_channel(await config.console_channel()) - chat_channel = coginstance.bot.get_channel(await config.chat_channel()) - if console_channel is not None: + channel = coginstance.bot.get_channel(await config.console_channel()) + if channel is not None: if content.startswith('['): pagified_content = pagify(content, delims=[" ", "\n"]) for page in pagified_content: - await console_channel.send(content=page, allowed_mentions=discord.AllowedMentions.none()) + await channel.send(content=page, allowed_mentions=discord.AllowedMentions.none()) server_message = await check_if_server_message(content) if server_message: - if chat_channel is not None: - await chat_channel.send(server_message if len(server_message) < 2000 else server_message[:1997] + '...', allowed_mentions=discord.AllowedMentions.none()) + channel = coginstance.bot.get_channel(await config.chat_channel()) + if channel is not None: + await channel.send(server_message if len(server_message) < 2000 else server_message[:1997] + '...', allowed_mentions=discord.AllowedMentions.none()) chat_message = await check_if_chat_message(content) if chat_message: @@ -76,27 +75,30 @@ async def establish_websocket_connection(coginstance: Pterodactyl) -> None: join_message = await check_if_join_message(content) if join_message: - if chat_channel is not None: - if coginstance.bot.embed_requested(chat_channel): - await chat_channel.send(embed=await generate_join_leave_embed(join_message, True)) + channel = coginstance.bot.get_channel(await config.chat_channel()) + if channel is not None: + if coginstance.bot.embed_requested(channel): + await channel.send(embed=await generate_join_leave_embed(join_message, True)) else: - await chat_channel.send(f"{join_message} joined the game", allowed_mentions=discord.AllowedMentions.none()) + await channel.send(f"{join_message} joined the game", allowed_mentions=discord.AllowedMentions.none()) leave_message = await check_if_leave_message(content) if leave_message: - if chat_channel is not None: - if coginstance.bot.embed_requested(chat_channel): - await chat_channel.send(embed=await generate_join_leave_embed(leave_message, False)) + channel = coginstance.bot.get_channel(await config.chat_channel()) + if channel is not None: + if coginstance.bot.embed_requested(channel): + await channel.send(embed=await generate_join_leave_embed(leave_message, False)) else: - await chat_channel.send(f"{leave_message} left the game", allowed_mentions=discord.AllowedMentions.none()) + await channel.send(f"{leave_message} left the game", allowed_mentions=discord.AllowedMentions.none()) achievement_message = await check_if_achievement_message(content) if achievement_message: - if chat_channel is not None: - if coginstance.bot.embed_requested(chat_channel): - await chat_channel.send(embed=await generate_achievement_embed(achievement_message['username'], achievement_message['achievement'], achievement_message['challenge'])) + channel = coginstance.bot.get_channel(await config.chat_channel()) + if channel is not None: + if coginstance.bot.embed_requested(channel): + await channel.send(embed=await generate_achievement_embed(achievement_message['username'], achievement_message['achievement'], achievement_message['challenge'])) else: - await chat_channel.send(f"{achievement_message['username']} has {'completed the challenge' if achievement_message['challenge'] else 'made the advancement'} {achievement_message['achievement']}") + await channel.send(f"{achievement_message['username']} has {'completed the challenge' if achievement_message['challenge'] else 'made the advancement'} {achievement_message['achievement']}") if message['event'] == 'status': old_status = await config.current_status() diff --git a/pyproject.toml b/pyproject.toml index 872ccdf..98be10a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,24 +5,20 @@ description = "My assorted cogs for Red-DiscordBot." authors = ["SeaswimmerTheFsh"] license = "MPL 2" readme = "README.md" -package-mode = false [tool.poetry.dependencies] python = ">=3.11,<3.12" Red-DiscordBot = "^3.5.5" +pytimeparse2 = "^1.7.1" +humanize = "^4.8.0" py-dactyl = "^2.0.4" websockets = "^12.0" -pillow = "^10.3.0" -numpy = "^1.26.4" -colorthief = "^0.2.1" -beautifulsoup4 = "^4.12.3" -markdownify = "^0.12.1" [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] -ruff = "^0.3.1" +ruff = "^0.2.1" pylint = "^3.1.0" [tool.poetry.group.docs] diff --git a/seautils/__init__.py b/seautils/__init__.py deleted file mode 100644 index dd217b4..0000000 --- a/seautils/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .seautils import SeaUtils - - -async def setup(bot): - await bot.add_cog(SeaUtils(bot)) diff --git a/seautils/info.json b/seautils/info.json deleted file mode 100644 index 7356137..0000000 --- a/seautils/info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "author" : ["SeaswimmerTheFsh (seasw.)"], - "install_msg" : "Thank you for installing SeaUtils!\nYou can find the source code of this cog [here](https://coastalcommits.com/SeaswimmerTheFsh/SeaCogs).", - "name" : "SeaUtils", - "short" : "A collection of useful utilities.", - "description" : "A collection of useful utilities.", - "end_user_data_statement" : "This cog does not store end user data.", - "hidden": true, - "disabled": false, - "min_bot_version": "3.5.0", - "min_python_version": [3, 8, 0], - "requirements": ["beautifulsoup4", "markdownify"] -} diff --git a/seautils/seautils.py b/seautils/seautils.py deleted file mode 100644 index 3bbf5cf..0000000 --- a/seautils/seautils.py +++ /dev/null @@ -1,250 +0,0 @@ -# _____ _ -# / ____| (_) -# | (___ ___ __ _ _____ ___ _ __ ___ _ __ ___ ___ _ __ -# \___ \ / _ \/ _` / __\ \ /\ / / | '_ ` _ \| '_ ` _ \ / _ \ '__| -# ____) | __/ (_| \__ \\ V V /| | | | | | | | | | | | __/ | -# |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_| - -import asyncio -import inspect -import operator -import re -from asyncio.subprocess import Process -from functools import partial, partialmethod -from typing import Any - -import aiohttp -import yaml -from bs4 import BeautifulSoup -from discord import Color, Embed, app_commands -from discord.utils import CachedSlotProperty, cached_property -from markdownify import MarkdownConverter -from redbot.core import commands -from redbot.core.bot import Red -from redbot.core.dev_commands import cleanup_code -from redbot.core.utils import chat_formatting as cf -from redbot.core.utils.views import SimpleMenu - - -def md(soup: BeautifulSoup, **options) -> Any | str: - return MarkdownConverter(**options).convert_soup(soup=soup) - -def format_rfc_text(text: str, number: int) -> str: - one: str = re.sub(r"\(\.\/rfc(\d+)", r"(https://www.rfc-editor.org/rfc/rfc\1.html", text) - two: str = re.sub(r"\((#(?:section|page)-\d+(?:.\d+)?)\)", f"(https://www.rfc-editor.org/rfc/rfc{number}.html\1)", one) - three: str = re.sub(r"\n{3,}", "\n\n", two) - return three - -class SeaUtils(commands.Cog): - """A collection of random utilities.""" - - __author__ = ["SeaswimmerTheFsh"] - __version__ = "1.0.0" - - def __init__(self, bot: Red) -> None: - self.bot = bot - - def format_help_for_context(self, ctx: commands.Context) -> str: - pre_processed = super().format_help_for_context(ctx=ctx) or "" - n = "\n" if "\n\n" not in pre_processed else "" - text = [ - f"{pre_processed}{n}", - f"Cog Version: **{self.__version__}**", - f"Author: {cf.humanize_list(items=self.__author__)}" - ] - return "\n".join(text) - - def format_src(self, obj: Any) -> str: - """A large portion of this code is repurposed from Zephyrkul's RTFS cog. - https://github.com/Zephyrkul/FluffyCogs/blob/master/rtfs/rtfs.py""" - obj = inspect.unwrap(func=obj) - src: Any = getattr(obj, "__func__", obj) - if isinstance(obj, (commands.Command, app_commands.Command)): - src = obj.callback - elif isinstance(obj, (partial, partialmethod)): - src = obj.func - elif isinstance(obj, property): - src = obj.fget - elif isinstance(obj, (cached_property, CachedSlotProperty)): - src = obj.function - return inspect.getsource(object=src) - - @commands.command(aliases=["source", "src", "code", "showsource"]) - @commands.is_owner() - async def showcode(self, ctx: commands.Context, *, object: str) -> None: # pylint: disable=redefined-builtin - """Show the code for a particular object.""" - try: - if object.startswith("/") and (obj := ctx.bot.tree.get_command(object[1:])): - text = self.format_src(obj) - elif obj := ctx.bot.get_cog(object): - text = self.format_src(type(obj)) - elif obj := ctx.bot.get_command(object): - text = self.format_src(obj) - else: - raise AttributeError - temp_content = cf.pagify( - text=cleanup_code(text), - escape_mass_mentions=True, - page_length = 1977 - ) - content = [] - max_i = operator.length_hint(temp_content) - i = 1 - for page in temp_content: - content.append(f"**Page {i}/{max_i}**\n{cf.box(page, lang='py')}") - i += 1 - await SimpleMenu(pages=content, disable_after_timeout=True, timeout=180).start(ctx) - except (OSError, AttributeError, UnboundLocalError): - if ctx.embed_requested(): - embed = Embed(title="Object not found!", color=await ctx.embed_color()) - await ctx.send(embed=embed, reference=ctx.message.to_reference(fail_if_not_exists=False)) - else: - await ctx.send(content="Object not found!", reference=ctx.message.to_reference(fail_if_not_exists=False)) - - @commands.command(name='dig', aliases=['dnslookup', 'nslookup']) - @commands.is_owner() - async def dig(self, ctx: commands.Context, name: str, record_type: str | None = None, server: str | None = None, port: int = 53) -> None: - """Retrieve DNS information for a domain. - - Uses `dig` to perform a DNS query. Will fall back to `nslookup` if `dig` is not installed on the system. - `nslookup` does not provide as much information as `dig`, so only the `name` parameter will be used if `nslookup` is used. - Will return the A, AAAA, and CNAME records for a domain by default. You can specify a different record type with the `type` parameter.""" - command_opts: list[str | int] = ['dig'] - query_types: list[str] = [record_type] if record_type else ['A', 'AAAA', 'CNAME'] - if server: - command_opts.extend(['@', server]) - for query_type in query_types: - command_opts.extend([name, query_type]) - command_opts.extend(['-p', str(port), '+yaml']) - - try: - process: Process = await asyncio.create_subprocess_exec(*command_opts, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) - stdout, stderr = await process.communicate() - if stderr: - await ctx.maybe_send_embed(message="An error was encountered!\n" + cf.box(text=stderr.decode())) - else: - data = yaml.safe_load(stdout.decode()) - message_data: dict = data[0]['message'] - response_data: dict = message_data['response_message_data'] - if ctx.embed_requested(): - embed = Embed( - title="DNS Query Result", - color=await ctx.embed_color(), - timestamp=message_data['response_time'] - ) - embed.add_field(name="Response Address", value=message_data['response_address'], inline=True) - embed.add_field(name="Response Port", value=message_data['response_port'], inline=True) - embed.add_field(name="Query Address", value=message_data['query_address'], inline=True) - embed.add_field(name="Query Port", value=message_data['query_port'], inline=True) - embed.add_field(name="Status", value=response_data['status'], inline=True) - embed.add_field(name="Flags", value=response_data['flags'], inline=True) - - if response_data.get('status') != 'NOERROR': - embed.colour = Color.red() - embed.description = cf.error("Dig query did not return `NOERROR` status.") - - questions = [] - answers = [] - authorities = [] - for m in data: - response = m['message']['response_message_data'] - if 'QUESTION_SECTION' in response: - for question in response['QUESTION_SECTION']: - if question not in questions: - questions.append(question) - - if 'ANSWER_SECTION' in response: - for answer in response['ANSWER_SECTION']: - if answer not in answers: - answers.append(answer) - - if 'AUTHORITY_SECTION' in response: - for authority in response['AUTHORITY_SECTION']: - if authority not in authorities: - authorities.append(authority) - - if questions: - question_section = "\n".join(questions) - embed.add_field(name="Question Section", value=f"{cf.box(text=question_section, lang='prolog')}", inline=False) - - if answers: - answer_section = "\n".join(answers) - if len(answer_section) > 1024: - embed.description = cf.warning("Answer section is too long to fit within embed field, falling back to description.") + cf.box(answer_section) - else: - embed.add_field(name="Answer Section", value=f"{cf.box(text=answer_section, lang='prolog')}", inline=False) - - if authorities: - authority_section = "\n".join(authorities) - embed.add_field(name="Authority Section", value=f"{cf.box(text=authority_section, lang='prolog')}", inline=False) - await ctx.send(embed=embed) - else: - await ctx.send(content=cf.box(text=stdout, lang='yaml')) - except (FileNotFoundError): - try: - ns_process = await asyncio.create_subprocess_exec('nslookup', name, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) - ns_stdout, ns_stderr = await ns_process.communicate() - if ns_stderr: - await ctx.maybe_send_embed(message="An error was encountered!\n" + cf.box(text=ns_stderr.decode())) - else: - warning = cf.warning("`dig` is not installed! Defaulting to `nslookup`.\nThis command provides more information when `dig` is installed on the system.\n") - if await ctx.embed_requested(): - embed = Embed( - title="DNS Query Result", - color=await ctx.embed_color(), - timestamp=ctx.message.created_at - ) - embed.description = warning + cf.box(text=ns_stdout.decode()) - await ctx.send(embed=embed) - else: - await ctx.send(content = warning + cf.box(text=ns_stdout.decode())) - except (FileNotFoundError): - await ctx.maybe_send_embed(message=cf.error("Neither `dig` nor `nslookup` are installed on the system. Unable to resolve DNS query.")) - - @commands.command() - async def rfc(self, ctx: commands.Context, number: int) -> None: - """Retrieve the text of an RFC document. - - This command uses the [RFC Editor website](https://www.rfc-editor.org/) to fetch the text of an RFC document. - A [Request for Comments (RFC)](https://en.wikipedia.org/wiki/Request_for_Comments) is a publication in a series from the principal technical development and standards-setting bodies for the [Internet](https://en.wikipedia.org/wiki/Internet), most prominently the [Internet Engineering Task Force](https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force). An RFC is authored by individuals or groups of engineers and [computer scientists](https://en.wikipedia.org/wiki/Computer_scientist) in the form of a [memorandum](https://en.wikipedia.org/wiki/Memorandum) describing methods, behaviors, research, or innovations applicable to the working of the Internet and Internet-connected systems. It is submitted either for [peer review](https://en.wikipedia.org/wiki/Peer_review) or to convey new concepts, information, or, occasionally, engineering humor.""" # noqa: E501 - url = f"https://www.rfc-editor.org/rfc/rfc{number}.html" - datatracker_url = f"https://datatracker.ietf.org/doc/rfc{number}" - async with aiohttp.ClientSession() as session: - async with session.get(url=url) as response: - if response.status == 200: - html = await response.text() - soup = BeautifulSoup(html, 'html.parser') - pre_tags = soup.find_all('pre') - content: list[Embed | str] = [] - for pre_tag in pre_tags: - text = format_rfc_text(md(pre_tag), number) - if len(text) > 4096: - pagified_text = cf.pagify(text, delims=["\n\n"], page_length=4096) - for page in pagified_text: - if await ctx.embed_requested(): - embed = Embed( - title=f"RFC Document {number}", - url=datatracker_url, - description=page, - color=await ctx.embed_color() - ) - content.append(embed) - else: - content.append(page) - else: - if await ctx.embed_requested(): - embed = Embed( - title=f"RFC Document {number}", - url=datatracker_url, - description=text, - color=await ctx.embed_color() - ) - content.append(embed) - else: - content.append(text) - if await ctx.embed_requested(): - for embed in content: - embed.set_footer(text=f"Page {content.index(embed) + 1}/{len(content)}") - await SimpleMenu(pages=content, disable_after_timeout=True, timeout=300).start(ctx) - else: - await ctx.maybe_send_embed(content=cf.error(f"An error occurred while fetching RFC {number}. Status code: {response.status}."))