nkdsu.apps.vote package

Subpackages

Submodules

nkdsu.apps.vote.admin module

class nkdsu.apps.vote.admin.UserAdmin(model, admin_site)[source]

Bases: UserAdmin

list_display = ('username', 'display_name', 'email', 'is_elf', 'is_staff', 'is_superuser', 'has_usable_password')
display_name(obj: User) str[source]
is_elf(obj: User) bool[source]
has_usable_password(obj: User) bool[source]
property media
class nkdsu.apps.vote.admin.ShowAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('showtime', 'end', 'voting_allowed')
property media
class nkdsu.apps.vote.admin.TwitterUserAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('screen_name', 'is_abuser', 'is_patron')
list_filter = ('is_abuser', 'is_patron')
property media
class nkdsu.apps.vote.admin.UserBadgeAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('profile', 'twitter_user', 'badge')
list_filter = ('profile', 'twitter_user', 'badge')
property media
class nkdsu.apps.vote.admin.VoteAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('__str__', 'date', 'vote_kind')
list_filter = ('kind', 'twitter_user')
filter_horizontal = ('tracks',)
property media
class nkdsu.apps.vote.admin.TrackAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('id3_title', 'id3_artist')
property media
class nkdsu.apps.vote.admin.PlayAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('track', 'date')
property media
class nkdsu.apps.vote.admin.BlockAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('track', 'reason', 'show')
property media
class nkdsu.apps.vote.admin.DiscardShortlistAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('track', 'show')
property media
class nkdsu.apps.vote.admin.ProfileAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('__str__', 'is_patron', 'is_abuser')
username(obj: Profile) str[source]
property media
class nkdsu.apps.vote.admin.RequestAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('created', 'filled_by', 'claimant', 'submitted_by')
list_filter = ('filled_by', 'claimant', 'submitted_by')
property media
class nkdsu.apps.vote.admin.NoteAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('track', 'show', 'public', 'content')
property media
class nkdsu.apps.vote.admin.UserTrackListAdmin(model, admin_site)[source]

Bases: ModelAdmin

list_display = ('__str__', 'slug', 'user', 'public')
list_filter = ('public',)
property media

nkdsu.apps.vote.anime module

class nkdsu.apps.vote.anime.Season[source]

Bases: TypedDict

year: int | None
season: Literal['WINTER', 'SPRING', 'SUMMER', 'FALL', 'UNDEFINED']
class nkdsu.apps.vote.anime.Anime(*, title: str, picture: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)], thumbnail: Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)], synonyms: list[str], sources: list[Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]], relations: list[Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]], anime_season: Season, type: Literal['MOVIE', 'ONA', 'OVA', 'SPECIAL', 'TV', 'UNKNOWN'])[source]

Bases: BaseModel

model_config: ClassVar[ConfigDict] = {'frozen': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

title: str
picture: HttpUrl
thumbnail: HttpUrl
synonyms: list[str]
sources: list[HttpUrl]
relations: list[HttpUrl]
anime_season: Season
type: Literal['MOVIE', 'ONA', 'OVA', 'SPECIAL', 'TV', 'UNKNOWN']
property quarter: str
cached_picture_filename() str[source]
cached_picture_path() str[source]
picture_is_cached() bool[source]
cached_picture_url(force_refresh: bool = False) str[source]
cache_picture() None[source]
titles() list[str][source]
inclusion_ranking() tuple[int, float][source]

Return an estimated representation of how likely this anime is to be something in the library, in the form of a tuple of numbers that you can sort by. Helpful for situations where we have multiple matches for the same name. Lower is more likely.

urls() list[tuple[str, Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]]][source]
related_anime() list[str][source]
_abc_impl = <_abc._abc_data object>
model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_fields: ClassVar[dict[str, FieldInfo]] = {'anime_season': FieldInfo(annotation=Season, required=True), 'picture': FieldInfo(annotation=Url, required=True, metadata=[UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]), 'relations': FieldInfo(annotation=list[Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]], required=True), 'sources': FieldInfo(annotation=list[Annotated[Url, UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]], required=True), 'synonyms': FieldInfo(annotation=list[str], required=True), 'thumbnail': FieldInfo(annotation=Url, required=True, metadata=[UrlConstraints(max_length=2083, allowed_schemes=['http', 'https'], host_required=None, default_host=None, default_port=None, default_path=None)]), 'title': FieldInfo(annotation=str, required=True), 'type': FieldInfo(annotation=Literal['MOVIE', 'ONA', 'OVA', 'SPECIAL', 'TV', 'UNKNOWN'], required=True)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

This replaces Model.__fields__ from Pydantic V1.

nkdsu.apps.vote.anime.normalise_title(title: str) str[source]

Normalise the format of a title to erase distinctions that aren’t important to us.

nkdsu.apps.vote.anime.get_anime(title: str) Anime | None[source]
>>> get_anime('Machikado Mazoku').title
'Machikado Mazoku'
>>> get_anime('The Demon Girl Next Door').title
'Machikado Mazoku'
>>> get_anime('shamiko')
nkdsu.apps.vote.anime.fuzzy_nkdsu_aliases() dict[str, str][source]

Return a dict of {alias: nkdsu_title} where nkdsu_title is an anime included in the nkd.su database, and alias is a lowercased alternative title for the nkdsu_title it points to.

>>> from pprint import pprint
>>> from nkdsu.apps.vote.models import Track
>>> from django.utils.timezone import now
>>> defaults = dict(
...     id3_artist='someone', hidden=False, inudesu=False, added=now(), revealed=now()
... )

With some anime titles that don’t have very many synonyms:

>>> Track.objects.create(**defaults, id='1', id3_title='song (Eiji OP1)')
<Track: ‘song’ (Eiji OP1) - someone>
>>> Track.objects.create(**defaults, id='2', id3_title='ditty (◯ ED1)')
<Track: ‘ditty’ (◯ ED1) - someone>
>>> pprint(fuzzy_nkdsu_aliases())
{'"eiji"': 'Eiji',
 'circle': '◯',
 'eiji': 'Eiji',
 'o (sawako kabuki)': '◯',
 '°': '◯',
 '○': '◯',
 '◯': '◯',
 '「エイジ」': 'Eiji',
 'エイジ': 'Eiji'}
nkdsu.apps.vote.anime.suggest_anime(query: str) set[str][source]

nkdsu.apps.vote.api_utils module

class nkdsu.apps.vote.api_utils.SerializableModelMeta(name, bases, namespace, /, **kwargs)[source]

Bases: _ProtocolMeta, ModelBase

class nkdsu.apps.vote.api_utils.SerializableBase(*args, **kwargs)[source]

Bases: Protocol

api_dict(verbose: bool = False) dict[str, None | bool | int | float | str | datetime | dict[str, None | bool | int | float | str | datetime | dict[str, JsonEncodable] | list[JsonEncodable]] | list[None | bool | int | float | str | datetime | dict[str, JsonEncodable] | list[JsonEncodable]]][source]
_abc_impl = <_abc._abc_data object>
_is_protocol = True
class nkdsu.apps.vote.api_utils.Serializable(*args, **kwargs)[source]

Bases: SerializableBase, Model

class Meta[source]

Bases: object

abstract = False
_abc_impl = <_abc._abc_data object>
_is_protocol = False
_meta = <Options for Serializable>

nkdsu.apps.vote.apps module

class nkdsu.apps.vote.apps.VoteConfig(app_name, app_module)[source]

Bases: AppConfig

name = 'nkdsu.apps.vote'
ready() None[source]

nkdsu.apps.vote.context_processors module

nkdsu.apps.vote.context_processors.get_sections(request)[source]
nkdsu.apps.vote.context_processors.get_pending_requests(request: HttpRequest) QuerySet[source]
nkdsu.apps.vote.context_processors.get_parent(request: HttpRequest) str[source]
nkdsu.apps.vote.context_processors.get_dark_mode(request: HttpRequest)[source]
nkdsu.apps.vote.context_processors.nkdsu_context_processor(request: HttpRequest) dict[str, Any][source]

Add common stuff to context.

nkdsu.apps.vote.elfs module

nkdsu.apps.vote.elfs.ELFS_NAME = 'Elfs'

The name of the group that elfs belong to

nkdsu.apps.vote.elfs.is_elf(user: User | AnonymousUser) bool[source]

Return True if user is an elf.

nkdsu.apps.vote.emoji module

nkdsu.apps.vote.emoji.SUGGESTABLE_EMOJI: dict[str, str] = {'#️⃣': 'keycap: \\x{23}', '*️⃣': 'keycap: *', '0️⃣': 'keycap: 0', '1️⃣': 'keycap: 1', '2️⃣': 'keycap: 2', '3️⃣': 'keycap: 3', '4️⃣': 'keycap: 4', '5️⃣': 'keycap: 5', '6️⃣': 'keycap: 6', '7️⃣': 'keycap: 7', '8️⃣': 'keycap: 8', '9️⃣': 'keycap: 9', '©️': 'copyright', '®️': 'registered', '‼️': 'double exclamation mark', '⁉️': 'exclamation question mark', '™️': 'trade mark', 'ℹ️': 'information', '↔️': 'left-right arrow', '↕️': 'up-down arrow', '↖️': 'up-left arrow', '↗️': 'up-right arrow', '↘️': 'down-right arrow', '↙️': 'down-left arrow', '↩️': 'right arrow curving left', '↪️': 'left arrow curving right', '⌚': 'watch', '⌛': 'hourglass', '⌨️': 'keyboard', '⏏️': 'eject button', '⏩': 'black right-pointing double triangle', '⏪': 'black left-pointing double triangle', '⏫': 'black up-pointing double triangle', '⏬': 'black down-pointing double triangle', '⏭️': 'next track button', '⏮️': 'last track button', '⏯️': 'play or pause button', '⏰': 'alarm clock', '⏱️': 'stopwatch', '⏲️': 'timer clock', '⏳': 'hourglass not done', '⏸️': 'pause button', '⏹️': 'stop button', '⏺️': 'record button', 'Ⓜ️': 'circled M', '▪️': 'black small square', '▫️': 'white small square', '▶️': 'play button', '◀️': 'reverse button', '◻️': 'white medium square', '◼️': 'black medium square', '◽': 'white medium small square', '◾': 'black medium small square', '☀️': 'sun', '☁️': 'cloud', '☂️': 'umbrella', '☃️': 'snowman', '☄️': 'comet', '☎️': 'telephone', '☑️': 'check box with check', '☔': 'umbrella with rain drops', '☕': 'hot beverage', '☘️': 'shamrock', '☝️': 'index pointing up', '☠️': 'skull and crossbones', '☢️': 'radioactive', '☣️': 'biohazard', '☦️': 'orthodox cross', '☪️': 'star and crescent', '☮️': 'peace symbol', '☯️': 'yin yang', '☸️': 'wheel of dharma', '☹️': 'frowning face', '☺️': 'smiling face', '♀️': 'female sign', '♂️': 'male sign', '♈': 'aries', '♉': 'taurus', '♊': 'gemini', '♋': 'cancer', '♌': 'leo', '♍': 'virgo', '♎': 'libra', '♏': 'scorpius', '♐': 'sagittarius', '♑': 'capricorn', '♒': 'aquarius', '♓': 'pisces', '♟️': 'chess pawn', '♠️': 'spade suit', '♣️': 'club suit', '♥️': 'heart suit', '♦️': 'diamond suit', '♨️': 'hot springs', '♻️': 'recycling symbol', '♾️': 'infinity', '♿': 'wheelchair symbol', '⚒️': 'hammer and pick', '⚓': 'anchor', '⚔️': 'crossed swords', '⚕️': 'medical symbol', '⚖️': 'balance scale', '⚗️': 'alembic', '⚙️': 'gear', '⚛️': 'atom symbol', '⚜️': 'fleur-de-lis', '⚠️': 'warning', '⚡': 'high voltage', '⚧️': 'transgender symbol', '⚪': 'medium white circle', '⚫': 'medium black circle', '⚰️': 'coffin', '⚱️': 'funeral urn', '⚽': 'soccer ball', '⚾': 'baseball', '⛄': 'snowman without snow', '⛅': 'sun behind cloud', '⛈️': 'cloud with lightning and rain', '⛎': 'Ophiuchus', '⛏️': 'pick', '⛑️': 'rescue worker’s helmet', '⛓️': 'chains', '⛓️\u200d💥': 'broken chain', '⛔': 'no entry', '⛩️': 'shinto shrine', '⛪': 'church', '⛰️': 'mountain', '⛱️': 'umbrella on ground', '⛲': 'fountain', '⛳': 'flag in hole', '⛴️': 'ferry', '⛵': 'sailboat', '⛷️': 'skier', '⛸️': 'ice skate', '⛹️': 'person bouncing ball', '⛺': 'tent', '⛽': 'fuel pump', '✂️': 'scissors', '✅': 'check mark button', '✈️': 'airplane', '✉️': 'envelope', '✊': 'raised fist', '✋': 'raised hand', '✌️': 'victory hand', '✍️': 'writing hand', '✏️': 'pencil', '✒️': 'black nib', '✔️': 'check mark', '✖️': 'multiply', '✝️': 'latin cross', '✡️': 'star of David', '✨': 'sparkles', '✳️': 'eight-spoked asterisk', '✴️': 'eight-pointed star', '❄️': 'snowflake', '❇️': 'sparkle', '❌': 'cross mark', '❎': 'cross mark button', '❓': 'black question mark ornament', '❔': 'white question mark ornament', '❕': 'white exclamation mark ornament', '❗': 'red exclamation mark', '❣️': 'heart exclamation', '❤️': 'red heart', '❤️\u200d🔥': 'heart on fire', '❤️\u200d🩹': 'mending heart', '➕': 'heavy plus sign', '➖': 'heavy minus sign', '➗': 'heavy division sign', '➡️': 'right arrow', '➰': 'curly loop', '➿': 'double curly loop', '⤴️': 'right arrow curving up', '⤵️': 'right arrow curving down', '⬅️': 'left arrow', '⬆️': 'up arrow', '⬇️': 'down arrow', '⬛': 'black large square', '⬜': 'white large square', '⭐': 'star', '⭕': 'hollow red circle', '〰️': 'wavy dash', '〽️': 'part alternation mark', '㊗️': 'Japanese “congratulations” button', '㊙️': 'Japanese “secret” button', '🀄': 'mahjong red dragon', '🃏': 'joker', '🅰️': 'A button (blood type)', '🅱️': 'B button (blood type)', '🅾️': 'O button (blood type)', '🅿️': 'P button', '🆎': 'AB button (blood type)', '🆑': 'squared cl', '🆒': 'squared cool', '🆓': 'squared free', '🆔': 'squared id', '🆕': 'squared new', '🆖': 'squared ng', '🆗': 'squared ok', '🆘': 'squared sos', '🆙': 'squared up with exclamation mark', '🆚': 'squared vs', '🇦🇨': 'flag: Ascension Island', '🇦🇩': 'flag: Andorra', '🇦🇪': 'flag: United Arab Emirates', '🇦🇫': 'flag: Afghanistan', '🇦🇬': 'flag: Antigua & Barbuda', '🇦🇮': 'flag: Anguilla', '🇦🇱': 'flag: Albania', '🇦🇲': 'flag: Armenia', '🇦🇴': 'flag: Angola', '🇦🇶': 'flag: Antarctica', '🇦🇷': 'flag: Argentina', '🇦🇸': 'flag: American Samoa', '🇦🇹': 'flag: Austria', '🇦🇺': 'flag: Australia', '🇦🇼': 'flag: Aruba', '🇦🇽': 'flag: Åland Islands', '🇦🇿': 'flag: Azerbaijan', '🇧🇦': 'flag: Bosnia & Herzegovina', '🇧🇧': 'flag: Barbados', '🇧🇩': 'flag: Bangladesh', '🇧🇪': 'flag: Belgium', '🇧🇫': 'flag: Burkina Faso', '🇧🇬': 'flag: Bulgaria', '🇧🇭': 'flag: Bahrain', '🇧🇮': 'flag: Burundi', '🇧🇯': 'flag: Benin', '🇧🇱': 'flag: St. Barthélemy', '🇧🇲': 'flag: Bermuda', '🇧🇳': 'flag: Brunei', '🇧🇴': 'flag: Bolivia', '🇧🇶': 'flag: Caribbean Netherlands', '🇧🇷': 'flag: Brazil', '🇧🇸': 'flag: Bahamas', '🇧🇹': 'flag: Bhutan', '🇧🇻': 'flag: Bouvet Island', '🇧🇼': 'flag: Botswana', '🇧🇾': 'flag: Belarus', '🇧🇿': 'flag: Belize', '🇨🇦': 'flag: Canada', '🇨🇨': 'flag: Cocos (Keeling) Islands', '🇨🇩': 'flag: Congo - Kinshasa', '🇨🇫': 'flag: Central African Republic', '🇨🇬': 'flag: Congo - Brazzaville', '🇨🇭': 'flag: Switzerland', '🇨🇮': 'flag: Côte d’Ivoire', '🇨🇰': 'flag: Cook Islands', '🇨🇱': 'flag: Chile', '🇨🇲': 'flag: Cameroon', '🇨🇳': 'flag: China', '🇨🇴': 'flag: Colombia', '🇨🇵': 'flag: Clipperton Island', '🇨🇶': 'flag: Sark', '🇨🇷': 'flag: Costa Rica', '🇨🇺': 'flag: Cuba', '🇨🇻': 'flag: Cape Verde', '🇨🇼': 'flag: Curaçao', '🇨🇽': 'flag: Christmas Island', '🇨🇾': 'flag: Cyprus', '🇨🇿': 'flag: Czechia', '🇩🇪': 'flag: Germany', '🇩🇬': 'flag: Diego Garcia', '🇩🇯': 'flag: Djibouti', '🇩🇰': 'flag: Denmark', '🇩🇲': 'flag: Dominica', '🇩🇴': 'flag: Dominican Republic', '🇩🇿': 'flag: Algeria', '🇪🇦': 'flag: Ceuta & Melilla', '🇪🇨': 'flag: Ecuador', '🇪🇪': 'flag: Estonia', '🇪🇬': 'flag: Egypt', '🇪🇭': 'flag: Western Sahara', '🇪🇷': 'flag: Eritrea', '🇪🇸': 'flag: Spain', '🇪🇹': 'flag: Ethiopia', '🇪🇺': 'flag: European Union', '🇫🇮': 'flag: Finland', '🇫🇯': 'flag: Fiji', '🇫🇰': 'flag: Falkland Islands', '🇫🇲': 'flag: Micronesia', '🇫🇴': 'flag: Faroe Islands', '🇫🇷': 'flag: France', '🇬🇦': 'flag: Gabon', '🇬🇧': 'flag: United Kingdom', '🇬🇩': 'flag: Grenada', '🇬🇪': 'flag: Georgia', '🇬🇫': 'flag: French Guiana', '🇬🇬': 'flag: Guernsey', '🇬🇭': 'flag: Ghana', '🇬🇮': 'flag: Gibraltar', '🇬🇱': 'flag: Greenland', '🇬🇲': 'flag: Gambia', '🇬🇳': 'flag: Guinea', '🇬🇵': 'flag: Guadeloupe', '🇬🇶': 'flag: Equatorial Guinea', '🇬🇷': 'flag: Greece', '🇬🇸': 'flag: South Georgia & South Sandwich Islands', '🇬🇹': 'flag: Guatemala', '🇬🇺': 'flag: Guam', '🇬🇼': 'flag: Guinea-Bissau', '🇬🇾': 'flag: Guyana', '🇭🇰': 'flag: Hong Kong SAR China', '🇭🇲': 'flag: Heard & McDonald Islands', '🇭🇳': 'flag: Honduras', '🇭🇷': 'flag: Croatia', '🇭🇹': 'flag: Haiti', '🇭🇺': 'flag: Hungary', '🇮🇨': 'flag: Canary Islands', '🇮🇩': 'flag: Indonesia', '🇮🇪': 'flag: Ireland', '🇮🇱': 'flag: Israel', '🇮🇲': 'flag: Isle of Man', '🇮🇳': 'flag: India', '🇮🇴': 'flag: British Indian Ocean Territory', '🇮🇶': 'flag: Iraq', '🇮🇷': 'flag: Iran', '🇮🇸': 'flag: Iceland', '🇮🇹': 'flag: Italy', '🇯🇪': 'flag: Jersey', '🇯🇲': 'flag: Jamaica', '🇯🇴': 'flag: Jordan', '🇯🇵': 'flag: Japan', '🇰🇪': 'flag: Kenya', '🇰🇬': 'flag: Kyrgyzstan', '🇰🇭': 'flag: Cambodia', '🇰🇮': 'flag: Kiribati', '🇰🇲': 'flag: Comoros', '🇰🇳': 'flag: St. Kitts & Nevis', '🇰🇵': 'flag: North Korea', '🇰🇷': 'flag: South Korea', '🇰🇼': 'flag: Kuwait', '🇰🇾': 'flag: Cayman Islands', '🇰🇿': 'flag: Kazakhstan', '🇱🇦': 'flag: Laos', '🇱🇧': 'flag: Lebanon', '🇱🇨': 'flag: St. Lucia', '🇱🇮': 'flag: Liechtenstein', '🇱🇰': 'flag: Sri Lanka', '🇱🇷': 'flag: Liberia', '🇱🇸': 'flag: Lesotho', '🇱🇹': 'flag: Lithuania', '🇱🇺': 'flag: Luxembourg', '🇱🇻': 'flag: Latvia', '🇱🇾': 'flag: Libya', '🇲🇦': 'flag: Morocco', '🇲🇨': 'flag: Monaco', '🇲🇩': 'flag: Moldova', '🇲🇪': 'flag: Montenegro', '🇲🇫': 'flag: St. Martin', '🇲🇬': 'flag: Madagascar', '🇲🇭': 'flag: Marshall Islands', '🇲🇰': 'flag: North Macedonia', '🇲🇱': 'flag: Mali', '🇲🇲': 'flag: Myanmar (Burma)', '🇲🇳': 'flag: Mongolia', '🇲🇴': 'flag: Macao SAR China', '🇲🇵': 'flag: Northern Mariana Islands', '🇲🇶': 'flag: Martinique', '🇲🇷': 'flag: Mauritania', '🇲🇸': 'flag: Montserrat', '🇲🇹': 'flag: Malta', '🇲🇺': 'flag: Mauritius', '🇲🇻': 'flag: Maldives', '🇲🇼': 'flag: Malawi', '🇲🇽': 'flag: Mexico', '🇲🇾': 'flag: Malaysia', '🇲🇿': 'flag: Mozambique', '🇳🇦': 'flag: Namibia', '🇳🇨': 'flag: New Caledonia', '🇳🇪': 'flag: Niger', '🇳🇫': 'flag: Norfolk Island', '🇳🇬': 'flag: Nigeria', '🇳🇮': 'flag: Nicaragua', '🇳🇱': 'flag: Netherlands', '🇳🇴': 'flag: Norway', '🇳🇵': 'flag: Nepal', '🇳🇷': 'flag: Nauru', '🇳🇺': 'flag: Niue', '🇳🇿': 'flag: New Zealand', '🇴🇲': 'flag: Oman', '🇵🇦': 'flag: Panama', '🇵🇪': 'flag: Peru', '🇵🇫': 'flag: French Polynesia', '🇵🇬': 'flag: Papua New Guinea', '🇵🇭': 'flag: Philippines', '🇵🇰': 'flag: Pakistan', '🇵🇱': 'flag: Poland', '🇵🇲': 'flag: St. Pierre & Miquelon', '🇵🇳': 'flag: Pitcairn Islands', '🇵🇷': 'flag: Puerto Rico', '🇵🇸': 'flag: Palestinian Territories', '🇵🇹': 'flag: Portugal', '🇵🇼': 'flag: Palau', '🇵🇾': 'flag: Paraguay', '🇶🇦': 'flag: Qatar', '🇷🇪': 'flag: Réunion', '🇷🇴': 'flag: Romania', '🇷🇸': 'flag: Serbia', '🇷🇺': 'flag: Russia', '🇷🇼': 'flag: Rwanda', '🇸🇦': 'flag: Saudi Arabia', '🇸🇧': 'flag: Solomon Islands', '🇸🇨': 'flag: Seychelles', '🇸🇩': 'flag: Sudan', '🇸🇪': 'flag: Sweden', '🇸🇬': 'flag: Singapore', '🇸🇭': 'flag: St. Helena', '🇸🇮': 'flag: Slovenia', '🇸🇯': 'flag: Svalbard & Jan Mayen', '🇸🇰': 'flag: Slovakia', '🇸🇱': 'flag: Sierra Leone', '🇸🇲': 'flag: San Marino', '🇸🇳': 'flag: Senegal', '🇸🇴': 'flag: Somalia', '🇸🇷': 'flag: Suriname', '🇸🇸': 'flag: South Sudan', '🇸🇹': 'flag: São Tomé & Príncipe', '🇸🇻': 'flag: El Salvador', '🇸🇽': 'flag: Sint Maarten', '🇸🇾': 'flag: Syria', '🇸🇿': 'flag: Eswatini', '🇹🇦': 'flag: Tristan da Cunha', '🇹🇨': 'flag: Turks & Caicos Islands', '🇹🇩': 'flag: Chad', '🇹🇫': 'flag: French Southern Territories', '🇹🇬': 'flag: Togo', '🇹🇭': 'flag: Thailand', '🇹🇯': 'flag: Tajikistan', '🇹🇰': 'flag: Tokelau', '🇹🇱': 'flag: Timor-Leste', '🇹🇲': 'flag: Turkmenistan', '🇹🇳': 'flag: Tunisia', '🇹🇴': 'flag: Tonga', '🇹🇷': 'flag: Türkiye', '🇹🇹': 'flag: Trinidad & Tobago', '🇹🇻': 'flag: Tuvalu', '🇹🇼': 'flag: Taiwan', '🇹🇿': 'flag: Tanzania', '🇺🇦': 'flag: Ukraine', '🇺🇬': 'flag: Uganda', '🇺🇲': 'flag: U.S. Outlying Islands', '🇺🇳': 'flag: United Nations', '🇺🇸': 'flag: United States', '🇺🇾': 'flag: Uruguay', '🇺🇿': 'flag: Uzbekistan', '🇻🇦': 'flag: Vatican City', '🇻🇨': 'flag: St. Vincent & Grenadines', '🇻🇪': 'flag: Venezuela', '🇻🇬': 'flag: British Virgin Islands', '🇻🇮': 'flag: U.S. Virgin Islands', '🇻🇳': 'flag: Vietnam', '🇻🇺': 'flag: Vanuatu', '🇼🇫': 'flag: Wallis & Futuna', '🇼🇸': 'flag: Samoa', '🇽🇰': 'flag: Kosovo', '🇾🇪': 'flag: Yemen', '🇾🇹': 'flag: Mayotte', '🇿🇦': 'flag: South Africa', '🇿🇲': 'flag: Zambia', '🇿🇼': 'flag: Zimbabwe', '🈁': 'Japanese “here” button', '🈂️': 'Japanese “service charge” button', '🈚': 'Japanese “free of charge” button', '🈯': 'Japanese “reserved” button', '🈲': 'squared cjk unified ideograph-7981', '🈳': 'squared cjk unified ideograph-7a7a', '🈴': 'squared cjk unified ideograph-5408', '🈵': 'squared cjk unified ideograph-6e80', '🈶': 'squared cjk unified ideograph-6709', '🈷️': 'Japanese “monthly amount” button', '🈸': 'squared cjk unified ideograph-7533', '🈹': 'squared cjk unified ideograph-5272', '🈺': 'squared cjk unified ideograph-55b6', '🉐': 'circled ideograph advantage', '🉑': 'circled ideograph accept', '🌀': 'cyclone', '🌁': 'foggy', '🌂': 'closed umbrella', '🌃': 'night with stars', '🌄': 'sunrise over mountains', '🌅': 'sunrise', '🌆': 'cityscape at dusk', '🌇': 'sunset over buildings', '🌈': 'rainbow', '🌉': 'bridge at night', '🌊': 'water wave', '🌋': 'volcano', '🌌': 'milky way', '🌍': 'earth globe europe-africa', '🌎': 'earth globe americas', '🌏': 'globe showing Asia-Australia', '🌐': 'globe with meridians', '🌑': 'new moon', '🌒': 'waxing crescent moon', '🌓': 'first quarter moon symbol', '🌔': 'waxing gibbous moon symbol', '🌕': 'full moon symbol', '🌖': 'waning gibbous moon symbol', '🌗': 'last quarter moon symbol', '🌘': 'waning crescent moon symbol', '🌙': 'crescent moon', '🌚': 'new moon face', '🌛': 'first quarter moon face', '🌜': 'last quarter moon face', '🌝': 'full moon with face', '🌞': 'sun with face', '🌟': 'glowing star', '🌠': 'shooting star', '🌡️': 'thermometer', '🌤️': 'sun behind small cloud', '🌥️': 'sun behind large cloud', '🌦️': 'sun behind rain cloud', '🌧️': 'cloud with rain', '🌨️': 'cloud with snow', '🌩️': 'cloud with lightning', '🌪️': 'tornado', '🌫️': 'fog', '🌬️': 'wind face', '🌭': 'hot dog', '🌮': 'taco', '🌯': 'burrito', '🌰': 'chestnut', '🌱': 'seedling', '🌲': 'evergreen tree', '🌳': 'deciduous tree', '🌴': 'palm tree', '🌵': 'cactus', '🌶️': 'hot pepper', '🌷': 'tulip', '🌸': 'cherry blossom', '🌹': 'rose', '🌺': 'hibiscus', '🌻': 'sunflower', '🌼': 'blossom', '🌽': 'ear of maize', '🌾': 'ear of rice', '🌿': 'herb', '🍀': 'four leaf clover', '🍁': 'maple leaf', '🍂': 'fallen leaf', '🍃': 'leaf fluttering in wind', '🍄': 'mushroom', '🍄\u200d🟫': 'brown mushroom', '🍅': 'tomato', '🍆': 'aubergine', '🍇': 'grapes', '🍈': 'melon', '🍉': 'watermelon', '🍊': 'tangerine', '🍋': 'lemon', '🍋\u200d🟩': 'lime', '🍌': 'banana', '🍍': 'pineapple', '🍎': 'red apple', '🍏': 'green apple', '🍐': 'pear', '🍑': 'peach', '🍒': 'cherries', '🍓': 'strawberry', '🍔': 'hamburger', '🍕': 'slice of pizza', '🍖': 'meat on bone', '🍗': 'poultry leg', '🍘': 'rice cracker', '🍙': 'rice ball', '🍚': 'cooked rice', '🍛': 'curry and rice', '🍜': 'steaming bowl', '🍝': 'spaghetti', '🍞': 'bread', '🍟': 'french fries', '🍠': 'roasted sweet potato', '🍡': 'dango', '🍢': 'oden', '🍣': 'sushi', '🍤': 'fried shrimp', '🍥': 'fish cake with swirl design', '🍦': 'soft ice cream', '🍧': 'shaved ice', '🍨': 'ice cream', '🍩': 'doughnut', '🍪': 'cookie', '🍫': 'chocolate bar', '🍬': 'candy', '🍭': 'lollipop', '🍮': 'custard', '🍯': 'honey pot', '🍰': 'shortcake', '🍱': 'bento box', '🍲': 'pot of food', '🍳': 'cooking', '🍴': 'fork and knife', '🍵': 'teacup without handle', '🍶': 'sake bottle and cup', '🍷': 'wine glass', '🍸': 'cocktail glass', '🍹': 'tropical drink', '🍺': 'beer mug', '🍻': 'clinking beer mugs', '🍼': 'baby bottle', '🍽️': 'fork and knife with plate', '🍾': 'bottle with popping cork', '🍿': 'popcorn', '🎀': 'ribbon', '🎁': 'wrapped present', '🎂': 'birthday cake', '🎃': 'jack-o-lantern', '🎄': 'christmas tree', '🎅': 'father christmas', '🎆': 'fireworks', '🎇': 'firework sparkler', '🎈': 'balloon', '🎉': 'party popper', '🎊': 'confetti ball', '🎋': 'tanabata tree', '🎌': 'crossed flags', '🎍': 'pine decoration', '🎎': 'japanese dolls', '🎏': 'carp streamer', '🎐': 'wind chime', '🎑': 'moon viewing ceremony', '🎒': 'school satchel', '🎓': 'graduation cap', '🎖️': 'military medal', '🎗️': 'reminder ribbon', '🎙️': 'studio microphone', '🎚️': 'level slider', '🎛️': 'control knobs', '🎞️': 'film frames', '🎟️': 'admission tickets', '🎠': 'carousel horse', '🎡': 'ferris wheel', '🎢': 'roller coaster', '🎣': 'fishing pole and fish', '🎤': 'microphone', '🎥': 'movie camera', '🎦': 'cinema', '🎧': 'headphone', '🎨': 'artist palette', '🎩': 'top hat', '🎪': 'circus tent', '🎫': 'ticket', '🎬': 'clapper board', '🎭': 'performing arts', '🎮': 'video game', '🎯': 'direct hit', '🎰': 'slot machine', '🎱': 'billiards', '🎲': 'game die', '🎳': 'bowling', '🎴': 'flower playing cards', '🎵': 'musical note', '🎶': 'multiple musical notes', '🎷': 'saxophone', '🎸': 'guitar', '🎹': 'musical keyboard', '🎺': 'trumpet', '🎻': 'violin', '🎼': 'musical score', '🎽': 'running shirt with sash', '🎾': 'tennis racquet and ball', '🎿': 'ski and ski boot', '🏀': 'basketball and hoop', '🏁': 'chequered flag', '🏂': 'snowboarder', '🏃': 'runner', '🏄': 'surfer', '🏅': 'sports medal', '🏆': 'trophy', '🏇': 'horse racing', '🏈': 'american football', '🏉': 'rugby football', '🏊': 'person swimming', '🏋️': 'person lifting weights', '🏌️': 'person golfing', '🏍️': 'motorcycle', '🏎️': 'racing car', '🏏': 'cricket bat and ball', '🏐': 'volleyball', '🏑': 'field hockey stick and ball', '🏒': 'ice hockey stick and puck', '🏓': 'table tennis paddle and ball', '🏔️': 'snow-capped mountain', '🏕️': 'camping', '🏖️': 'beach with umbrella', '🏗️': 'building construction', '🏘️': 'houses', '🏙️': 'cityscape', '🏚️': 'derelict house', '🏛️': 'classical building', '🏜️': 'desert', '🏝️': 'desert island', '🏞️': 'national park', '🏟️': 'stadium', '🏠': 'house building', '🏡': 'house with garden', '🏢': 'office building', '🏣': 'japanese post office', '🏤': 'post office', '🏥': 'hospital', '🏦': 'bank', '🏧': 'automated teller machine', '🏨': 'hotel', '🏩': 'love hotel', '🏪': 'convenience store', '🏫': 'school', '🏬': 'department store', '🏭': 'factory', '🏮': 'izakaya lantern', '🏯': 'japanese castle', '🏰': 'european castle', '🏳️': 'white flag', '🏳️\u200d⚧️': 'transgender flag', '🏳️\u200d🌈': 'rainbow flag', '🏴': 'black flag', '🏴\u200d☠️': 'pirate flag', '🏴\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f': 'flag: England', '🏴\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f': 'flag: Scotland', '🏴\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f': 'flag: Wales', '🏵️': 'rosette', '🏷️': 'label', '🏸': 'badminton racquet and shuttlecock', '🏹': 'bow and arrow', '🏺': 'amphora', '🐀': 'rat', '🐁': 'mouse', '🐂': 'ox', '🐃': 'water buffalo', '🐄': 'cow', '🐅': 'tiger', '🐆': 'leopard', '🐇': 'rabbit', '🐈': 'cat', '🐈\u200d⬛': 'black cat', '🐉': 'dragon', '🐊': 'crocodile', '🐋': 'whale', '🐌': 'snail', '🐍': 'snake', '🐎': 'horse', '🐏': 'ram', '🐐': 'goat', '🐑': 'sheep', '🐒': 'monkey', '🐓': 'rooster', '🐔': 'chicken', '🐕': 'dog', '🐕\u200d🦺': 'service dog', '🐖': 'pig', '🐗': 'boar', '🐘': 'elephant', '🐙': 'octopus', '🐚': 'spiral shell', '🐛': 'bug', '🐜': 'ant', '🐝': 'honeybee', '🐞': 'lady beetle', '🐟': 'fish', '🐠': 'tropical fish', '🐡': 'blowfish', '🐢': 'turtle', '🐣': 'hatching chick', '🐤': 'baby chick', '🐥': 'front-facing baby chick', '🐦': 'bird', '🐦\u200d⬛': 'black bird', '🐦\u200d🔥': 'phoenix', '🐧': 'penguin', '🐨': 'koala', '🐩': 'poodle', '🐪': 'camel', '🐫': 'bactrian camel', '🐬': 'dolphin', '🐭': 'mouse face', '🐮': 'cow face', '🐯': 'tiger face', '🐰': 'rabbit face', '🐱': 'cat face', '🐲': 'dragon face', '🐳': 'spouting whale', '🐴': 'horse face', '🐵': 'monkey face', '🐶': 'dog face', '🐷': 'pig face', '🐸': 'frog face', '🐹': 'hamster face', '🐺': 'wolf face', '🐻': 'bear face', '🐻\u200d❄️': 'polar bear', '🐼': 'panda face', '🐽': 'pig nose', '🐾': 'paw prints', '🐿️': 'chipmunk', '👀': 'eyes', '👁️': 'eye', '👁️\u200d🗨️': 'eye in speech bubble', '👂': 'ear', '👃': 'nose', '👄': 'mouth', '👅': 'tongue', '👆': 'white up pointing backhand index', '👇': 'white down pointing backhand index', '👈': 'white left pointing backhand index', '👉': 'white right pointing backhand index', '👊': 'fisted hand sign', '👋': 'waving hand sign', '👌': 'ok hand sign', '👍': 'thumbs up sign', '👎': 'thumbs down sign', '👏': 'clapping hands sign', '👐': 'open hands sign', '👑': 'crown', '👒': 'womans hat', '👓': 'eyeglasses', '👔': 'necktie', '👕': 't-shirt', '👖': 'jeans', '👗': 'dress', '👘': 'kimono', '👙': 'bikini', '👚': 'womans clothes', '👛': 'purse', '👜': 'handbag', '👝': 'pouch', '👞': 'mans shoe', '👟': 'athletic shoe', '👠': 'high-heeled shoe', '👡': 'womans sandal', '👢': 'womans boots', '👣': 'footprints', '👤': 'bust in silhouette', '👥': 'busts in silhouette', '👦': 'boy', '👧': 'girl', '👨': 'man', '👩': 'woman', '👪': 'family', '👫': 'man and woman holding hands', '👬': 'two men holding hands', '👭': 'two women holding hands', '👮': 'police officer', '👯': 'woman with bunny ears', '👰': 'bride with veil', '👱': 'person with blond hair', '👲': 'man with gua pi mao', '👳': 'man with turban', '👴': 'older man', '👵': 'older woman', '👶': 'baby', '👷': 'construction worker', '👸': 'princess', '👹': 'japanese ogre', '👺': 'japanese goblin', '👻': 'ghost', '👼': 'baby angel', '👽': 'extraterrestrial alien', '👾': 'alien monster', '👿': 'imp', '💀': 'skull', '💁': 'information desk person', '💂': 'guardsman', '💃': 'dancer', '💄': 'lipstick', '💅': 'nail polish', '💆': 'face massage', '💇': 'haircut', '💈': 'barber pole', '💉': 'syringe', '💊': 'pill', '💋': 'kiss mark', '💌': 'love letter', '💍': 'ring', '💎': 'gem stone', '💏': 'kiss', '💐': 'bouquet', '💑': 'couple with heart', '💒': 'wedding', '💓': 'beating heart', '💔': 'broken heart', '💕': 'two hearts', '💖': 'sparkling heart', '💗': 'growing heart', '💘': 'heart with arrow', '💙': 'blue heart', '💚': 'green heart', '💛': 'yellow heart', '💜': 'purple heart', '💝': 'heart with ribbon', '💞': 'revolving hearts', '💟': 'heart decoration', '💠': 'diamond shape with a dot inside', '💡': 'electric light bulb', '💢': 'anger symbol', '💣': 'bomb', '💤': 'sleeping symbol', '💥': 'collision symbol', '💦': 'splashing sweat symbol', '💧': 'droplet', '💨': 'dash symbol', '💩': 'pile of poo', '💪': 'flexed biceps', '💫': 'dizzy symbol', '💬': 'speech balloon', '💭': 'thought balloon', '💮': 'white flower', '💯': 'hundred points symbol', '💰': 'money bag', '💱': 'currency exchange', '💲': 'heavy dollar sign', '💳': 'credit card', '💴': 'banknote with yen sign', '💵': 'banknote with dollar sign', '💶': 'banknote with euro sign', '💷': 'banknote with pound sign', '💸': 'money with wings', '💹': 'chart with upwards trend and yen sign', '💺': 'seat', '💻': 'personal computer', '💼': 'briefcase', '💽': 'minidisc', '💾': 'floppy disk', '💿': 'optical disc', '📀': 'dvd', '📁': 'file folder', '📂': 'open file folder', '📃': 'page with curl', '📄': 'page facing up', '📅': 'calendar', '📆': 'tear-off calendar', '📇': 'card index', '📈': 'chart with upwards trend', '📉': 'chart with downwards trend', '📊': 'bar chart', '📋': 'clipboard', '📌': 'pushpin', '📍': 'round pushpin', '📎': 'paperclip', '📏': 'straight ruler', '📐': 'triangular ruler', '📑': 'bookmark tabs', '📒': 'ledger', '📓': 'notebook', '📔': 'notebook with decorative cover', '📕': 'closed book', '📖': 'open book', '📗': 'green book', '📘': 'blue book', '📙': 'orange book', '📚': 'books', '📛': 'name badge', '📜': 'scroll', '📝': 'memo', '📞': 'telephone receiver', '📟': 'pager', '📠': 'fax machine', '📡': 'satellite antenna', '📢': 'public address loudspeaker', '📣': 'cheering megaphone', '📤': 'outbox tray', '📥': 'inbox tray', '📦': 'package', '📧': 'e-mail symbol', '📨': 'incoming envelope', '📩': 'envelope with downwards arrow above', '📪': 'closed mailbox with lowered flag', '📫': 'closed mailbox with raised flag', '📬': 'open mailbox with raised flag', '📭': 'open mailbox with lowered flag', '📮': 'postbox', '📯': 'postal horn', '📰': 'newspaper', '📱': 'mobile phone', '📲': 'mobile phone with rightwards arrow at left', '📳': 'vibration mode', '📴': 'mobile phone off', '📵': 'no mobile phones', '📶': 'antenna with bars', '📷': 'camera', '📸': 'camera with flash', '📹': 'video camera', '📺': 'television', '📻': 'radio', '📼': 'videocassette', '📽️': 'film projector', '📿': 'prayer beads', '🔀': 'twisted rightwards arrows', '🔁': 'clockwise rightwards and leftwards open circle arrows', '🔂': 'clockwise rightwards and leftwards open circle arrows with circled one overlay', '🔃': 'clockwise vertical arrows', '🔄': 'anticlockwise downwards and upwards open circle arrows', '🔅': 'low brightness symbol', '🔆': 'high brightness symbol', '🔇': 'speaker with cancellation stroke', '🔈': 'speaker low volume', '🔉': 'speaker medium volume', '🔊': 'speaker with three sound waves', '🔋': 'battery', '🔌': 'electric plug', '🔍': 'left-pointing magnifying glass', '🔎': 'right-pointing magnifying glass', '🔏': 'lock with ink pen', '🔐': 'closed lock with key', '🔑': 'key', '🔒': 'lock', '🔓': 'open lock', '🔔': 'bell', '🔕': 'bell with slash', '🔖': 'bookmark', '🔗': 'link symbol', '🔘': 'radio button', '🔙': 'back with leftwards arrow above', '🔚': 'end with leftwards arrow above', '🔛': 'on with exclamation mark with left right arrow above', '🔜': 'soon with rightwards arrow above', '🔝': 'top with upwards arrow above', '🔞': 'no one under eighteen symbol', '🔟': 'keycap ten', '🔠': 'input symbol for latin capital letters', '🔡': 'input symbol for latin small letters', '🔢': 'input symbol for numbers', '🔣': 'input symbol for symbols', '🔤': 'input symbol for latin letters', '🔥': 'fire', '🔦': 'electric torch', '🔧': 'wrench', '🔨': 'hammer', '🔩': 'nut and bolt', '🔪': 'hocho', '🔫': 'pistol', '🔬': 'microscope', '🔭': 'telescope', '🔮': 'crystal ball', '🔯': 'six pointed star with middle dot', '🔰': 'japanese symbol for beginner', '🔱': 'trident emblem', '🔲': 'black square button', '🔳': 'white square button', '🔴': 'large red circle', '🔵': 'large blue circle', '🔶': 'large orange diamond', '🔷': 'large blue diamond', '🔸': 'small orange diamond', '🔹': 'small blue diamond', '🔺': 'up-pointing red triangle', '🔻': 'down-pointing red triangle', '🔼': 'up-pointing small red triangle', '🔽': 'down-pointing small red triangle', '🕉️': 'om', '🕊️': 'dove', '🕋': 'kaaba', '🕌': 'mosque', '🕍': 'synagogue', '🕎': 'menorah with nine branches', '🕐': 'clock face one oclock', '🕑': 'clock face two oclock', '🕒': 'clock face three oclock', '🕓': 'clock face four oclock', '🕔': 'clock face five oclock', '🕕': 'clock face six oclock', '🕖': 'clock face seven oclock', '🕗': 'clock face eight oclock', '🕘': 'clock face nine oclock', '🕙': 'clock face ten oclock', '🕚': 'clock face eleven oclock', '🕛': 'clock face twelve oclock', '🕜': 'clock face one-thirty', '🕝': 'clock face two-thirty', '🕞': 'clock face three-thirty', '🕟': 'clock face four-thirty', '🕠': 'clock face five-thirty', '🕡': 'clock face six-thirty', '🕢': 'clock face seven-thirty', '🕣': 'clock face eight-thirty', '🕤': 'clock face nine-thirty', '🕥': 'clock face ten-thirty', '🕦': 'clock face eleven-thirty', '🕧': 'clock face twelve-thirty', '🕯️': 'candle', '🕰️': 'mantelpiece clock', '🕳️': 'hole', '🕴️': 'person in suit levitating', '🕵️': 'detective', '🕶️': 'sunglasses', '🕷️': 'spider', '🕸️': 'spider web', '🕹️': 'joystick', '🕺': 'man dancing', '🖇️': 'linked paperclips', '🖊️': 'pen', '🖋️': 'fountain pen', '🖌️': 'paintbrush', '🖍️': 'crayon', '🖐️': 'hand with fingers splayed', '🖕': 'reversed hand with middle finger extended', '🖖': 'raised hand with part between middle and ring fingers', '🖤': 'black heart', '🖥️': 'desktop computer', '🖨️': 'printer', '🖱️': 'computer mouse', '🖲️': 'trackball', '🖼️': 'framed picture', '🗂️': 'card index dividers', '🗃️': 'card file box', '🗄️': 'file cabinet', '🗑️': 'wastebasket', '🗒️': 'spiral notepad', '🗓️': 'spiral calendar', '🗜️': 'clamp', '🗝️': 'old key', '🗞️': 'rolled-up newspaper', '🗡️': 'dagger', '🗣️': 'speaking head', '🗨️': 'left speech bubble', '🗯️': 'right anger bubble', '🗳️': 'ballot box with ballot', '🗺️': 'world map', '🗻': 'mount fuji', '🗼': 'tokyo tower', '🗽': 'statue of liberty', '🗾': 'silhouette of japan', '🗿': 'moyai', '😀': 'grinning face', '😁': 'grinning face with smiling eyes', '😂': 'face with tears of joy', '😃': 'smiling face with open mouth', '😄': 'smiling face with open mouth and smiling eyes', '😅': 'smiling face with open mouth and cold sweat', '😆': 'smiling face with open mouth and tightly-closed eyes', '😇': 'smiling face with halo', '😈': 'smiling face with horns', '😉': 'winking face', '😊': 'smiling face with smiling eyes', '😋': 'face savouring delicious food', '😌': 'relieved face', '😍': 'smiling face with heart-shaped eyes', '😎': 'smiling face with sunglasses', '😏': 'smirking face', '😐': 'neutral face', '😑': 'expressionless face', '😒': 'unamused face', '😓': 'face with cold sweat', '😔': 'pensive face', '😕': 'confused face', '😖': 'confounded face', '😗': 'kissing face', '😘': 'face blowing a kiss', '😙': 'kissing face with smiling eyes', '😚': 'kissing face with closed eyes', '😛': 'face with tongue', '😜': 'face with stuck-out tongue and winking eye', '😝': 'face with stuck-out tongue and tightly-closed eyes', '😞': 'disappointed face', '😟': 'worried face', '😠': 'angry face', '😡': 'pouting face', '😢': 'crying face', '😣': 'persevering face', '😤': 'face with look of triumph', '😥': 'disappointed but relieved face', '😦': 'frowning face with open mouth', '😧': 'anguished face', '😨': 'fearful face', '😩': 'weary face', '😪': 'sleepy face', '😫': 'tired face', '😬': 'grimacing face', '😭': 'loudly crying face', '😮': 'face with open mouth', '😮\u200d💨': 'face exhaling', '😯': 'hushed face', '😰': 'face with open mouth and cold sweat', '😱': 'face screaming in fear', '😲': 'astonished face', '😳': 'flushed face', '😴': 'sleeping face', '😵': 'face with crossed-out eyes', '😵\u200d💫': 'face with spiral eyes', '😶': 'face without mouth', '😶\u200d🌫️': 'face in clouds', '😷': 'face with medical mask', '😸': 'grinning cat face with smiling eyes', '😹': 'cat face with tears of joy', '😺': 'smiling cat face with open mouth', '😻': 'smiling cat face with heart-shaped eyes', '😼': 'cat face with wry smile', '😽': 'kissing cat face with closed eyes', '😾': 'pouting cat face', '😿': 'crying cat face', '🙀': 'weary cat face', '🙁': 'slightly frowning face', '🙂': 'slightly smiling face', '🙂\u200d↔️': 'head shaking horizontally', '🙂\u200d↕️': 'head shaking vertically', '🙃': 'upside-down face', '🙄': 'face with rolling eyes', '🙅': 'face with no good gesture', '🙆': 'face with ok gesture', '🙇': 'person bowing deeply', '🙈': 'see-no-evil monkey', '🙉': 'hear-no-evil monkey', '🙊': 'speak-no-evil monkey', '🙋': 'happy person raising one hand', '🙌': 'person raising both hands in celebration', '🙍': 'person frowning', '🙎': 'person with pouting face', '🙏': 'person with folded hands', '🚀': 'rocket', '🚁': 'helicopter', '🚂': 'steam locomotive', '🚃': 'railway car', '🚄': 'high-speed train', '🚅': 'high-speed train with bullet nose', '🚆': 'train', '🚇': 'metro', '🚈': 'light rail', '🚉': 'station', '🚊': 'tram', '🚋': 'tram car', '🚌': 'bus', '🚍': 'oncoming bus', '🚎': 'trolleybus', '🚏': 'bus stop', '🚐': 'minibus', '🚑': 'ambulance', '🚒': 'fire engine', '🚓': 'police car', '🚔': 'oncoming police car', '🚕': 'taxi', '🚖': 'oncoming taxi', '🚗': 'automobile', '🚘': 'oncoming automobile', '🚙': 'recreational vehicle', '🚚': 'delivery truck', '🚛': 'articulated lorry', '🚜': 'tractor', '🚝': 'monorail', '🚞': 'mountain railway', '🚟': 'suspension railway', '🚠': 'mountain cableway', '🚡': 'aerial tramway', '🚢': 'ship', '🚣': 'person rowing boat', '🚤': 'speedboat', '🚥': 'horizontal traffic light', '🚦': 'vertical traffic light', '🚧': 'construction sign', '🚨': 'police cars revolving light', '🚩': 'triangular flag on post', '🚪': 'door', '🚫': 'no entry sign', '🚬': 'smoking symbol', '🚭': 'no smoking symbol', '🚮': 'put litter in its place symbol', '🚯': 'do not litter symbol', '🚰': 'potable water symbol', '🚱': 'non-potable water symbol', '🚲': 'bicycle', '🚳': 'no bicycles', '🚴': 'bicyclist', '🚵': 'mountain bicyclist', '🚶': 'person walking', '🚷': 'no pedestrians', '🚸': 'children crossing', '🚹': 'mens symbol', '🚺': 'womens symbol', '🚻': 'restroom', '🚼': 'baby symbol', '🚽': 'toilet', '🚾': 'water closet', '🚿': 'shower', '🛀': 'person taking bath', '🛁': 'bathtub', '🛂': 'passport control', '🛃': 'customs', '🛄': 'baggage claim', '🛅': 'left luggage', '🛋️': 'couch and lamp', '🛌': 'person in bed', '🛍️': 'shopping bags', '🛎️': 'bellhop bell', '🛏️': 'bed', '🛐': 'place of worship', '🛑': 'octagonal sign', '🛒': 'shopping trolley', '🛕': 'hindu temple', '🛖': 'hut', '🛗': 'elevator', '🛜': 'wireless', '🛝': 'playground slide', '🛞': 'wheel', '🛟': 'ring buoy', '🛠️': 'hammer and wrench', '🛡️': 'shield', '🛢️': 'oil drum', '🛣️': 'motorway', '🛤️': 'railway track', '🛥️': 'motor boat', '🛩️': 'small airplane', '🛫': 'airplane departure', '🛬': 'airplane arriving', '🛰️': 'satellite', '🛳️': 'passenger ship', '🛴': 'scooter', '🛵': 'motor scooter', '🛶': 'canoe', '🛷': 'sled', '🛸': 'flying saucer', '🛹': 'skateboard', '🛺': 'auto rickshaw', '🛻': 'pickup truck', '🛼': 'roller skate', '🟠': 'large orange circle', '🟡': 'large yellow circle', '🟢': 'large green circle', '🟣': 'large purple circle', '🟤': 'large brown circle', '🟥': 'large red square', '🟦': 'large blue square', '🟧': 'large orange square', '🟨': 'large yellow square', '🟩': 'large green square', '🟪': 'large purple square', '🟫': 'large brown square', '🟰': 'heavy equals sign', '🤌': 'pinched fingers', '🤍': 'white heart', '🤎': 'brown heart', '🤏': 'pinching hand', '🤐': 'zipper-mouth face', '🤑': 'money-mouth face', '🤒': 'face with thermometer', '🤓': 'nerd face', '🤔': 'thinking face', '🤕': 'face with head-bandage', '🤖': 'robot face', '🤗': 'hugging face', '🤘': 'sign of the horns', '🤙': 'call me hand', '🤚': 'raised back of hand', '🤛': 'left-facing fist', '🤜': 'right-facing fist', '🤝': 'handshake', '🤞': 'hand with index and middle fingers crossed', '🤟': 'love-you gesture', '🤠': 'face with cowboy hat', '🤡': 'clown face', '🤢': 'nauseated face', '🤣': 'rolling on the floor laughing', '🤤': 'drooling face', '🤥': 'lying face', '🤦': 'face palm', '🤧': 'sneezing face', '🤨': 'face with one eyebrow raised', '🤩': 'grinning face with star eyes', '🤪': 'grinning face with one large and one small eye', '🤫': 'face with finger covering closed lips', '🤬': 'serious face with symbols covering mouth', '🤭': 'smiling face with smiling eyes and hand covering mouth', '🤮': 'face with open mouth vomiting', '🤯': 'shocked face with exploding head', '🤰': 'pregnant woman', '🤱': 'breast-feeding', '🤲': 'palms up together', '🤳': 'selfie', '🤴': 'prince', '🤵': 'man in tuxedo', '🤶': 'mother christmas', '🤷': 'shrug', '🤸': 'person doing cartwheel', '🤹': 'juggling', '🤺': 'fencer', '🤼': 'wrestlers', '🤽': 'water polo', '🤾': 'handball', '🤿': 'diving mask', '🥀': 'wilted flower', '🥁': 'drum with drumsticks', '🥂': 'clinking glasses', '🥃': 'tumbler glass', '🥄': 'spoon', '🥅': 'goal net', '🥇': 'first place medal', '🥈': 'second place medal', '🥉': 'third place medal', '🥊': 'boxing glove', '🥋': 'martial arts uniform', '🥌': 'curling stone', '🥍': 'lacrosse stick and ball', '🥎': 'softball', '🥏': 'flying disc', '🥐': 'croissant', '🥑': 'avocado', '🥒': 'cucumber', '🥓': 'bacon', '🥔': 'potato', '🥕': 'carrot', '🥖': 'baguette bread', '🥗': 'green salad', '🥘': 'shallow pan of food', '🥙': 'stuffed flatbread', '🥚': 'egg', '🥛': 'glass of milk', '🥜': 'peanuts', '🥝': 'kiwifruit', '🥞': 'pancakes', '🥟': 'dumpling', '🥠': 'fortune cookie', '🥡': 'takeout box', '🥢': 'chopsticks', '🥣': 'bowl with spoon', '🥤': 'cup with straw', '🥥': 'coconut', '🥦': 'broccoli', '🥧': 'pie', '🥨': 'pretzel', '🥩': 'cut of meat', '🥪': 'sandwich', '🥫': 'canned food', '🥬': 'leafy green', '🥭': 'mango', '🥮': 'moon cake', '🥯': 'bagel', '🥰': 'smiling face with smiling eyes and three hearts', '🥱': 'yawning face', '🥲': 'smiling face with tear', '🥳': 'face with party horn and party hat', '🥴': 'face with uneven eyes and wavy mouth', '🥵': 'overheated face', '🥶': 'freezing face', '🥷': 'ninja', '🥸': 'disguised face', '🥹': 'face holding back tears', '🥺': 'pleading face', '🥻': 'sari', '🥼': 'lab coat', '🥽': 'goggles', '🥾': 'hiking boot', '🥿': 'flat shoe', '🦀': 'crab', '🦁': 'lion face', '🦂': 'scorpion', '🦃': 'turkey', '🦄': 'unicorn face', '🦅': 'eagle', '🦆': 'duck', '🦇': 'bat', '🦈': 'shark', '🦉': 'owl', '🦊': 'fox face', '🦋': 'butterfly', '🦌': 'deer', '🦍': 'gorilla', '🦎': 'lizard', '🦏': 'rhinoceros', '🦐': 'shrimp', '🦑': 'squid', '🦒': 'giraffe face', '🦓': 'zebra face', '🦔': 'hedgehog', '🦕': 'sauropod', '🦖': 't-rex', '🦗': 'cricket', '🦘': 'kangaroo', '🦙': 'llama', '🦚': 'peacock', '🦛': 'hippopotamus', '🦜': 'parrot', '🦝': 'raccoon', '🦞': 'lobster', '🦟': 'mosquito', '🦠': 'microbe', '🦡': 'badger', '🦢': 'swan', '🦣': 'mammoth', '🦤': 'dodo', '🦥': 'sloth', '🦦': 'otter', '🦧': 'orangutan', '🦨': 'skunk', '🦩': 'flamingo', '🦪': 'oyster', '🦫': 'beaver', '🦬': 'bison', '🦭': 'seal', '🦮': 'guide dog', '🦯': 'probing cane', '🦴': 'bone', '🦵': 'leg', '🦶': 'foot', '🦷': 'tooth', '🦸': 'superhero', '🦹': 'supervillain', '🦺': 'safety vest', '🦻': 'ear with hearing aid', '🦼': 'motorized wheelchair', '🦽': 'manual wheelchair', '🦾': 'mechanical arm', '🦿': 'mechanical leg', '🧀': 'cheese wedge', '🧁': 'cupcake', '🧂': 'salt shaker', '🧃': 'beverage box', '🧄': 'garlic', '🧅': 'onion', '🧆': 'falafel', '🧇': 'waffle', '🧈': 'butter', '🧉': 'mate drink', '🧊': 'ice cube', '🧋': 'bubble tea', '🧌': 'troll', '🧍': 'standing person', '🧎': 'kneeling person', '🧏': 'deaf person', '🧐': 'face with monocle', '🧑': 'adult', '🧒': 'child', '🧓': 'older adult', '🧔': 'bearded person', '🧕': 'person with headscarf', '🧖': 'person in steamy room', '🧗': 'person climbing', '🧘': 'person in lotus position', '🧙': 'mage', '🧚': 'fairy', '🧛': 'vampire', '🧜': 'merperson', '🧝': 'elf', '🧞': 'genie', '🧟': 'zombie', '🧠': 'brain', '🧡': 'orange heart', '🧢': 'billed cap', '🧣': 'scarf', '🧤': 'gloves', '🧥': 'coat', '🧦': 'socks', '🧧': 'red gift envelope', '🧨': 'firecracker', '🧩': 'jigsaw puzzle piece', '🧪': 'test tube', '🧫': 'petri dish', '🧬': 'dna double helix', '🧭': 'compass', '🧮': 'abacus', '🧯': 'fire extinguisher', '🧰': 'toolbox', '🧱': 'brick', '🧲': 'magnet', '🧳': 'luggage', '🧴': 'lotion bottle', '🧵': 'spool of thread', '🧶': 'ball of yarn', '🧷': 'safety pin', '🧸': 'teddy bear', '🧹': 'broom', '🧺': 'basket', '🧻': 'roll of paper', '🧼': 'bar of soap', '🧽': 'sponge', '🧾': 'receipt', '🧿': 'nazar amulet', '🩰': 'ballet shoes', '🩱': 'one-piece swimsuit', '🩲': 'briefs', '🩳': 'shorts', '🩴': 'thong sandal', '🩵': 'light blue heart', '🩶': 'grey heart', '🩷': 'pink heart', '🩸': 'drop of blood', '🩹': 'adhesive bandage', '🩺': 'stethoscope', '🩻': 'x-ray', '🩼': 'crutch', '🪀': 'yo-yo', '🪁': 'kite', '🪂': 'parachute', '🪃': 'boomerang', '🪄': 'magic wand', '🪅': 'pinata', '🪆': 'nesting dolls', '🪇': 'maracas', '🪈': 'flute', '\U0001fa89': 'harp', '\U0001fa8f': 'shovel', '🪐': 'ringed planet', '🪑': 'chair', '🪒': 'razor', '🪓': 'axe', '🪔': 'diya lamp', '🪕': 'banjo', '🪖': 'military helmet', '🪗': 'accordion', '🪘': 'long drum', '🪙': 'coin', '🪚': 'carpentry saw', '🪛': 'screwdriver', '🪜': 'ladder', '🪝': 'hook', '🪞': 'mirror', '🪟': 'window', '🪠': 'plunger', '🪡': 'sewing needle', '🪢': 'knot', '🪣': 'bucket', '🪤': 'mouse trap', '🪥': 'toothbrush', '🪦': 'headstone', '🪧': 'placard', '🪨': 'rock', '🪩': 'mirror ball', '🪪': 'identification card', '🪫': 'low battery', '🪬': 'hamsa', '🪭': 'folding hand fan', '🪮': 'hair pick', '🪯': 'khanda', '🪰': 'fly', '🪱': 'worm', '🪲': 'beetle', '🪳': 'cockroach', '🪴': 'potted plant', '🪵': 'wood', '🪶': 'feather', '🪷': 'lotus', '🪸': 'coral', '🪹': 'empty nest', '🪺': 'nest with eggs', '🪻': 'hyacinth', '🪼': 'jellyfish', '🪽': 'wing', '\U0001fabe': 'leafless tree', '🪿': 'goose', '🫀': 'anatomical heart', '🫁': 'lungs', '🫂': 'people hugging', '🫃': 'pregnant man', '🫄': 'pregnant person', '🫅': 'person with crown', '\U0001fac6': 'fingerprint', '🫎': 'moose', '🫏': 'donkey', '🫐': 'blueberries', '🫑': 'bell pepper', '🫒': 'olive', '🫓': 'flatbread', '🫔': 'tamale', '🫕': 'fondue', '🫖': 'teapot', '🫗': 'pouring liquid', '🫘': 'beans', '🫙': 'jar', '🫚': 'ginger root', '🫛': 'pea pod', '\U0001fadc': 'root vegetable', '\U0001fadf': 'splatter', '🫠': 'melting face', '🫡': 'saluting face', '🫢': 'face with open eyes and hand over mouth', '🫣': 'face with peeking eye', '🫤': 'face with diagonal mouth', '🫥': 'dotted line face', '🫦': 'biting lip', '🫧': 'bubbles', '🫨': 'shaking face', '\U0001fae9': 'face with bags under eyes', '🫰': 'hand with index finger and thumb crossed', '🫱': 'rightwards hand', '🫲': 'leftwards hand', '🫳': 'palm down hand', '🫴': 'palm up hand', '🫵': 'index pointing at the viewer', '🫶': 'heart hands', '🫷': 'leftwards pushing hand', '🫸': 'rightwards pushing hand'}

Emoji that should be included in the emoji suggestions dropdown

nkdsu.apps.vote.emoji.OTHER_ALLOWED_EMOJI: dict[str, str] = {'☝🏻': 'index pointing up: light skin tone', '☝🏼': 'index pointing up: medium-light skin tone', '☝🏽': 'index pointing up: medium skin tone', '☝🏾': 'index pointing up: medium-dark skin tone', '☝🏿': 'index pointing up: dark skin tone', '⛹️\u200d♀️': 'woman bouncing ball', '⛹️\u200d♂️': 'man bouncing ball', '⛹🏻': 'person bouncing ball: light skin tone', '⛹🏻\u200d♀️': 'woman bouncing ball: light skin tone', '⛹🏻\u200d♂️': 'man bouncing ball: light skin tone', '⛹🏼': 'person bouncing ball: medium-light skin tone', '⛹🏼\u200d♀️': 'woman bouncing ball: medium-light skin tone', '⛹🏼\u200d♂️': 'man bouncing ball: medium-light skin tone', '⛹🏽': 'person bouncing ball: medium skin tone', '⛹🏽\u200d♀️': 'woman bouncing ball: medium skin tone', '⛹🏽\u200d♂️': 'man bouncing ball: medium skin tone', '⛹🏾': 'person bouncing ball: medium-dark skin tone', '⛹🏾\u200d♀️': 'woman bouncing ball: medium-dark skin tone', '⛹🏾\u200d♂️': 'man bouncing ball: medium-dark skin tone', '⛹🏿': 'person bouncing ball: dark skin tone', '⛹🏿\u200d♀️': 'woman bouncing ball: dark skin tone', '⛹🏿\u200d♂️': 'man bouncing ball: dark skin tone', '✊🏻': 'raised fist: light skin tone', '✊🏼': 'raised fist: medium-light skin tone', '✊🏽': 'raised fist: medium skin tone', '✊🏾': 'raised fist: medium-dark skin tone', '✊🏿': 'raised fist: dark skin tone', '✋🏻': 'raised hand: light skin tone', '✋🏼': 'raised hand: medium-light skin tone', '✋🏽': 'raised hand: medium skin tone', '✋🏾': 'raised hand: medium-dark skin tone', '✋🏿': 'raised hand: dark skin tone', '✌🏻': 'victory hand: light skin tone', '✌🏼': 'victory hand: medium-light skin tone', '✌🏽': 'victory hand: medium skin tone', '✌🏾': 'victory hand: medium-dark skin tone', '✌🏿': 'victory hand: dark skin tone', '✍🏻': 'writing hand: light skin tone', '✍🏼': 'writing hand: medium-light skin tone', '✍🏽': 'writing hand: medium skin tone', '✍🏾': 'writing hand: medium-dark skin tone', '✍🏿': 'writing hand: dark skin tone', '🎅🏻': 'Santa Claus: light skin tone', '🎅🏼': 'Santa Claus: medium-light skin tone', '🎅🏽': 'Santa Claus: medium skin tone', '🎅🏾': 'Santa Claus: medium-dark skin tone', '🎅🏿': 'Santa Claus: dark skin tone', '🏂🏻': 'snowboarder: light skin tone', '🏂🏼': 'snowboarder: medium-light skin tone', '🏂🏽': 'snowboarder: medium skin tone', '🏂🏾': 'snowboarder: medium-dark skin tone', '🏂🏿': 'snowboarder: dark skin tone', '🏃\u200d♀️': 'woman running', '🏃\u200d♀️\u200d➡️': 'woman running facing right', '🏃\u200d♂️': 'man running', '🏃\u200d♂️\u200d➡️': 'man running facing right', '🏃\u200d➡️': 'person running facing right', '🏃🏻': 'person running: light skin tone', '🏃🏻\u200d♀️': 'woman running: light skin tone', '🏃🏻\u200d♀️\u200d➡️': 'woman running facing right: light skin tone', '🏃🏻\u200d♂️': 'man running: light skin tone', '🏃🏻\u200d♂️\u200d➡️': 'man running facing right: light skin tone', '🏃🏻\u200d➡️': 'person running facing right: light skin tone', '🏃🏼': 'person running: medium-light skin tone', '🏃🏼\u200d♀️': 'woman running: medium-light skin tone', '🏃🏼\u200d♀️\u200d➡️': 'woman running facing right: medium-light skin tone', '🏃🏼\u200d♂️': 'man running: medium-light skin tone', '🏃🏼\u200d♂️\u200d➡️': 'man running facing right: medium-light skin tone', '🏃🏼\u200d➡️': 'person running facing right: medium-light skin tone', '🏃🏽': 'person running: medium skin tone', '🏃🏽\u200d♀️': 'woman running: medium skin tone', '🏃🏽\u200d♀️\u200d➡️': 'woman running facing right: medium skin tone', '🏃🏽\u200d♂️': 'man running: medium skin tone', '🏃🏽\u200d♂️\u200d➡️': 'man running facing right: medium skin tone', '🏃🏽\u200d➡️': 'person running facing right: medium skin tone', '🏃🏾': 'person running: medium-dark skin tone', '🏃🏾\u200d♀️': 'woman running: medium-dark skin tone', '🏃🏾\u200d♀️\u200d➡️': 'woman running facing right: medium-dark skin tone', '🏃🏾\u200d♂️': 'man running: medium-dark skin tone', '🏃🏾\u200d♂️\u200d➡️': 'man running facing right: medium-dark skin tone', '🏃🏾\u200d➡️': 'person running facing right: medium-dark skin tone', '🏃🏿': 'person running: dark skin tone', '🏃🏿\u200d♀️': 'woman running: dark skin tone', '🏃🏿\u200d♀️\u200d➡️': 'woman running facing right: dark skin tone', '🏃🏿\u200d♂️': 'man running: dark skin tone', '🏃🏿\u200d♂️\u200d➡️': 'man running facing right: dark skin tone', '🏃🏿\u200d➡️': 'person running facing right: dark skin tone', '🏄\u200d♀️': 'woman surfing', '🏄\u200d♂️': 'man surfing', '🏄🏻': 'person surfing: light skin tone', '🏄🏻\u200d♀️': 'woman surfing: light skin tone', '🏄🏻\u200d♂️': 'man surfing: light skin tone', '🏄🏼': 'person surfing: medium-light skin tone', '🏄🏼\u200d♀️': 'woman surfing: medium-light skin tone', '🏄🏼\u200d♂️': 'man surfing: medium-light skin tone', '🏄🏽': 'person surfing: medium skin tone', '🏄🏽\u200d♀️': 'woman surfing: medium skin tone', '🏄🏽\u200d♂️': 'man surfing: medium skin tone', '🏄🏾': 'person surfing: medium-dark skin tone', '🏄🏾\u200d♀️': 'woman surfing: medium-dark skin tone', '🏄🏾\u200d♂️': 'man surfing: medium-dark skin tone', '🏄🏿': 'person surfing: dark skin tone', '🏄🏿\u200d♀️': 'woman surfing: dark skin tone', '🏄🏿\u200d♂️': 'man surfing: dark skin tone', '🏇🏻': 'horse racing: light skin tone', '🏇🏼': 'horse racing: medium-light skin tone', '🏇🏽': 'horse racing: medium skin tone', '🏇🏾': 'horse racing: medium-dark skin tone', '🏇🏿': 'horse racing: dark skin tone', '🏊\u200d♀️': 'woman swimming', '🏊\u200d♂️': 'man swimming', '🏊🏻': 'person swimming: light skin tone', '🏊🏻\u200d♀️': 'woman swimming: light skin tone', '🏊🏻\u200d♂️': 'man swimming: light skin tone', '🏊🏼': 'person swimming: medium-light skin tone', '🏊🏼\u200d♀️': 'woman swimming: medium-light skin tone', '🏊🏼\u200d♂️': 'man swimming: medium-light skin tone', '🏊🏽': 'person swimming: medium skin tone', '🏊🏽\u200d♀️': 'woman swimming: medium skin tone', '🏊🏽\u200d♂️': 'man swimming: medium skin tone', '🏊🏾': 'person swimming: medium-dark skin tone', '🏊🏾\u200d♀️': 'woman swimming: medium-dark skin tone', '🏊🏾\u200d♂️': 'man swimming: medium-dark skin tone', '🏊🏿': 'person swimming: dark skin tone', '🏊🏿\u200d♀️': 'woman swimming: dark skin tone', '🏊🏿\u200d♂️': 'man swimming: dark skin tone', '🏋️\u200d♀️': 'woman lifting weights', '🏋️\u200d♂️': 'man lifting weights', '🏋🏻': 'person lifting weights: light skin tone', '🏋🏻\u200d♀️': 'woman lifting weights: light skin tone', '🏋🏻\u200d♂️': 'man lifting weights: light skin tone', '🏋🏼': 'person lifting weights: medium-light skin tone', '🏋🏼\u200d♀️': 'woman lifting weights: medium-light skin tone', '🏋🏼\u200d♂️': 'man lifting weights: medium-light skin tone', '🏋🏽': 'person lifting weights: medium skin tone', '🏋🏽\u200d♀️': 'woman lifting weights: medium skin tone', '🏋🏽\u200d♂️': 'man lifting weights: medium skin tone', '🏋🏾': 'person lifting weights: medium-dark skin tone', '🏋🏾\u200d♀️': 'woman lifting weights: medium-dark skin tone', '🏋🏾\u200d♂️': 'man lifting weights: medium-dark skin tone', '🏋🏿': 'person lifting weights: dark skin tone', '🏋🏿\u200d♀️': 'woman lifting weights: dark skin tone', '🏋🏿\u200d♂️': 'man lifting weights: dark skin tone', '🏌️\u200d♀️': 'woman golfing', '🏌️\u200d♂️': 'man golfing', '🏌🏻': 'person golfing: light skin tone', '🏌🏻\u200d♀️': 'woman golfing: light skin tone', '🏌🏻\u200d♂️': 'man golfing: light skin tone', '🏌🏼': 'person golfing: medium-light skin tone', '🏌🏼\u200d♀️': 'woman golfing: medium-light skin tone', '🏌🏼\u200d♂️': 'man golfing: medium-light skin tone', '🏌🏽': 'person golfing: medium skin tone', '🏌🏽\u200d♀️': 'woman golfing: medium skin tone', '🏌🏽\u200d♂️': 'man golfing: medium skin tone', '🏌🏾': 'person golfing: medium-dark skin tone', '🏌🏾\u200d♀️': 'woman golfing: medium-dark skin tone', '🏌🏾\u200d♂️': 'man golfing: medium-dark skin tone', '🏌🏿': 'person golfing: dark skin tone', '🏌🏿\u200d♀️': 'woman golfing: dark skin tone', '🏌🏿\u200d♂️': 'man golfing: dark skin tone', '🏻': 'emoji modifier fitzpatrick type-1-2', '🏼': 'emoji modifier fitzpatrick type-3', '🏽': 'emoji modifier fitzpatrick type-4', '🏾': 'emoji modifier fitzpatrick type-5', '🏿': 'emoji modifier fitzpatrick type-6', '👂🏻': 'ear: light skin tone', '👂🏼': 'ear: medium-light skin tone', '👂🏽': 'ear: medium skin tone', '👂🏾': 'ear: medium-dark skin tone', '👂🏿': 'ear: dark skin tone', '👃🏻': 'nose: light skin tone', '👃🏼': 'nose: medium-light skin tone', '👃🏽': 'nose: medium skin tone', '👃🏾': 'nose: medium-dark skin tone', '👃🏿': 'nose: dark skin tone', '👆🏻': 'backhand index pointing up: light skin tone', '👆🏼': 'backhand index pointing up: medium-light skin tone', '👆🏽': 'backhand index pointing up: medium skin tone', '👆🏾': 'backhand index pointing up: medium-dark skin tone', '👆🏿': 'backhand index pointing up: dark skin tone', '👇🏻': 'backhand index pointing down: light skin tone', '👇🏼': 'backhand index pointing down: medium-light skin tone', '👇🏽': 'backhand index pointing down: medium skin tone', '👇🏾': 'backhand index pointing down: medium-dark skin tone', '👇🏿': 'backhand index pointing down: dark skin tone', '👈🏻': 'backhand index pointing left: light skin tone', '👈🏼': 'backhand index pointing left: medium-light skin tone', '👈🏽': 'backhand index pointing left: medium skin tone', '👈🏾': 'backhand index pointing left: medium-dark skin tone', '👈🏿': 'backhand index pointing left: dark skin tone', '👉🏻': 'backhand index pointing right: light skin tone', '👉🏼': 'backhand index pointing right: medium-light skin tone', '👉🏽': 'backhand index pointing right: medium skin tone', '👉🏾': 'backhand index pointing right: medium-dark skin tone', '👉🏿': 'backhand index pointing right: dark skin tone', '👊🏻': 'oncoming fist: light skin tone', '👊🏼': 'oncoming fist: medium-light skin tone', '👊🏽': 'oncoming fist: medium skin tone', '👊🏾': 'oncoming fist: medium-dark skin tone', '👊🏿': 'oncoming fist: dark skin tone', '👋🏻': 'waving hand: light skin tone', '👋🏼': 'waving hand: medium-light skin tone', '👋🏽': 'waving hand: medium skin tone', '👋🏾': 'waving hand: medium-dark skin tone', '👋🏿': 'waving hand: dark skin tone', '👌🏻': 'OK hand: light skin tone', '👌🏼': 'OK hand: medium-light skin tone', '👌🏽': 'OK hand: medium skin tone', '👌🏾': 'OK hand: medium-dark skin tone', '👌🏿': 'OK hand: dark skin tone', '👍🏻': 'thumbs up: light skin tone', '👍🏼': 'thumbs up: medium-light skin tone', '👍🏽': 'thumbs up: medium skin tone', '👍🏾': 'thumbs up: medium-dark skin tone', '👍🏿': 'thumbs up: dark skin tone', '👎🏻': 'thumbs down: light skin tone', '👎🏼': 'thumbs down: medium-light skin tone', '👎🏽': 'thumbs down: medium skin tone', '👎🏾': 'thumbs down: medium-dark skin tone', '👎🏿': 'thumbs down: dark skin tone', '👏🏻': 'clapping hands: light skin tone', '👏🏼': 'clapping hands: medium-light skin tone', '👏🏽': 'clapping hands: medium skin tone', '👏🏾': 'clapping hands: medium-dark skin tone', '👏🏿': 'clapping hands: dark skin tone', '👐🏻': 'open hands: light skin tone', '👐🏼': 'open hands: medium-light skin tone', '👐🏽': 'open hands: medium skin tone', '👐🏾': 'open hands: medium-dark skin tone', '👐🏿': 'open hands: dark skin tone', '👦🏻': 'boy: light skin tone', '👦🏼': 'boy: medium-light skin tone', '👦🏽': 'boy: medium skin tone', '👦🏾': 'boy: medium-dark skin tone', '👦🏿': 'boy: dark skin tone', '👧🏻': 'girl: light skin tone', '👧🏼': 'girl: medium-light skin tone', '👧🏽': 'girl: medium skin tone', '👧🏾': 'girl: medium-dark skin tone', '👧🏿': 'girl: dark skin tone', '👨\u200d⚕️': 'man health worker', '👨\u200d⚖️': 'man judge', '👨\u200d✈️': 'man pilot', '👨\u200d❤️\u200d👨': 'couple with heart: man, man', '👨\u200d❤️\u200d💋\u200d👨': 'kiss: man, man', '👨\u200d🌾': 'man farmer', '👨\u200d🍳': 'man cook', '👨\u200d🍼': 'man feeding baby', '👨\u200d🎓': 'man student', '👨\u200d🎤': 'man singer', '👨\u200d🎨': 'man artist', '👨\u200d🏫': 'man teacher', '👨\u200d🏭': 'man factory worker', '👨\u200d👦': 'family: man, boy', '👨\u200d👦\u200d👦': 'family: man, boy, boy', '👨\u200d👧': 'family: man, girl', '👨\u200d👧\u200d👦': 'family: man, girl, boy', '👨\u200d👧\u200d👧': 'family: man, girl, girl', '👨\u200d👨\u200d👦': 'family: man, man, boy', '👨\u200d👨\u200d👦\u200d👦': 'family: man, man, boy, boy', '👨\u200d👨\u200d👧': 'family: man, man, girl', '👨\u200d👨\u200d👧\u200d👦': 'family: man, man, girl, boy', '👨\u200d👨\u200d👧\u200d👧': 'family: man, man, girl, girl', '👨\u200d👩\u200d👦': 'family: man, woman, boy', '👨\u200d👩\u200d👦\u200d👦': 'family: man, woman, boy, boy', '👨\u200d👩\u200d👧': 'family: man, woman, girl', '👨\u200d👩\u200d👧\u200d👦': 'family: man, woman, girl, boy', '👨\u200d👩\u200d👧\u200d👧': 'family: man, woman, girl, girl', '👨\u200d💻': 'man technologist', '👨\u200d💼': 'man office worker', '👨\u200d🔧': 'man mechanic', '👨\u200d🔬': 'man scientist', '👨\u200d🚀': 'man astronaut', '👨\u200d🚒': 'man firefighter', '👨\u200d🦯': 'man with white cane', '👨\u200d🦯\u200d➡️': 'man with white cane facing right', '👨\u200d🦰': 'man: red hair', '👨\u200d🦱': 'man: curly hair', '👨\u200d🦲': 'man: bald', '👨\u200d🦳': 'man: white hair', '👨\u200d🦼': 'man in motorized wheelchair', '👨\u200d🦼\u200d➡️': 'man in motorized wheelchair facing right', '👨\u200d🦽': 'man in manual wheelchair', '👨\u200d🦽\u200d➡️': 'man in manual wheelchair facing right', '👨🏻': 'man: light skin tone', '👨🏻\u200d⚕️': 'man health worker: light skin tone', '👨🏻\u200d⚖️': 'man judge: light skin tone', '👨🏻\u200d✈️': 'man pilot: light skin tone', '👨🏻\u200d❤️\u200d👨🏻': 'couple with heart: man, man, light skin tone', '👨🏻\u200d❤️\u200d👨🏼': 'couple with heart: man, man, light skin tone, medium-light skin tone', '👨🏻\u200d❤️\u200d👨🏽': 'couple with heart: man, man, light skin tone, medium skin tone', '👨🏻\u200d❤️\u200d👨🏾': 'couple with heart: man, man, light skin tone, medium-dark skin tone', '👨🏻\u200d❤️\u200d👨🏿': 'couple with heart: man, man, light skin tone, dark skin tone', '👨🏻\u200d❤️\u200d💋\u200d👨🏻': 'kiss: man, man, light skin tone', '👨🏻\u200d❤️\u200d💋\u200d👨🏼': 'kiss: man, man, light skin tone, medium-light skin tone', '👨🏻\u200d❤️\u200d💋\u200d👨🏽': 'kiss: man, man, light skin tone, medium skin tone', '👨🏻\u200d❤️\u200d💋\u200d👨🏾': 'kiss: man, man, light skin tone, medium-dark skin tone', '👨🏻\u200d❤️\u200d💋\u200d👨🏿': 'kiss: man, man, light skin tone, dark skin tone', '👨🏻\u200d🌾': 'man farmer: light skin tone', '👨🏻\u200d🍳': 'man cook: light skin tone', '👨🏻\u200d🍼': 'man feeding baby: light skin tone', '👨🏻\u200d🎓': 'man student: light skin tone', '👨🏻\u200d🎤': 'man singer: light skin tone', '👨🏻\u200d🎨': 'man artist: light skin tone', '👨🏻\u200d🏫': 'man teacher: light skin tone', '👨🏻\u200d🏭': 'man factory worker: light skin tone', '👨🏻\u200d💻': 'man technologist: light skin tone', '👨🏻\u200d💼': 'man office worker: light skin tone', '👨🏻\u200d🔧': 'man mechanic: light skin tone', '👨🏻\u200d🔬': 'man scientist: light skin tone', '👨🏻\u200d🚀': 'man astronaut: light skin tone', '👨🏻\u200d🚒': 'man firefighter: light skin tone', '👨🏻\u200d🤝\u200d👨🏼': 'men holding hands: light skin tone, medium-light skin tone', '👨🏻\u200d🤝\u200d👨🏽': 'men holding hands: light skin tone, medium skin tone', '👨🏻\u200d🤝\u200d👨🏾': 'men holding hands: light skin tone, medium-dark skin tone', '👨🏻\u200d🤝\u200d👨🏿': 'men holding hands: light skin tone, dark skin tone', '👨🏻\u200d🦯': 'man with white cane: light skin tone', '👨🏻\u200d🦯\u200d➡️': 'man with white cane facing right: light skin tone', '👨🏻\u200d🦰': 'man: light skin tone, red hair', '👨🏻\u200d🦱': 'man: light skin tone, curly hair', '👨🏻\u200d🦲': 'man: light skin tone, bald', '👨🏻\u200d🦳': 'man: light skin tone, white hair', '👨🏻\u200d🦼': 'man in motorized wheelchair: light skin tone', '👨🏻\u200d🦼\u200d➡️': 'man in motorized wheelchair facing right: light skin tone', '👨🏻\u200d🦽': 'man in manual wheelchair: light skin tone', '👨🏻\u200d🦽\u200d➡️': 'man in manual wheelchair facing right: light skin tone', '👨🏼': 'man: medium-light skin tone', '👨🏼\u200d⚕️': 'man health worker: medium-light skin tone', '👨🏼\u200d⚖️': 'man judge: medium-light skin tone', '👨🏼\u200d✈️': 'man pilot: medium-light skin tone', '👨🏼\u200d❤️\u200d👨🏻': 'couple with heart: man, man, medium-light skin tone, light skin tone', '👨🏼\u200d❤️\u200d👨🏼': 'couple with heart: man, man, medium-light skin tone', '👨🏼\u200d❤️\u200d👨🏽': 'couple with heart: man, man, medium-light skin tone, medium skin tone', '👨🏼\u200d❤️\u200d👨🏾': 'couple with heart: man, man, medium-light skin tone, medium-dark skin tone', '👨🏼\u200d❤️\u200d👨🏿': 'couple with heart: man, man, medium-light skin tone, dark skin tone', '👨🏼\u200d❤️\u200d💋\u200d👨🏻': 'kiss: man, man, medium-light skin tone, light skin tone', '👨🏼\u200d❤️\u200d💋\u200d👨🏼': 'kiss: man, man, medium-light skin tone', '👨🏼\u200d❤️\u200d💋\u200d👨🏽': 'kiss: man, man, medium-light skin tone, medium skin tone', '👨🏼\u200d❤️\u200d💋\u200d👨🏾': 'kiss: man, man, medium-light skin tone, medium-dark skin tone', '👨🏼\u200d❤️\u200d💋\u200d👨🏿': 'kiss: man, man, medium-light skin tone, dark skin tone', '👨🏼\u200d🌾': 'man farmer: medium-light skin tone', '👨🏼\u200d🍳': 'man cook: medium-light skin tone', '👨🏼\u200d🍼': 'man feeding baby: medium-light skin tone', '👨🏼\u200d🎓': 'man student: medium-light skin tone', '👨🏼\u200d🎤': 'man singer: medium-light skin tone', '👨🏼\u200d🎨': 'man artist: medium-light skin tone', '👨🏼\u200d🏫': 'man teacher: medium-light skin tone', '👨🏼\u200d🏭': 'man factory worker: medium-light skin tone', '👨🏼\u200d💻': 'man technologist: medium-light skin tone', '👨🏼\u200d💼': 'man office worker: medium-light skin tone', '👨🏼\u200d🔧': 'man mechanic: medium-light skin tone', '👨🏼\u200d🔬': 'man scientist: medium-light skin tone', '👨🏼\u200d🚀': 'man astronaut: medium-light skin tone', '👨🏼\u200d🚒': 'man firefighter: medium-light skin tone', '👨🏼\u200d🤝\u200d👨🏻': 'men holding hands: medium-light skin tone, light skin tone', '👨🏼\u200d🤝\u200d👨🏽': 'men holding hands: medium-light skin tone, medium skin tone', '👨🏼\u200d🤝\u200d👨🏾': 'men holding hands: medium-light skin tone, medium-dark skin tone', '👨🏼\u200d🤝\u200d👨🏿': 'men holding hands: medium-light skin tone, dark skin tone', '👨🏼\u200d🦯': 'man with white cane: medium-light skin tone', '👨🏼\u200d🦯\u200d➡️': 'man with white cane facing right: medium-light skin tone', '👨🏼\u200d🦰': 'man: medium-light skin tone, red hair', '👨🏼\u200d🦱': 'man: medium-light skin tone, curly hair', '👨🏼\u200d🦲': 'man: medium-light skin tone, bald', '👨🏼\u200d🦳': 'man: medium-light skin tone, white hair', '👨🏼\u200d🦼': 'man in motorized wheelchair: medium-light skin tone', '👨🏼\u200d🦼\u200d➡️': 'man in motorized wheelchair facing right: medium-light skin tone', '👨🏼\u200d🦽': 'man in manual wheelchair: medium-light skin tone', '👨🏼\u200d🦽\u200d➡️': 'man in manual wheelchair facing right: medium-light skin tone', '👨🏽': 'man: medium skin tone', '👨🏽\u200d⚕️': 'man health worker: medium skin tone', '👨🏽\u200d⚖️': 'man judge: medium skin tone', '👨🏽\u200d✈️': 'man pilot: medium skin tone', '👨🏽\u200d❤️\u200d👨🏻': 'couple with heart: man, man, medium skin tone, light skin tone', '👨🏽\u200d❤️\u200d👨🏼': 'couple with heart: man, man, medium skin tone, medium-light skin tone', '👨🏽\u200d❤️\u200d👨🏽': 'couple with heart: man, man, medium skin tone', '👨🏽\u200d❤️\u200d👨🏾': 'couple with heart: man, man, medium skin tone, medium-dark skin tone', '👨🏽\u200d❤️\u200d👨🏿': 'couple with heart: man, man, medium skin tone, dark skin tone', '👨🏽\u200d❤️\u200d💋\u200d👨🏻': 'kiss: man, man, medium skin tone, light skin tone', '👨🏽\u200d❤️\u200d💋\u200d👨🏼': 'kiss: man, man, medium skin tone, medium-light skin tone', '👨🏽\u200d❤️\u200d💋\u200d👨🏽': 'kiss: man, man, medium skin tone', '👨🏽\u200d❤️\u200d💋\u200d👨🏾': 'kiss: man, man, medium skin tone, medium-dark skin tone', '👨🏽\u200d❤️\u200d💋\u200d👨🏿': 'kiss: man, man, medium skin tone, dark skin tone', '👨🏽\u200d🌾': 'man farmer: medium skin tone', '👨🏽\u200d🍳': 'man cook: medium skin tone', '👨🏽\u200d🍼': 'man feeding baby: medium skin tone', '👨🏽\u200d🎓': 'man student: medium skin tone', '👨🏽\u200d🎤': 'man singer: medium skin tone', '👨🏽\u200d🎨': 'man artist: medium skin tone', '👨🏽\u200d🏫': 'man teacher: medium skin tone', '👨🏽\u200d🏭': 'man factory worker: medium skin tone', '👨🏽\u200d💻': 'man technologist: medium skin tone', '👨🏽\u200d💼': 'man office worker: medium skin tone', '👨🏽\u200d🔧': 'man mechanic: medium skin tone', '👨🏽\u200d🔬': 'man scientist: medium skin tone', '👨🏽\u200d🚀': 'man astronaut: medium skin tone', '👨🏽\u200d🚒': 'man firefighter: medium skin tone', '👨🏽\u200d🤝\u200d👨🏻': 'men holding hands: medium skin tone, light skin tone', '👨🏽\u200d🤝\u200d👨🏼': 'men holding hands: medium skin tone, medium-light skin tone', '👨🏽\u200d🤝\u200d👨🏾': 'men holding hands: medium skin tone, medium-dark skin tone', '👨🏽\u200d🤝\u200d👨🏿': 'men holding hands: medium skin tone, dark skin tone', '👨🏽\u200d🦯': 'man with white cane: medium skin tone', '👨🏽\u200d🦯\u200d➡️': 'man with white cane facing right: medium skin tone', '👨🏽\u200d🦰': 'man: medium skin tone, red hair', '👨🏽\u200d🦱': 'man: medium skin tone, curly hair', '👨🏽\u200d🦲': 'man: medium skin tone, bald', '👨🏽\u200d🦳': 'man: medium skin tone, white hair', '👨🏽\u200d🦼': 'man in motorized wheelchair: medium skin tone', '👨🏽\u200d🦼\u200d➡️': 'man in motorized wheelchair facing right: medium skin tone', '👨🏽\u200d🦽': 'man in manual wheelchair: medium skin tone', '👨🏽\u200d🦽\u200d➡️': 'man in manual wheelchair facing right: medium skin tone', '👨🏾': 'man: medium-dark skin tone', '👨🏾\u200d⚕️': 'man health worker: medium-dark skin tone', '👨🏾\u200d⚖️': 'man judge: medium-dark skin tone', '👨🏾\u200d✈️': 'man pilot: medium-dark skin tone', '👨🏾\u200d❤️\u200d👨🏻': 'couple with heart: man, man, medium-dark skin tone, light skin tone', '👨🏾\u200d❤️\u200d👨🏼': 'couple with heart: man, man, medium-dark skin tone, medium-light skin tone', '👨🏾\u200d❤️\u200d👨🏽': 'couple with heart: man, man, medium-dark skin tone, medium skin tone', '👨🏾\u200d❤️\u200d👨🏾': 'couple with heart: man, man, medium-dark skin tone', '👨🏾\u200d❤️\u200d👨🏿': 'couple with heart: man, man, medium-dark skin tone, dark skin tone', '👨🏾\u200d❤️\u200d💋\u200d👨🏻': 'kiss: man, man, medium-dark skin tone, light skin tone', '👨🏾\u200d❤️\u200d💋\u200d👨🏼': 'kiss: man, man, medium-dark skin tone, medium-light skin tone', '👨🏾\u200d❤️\u200d💋\u200d👨🏽': 'kiss: man, man, medium-dark skin tone, medium skin tone', '👨🏾\u200d❤️\u200d💋\u200d👨🏾': 'kiss: man, man, medium-dark skin tone', '👨🏾\u200d❤️\u200d💋\u200d👨🏿': 'kiss: man, man, medium-dark skin tone, dark skin tone', '👨🏾\u200d🌾': 'man farmer: medium-dark skin tone', '👨🏾\u200d🍳': 'man cook: medium-dark skin tone', '👨🏾\u200d🍼': 'man feeding baby: medium-dark skin tone', '👨🏾\u200d🎓': 'man student: medium-dark skin tone', '👨🏾\u200d🎤': 'man singer: medium-dark skin tone', '👨🏾\u200d🎨': 'man artist: medium-dark skin tone', '👨🏾\u200d🏫': 'man teacher: medium-dark skin tone', '👨🏾\u200d🏭': 'man factory worker: medium-dark skin tone', '👨🏾\u200d💻': 'man technologist: medium-dark skin tone', '👨🏾\u200d💼': 'man office worker: medium-dark skin tone', '👨🏾\u200d🔧': 'man mechanic: medium-dark skin tone', '👨🏾\u200d🔬': 'man scientist: medium-dark skin tone', '👨🏾\u200d🚀': 'man astronaut: medium-dark skin tone', '👨🏾\u200d🚒': 'man firefighter: medium-dark skin tone', '👨🏾\u200d🤝\u200d👨🏻': 'men holding hands: medium-dark skin tone, light skin tone', '👨🏾\u200d🤝\u200d👨🏼': 'men holding hands: medium-dark skin tone, medium-light skin tone', '👨🏾\u200d🤝\u200d👨🏽': 'men holding hands: medium-dark skin tone, medium skin tone', '👨🏾\u200d🤝\u200d👨🏿': 'men holding hands: medium-dark skin tone, dark skin tone', '👨🏾\u200d🦯': 'man with white cane: medium-dark skin tone', '👨🏾\u200d🦯\u200d➡️': 'man with white cane facing right: medium-dark skin tone', '👨🏾\u200d🦰': 'man: medium-dark skin tone, red hair', '👨🏾\u200d🦱': 'man: medium-dark skin tone, curly hair', '👨🏾\u200d🦲': 'man: medium-dark skin tone, bald', '👨🏾\u200d🦳': 'man: medium-dark skin tone, white hair', '👨🏾\u200d🦼': 'man in motorized wheelchair: medium-dark skin tone', '👨🏾\u200d🦼\u200d➡️': 'man in motorized wheelchair facing right: medium-dark skin tone', '👨🏾\u200d🦽': 'man in manual wheelchair: medium-dark skin tone', '👨🏾\u200d🦽\u200d➡️': 'man in manual wheelchair facing right: medium-dark skin tone', '👨🏿': 'man: dark skin tone', '👨🏿\u200d⚕️': 'man health worker: dark skin tone', '👨🏿\u200d⚖️': 'man judge: dark skin tone', '👨🏿\u200d✈️': 'man pilot: dark skin tone', '👨🏿\u200d❤️\u200d👨🏻': 'couple with heart: man, man, dark skin tone, light skin tone', '👨🏿\u200d❤️\u200d👨🏼': 'couple with heart: man, man, dark skin tone, medium-light skin tone', '👨🏿\u200d❤️\u200d👨🏽': 'couple with heart: man, man, dark skin tone, medium skin tone', '👨🏿\u200d❤️\u200d👨🏾': 'couple with heart: man, man, dark skin tone, medium-dark skin tone', '👨🏿\u200d❤️\u200d👨🏿': 'couple with heart: man, man, dark skin tone', '👨🏿\u200d❤️\u200d💋\u200d👨🏻': 'kiss: man, man, dark skin tone, light skin tone', '👨🏿\u200d❤️\u200d💋\u200d👨🏼': 'kiss: man, man, dark skin tone, medium-light skin tone', '👨🏿\u200d❤️\u200d💋\u200d👨🏽': 'kiss: man, man, dark skin tone, medium skin tone', '👨🏿\u200d❤️\u200d💋\u200d👨🏾': 'kiss: man, man, dark skin tone, medium-dark skin tone', '👨🏿\u200d❤️\u200d💋\u200d👨🏿': 'kiss: man, man, dark skin tone', '👨🏿\u200d🌾': 'man farmer: dark skin tone', '👨🏿\u200d🍳': 'man cook: dark skin tone', '👨🏿\u200d🍼': 'man feeding baby: dark skin tone', '👨🏿\u200d🎓': 'man student: dark skin tone', '👨🏿\u200d🎤': 'man singer: dark skin tone', '👨🏿\u200d🎨': 'man artist: dark skin tone', '👨🏿\u200d🏫': 'man teacher: dark skin tone', '👨🏿\u200d🏭': 'man factory worker: dark skin tone', '👨🏿\u200d💻': 'man technologist: dark skin tone', '👨🏿\u200d💼': 'man office worker: dark skin tone', '👨🏿\u200d🔧': 'man mechanic: dark skin tone', '👨🏿\u200d🔬': 'man scientist: dark skin tone', '👨🏿\u200d🚀': 'man astronaut: dark skin tone', '👨🏿\u200d🚒': 'man firefighter: dark skin tone', '👨🏿\u200d🤝\u200d👨🏻': 'men holding hands: dark skin tone, light skin tone', '👨🏿\u200d🤝\u200d👨🏼': 'men holding hands: dark skin tone, medium-light skin tone', '👨🏿\u200d🤝\u200d👨🏽': 'men holding hands: dark skin tone, medium skin tone', '👨🏿\u200d🤝\u200d👨🏾': 'men holding hands: dark skin tone, medium-dark skin tone', '👨🏿\u200d🦯': 'man with white cane: dark skin tone', '👨🏿\u200d🦯\u200d➡️': 'man with white cane facing right: dark skin tone', '👨🏿\u200d🦰': 'man: dark skin tone, red hair', '👨🏿\u200d🦱': 'man: dark skin tone, curly hair', '👨🏿\u200d🦲': 'man: dark skin tone, bald', '👨🏿\u200d🦳': 'man: dark skin tone, white hair', '👨🏿\u200d🦼': 'man in motorized wheelchair: dark skin tone', '👨🏿\u200d🦼\u200d➡️': 'man in motorized wheelchair facing right: dark skin tone', '👨🏿\u200d🦽': 'man in manual wheelchair: dark skin tone', '👨🏿\u200d🦽\u200d➡️': 'man in manual wheelchair facing right: dark skin tone', '👩\u200d⚕️': 'woman health worker', '👩\u200d⚖️': 'woman judge', '👩\u200d✈️': 'woman pilot', '👩\u200d❤️\u200d👨': 'couple with heart: woman, man', '👩\u200d❤️\u200d👩': 'couple with heart: woman, woman', '👩\u200d❤️\u200d💋\u200d👨': 'kiss: woman, man', '👩\u200d❤️\u200d💋\u200d👩': 'kiss: woman, woman', '👩\u200d🌾': 'woman farmer', '👩\u200d🍳': 'woman cook', '👩\u200d🍼': 'woman feeding baby', '👩\u200d🎓': 'woman student', '👩\u200d🎤': 'woman singer', '👩\u200d🎨': 'woman artist', '👩\u200d🏫': 'woman teacher', '👩\u200d🏭': 'woman factory worker', '👩\u200d👦': 'family: woman, boy', '👩\u200d👦\u200d👦': 'family: woman, boy, boy', '👩\u200d👧': 'family: woman, girl', '👩\u200d👧\u200d👦': 'family: woman, girl, boy', '👩\u200d👧\u200d👧': 'family: woman, girl, girl', '👩\u200d👩\u200d👦': 'family: woman, woman, boy', '👩\u200d👩\u200d👦\u200d👦': 'family: woman, woman, boy, boy', '👩\u200d👩\u200d👧': 'family: woman, woman, girl', '👩\u200d👩\u200d👧\u200d👦': 'family: woman, woman, girl, boy', '👩\u200d👩\u200d👧\u200d👧': 'family: woman, woman, girl, girl', '👩\u200d💻': 'woman technologist', '👩\u200d💼': 'woman office worker', '👩\u200d🔧': 'woman mechanic', '👩\u200d🔬': 'woman scientist', '👩\u200d🚀': 'woman astronaut', '👩\u200d🚒': 'woman firefighter', '👩\u200d🦯': 'woman with white cane', '👩\u200d🦯\u200d➡️': 'woman with white cane facing right', '👩\u200d🦰': 'woman: red hair', '👩\u200d🦱': 'woman: curly hair', '👩\u200d🦲': 'woman: bald', '👩\u200d🦳': 'woman: white hair', '👩\u200d🦼': 'woman in motorized wheelchair', '👩\u200d🦼\u200d➡️': 'woman in motorized wheelchair facing right', '👩\u200d🦽': 'woman in manual wheelchair', '👩\u200d🦽\u200d➡️': 'woman in manual wheelchair facing right', '👩🏻': 'woman: light skin tone', '👩🏻\u200d⚕️': 'woman health worker: light skin tone', '👩🏻\u200d⚖️': 'woman judge: light skin tone', '👩🏻\u200d✈️': 'woman pilot: light skin tone', '👩🏻\u200d❤️\u200d👨🏻': 'couple with heart: woman, man, light skin tone', '👩🏻\u200d❤️\u200d👨🏼': 'couple with heart: woman, man, light skin tone, medium-light skin tone', '👩🏻\u200d❤️\u200d👨🏽': 'couple with heart: woman, man, light skin tone, medium skin tone', '👩🏻\u200d❤️\u200d👨🏾': 'couple with heart: woman, man, light skin tone, medium-dark skin tone', '👩🏻\u200d❤️\u200d👨🏿': 'couple with heart: woman, man, light skin tone, dark skin tone', '👩🏻\u200d❤️\u200d👩🏻': 'couple with heart: woman, woman, light skin tone', '👩🏻\u200d❤️\u200d👩🏼': 'couple with heart: woman, woman, light skin tone, medium-light skin tone', '👩🏻\u200d❤️\u200d👩🏽': 'couple with heart: woman, woman, light skin tone, medium skin tone', '👩🏻\u200d❤️\u200d👩🏾': 'couple with heart: woman, woman, light skin tone, medium-dark skin tone', '👩🏻\u200d❤️\u200d👩🏿': 'couple with heart: woman, woman, light skin tone, dark skin tone', '👩🏻\u200d❤️\u200d💋\u200d👨🏻': 'kiss: woman, man, light skin tone', '👩🏻\u200d❤️\u200d💋\u200d👨🏼': 'kiss: woman, man, light skin tone, medium-light skin tone', '👩🏻\u200d❤️\u200d💋\u200d👨🏽': 'kiss: woman, man, light skin tone, medium skin tone', '👩🏻\u200d❤️\u200d💋\u200d👨🏾': 'kiss: woman, man, light skin tone, medium-dark skin tone', '👩🏻\u200d❤️\u200d💋\u200d👨🏿': 'kiss: woman, man, light skin tone, dark skin tone', '👩🏻\u200d❤️\u200d💋\u200d👩🏻': 'kiss: woman, woman, light skin tone', '👩🏻\u200d❤️\u200d💋\u200d👩🏼': 'kiss: woman, woman, light skin tone, medium-light skin tone', '👩🏻\u200d❤️\u200d💋\u200d👩🏽': 'kiss: woman, woman, light skin tone, medium skin tone', '👩🏻\u200d❤️\u200d💋\u200d👩🏾': 'kiss: woman, woman, light skin tone, medium-dark skin tone', '👩🏻\u200d❤️\u200d💋\u200d👩🏿': 'kiss: woman, woman, light skin tone, dark skin tone', '👩🏻\u200d🌾': 'woman farmer: light skin tone', '👩🏻\u200d🍳': 'woman cook: light skin tone', '👩🏻\u200d🍼': 'woman feeding baby: light skin tone', '👩🏻\u200d🎓': 'woman student: light skin tone', '👩🏻\u200d🎤': 'woman singer: light skin tone', '👩🏻\u200d🎨': 'woman artist: light skin tone', '👩🏻\u200d🏫': 'woman teacher: light skin tone', '👩🏻\u200d🏭': 'woman factory worker: light skin tone', '👩🏻\u200d💻': 'woman technologist: light skin tone', '👩🏻\u200d💼': 'woman office worker: light skin tone', '👩🏻\u200d🔧': 'woman mechanic: light skin tone', '👩🏻\u200d🔬': 'woman scientist: light skin tone', '👩🏻\u200d🚀': 'woman astronaut: light skin tone', '👩🏻\u200d🚒': 'woman firefighter: light skin tone', '👩🏻\u200d🤝\u200d👨🏼': 'woman and man holding hands: light skin tone, medium-light skin tone', '👩🏻\u200d🤝\u200d👨🏽': 'woman and man holding hands: light skin tone, medium skin tone', '👩🏻\u200d🤝\u200d👨🏾': 'woman and man holding hands: light skin tone, medium-dark skin tone', '👩🏻\u200d🤝\u200d👨🏿': 'woman and man holding hands: light skin tone, dark skin tone', '👩🏻\u200d🤝\u200d👩🏼': 'women holding hands: light skin tone, medium-light skin tone', '👩🏻\u200d🤝\u200d👩🏽': 'women holding hands: light skin tone, medium skin tone', '👩🏻\u200d🤝\u200d👩🏾': 'women holding hands: light skin tone, medium-dark skin tone', '👩🏻\u200d🤝\u200d👩🏿': 'women holding hands: light skin tone, dark skin tone', '👩🏻\u200d🦯': 'woman with white cane: light skin tone', '👩🏻\u200d🦯\u200d➡️': 'woman with white cane facing right: light skin tone', '👩🏻\u200d🦰': 'woman: light skin tone, red hair', '👩🏻\u200d🦱': 'woman: light skin tone, curly hair', '👩🏻\u200d🦲': 'woman: light skin tone, bald', '👩🏻\u200d🦳': 'woman: light skin tone, white hair', '👩🏻\u200d🦼': 'woman in motorized wheelchair: light skin tone', '👩🏻\u200d🦼\u200d➡️': 'woman in motorized wheelchair facing right: light skin tone', '👩🏻\u200d🦽': 'woman in manual wheelchair: light skin tone', '👩🏻\u200d🦽\u200d➡️': 'woman in manual wheelchair facing right: light skin tone', '👩🏼': 'woman: medium-light skin tone', '👩🏼\u200d⚕️': 'woman health worker: medium-light skin tone', '👩🏼\u200d⚖️': 'woman judge: medium-light skin tone', '👩🏼\u200d✈️': 'woman pilot: medium-light skin tone', '👩🏼\u200d❤️\u200d👨🏻': 'couple with heart: woman, man, medium-light skin tone, light skin tone', '👩🏼\u200d❤️\u200d👨🏼': 'couple with heart: woman, man, medium-light skin tone', '👩🏼\u200d❤️\u200d👨🏽': 'couple with heart: woman, man, medium-light skin tone, medium skin tone', '👩🏼\u200d❤️\u200d👨🏾': 'couple with heart: woman, man, medium-light skin tone, medium-dark skin tone', '👩🏼\u200d❤️\u200d👨🏿': 'couple with heart: woman, man, medium-light skin tone, dark skin tone', '👩🏼\u200d❤️\u200d👩🏻': 'couple with heart: woman, woman, medium-light skin tone, light skin tone', '👩🏼\u200d❤️\u200d👩🏼': 'couple with heart: woman, woman, medium-light skin tone', '👩🏼\u200d❤️\u200d👩🏽': 'couple with heart: woman, woman, medium-light skin tone, medium skin tone', '👩🏼\u200d❤️\u200d👩🏾': 'couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone', '👩🏼\u200d❤️\u200d👩🏿': 'couple with heart: woman, woman, medium-light skin tone, dark skin tone', '👩🏼\u200d❤️\u200d💋\u200d👨🏻': 'kiss: woman, man, medium-light skin tone, light skin tone', '👩🏼\u200d❤️\u200d💋\u200d👨🏼': 'kiss: woman, man, medium-light skin tone', '👩🏼\u200d❤️\u200d💋\u200d👨🏽': 'kiss: woman, man, medium-light skin tone, medium skin tone', '👩🏼\u200d❤️\u200d💋\u200d👨🏾': 'kiss: woman, man, medium-light skin tone, medium-dark skin tone', '👩🏼\u200d❤️\u200d💋\u200d👨🏿': 'kiss: woman, man, medium-light skin tone, dark skin tone', '👩🏼\u200d❤️\u200d💋\u200d👩🏻': 'kiss: woman, woman, medium-light skin tone, light skin tone', '👩🏼\u200d❤️\u200d💋\u200d👩🏼': 'kiss: woman, woman, medium-light skin tone', '👩🏼\u200d❤️\u200d💋\u200d👩🏽': 'kiss: woman, woman, medium-light skin tone, medium skin tone', '👩🏼\u200d❤️\u200d💋\u200d👩🏾': 'kiss: woman, woman, medium-light skin tone, medium-dark skin tone', '👩🏼\u200d❤️\u200d💋\u200d👩🏿': 'kiss: woman, woman, medium-light skin tone, dark skin tone', '👩🏼\u200d🌾': 'woman farmer: medium-light skin tone', '👩🏼\u200d🍳': 'woman cook: medium-light skin tone', '👩🏼\u200d🍼': 'woman feeding baby: medium-light skin tone', '👩🏼\u200d🎓': 'woman student: medium-light skin tone', '👩🏼\u200d🎤': 'woman singer: medium-light skin tone', '👩🏼\u200d🎨': 'woman artist: medium-light skin tone', '👩🏼\u200d🏫': 'woman teacher: medium-light skin tone', '👩🏼\u200d🏭': 'woman factory worker: medium-light skin tone', '👩🏼\u200d💻': 'woman technologist: medium-light skin tone', '👩🏼\u200d💼': 'woman office worker: medium-light skin tone', '👩🏼\u200d🔧': 'woman mechanic: medium-light skin tone', '👩🏼\u200d🔬': 'woman scientist: medium-light skin tone', '👩🏼\u200d🚀': 'woman astronaut: medium-light skin tone', '👩🏼\u200d🚒': 'woman firefighter: medium-light skin tone', '👩🏼\u200d🤝\u200d👨🏻': 'woman and man holding hands: medium-light skin tone, light skin tone', '👩🏼\u200d🤝\u200d👨🏽': 'woman and man holding hands: medium-light skin tone, medium skin tone', '👩🏼\u200d🤝\u200d👨🏾': 'woman and man holding hands: medium-light skin tone, medium-dark skin tone', '👩🏼\u200d🤝\u200d👨🏿': 'woman and man holding hands: medium-light skin tone, dark skin tone', '👩🏼\u200d🤝\u200d👩🏻': 'women holding hands: medium-light skin tone, light skin tone', '👩🏼\u200d🤝\u200d👩🏽': 'women holding hands: medium-light skin tone, medium skin tone', '👩🏼\u200d🤝\u200d👩🏾': 'women holding hands: medium-light skin tone, medium-dark skin tone', '👩🏼\u200d🤝\u200d👩🏿': 'women holding hands: medium-light skin tone, dark skin tone', '👩🏼\u200d🦯': 'woman with white cane: medium-light skin tone', '👩🏼\u200d🦯\u200d➡️': 'woman with white cane facing right: medium-light skin tone', '👩🏼\u200d🦰': 'woman: medium-light skin tone, red hair', '👩🏼\u200d🦱': 'woman: medium-light skin tone, curly hair', '👩🏼\u200d🦲': 'woman: medium-light skin tone, bald', '👩🏼\u200d🦳': 'woman: medium-light skin tone, white hair', '👩🏼\u200d🦼': 'woman in motorized wheelchair: medium-light skin tone', '👩🏼\u200d🦼\u200d➡️': 'woman in motorized wheelchair facing right: medium-light skin tone', '👩🏼\u200d🦽': 'woman in manual wheelchair: medium-light skin tone', '👩🏼\u200d🦽\u200d➡️': 'woman in manual wheelchair facing right: medium-light skin tone', '👩🏽': 'woman: medium skin tone', '👩🏽\u200d⚕️': 'woman health worker: medium skin tone', '👩🏽\u200d⚖️': 'woman judge: medium skin tone', '👩🏽\u200d✈️': 'woman pilot: medium skin tone', '👩🏽\u200d❤️\u200d👨🏻': 'couple with heart: woman, man, medium skin tone, light skin tone', '👩🏽\u200d❤️\u200d👨🏼': 'couple with heart: woman, man, medium skin tone, medium-light skin tone', '👩🏽\u200d❤️\u200d👨🏽': 'couple with heart: woman, man, medium skin tone', '👩🏽\u200d❤️\u200d👨🏾': 'couple with heart: woman, man, medium skin tone, medium-dark skin tone', '👩🏽\u200d❤️\u200d👨🏿': 'couple with heart: woman, man, medium skin tone, dark skin tone', '👩🏽\u200d❤️\u200d👩🏻': 'couple with heart: woman, woman, medium skin tone, light skin tone', '👩🏽\u200d❤️\u200d👩🏼': 'couple with heart: woman, woman, medium skin tone, medium-light skin tone', '👩🏽\u200d❤️\u200d👩🏽': 'couple with heart: woman, woman, medium skin tone', '👩🏽\u200d❤️\u200d👩🏾': 'couple with heart: woman, woman, medium skin tone, medium-dark skin tone', '👩🏽\u200d❤️\u200d👩🏿': 'couple with heart: woman, woman, medium skin tone, dark skin tone', '👩🏽\u200d❤️\u200d💋\u200d👨🏻': 'kiss: woman, man, medium skin tone, light skin tone', '👩🏽\u200d❤️\u200d💋\u200d👨🏼': 'kiss: woman, man, medium skin tone, medium-light skin tone', '👩🏽\u200d❤️\u200d💋\u200d👨🏽': 'kiss: woman, man, medium skin tone', '👩🏽\u200d❤️\u200d💋\u200d👨🏾': 'kiss: woman, man, medium skin tone, medium-dark skin tone', '👩🏽\u200d❤️\u200d💋\u200d👨🏿': 'kiss: woman, man, medium skin tone, dark skin tone', '👩🏽\u200d❤️\u200d💋\u200d👩🏻': 'kiss: woman, woman, medium skin tone, light skin tone', '👩🏽\u200d❤️\u200d💋\u200d👩🏼': 'kiss: woman, woman, medium skin tone, medium-light skin tone', '👩🏽\u200d❤️\u200d💋\u200d👩🏽': 'kiss: woman, woman, medium skin tone', '👩🏽\u200d❤️\u200d💋\u200d👩🏾': 'kiss: woman, woman, medium skin tone, medium-dark skin tone', '👩🏽\u200d❤️\u200d💋\u200d👩🏿': 'kiss: woman, woman, medium skin tone, dark skin tone', '👩🏽\u200d🌾': 'woman farmer: medium skin tone', '👩🏽\u200d🍳': 'woman cook: medium skin tone', '👩🏽\u200d🍼': 'woman feeding baby: medium skin tone', '👩🏽\u200d🎓': 'woman student: medium skin tone', '👩🏽\u200d🎤': 'woman singer: medium skin tone', '👩🏽\u200d🎨': 'woman artist: medium skin tone', '👩🏽\u200d🏫': 'woman teacher: medium skin tone', '👩🏽\u200d🏭': 'woman factory worker: medium skin tone', '👩🏽\u200d💻': 'woman technologist: medium skin tone', '👩🏽\u200d💼': 'woman office worker: medium skin tone', '👩🏽\u200d🔧': 'woman mechanic: medium skin tone', '👩🏽\u200d🔬': 'woman scientist: medium skin tone', '👩🏽\u200d🚀': 'woman astronaut: medium skin tone', '👩🏽\u200d🚒': 'woman firefighter: medium skin tone', '👩🏽\u200d🤝\u200d👨🏻': 'woman and man holding hands: medium skin tone, light skin tone', '👩🏽\u200d🤝\u200d👨🏼': 'woman and man holding hands: medium skin tone, medium-light skin tone', '👩🏽\u200d🤝\u200d👨🏾': 'woman and man holding hands: medium skin tone, medium-dark skin tone', '👩🏽\u200d🤝\u200d👨🏿': 'woman and man holding hands: medium skin tone, dark skin tone', '👩🏽\u200d🤝\u200d👩🏻': 'women holding hands: medium skin tone, light skin tone', '👩🏽\u200d🤝\u200d👩🏼': 'women holding hands: medium skin tone, medium-light skin tone', '👩🏽\u200d🤝\u200d👩🏾': 'women holding hands: medium skin tone, medium-dark skin tone', '👩🏽\u200d🤝\u200d👩🏿': 'women holding hands: medium skin tone, dark skin tone', '👩🏽\u200d🦯': 'woman with white cane: medium skin tone', '👩🏽\u200d🦯\u200d➡️': 'woman with white cane facing right: medium skin tone', '👩🏽\u200d🦰': 'woman: medium skin tone, red hair', '👩🏽\u200d🦱': 'woman: medium skin tone, curly hair', '👩🏽\u200d🦲': 'woman: medium skin tone, bald', '👩🏽\u200d🦳': 'woman: medium skin tone, white hair', '👩🏽\u200d🦼': 'woman in motorized wheelchair: medium skin tone', '👩🏽\u200d🦼\u200d➡️': 'woman in motorized wheelchair facing right: medium skin tone', '👩🏽\u200d🦽': 'woman in manual wheelchair: medium skin tone', '👩🏽\u200d🦽\u200d➡️': 'woman in manual wheelchair facing right: medium skin tone', '👩🏾': 'woman: medium-dark skin tone', '👩🏾\u200d⚕️': 'woman health worker: medium-dark skin tone', '👩🏾\u200d⚖️': 'woman judge: medium-dark skin tone', '👩🏾\u200d✈️': 'woman pilot: medium-dark skin tone', '👩🏾\u200d❤️\u200d👨🏻': 'couple with heart: woman, man, medium-dark skin tone, light skin tone', '👩🏾\u200d❤️\u200d👨🏼': 'couple with heart: woman, man, medium-dark skin tone, medium-light skin tone', '👩🏾\u200d❤️\u200d👨🏽': 'couple with heart: woman, man, medium-dark skin tone, medium skin tone', '👩🏾\u200d❤️\u200d👨🏾': 'couple with heart: woman, man, medium-dark skin tone', '👩🏾\u200d❤️\u200d👨🏿': 'couple with heart: woman, man, medium-dark skin tone, dark skin tone', '👩🏾\u200d❤️\u200d👩🏻': 'couple with heart: woman, woman, medium-dark skin tone, light skin tone', '👩🏾\u200d❤️\u200d👩🏼': 'couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone', '👩🏾\u200d❤️\u200d👩🏽': 'couple with heart: woman, woman, medium-dark skin tone, medium skin tone', '👩🏾\u200d❤️\u200d👩🏾': 'couple with heart: woman, woman, medium-dark skin tone', '👩🏾\u200d❤️\u200d👩🏿': 'couple with heart: woman, woman, medium-dark skin tone, dark skin tone', '👩🏾\u200d❤️\u200d💋\u200d👨🏻': 'kiss: woman, man, medium-dark skin tone, light skin tone', '👩🏾\u200d❤️\u200d💋\u200d👨🏼': 'kiss: woman, man, medium-dark skin tone, medium-light skin tone', '👩🏾\u200d❤️\u200d💋\u200d👨🏽': 'kiss: woman, man, medium-dark skin tone, medium skin tone', '👩🏾\u200d❤️\u200d💋\u200d👨🏾': 'kiss: woman, man, medium-dark skin tone', '👩🏾\u200d❤️\u200d💋\u200d👨🏿': 'kiss: woman, man, medium-dark skin tone, dark skin tone', '👩🏾\u200d❤️\u200d💋\u200d👩🏻': 'kiss: woman, woman, medium-dark skin tone, light skin tone', '👩🏾\u200d❤️\u200d💋\u200d👩🏼': 'kiss: woman, woman, medium-dark skin tone, medium-light skin tone', '👩🏾\u200d❤️\u200d💋\u200d👩🏽': 'kiss: woman, woman, medium-dark skin tone, medium skin tone', '👩🏾\u200d❤️\u200d💋\u200d👩🏾': 'kiss: woman, woman, medium-dark skin tone', '👩🏾\u200d❤️\u200d💋\u200d👩🏿': 'kiss: woman, woman, medium-dark skin tone, dark skin tone', '👩🏾\u200d🌾': 'woman farmer: medium-dark skin tone', '👩🏾\u200d🍳': 'woman cook: medium-dark skin tone', '👩🏾\u200d🍼': 'woman feeding baby: medium-dark skin tone', '👩🏾\u200d🎓': 'woman student: medium-dark skin tone', '👩🏾\u200d🎤': 'woman singer: medium-dark skin tone', '👩🏾\u200d🎨': 'woman artist: medium-dark skin tone', '👩🏾\u200d🏫': 'woman teacher: medium-dark skin tone', '👩🏾\u200d🏭': 'woman factory worker: medium-dark skin tone', '👩🏾\u200d💻': 'woman technologist: medium-dark skin tone', '👩🏾\u200d💼': 'woman office worker: medium-dark skin tone', '👩🏾\u200d🔧': 'woman mechanic: medium-dark skin tone', '👩🏾\u200d🔬': 'woman scientist: medium-dark skin tone', '👩🏾\u200d🚀': 'woman astronaut: medium-dark skin tone', '👩🏾\u200d🚒': 'woman firefighter: medium-dark skin tone', '👩🏾\u200d🤝\u200d👨🏻': 'woman and man holding hands: medium-dark skin tone, light skin tone', '👩🏾\u200d🤝\u200d👨🏼': 'woman and man holding hands: medium-dark skin tone, medium-light skin tone', '👩🏾\u200d🤝\u200d👨🏽': 'woman and man holding hands: medium-dark skin tone, medium skin tone', '👩🏾\u200d🤝\u200d👨🏿': 'woman and man holding hands: medium-dark skin tone, dark skin tone', '👩🏾\u200d🤝\u200d👩🏻': 'women holding hands: medium-dark skin tone, light skin tone', '👩🏾\u200d🤝\u200d👩🏼': 'women holding hands: medium-dark skin tone, medium-light skin tone', '👩🏾\u200d🤝\u200d👩🏽': 'women holding hands: medium-dark skin tone, medium skin tone', '👩🏾\u200d🤝\u200d👩🏿': 'women holding hands: medium-dark skin tone, dark skin tone', '👩🏾\u200d🦯': 'woman with white cane: medium-dark skin tone', '👩🏾\u200d🦯\u200d➡️': 'woman with white cane facing right: medium-dark skin tone', '👩🏾\u200d🦰': 'woman: medium-dark skin tone, red hair', '👩🏾\u200d🦱': 'woman: medium-dark skin tone, curly hair', '👩🏾\u200d🦲': 'woman: medium-dark skin tone, bald', '👩🏾\u200d🦳': 'woman: medium-dark skin tone, white hair', '👩🏾\u200d🦼': 'woman in motorized wheelchair: medium-dark skin tone', '👩🏾\u200d🦼\u200d➡️': 'woman in motorized wheelchair facing right: medium-dark skin tone', '👩🏾\u200d🦽': 'woman in manual wheelchair: medium-dark skin tone', '👩🏾\u200d🦽\u200d➡️': 'woman in manual wheelchair facing right: medium-dark skin tone', '👩🏿': 'woman: dark skin tone', '👩🏿\u200d⚕️': 'woman health worker: dark skin tone', '👩🏿\u200d⚖️': 'woman judge: dark skin tone', '👩🏿\u200d✈️': 'woman pilot: dark skin tone', '👩🏿\u200d❤️\u200d👨🏻': 'couple with heart: woman, man, dark skin tone, light skin tone', '👩🏿\u200d❤️\u200d👨🏼': 'couple with heart: woman, man, dark skin tone, medium-light skin tone', '👩🏿\u200d❤️\u200d👨🏽': 'couple with heart: woman, man, dark skin tone, medium skin tone', '👩🏿\u200d❤️\u200d👨🏾': 'couple with heart: woman, man, dark skin tone, medium-dark skin tone', '👩🏿\u200d❤️\u200d👨🏿': 'couple with heart: woman, man, dark skin tone', '👩🏿\u200d❤️\u200d👩🏻': 'couple with heart: woman, woman, dark skin tone, light skin tone', '👩🏿\u200d❤️\u200d👩🏼': 'couple with heart: woman, woman, dark skin tone, medium-light skin tone', '👩🏿\u200d❤️\u200d👩🏽': 'couple with heart: woman, woman, dark skin tone, medium skin tone', '👩🏿\u200d❤️\u200d👩🏾': 'couple with heart: woman, woman, dark skin tone, medium-dark skin tone', '👩🏿\u200d❤️\u200d👩🏿': 'couple with heart: woman, woman, dark skin tone', '👩🏿\u200d❤️\u200d💋\u200d👨🏻': 'kiss: woman, man, dark skin tone, light skin tone', '👩🏿\u200d❤️\u200d💋\u200d👨🏼': 'kiss: woman, man, dark skin tone, medium-light skin tone', '👩🏿\u200d❤️\u200d💋\u200d👨🏽': 'kiss: woman, man, dark skin tone, medium skin tone', '👩🏿\u200d❤️\u200d💋\u200d👨🏾': 'kiss: woman, man, dark skin tone, medium-dark skin tone', '👩🏿\u200d❤️\u200d💋\u200d👨🏿': 'kiss: woman, man, dark skin tone', '👩🏿\u200d❤️\u200d💋\u200d👩🏻': 'kiss: woman, woman, dark skin tone, light skin tone', '👩🏿\u200d❤️\u200d💋\u200d👩🏼': 'kiss: woman, woman, dark skin tone, medium-light skin tone', '👩🏿\u200d❤️\u200d💋\u200d👩🏽': 'kiss: woman, woman, dark skin tone, medium skin tone', '👩🏿\u200d❤️\u200d💋\u200d👩🏾': 'kiss: woman, woman, dark skin tone, medium-dark skin tone', '👩🏿\u200d❤️\u200d💋\u200d👩🏿': 'kiss: woman, woman, dark skin tone', '👩🏿\u200d🌾': 'woman farmer: dark skin tone', '👩🏿\u200d🍳': 'woman cook: dark skin tone', '👩🏿\u200d🍼': 'woman feeding baby: dark skin tone', '👩🏿\u200d🎓': 'woman student: dark skin tone', '👩🏿\u200d🎤': 'woman singer: dark skin tone', '👩🏿\u200d🎨': 'woman artist: dark skin tone', '👩🏿\u200d🏫': 'woman teacher: dark skin tone', '👩🏿\u200d🏭': 'woman factory worker: dark skin tone', '👩🏿\u200d💻': 'woman technologist: dark skin tone', '👩🏿\u200d💼': 'woman office worker: dark skin tone', '👩🏿\u200d🔧': 'woman mechanic: dark skin tone', '👩🏿\u200d🔬': 'woman scientist: dark skin tone', '👩🏿\u200d🚀': 'woman astronaut: dark skin tone', '👩🏿\u200d🚒': 'woman firefighter: dark skin tone', '👩🏿\u200d🤝\u200d👨🏻': 'woman and man holding hands: dark skin tone, light skin tone', '👩🏿\u200d🤝\u200d👨🏼': 'woman and man holding hands: dark skin tone, medium-light skin tone', '👩🏿\u200d🤝\u200d👨🏽': 'woman and man holding hands: dark skin tone, medium skin tone', '👩🏿\u200d🤝\u200d👨🏾': 'woman and man holding hands: dark skin tone, medium-dark skin tone', '👩🏿\u200d🤝\u200d👩🏻': 'women holding hands: dark skin tone, light skin tone', '👩🏿\u200d🤝\u200d👩🏼': 'women holding hands: dark skin tone, medium-light skin tone', '👩🏿\u200d🤝\u200d👩🏽': 'women holding hands: dark skin tone, medium skin tone', '👩🏿\u200d🤝\u200d👩🏾': 'women holding hands: dark skin tone, medium-dark skin tone', '👩🏿\u200d🦯': 'woman with white cane: dark skin tone', '👩🏿\u200d🦯\u200d➡️': 'woman with white cane facing right: dark skin tone', '👩🏿\u200d🦰': 'woman: dark skin tone, red hair', '👩🏿\u200d🦱': 'woman: dark skin tone, curly hair', '👩🏿\u200d🦲': 'woman: dark skin tone, bald', '👩🏿\u200d🦳': 'woman: dark skin tone, white hair', '👩🏿\u200d🦼': 'woman in motorized wheelchair: dark skin tone', '👩🏿\u200d🦼\u200d➡️': 'woman in motorized wheelchair facing right: dark skin tone', '👩🏿\u200d🦽': 'woman in manual wheelchair: dark skin tone', '👩🏿\u200d🦽\u200d➡️': 'woman in manual wheelchair facing right: dark skin tone', '👫🏻': 'woman and man holding hands: light skin tone', '👫🏼': 'woman and man holding hands: medium-light skin tone', '👫🏽': 'woman and man holding hands: medium skin tone', '👫🏾': 'woman and man holding hands: medium-dark skin tone', '👫🏿': 'woman and man holding hands: dark skin tone', '👬🏻': 'men holding hands: light skin tone', '👬🏼': 'men holding hands: medium-light skin tone', '👬🏽': 'men holding hands: medium skin tone', '👬🏾': 'men holding hands: medium-dark skin tone', '👬🏿': 'men holding hands: dark skin tone', '👭🏻': 'women holding hands: light skin tone', '👭🏼': 'women holding hands: medium-light skin tone', '👭🏽': 'women holding hands: medium skin tone', '👭🏾': 'women holding hands: medium-dark skin tone', '👭🏿': 'women holding hands: dark skin tone', '👮\u200d♀️': 'woman police officer', '👮\u200d♂️': 'man police officer', '👮🏻': 'police officer: light skin tone', '👮🏻\u200d♀️': 'woman police officer: light skin tone', '👮🏻\u200d♂️': 'man police officer: light skin tone', '👮🏼': 'police officer: medium-light skin tone', '👮🏼\u200d♀️': 'woman police officer: medium-light skin tone', '👮🏼\u200d♂️': 'man police officer: medium-light skin tone', '👮🏽': 'police officer: medium skin tone', '👮🏽\u200d♀️': 'woman police officer: medium skin tone', '👮🏽\u200d♂️': 'man police officer: medium skin tone', '👮🏾': 'police officer: medium-dark skin tone', '👮🏾\u200d♀️': 'woman police officer: medium-dark skin tone', '👮🏾\u200d♂️': 'man police officer: medium-dark skin tone', '👮🏿': 'police officer: dark skin tone', '👮🏿\u200d♀️': 'woman police officer: dark skin tone', '👮🏿\u200d♂️': 'man police officer: dark skin tone', '👯\u200d♀️': 'women with bunny ears', '👯\u200d♂️': 'men with bunny ears', '👰\u200d♀️': 'woman with veil', '👰\u200d♂️': 'man with veil', '👰🏻': 'person with veil: light skin tone', '👰🏻\u200d♀️': 'woman with veil: light skin tone', '👰🏻\u200d♂️': 'man with veil: light skin tone', '👰🏼': 'person with veil: medium-light skin tone', '👰🏼\u200d♀️': 'woman with veil: medium-light skin tone', '👰🏼\u200d♂️': 'man with veil: medium-light skin tone', '👰🏽': 'person with veil: medium skin tone', '👰🏽\u200d♀️': 'woman with veil: medium skin tone', '👰🏽\u200d♂️': 'man with veil: medium skin tone', '👰🏾': 'person with veil: medium-dark skin tone', '👰🏾\u200d♀️': 'woman with veil: medium-dark skin tone', '👰🏾\u200d♂️': 'man with veil: medium-dark skin tone', '👰🏿': 'person with veil: dark skin tone', '👰🏿\u200d♀️': 'woman with veil: dark skin tone', '👰🏿\u200d♂️': 'man with veil: dark skin tone', '👱\u200d♀️': 'woman: blond hair', '👱\u200d♂️': 'man: blond hair', '👱🏻': 'person: light skin tone, blond hair', '👱🏻\u200d♀️': 'woman: light skin tone, blond hair', '👱🏻\u200d♂️': 'man: light skin tone, blond hair', '👱🏼': 'person: medium-light skin tone, blond hair', '👱🏼\u200d♀️': 'woman: medium-light skin tone, blond hair', '👱🏼\u200d♂️': 'man: medium-light skin tone, blond hair', '👱🏽': 'person: medium skin tone, blond hair', '👱🏽\u200d♀️': 'woman: medium skin tone, blond hair', '👱🏽\u200d♂️': 'man: medium skin tone, blond hair', '👱🏾': 'person: medium-dark skin tone, blond hair', '👱🏾\u200d♀️': 'woman: medium-dark skin tone, blond hair', '👱🏾\u200d♂️': 'man: medium-dark skin tone, blond hair', '👱🏿': 'person: dark skin tone, blond hair', '👱🏿\u200d♀️': 'woman: dark skin tone, blond hair', '👱🏿\u200d♂️': 'man: dark skin tone, blond hair', '👲🏻': 'person with skullcap: light skin tone', '👲🏼': 'person with skullcap: medium-light skin tone', '👲🏽': 'person with skullcap: medium skin tone', '👲🏾': 'person with skullcap: medium-dark skin tone', '👲🏿': 'person with skullcap: dark skin tone', '👳\u200d♀️': 'woman wearing turban', '👳\u200d♂️': 'man wearing turban', '👳🏻': 'person wearing turban: light skin tone', '👳🏻\u200d♀️': 'woman wearing turban: light skin tone', '👳🏻\u200d♂️': 'man wearing turban: light skin tone', '👳🏼': 'person wearing turban: medium-light skin tone', '👳🏼\u200d♀️': 'woman wearing turban: medium-light skin tone', '👳🏼\u200d♂️': 'man wearing turban: medium-light skin tone', '👳🏽': 'person wearing turban: medium skin tone', '👳🏽\u200d♀️': 'woman wearing turban: medium skin tone', '👳🏽\u200d♂️': 'man wearing turban: medium skin tone', '👳🏾': 'person wearing turban: medium-dark skin tone', '👳🏾\u200d♀️': 'woman wearing turban: medium-dark skin tone', '👳🏾\u200d♂️': 'man wearing turban: medium-dark skin tone', '👳🏿': 'person wearing turban: dark skin tone', '👳🏿\u200d♀️': 'woman wearing turban: dark skin tone', '👳🏿\u200d♂️': 'man wearing turban: dark skin tone', '👴🏻': 'old man: light skin tone', '👴🏼': 'old man: medium-light skin tone', '👴🏽': 'old man: medium skin tone', '👴🏾': 'old man: medium-dark skin tone', '👴🏿': 'old man: dark skin tone', '👵🏻': 'old woman: light skin tone', '👵🏼': 'old woman: medium-light skin tone', '👵🏽': 'old woman: medium skin tone', '👵🏾': 'old woman: medium-dark skin tone', '👵🏿': 'old woman: dark skin tone', '👶🏻': 'baby: light skin tone', '👶🏼': 'baby: medium-light skin tone', '👶🏽': 'baby: medium skin tone', '👶🏾': 'baby: medium-dark skin tone', '👶🏿': 'baby: dark skin tone', '👷\u200d♀️': 'woman construction worker', '👷\u200d♂️': 'man construction worker', '👷🏻': 'construction worker: light skin tone', '👷🏻\u200d♀️': 'woman construction worker: light skin tone', '👷🏻\u200d♂️': 'man construction worker: light skin tone', '👷🏼': 'construction worker: medium-light skin tone', '👷🏼\u200d♀️': 'woman construction worker: medium-light skin tone', '👷🏼\u200d♂️': 'man construction worker: medium-light skin tone', '👷🏽': 'construction worker: medium skin tone', '👷🏽\u200d♀️': 'woman construction worker: medium skin tone', '👷🏽\u200d♂️': 'man construction worker: medium skin tone', '👷🏾': 'construction worker: medium-dark skin tone', '👷🏾\u200d♀️': 'woman construction worker: medium-dark skin tone', '👷🏾\u200d♂️': 'man construction worker: medium-dark skin tone', '👷🏿': 'construction worker: dark skin tone', '👷🏿\u200d♀️': 'woman construction worker: dark skin tone', '👷🏿\u200d♂️': 'man construction worker: dark skin tone', '👸🏻': 'princess: light skin tone', '👸🏼': 'princess: medium-light skin tone', '👸🏽': 'princess: medium skin tone', '👸🏾': 'princess: medium-dark skin tone', '👸🏿': 'princess: dark skin tone', '👼🏻': 'baby angel: light skin tone', '👼🏼': 'baby angel: medium-light skin tone', '👼🏽': 'baby angel: medium skin tone', '👼🏾': 'baby angel: medium-dark skin tone', '👼🏿': 'baby angel: dark skin tone', '💁\u200d♀️': 'woman tipping hand', '💁\u200d♂️': 'man tipping hand', '💁🏻': 'person tipping hand: light skin tone', '💁🏻\u200d♀️': 'woman tipping hand: light skin tone', '💁🏻\u200d♂️': 'man tipping hand: light skin tone', '💁🏼': 'person tipping hand: medium-light skin tone', '💁🏼\u200d♀️': 'woman tipping hand: medium-light skin tone', '💁🏼\u200d♂️': 'man tipping hand: medium-light skin tone', '💁🏽': 'person tipping hand: medium skin tone', '💁🏽\u200d♀️': 'woman tipping hand: medium skin tone', '💁🏽\u200d♂️': 'man tipping hand: medium skin tone', '💁🏾': 'person tipping hand: medium-dark skin tone', '💁🏾\u200d♀️': 'woman tipping hand: medium-dark skin tone', '💁🏾\u200d♂️': 'man tipping hand: medium-dark skin tone', '💁🏿': 'person tipping hand: dark skin tone', '💁🏿\u200d♀️': 'woman tipping hand: dark skin tone', '💁🏿\u200d♂️': 'man tipping hand: dark skin tone', '💂\u200d♀️': 'woman guard', '💂\u200d♂️': 'man guard', '💂🏻': 'guard: light skin tone', '💂🏻\u200d♀️': 'woman guard: light skin tone', '💂🏻\u200d♂️': 'man guard: light skin tone', '💂🏼': 'guard: medium-light skin tone', '💂🏼\u200d♀️': 'woman guard: medium-light skin tone', '💂🏼\u200d♂️': 'man guard: medium-light skin tone', '💂🏽': 'guard: medium skin tone', '💂🏽\u200d♀️': 'woman guard: medium skin tone', '💂🏽\u200d♂️': 'man guard: medium skin tone', '💂🏾': 'guard: medium-dark skin tone', '💂🏾\u200d♀️': 'woman guard: medium-dark skin tone', '💂🏾\u200d♂️': 'man guard: medium-dark skin tone', '💂🏿': 'guard: dark skin tone', '💂🏿\u200d♀️': 'woman guard: dark skin tone', '💂🏿\u200d♂️': 'man guard: dark skin tone', '💃🏻': 'woman dancing: light skin tone', '💃🏼': 'woman dancing: medium-light skin tone', '💃🏽': 'woman dancing: medium skin tone', '💃🏾': 'woman dancing: medium-dark skin tone', '💃🏿': 'woman dancing: dark skin tone', '💅🏻': 'nail polish: light skin tone', '💅🏼': 'nail polish: medium-light skin tone', '💅🏽': 'nail polish: medium skin tone', '💅🏾': 'nail polish: medium-dark skin tone', '💅🏿': 'nail polish: dark skin tone', '💆\u200d♀️': 'woman getting massage', '💆\u200d♂️': 'man getting massage', '💆🏻': 'person getting massage: light skin tone', '💆🏻\u200d♀️': 'woman getting massage: light skin tone', '💆🏻\u200d♂️': 'man getting massage: light skin tone', '💆🏼': 'person getting massage: medium-light skin tone', '💆🏼\u200d♀️': 'woman getting massage: medium-light skin tone', '💆🏼\u200d♂️': 'man getting massage: medium-light skin tone', '💆🏽': 'person getting massage: medium skin tone', '💆🏽\u200d♀️': 'woman getting massage: medium skin tone', '💆🏽\u200d♂️': 'man getting massage: medium skin tone', '💆🏾': 'person getting massage: medium-dark skin tone', '💆🏾\u200d♀️': 'woman getting massage: medium-dark skin tone', '💆🏾\u200d♂️': 'man getting massage: medium-dark skin tone', '💆🏿': 'person getting massage: dark skin tone', '💆🏿\u200d♀️': 'woman getting massage: dark skin tone', '💆🏿\u200d♂️': 'man getting massage: dark skin tone', '💇\u200d♀️': 'woman getting haircut', '💇\u200d♂️': 'man getting haircut', '💇🏻': 'person getting haircut: light skin tone', '💇🏻\u200d♀️': 'woman getting haircut: light skin tone', '💇🏻\u200d♂️': 'man getting haircut: light skin tone', '💇🏼': 'person getting haircut: medium-light skin tone', '💇🏼\u200d♀️': 'woman getting haircut: medium-light skin tone', '💇🏼\u200d♂️': 'man getting haircut: medium-light skin tone', '💇🏽': 'person getting haircut: medium skin tone', '💇🏽\u200d♀️': 'woman getting haircut: medium skin tone', '💇🏽\u200d♂️': 'man getting haircut: medium skin tone', '💇🏾': 'person getting haircut: medium-dark skin tone', '💇🏾\u200d♀️': 'woman getting haircut: medium-dark skin tone', '💇🏾\u200d♂️': 'man getting haircut: medium-dark skin tone', '💇🏿': 'person getting haircut: dark skin tone', '💇🏿\u200d♀️': 'woman getting haircut: dark skin tone', '💇🏿\u200d♂️': 'man getting haircut: dark skin tone', '💏🏻': 'kiss: light skin tone', '💏🏼': 'kiss: medium-light skin tone', '💏🏽': 'kiss: medium skin tone', '💏🏾': 'kiss: medium-dark skin tone', '💏🏿': 'kiss: dark skin tone', '💑🏻': 'couple with heart: light skin tone', '💑🏼': 'couple with heart: medium-light skin tone', '💑🏽': 'couple with heart: medium skin tone', '💑🏾': 'couple with heart: medium-dark skin tone', '💑🏿': 'couple with heart: dark skin tone', '💪🏻': 'flexed biceps: light skin tone', '💪🏼': 'flexed biceps: medium-light skin tone', '💪🏽': 'flexed biceps: medium skin tone', '💪🏾': 'flexed biceps: medium-dark skin tone', '💪🏿': 'flexed biceps: dark skin tone', '🕴🏻': 'person in suit levitating: light skin tone', '🕴🏼': 'person in suit levitating: medium-light skin tone', '🕴🏽': 'person in suit levitating: medium skin tone', '🕴🏾': 'person in suit levitating: medium-dark skin tone', '🕴🏿': 'person in suit levitating: dark skin tone', '🕵️\u200d♀️': 'woman detective', '🕵️\u200d♂️': 'man detective', '🕵🏻': 'detective: light skin tone', '🕵🏻\u200d♀️': 'woman detective: light skin tone', '🕵🏻\u200d♂️': 'man detective: light skin tone', '🕵🏼': 'detective: medium-light skin tone', '🕵🏼\u200d♀️': 'woman detective: medium-light skin tone', '🕵🏼\u200d♂️': 'man detective: medium-light skin tone', '🕵🏽': 'detective: medium skin tone', '🕵🏽\u200d♀️': 'woman detective: medium skin tone', '🕵🏽\u200d♂️': 'man detective: medium skin tone', '🕵🏾': 'detective: medium-dark skin tone', '🕵🏾\u200d♀️': 'woman detective: medium-dark skin tone', '🕵🏾\u200d♂️': 'man detective: medium-dark skin tone', '🕵🏿': 'detective: dark skin tone', '🕵🏿\u200d♀️': 'woman detective: dark skin tone', '🕵🏿\u200d♂️': 'man detective: dark skin tone', '🕺🏻': 'man dancing: light skin tone', '🕺🏼': 'man dancing: medium-light skin tone', '🕺🏽': 'man dancing: medium skin tone', '🕺🏾': 'man dancing: medium-dark skin tone', '🕺🏿': 'man dancing: dark skin tone', '🖐🏻': 'hand with fingers splayed: light skin tone', '🖐🏼': 'hand with fingers splayed: medium-light skin tone', '🖐🏽': 'hand with fingers splayed: medium skin tone', '🖐🏾': 'hand with fingers splayed: medium-dark skin tone', '🖐🏿': 'hand with fingers splayed: dark skin tone', '🖕🏻': 'middle finger: light skin tone', '🖕🏼': 'middle finger: medium-light skin tone', '🖕🏽': 'middle finger: medium skin tone', '🖕🏾': 'middle finger: medium-dark skin tone', '🖕🏿': 'middle finger: dark skin tone', '🖖🏻': 'vulcan salute: light skin tone', '🖖🏼': 'vulcan salute: medium-light skin tone', '🖖🏽': 'vulcan salute: medium skin tone', '🖖🏾': 'vulcan salute: medium-dark skin tone', '🖖🏿': 'vulcan salute: dark skin tone', '🙅\u200d♀️': 'woman gesturing NO', '🙅\u200d♂️': 'man gesturing NO', '🙅🏻': 'person gesturing NO: light skin tone', '🙅🏻\u200d♀️': 'woman gesturing NO: light skin tone', '🙅🏻\u200d♂️': 'man gesturing NO: light skin tone', '🙅🏼': 'person gesturing NO: medium-light skin tone', '🙅🏼\u200d♀️': 'woman gesturing NO: medium-light skin tone', '🙅🏼\u200d♂️': 'man gesturing NO: medium-light skin tone', '🙅🏽': 'person gesturing NO: medium skin tone', '🙅🏽\u200d♀️': 'woman gesturing NO: medium skin tone', '🙅🏽\u200d♂️': 'man gesturing NO: medium skin tone', '🙅🏾': 'person gesturing NO: medium-dark skin tone', '🙅🏾\u200d♀️': 'woman gesturing NO: medium-dark skin tone', '🙅🏾\u200d♂️': 'man gesturing NO: medium-dark skin tone', '🙅🏿': 'person gesturing NO: dark skin tone', '🙅🏿\u200d♀️': 'woman gesturing NO: dark skin tone', '🙅🏿\u200d♂️': 'man gesturing NO: dark skin tone', '🙆\u200d♀️': 'woman gesturing OK', '🙆\u200d♂️': 'man gesturing OK', '🙆🏻': 'person gesturing OK: light skin tone', '🙆🏻\u200d♀️': 'woman gesturing OK: light skin tone', '🙆🏻\u200d♂️': 'man gesturing OK: light skin tone', '🙆🏼': 'person gesturing OK: medium-light skin tone', '🙆🏼\u200d♀️': 'woman gesturing OK: medium-light skin tone', '🙆🏼\u200d♂️': 'man gesturing OK: medium-light skin tone', '🙆🏽': 'person gesturing OK: medium skin tone', '🙆🏽\u200d♀️': 'woman gesturing OK: medium skin tone', '🙆🏽\u200d♂️': 'man gesturing OK: medium skin tone', '🙆🏾': 'person gesturing OK: medium-dark skin tone', '🙆🏾\u200d♀️': 'woman gesturing OK: medium-dark skin tone', '🙆🏾\u200d♂️': 'man gesturing OK: medium-dark skin tone', '🙆🏿': 'person gesturing OK: dark skin tone', '🙆🏿\u200d♀️': 'woman gesturing OK: dark skin tone', '🙆🏿\u200d♂️': 'man gesturing OK: dark skin tone', '🙇\u200d♀️': 'woman bowing', '🙇\u200d♂️': 'man bowing', '🙇🏻': 'person bowing: light skin tone', '🙇🏻\u200d♀️': 'woman bowing: light skin tone', '🙇🏻\u200d♂️': 'man bowing: light skin tone', '🙇🏼': 'person bowing: medium-light skin tone', '🙇🏼\u200d♀️': 'woman bowing: medium-light skin tone', '🙇🏼\u200d♂️': 'man bowing: medium-light skin tone', '🙇🏽': 'person bowing: medium skin tone', '🙇🏽\u200d♀️': 'woman bowing: medium skin tone', '🙇🏽\u200d♂️': 'man bowing: medium skin tone', '🙇🏾': 'person bowing: medium-dark skin tone', '🙇🏾\u200d♀️': 'woman bowing: medium-dark skin tone', '🙇🏾\u200d♂️': 'man bowing: medium-dark skin tone', '🙇🏿': 'person bowing: dark skin tone', '🙇🏿\u200d♀️': 'woman bowing: dark skin tone', '🙇🏿\u200d♂️': 'man bowing: dark skin tone', '🙋\u200d♀️': 'woman raising hand', '🙋\u200d♂️': 'man raising hand', '🙋🏻': 'person raising hand: light skin tone', '🙋🏻\u200d♀️': 'woman raising hand: light skin tone', '🙋🏻\u200d♂️': 'man raising hand: light skin tone', '🙋🏼': 'person raising hand: medium-light skin tone', '🙋🏼\u200d♀️': 'woman raising hand: medium-light skin tone', '🙋🏼\u200d♂️': 'man raising hand: medium-light skin tone', '🙋🏽': 'person raising hand: medium skin tone', '🙋🏽\u200d♀️': 'woman raising hand: medium skin tone', '🙋🏽\u200d♂️': 'man raising hand: medium skin tone', '🙋🏾': 'person raising hand: medium-dark skin tone', '🙋🏾\u200d♀️': 'woman raising hand: medium-dark skin tone', '🙋🏾\u200d♂️': 'man raising hand: medium-dark skin tone', '🙋🏿': 'person raising hand: dark skin tone', '🙋🏿\u200d♀️': 'woman raising hand: dark skin tone', '🙋🏿\u200d♂️': 'man raising hand: dark skin tone', '🙌🏻': 'raising hands: light skin tone', '🙌🏼': 'raising hands: medium-light skin tone', '🙌🏽': 'raising hands: medium skin tone', '🙌🏾': 'raising hands: medium-dark skin tone', '🙌🏿': 'raising hands: dark skin tone', '🙍\u200d♀️': 'woman frowning', '🙍\u200d♂️': 'man frowning', '🙍🏻': 'person frowning: light skin tone', '🙍🏻\u200d♀️': 'woman frowning: light skin tone', '🙍🏻\u200d♂️': 'man frowning: light skin tone', '🙍🏼': 'person frowning: medium-light skin tone', '🙍🏼\u200d♀️': 'woman frowning: medium-light skin tone', '🙍🏼\u200d♂️': 'man frowning: medium-light skin tone', '🙍🏽': 'person frowning: medium skin tone', '🙍🏽\u200d♀️': 'woman frowning: medium skin tone', '🙍🏽\u200d♂️': 'man frowning: medium skin tone', '🙍🏾': 'person frowning: medium-dark skin tone', '🙍🏾\u200d♀️': 'woman frowning: medium-dark skin tone', '🙍🏾\u200d♂️': 'man frowning: medium-dark skin tone', '🙍🏿': 'person frowning: dark skin tone', '🙍🏿\u200d♀️': 'woman frowning: dark skin tone', '🙍🏿\u200d♂️': 'man frowning: dark skin tone', '🙎\u200d♀️': 'woman pouting', '🙎\u200d♂️': 'man pouting', '🙎🏻': 'person pouting: light skin tone', '🙎🏻\u200d♀️': 'woman pouting: light skin tone', '🙎🏻\u200d♂️': 'man pouting: light skin tone', '🙎🏼': 'person pouting: medium-light skin tone', '🙎🏼\u200d♀️': 'woman pouting: medium-light skin tone', '🙎🏼\u200d♂️': 'man pouting: medium-light skin tone', '🙎🏽': 'person pouting: medium skin tone', '🙎🏽\u200d♀️': 'woman pouting: medium skin tone', '🙎🏽\u200d♂️': 'man pouting: medium skin tone', '🙎🏾': 'person pouting: medium-dark skin tone', '🙎🏾\u200d♀️': 'woman pouting: medium-dark skin tone', '🙎🏾\u200d♂️': 'man pouting: medium-dark skin tone', '🙎🏿': 'person pouting: dark skin tone', '🙎🏿\u200d♀️': 'woman pouting: dark skin tone', '🙎🏿\u200d♂️': 'man pouting: dark skin tone', '🙏🏻': 'folded hands: light skin tone', '🙏🏼': 'folded hands: medium-light skin tone', '🙏🏽': 'folded hands: medium skin tone', '🙏🏾': 'folded hands: medium-dark skin tone', '🙏🏿': 'folded hands: dark skin tone', '🚣\u200d♀️': 'woman rowing boat', '🚣\u200d♂️': 'man rowing boat', '🚣🏻': 'person rowing boat: light skin tone', '🚣🏻\u200d♀️': 'woman rowing boat: light skin tone', '🚣🏻\u200d♂️': 'man rowing boat: light skin tone', '🚣🏼': 'person rowing boat: medium-light skin tone', '🚣🏼\u200d♀️': 'woman rowing boat: medium-light skin tone', '🚣🏼\u200d♂️': 'man rowing boat: medium-light skin tone', '🚣🏽': 'person rowing boat: medium skin tone', '🚣🏽\u200d♀️': 'woman rowing boat: medium skin tone', '🚣🏽\u200d♂️': 'man rowing boat: medium skin tone', '🚣🏾': 'person rowing boat: medium-dark skin tone', '🚣🏾\u200d♀️': 'woman rowing boat: medium-dark skin tone', '🚣🏾\u200d♂️': 'man rowing boat: medium-dark skin tone', '🚣🏿': 'person rowing boat: dark skin tone', '🚣🏿\u200d♀️': 'woman rowing boat: dark skin tone', '🚣🏿\u200d♂️': 'man rowing boat: dark skin tone', '🚴\u200d♀️': 'woman biking', '🚴\u200d♂️': 'man biking', '🚴🏻': 'person biking: light skin tone', '🚴🏻\u200d♀️': 'woman biking: light skin tone', '🚴🏻\u200d♂️': 'man biking: light skin tone', '🚴🏼': 'person biking: medium-light skin tone', '🚴🏼\u200d♀️': 'woman biking: medium-light skin tone', '🚴🏼\u200d♂️': 'man biking: medium-light skin tone', '🚴🏽': 'person biking: medium skin tone', '🚴🏽\u200d♀️': 'woman biking: medium skin tone', '🚴🏽\u200d♂️': 'man biking: medium skin tone', '🚴🏾': 'person biking: medium-dark skin tone', '🚴🏾\u200d♀️': 'woman biking: medium-dark skin tone', '🚴🏾\u200d♂️': 'man biking: medium-dark skin tone', '🚴🏿': 'person biking: dark skin tone', '🚴🏿\u200d♀️': 'woman biking: dark skin tone', '🚴🏿\u200d♂️': 'man biking: dark skin tone', '🚵\u200d♀️': 'woman mountain biking', '🚵\u200d♂️': 'man mountain biking', '🚵🏻': 'person mountain biking: light skin tone', '🚵🏻\u200d♀️': 'woman mountain biking: light skin tone', '🚵🏻\u200d♂️': 'man mountain biking: light skin tone', '🚵🏼': 'person mountain biking: medium-light skin tone', '🚵🏼\u200d♀️': 'woman mountain biking: medium-light skin tone', '🚵🏼\u200d♂️': 'man mountain biking: medium-light skin tone', '🚵🏽': 'person mountain biking: medium skin tone', '🚵🏽\u200d♀️': 'woman mountain biking: medium skin tone', '🚵🏽\u200d♂️': 'man mountain biking: medium skin tone', '🚵🏾': 'person mountain biking: medium-dark skin tone', '🚵🏾\u200d♀️': 'woman mountain biking: medium-dark skin tone', '🚵🏾\u200d♂️': 'man mountain biking: medium-dark skin tone', '🚵🏿': 'person mountain biking: dark skin tone', '🚵🏿\u200d♀️': 'woman mountain biking: dark skin tone', '🚵🏿\u200d♂️': 'man mountain biking: dark skin tone', '🚶\u200d♀️': 'woman walking', '🚶\u200d♀️\u200d➡️': 'woman walking facing right', '🚶\u200d♂️': 'man walking', '🚶\u200d♂️\u200d➡️': 'man walking facing right', '🚶\u200d➡️': 'person walking facing right', '🚶🏻': 'person walking: light skin tone', '🚶🏻\u200d♀️': 'woman walking: light skin tone', '🚶🏻\u200d♀️\u200d➡️': 'woman walking facing right: light skin tone', '🚶🏻\u200d♂️': 'man walking: light skin tone', '🚶🏻\u200d♂️\u200d➡️': 'man walking facing right: light skin tone', '🚶🏻\u200d➡️': 'person walking facing right: light skin tone', '🚶🏼': 'person walking: medium-light skin tone', '🚶🏼\u200d♀️': 'woman walking: medium-light skin tone', '🚶🏼\u200d♀️\u200d➡️': 'woman walking facing right: medium-light skin tone', '🚶🏼\u200d♂️': 'man walking: medium-light skin tone', '🚶🏼\u200d♂️\u200d➡️': 'man walking facing right: medium-light skin tone', '🚶🏼\u200d➡️': 'person walking facing right: medium-light skin tone', '🚶🏽': 'person walking: medium skin tone', '🚶🏽\u200d♀️': 'woman walking: medium skin tone', '🚶🏽\u200d♀️\u200d➡️': 'woman walking facing right: medium skin tone', '🚶🏽\u200d♂️': 'man walking: medium skin tone', '🚶🏽\u200d♂️\u200d➡️': 'man walking facing right: medium skin tone', '🚶🏽\u200d➡️': 'person walking facing right: medium skin tone', '🚶🏾': 'person walking: medium-dark skin tone', '🚶🏾\u200d♀️': 'woman walking: medium-dark skin tone', '🚶🏾\u200d♀️\u200d➡️': 'woman walking facing right: medium-dark skin tone', '🚶🏾\u200d♂️': 'man walking: medium-dark skin tone', '🚶🏾\u200d♂️\u200d➡️': 'man walking facing right: medium-dark skin tone', '🚶🏾\u200d➡️': 'person walking facing right: medium-dark skin tone', '🚶🏿': 'person walking: dark skin tone', '🚶🏿\u200d♀️': 'woman walking: dark skin tone', '🚶🏿\u200d♀️\u200d➡️': 'woman walking facing right: dark skin tone', '🚶🏿\u200d♂️': 'man walking: dark skin tone', '🚶🏿\u200d♂️\u200d➡️': 'man walking facing right: dark skin tone', '🚶🏿\u200d➡️': 'person walking facing right: dark skin tone', '🛀🏻': 'person taking bath: light skin tone', '🛀🏼': 'person taking bath: medium-light skin tone', '🛀🏽': 'person taking bath: medium skin tone', '🛀🏾': 'person taking bath: medium-dark skin tone', '🛀🏿': 'person taking bath: dark skin tone', '🛌🏻': 'person in bed: light skin tone', '🛌🏼': 'person in bed: medium-light skin tone', '🛌🏽': 'person in bed: medium skin tone', '🛌🏾': 'person in bed: medium-dark skin tone', '🛌🏿': 'person in bed: dark skin tone', '🤌🏻': 'pinched fingers: light skin tone', '🤌🏼': 'pinched fingers: medium-light skin tone', '🤌🏽': 'pinched fingers: medium skin tone', '🤌🏾': 'pinched fingers: medium-dark skin tone', '🤌🏿': 'pinched fingers: dark skin tone', '🤏🏻': 'pinching hand: light skin tone', '🤏🏼': 'pinching hand: medium-light skin tone', '🤏🏽': 'pinching hand: medium skin tone', '🤏🏾': 'pinching hand: medium-dark skin tone', '🤏🏿': 'pinching hand: dark skin tone', '🤘🏻': 'sign of the horns: light skin tone', '🤘🏼': 'sign of the horns: medium-light skin tone', '🤘🏽': 'sign of the horns: medium skin tone', '🤘🏾': 'sign of the horns: medium-dark skin tone', '🤘🏿': 'sign of the horns: dark skin tone', '🤙🏻': 'call me hand: light skin tone', '🤙🏼': 'call me hand: medium-light skin tone', '🤙🏽': 'call me hand: medium skin tone', '🤙🏾': 'call me hand: medium-dark skin tone', '🤙🏿': 'call me hand: dark skin tone', '🤚🏻': 'raised back of hand: light skin tone', '🤚🏼': 'raised back of hand: medium-light skin tone', '🤚🏽': 'raised back of hand: medium skin tone', '🤚🏾': 'raised back of hand: medium-dark skin tone', '🤚🏿': 'raised back of hand: dark skin tone', '🤛🏻': 'left-facing fist: light skin tone', '🤛🏼': 'left-facing fist: medium-light skin tone', '🤛🏽': 'left-facing fist: medium skin tone', '🤛🏾': 'left-facing fist: medium-dark skin tone', '🤛🏿': 'left-facing fist: dark skin tone', '🤜🏻': 'right-facing fist: light skin tone', '🤜🏼': 'right-facing fist: medium-light skin tone', '🤜🏽': 'right-facing fist: medium skin tone', '🤜🏾': 'right-facing fist: medium-dark skin tone', '🤜🏿': 'right-facing fist: dark skin tone', '🤝🏻': 'handshake: light skin tone', '🤝🏼': 'handshake: medium-light skin tone', '🤝🏽': 'handshake: medium skin tone', '🤝🏾': 'handshake: medium-dark skin tone', '🤝🏿': 'handshake: dark skin tone', '🤞🏻': 'crossed fingers: light skin tone', '🤞🏼': 'crossed fingers: medium-light skin tone', '🤞🏽': 'crossed fingers: medium skin tone', '🤞🏾': 'crossed fingers: medium-dark skin tone', '🤞🏿': 'crossed fingers: dark skin tone', '🤟🏻': 'love-you gesture: light skin tone', '🤟🏼': 'love-you gesture: medium-light skin tone', '🤟🏽': 'love-you gesture: medium skin tone', '🤟🏾': 'love-you gesture: medium-dark skin tone', '🤟🏿': 'love-you gesture: dark skin tone', '🤦\u200d♀️': 'woman facepalming', '🤦\u200d♂️': 'man facepalming', '🤦🏻': 'person facepalming: light skin tone', '🤦🏻\u200d♀️': 'woman facepalming: light skin tone', '🤦🏻\u200d♂️': 'man facepalming: light skin tone', '🤦🏼': 'person facepalming: medium-light skin tone', '🤦🏼\u200d♀️': 'woman facepalming: medium-light skin tone', '🤦🏼\u200d♂️': 'man facepalming: medium-light skin tone', '🤦🏽': 'person facepalming: medium skin tone', '🤦🏽\u200d♀️': 'woman facepalming: medium skin tone', '🤦🏽\u200d♂️': 'man facepalming: medium skin tone', '🤦🏾': 'person facepalming: medium-dark skin tone', '🤦🏾\u200d♀️': 'woman facepalming: medium-dark skin tone', '🤦🏾\u200d♂️': 'man facepalming: medium-dark skin tone', '🤦🏿': 'person facepalming: dark skin tone', '🤦🏿\u200d♀️': 'woman facepalming: dark skin tone', '🤦🏿\u200d♂️': 'man facepalming: dark skin tone', '🤰🏻': 'pregnant woman: light skin tone', '🤰🏼': 'pregnant woman: medium-light skin tone', '🤰🏽': 'pregnant woman: medium skin tone', '🤰🏾': 'pregnant woman: medium-dark skin tone', '🤰🏿': 'pregnant woman: dark skin tone', '🤱🏻': 'breast-feeding: light skin tone', '🤱🏼': 'breast-feeding: medium-light skin tone', '🤱🏽': 'breast-feeding: medium skin tone', '🤱🏾': 'breast-feeding: medium-dark skin tone', '🤱🏿': 'breast-feeding: dark skin tone', '🤲🏻': 'palms up together: light skin tone', '🤲🏼': 'palms up together: medium-light skin tone', '🤲🏽': 'palms up together: medium skin tone', '🤲🏾': 'palms up together: medium-dark skin tone', '🤲🏿': 'palms up together: dark skin tone', '🤳🏻': 'selfie: light skin tone', '🤳🏼': 'selfie: medium-light skin tone', '🤳🏽': 'selfie: medium skin tone', '🤳🏾': 'selfie: medium-dark skin tone', '🤳🏿': 'selfie: dark skin tone', '🤴🏻': 'prince: light skin tone', '🤴🏼': 'prince: medium-light skin tone', '🤴🏽': 'prince: medium skin tone', '🤴🏾': 'prince: medium-dark skin tone', '🤴🏿': 'prince: dark skin tone', '🤵\u200d♀️': 'woman in tuxedo', '🤵\u200d♂️': 'man in tuxedo', '🤵🏻': 'person in tuxedo: light skin tone', '🤵🏻\u200d♀️': 'woman in tuxedo: light skin tone', '🤵🏻\u200d♂️': 'man in tuxedo: light skin tone', '🤵🏼': 'person in tuxedo: medium-light skin tone', '🤵🏼\u200d♀️': 'woman in tuxedo: medium-light skin tone', '🤵🏼\u200d♂️': 'man in tuxedo: medium-light skin tone', '🤵🏽': 'person in tuxedo: medium skin tone', '🤵🏽\u200d♀️': 'woman in tuxedo: medium skin tone', '🤵🏽\u200d♂️': 'man in tuxedo: medium skin tone', '🤵🏾': 'person in tuxedo: medium-dark skin tone', '🤵🏾\u200d♀️': 'woman in tuxedo: medium-dark skin tone', '🤵🏾\u200d♂️': 'man in tuxedo: medium-dark skin tone', '🤵🏿': 'person in tuxedo: dark skin tone', '🤵🏿\u200d♀️': 'woman in tuxedo: dark skin tone', '🤵🏿\u200d♂️': 'man in tuxedo: dark skin tone', '🤶🏻': 'Mrs. Claus: light skin tone', '🤶🏼': 'Mrs. Claus: medium-light skin tone', '🤶🏽': 'Mrs. Claus: medium skin tone', '🤶🏾': 'Mrs. Claus: medium-dark skin tone', '🤶🏿': 'Mrs. Claus: dark skin tone', '🤷\u200d♀️': 'woman shrugging', '🤷\u200d♂️': 'man shrugging', '🤷🏻': 'person shrugging: light skin tone', '🤷🏻\u200d♀️': 'woman shrugging: light skin tone', '🤷🏻\u200d♂️': 'man shrugging: light skin tone', '🤷🏼': 'person shrugging: medium-light skin tone', '🤷🏼\u200d♀️': 'woman shrugging: medium-light skin tone', '🤷🏼\u200d♂️': 'man shrugging: medium-light skin tone', '🤷🏽': 'person shrugging: medium skin tone', '🤷🏽\u200d♀️': 'woman shrugging: medium skin tone', '🤷🏽\u200d♂️': 'man shrugging: medium skin tone', '🤷🏾': 'person shrugging: medium-dark skin tone', '🤷🏾\u200d♀️': 'woman shrugging: medium-dark skin tone', '🤷🏾\u200d♂️': 'man shrugging: medium-dark skin tone', '🤷🏿': 'person shrugging: dark skin tone', '🤷🏿\u200d♀️': 'woman shrugging: dark skin tone', '🤷🏿\u200d♂️': 'man shrugging: dark skin tone', '🤸\u200d♀️': 'woman cartwheeling', '🤸\u200d♂️': 'man cartwheeling', '🤸🏻': 'person cartwheeling: light skin tone', '🤸🏻\u200d♀️': 'woman cartwheeling: light skin tone', '🤸🏻\u200d♂️': 'man cartwheeling: light skin tone', '🤸🏼': 'person cartwheeling: medium-light skin tone', '🤸🏼\u200d♀️': 'woman cartwheeling: medium-light skin tone', '🤸🏼\u200d♂️': 'man cartwheeling: medium-light skin tone', '🤸🏽': 'person cartwheeling: medium skin tone', '🤸🏽\u200d♀️': 'woman cartwheeling: medium skin tone', '🤸🏽\u200d♂️': 'man cartwheeling: medium skin tone', '🤸🏾': 'person cartwheeling: medium-dark skin tone', '🤸🏾\u200d♀️': 'woman cartwheeling: medium-dark skin tone', '🤸🏾\u200d♂️': 'man cartwheeling: medium-dark skin tone', '🤸🏿': 'person cartwheeling: dark skin tone', '🤸🏿\u200d♀️': 'woman cartwheeling: dark skin tone', '🤸🏿\u200d♂️': 'man cartwheeling: dark skin tone', '🤹\u200d♀️': 'woman juggling', '🤹\u200d♂️': 'man juggling', '🤹🏻': 'person juggling: light skin tone', '🤹🏻\u200d♀️': 'woman juggling: light skin tone', '🤹🏻\u200d♂️': 'man juggling: light skin tone', '🤹🏼': 'person juggling: medium-light skin tone', '🤹🏼\u200d♀️': 'woman juggling: medium-light skin tone', '🤹🏼\u200d♂️': 'man juggling: medium-light skin tone', '🤹🏽': 'person juggling: medium skin tone', '🤹🏽\u200d♀️': 'woman juggling: medium skin tone', '🤹🏽\u200d♂️': 'man juggling: medium skin tone', '🤹🏾': 'person juggling: medium-dark skin tone', '🤹🏾\u200d♀️': 'woman juggling: medium-dark skin tone', '🤹🏾\u200d♂️': 'man juggling: medium-dark skin tone', '🤹🏿': 'person juggling: dark skin tone', '🤹🏿\u200d♀️': 'woman juggling: dark skin tone', '🤹🏿\u200d♂️': 'man juggling: dark skin tone', '🤼\u200d♀️': 'women wrestling', '🤼\u200d♂️': 'men wrestling', '🤽\u200d♀️': 'woman playing water polo', '🤽\u200d♂️': 'man playing water polo', '🤽🏻': 'person playing water polo: light skin tone', '🤽🏻\u200d♀️': 'woman playing water polo: light skin tone', '🤽🏻\u200d♂️': 'man playing water polo: light skin tone', '🤽🏼': 'person playing water polo: medium-light skin tone', '🤽🏼\u200d♀️': 'woman playing water polo: medium-light skin tone', '🤽🏼\u200d♂️': 'man playing water polo: medium-light skin tone', '🤽🏽': 'person playing water polo: medium skin tone', '🤽🏽\u200d♀️': 'woman playing water polo: medium skin tone', '🤽🏽\u200d♂️': 'man playing water polo: medium skin tone', '🤽🏾': 'person playing water polo: medium-dark skin tone', '🤽🏾\u200d♀️': 'woman playing water polo: medium-dark skin tone', '🤽🏾\u200d♂️': 'man playing water polo: medium-dark skin tone', '🤽🏿': 'person playing water polo: dark skin tone', '🤽🏿\u200d♀️': 'woman playing water polo: dark skin tone', '🤽🏿\u200d♂️': 'man playing water polo: dark skin tone', '🤾\u200d♀️': 'woman playing handball', '🤾\u200d♂️': 'man playing handball', '🤾🏻': 'person playing handball: light skin tone', '🤾🏻\u200d♀️': 'woman playing handball: light skin tone', '🤾🏻\u200d♂️': 'man playing handball: light skin tone', '🤾🏼': 'person playing handball: medium-light skin tone', '🤾🏼\u200d♀️': 'woman playing handball: medium-light skin tone', '🤾🏼\u200d♂️': 'man playing handball: medium-light skin tone', '🤾🏽': 'person playing handball: medium skin tone', '🤾🏽\u200d♀️': 'woman playing handball: medium skin tone', '🤾🏽\u200d♂️': 'man playing handball: medium skin tone', '🤾🏾': 'person playing handball: medium-dark skin tone', '🤾🏾\u200d♀️': 'woman playing handball: medium-dark skin tone', '🤾🏾\u200d♂️': 'man playing handball: medium-dark skin tone', '🤾🏿': 'person playing handball: dark skin tone', '🤾🏿\u200d♀️': 'woman playing handball: dark skin tone', '🤾🏿\u200d♂️': 'man playing handball: dark skin tone', '🥷🏻': 'ninja: light skin tone', '🥷🏼': 'ninja: medium-light skin tone', '🥷🏽': 'ninja: medium skin tone', '🥷🏾': 'ninja: medium-dark skin tone', '🥷🏿': 'ninja: dark skin tone', '🦰': 'emoji component red hair', '🦱': 'emoji component curly hair', '🦲': 'emoji component bald', '🦳': 'emoji component white hair', '🦵🏻': 'leg: light skin tone', '🦵🏼': 'leg: medium-light skin tone', '🦵🏽': 'leg: medium skin tone', '🦵🏾': 'leg: medium-dark skin tone', '🦵🏿': 'leg: dark skin tone', '🦶🏻': 'foot: light skin tone', '🦶🏼': 'foot: medium-light skin tone', '🦶🏽': 'foot: medium skin tone', '🦶🏾': 'foot: medium-dark skin tone', '🦶🏿': 'foot: dark skin tone', '🦸\u200d♀️': 'woman superhero', '🦸\u200d♂️': 'man superhero', '🦸🏻': 'superhero: light skin tone', '🦸🏻\u200d♀️': 'woman superhero: light skin tone', '🦸🏻\u200d♂️': 'man superhero: light skin tone', '🦸🏼': 'superhero: medium-light skin tone', '🦸🏼\u200d♀️': 'woman superhero: medium-light skin tone', '🦸🏼\u200d♂️': 'man superhero: medium-light skin tone', '🦸🏽': 'superhero: medium skin tone', '🦸🏽\u200d♀️': 'woman superhero: medium skin tone', '🦸🏽\u200d♂️': 'man superhero: medium skin tone', '🦸🏾': 'superhero: medium-dark skin tone', '🦸🏾\u200d♀️': 'woman superhero: medium-dark skin tone', '🦸🏾\u200d♂️': 'man superhero: medium-dark skin tone', '🦸🏿': 'superhero: dark skin tone', '🦸🏿\u200d♀️': 'woman superhero: dark skin tone', '🦸🏿\u200d♂️': 'man superhero: dark skin tone', '🦹\u200d♀️': 'woman supervillain', '🦹\u200d♂️': 'man supervillain', '🦹🏻': 'supervillain: light skin tone', '🦹🏻\u200d♀️': 'woman supervillain: light skin tone', '🦹🏻\u200d♂️': 'man supervillain: light skin tone', '🦹🏼': 'supervillain: medium-light skin tone', '🦹🏼\u200d♀️': 'woman supervillain: medium-light skin tone', '🦹🏼\u200d♂️': 'man supervillain: medium-light skin tone', '🦹🏽': 'supervillain: medium skin tone', '🦹🏽\u200d♀️': 'woman supervillain: medium skin tone', '🦹🏽\u200d♂️': 'man supervillain: medium skin tone', '🦹🏾': 'supervillain: medium-dark skin tone', '🦹🏾\u200d♀️': 'woman supervillain: medium-dark skin tone', '🦹🏾\u200d♂️': 'man supervillain: medium-dark skin tone', '🦹🏿': 'supervillain: dark skin tone', '🦹🏿\u200d♀️': 'woman supervillain: dark skin tone', '🦹🏿\u200d♂️': 'man supervillain: dark skin tone', '🦻🏻': 'ear with hearing aid: light skin tone', '🦻🏼': 'ear with hearing aid: medium-light skin tone', '🦻🏽': 'ear with hearing aid: medium skin tone', '🦻🏾': 'ear with hearing aid: medium-dark skin tone', '🦻🏿': 'ear with hearing aid: dark skin tone', '🧍\u200d♀️': 'woman standing', '🧍\u200d♂️': 'man standing', '🧍🏻': 'person standing: light skin tone', '🧍🏻\u200d♀️': 'woman standing: light skin tone', '🧍🏻\u200d♂️': 'man standing: light skin tone', '🧍🏼': 'person standing: medium-light skin tone', '🧍🏼\u200d♀️': 'woman standing: medium-light skin tone', '🧍🏼\u200d♂️': 'man standing: medium-light skin tone', '🧍🏽': 'person standing: medium skin tone', '🧍🏽\u200d♀️': 'woman standing: medium skin tone', '🧍🏽\u200d♂️': 'man standing: medium skin tone', '🧍🏾': 'person standing: medium-dark skin tone', '🧍🏾\u200d♀️': 'woman standing: medium-dark skin tone', '🧍🏾\u200d♂️': 'man standing: medium-dark skin tone', '🧍🏿': 'person standing: dark skin tone', '🧍🏿\u200d♀️': 'woman standing: dark skin tone', '🧍🏿\u200d♂️': 'man standing: dark skin tone', '🧎\u200d♀️': 'woman kneeling', '🧎\u200d♀️\u200d➡️': 'woman kneeling facing right', '🧎\u200d♂️': 'man kneeling', '🧎\u200d♂️\u200d➡️': 'man kneeling facing right', '🧎\u200d➡️': 'person kneeling facing right', '🧎🏻': 'person kneeling: light skin tone', '🧎🏻\u200d♀️': 'woman kneeling: light skin tone', '🧎🏻\u200d♀️\u200d➡️': 'woman kneeling facing right: light skin tone', '🧎🏻\u200d♂️': 'man kneeling: light skin tone', '🧎🏻\u200d♂️\u200d➡️': 'man kneeling facing right: light skin tone', '🧎🏻\u200d➡️': 'person kneeling facing right: light skin tone', '🧎🏼': 'person kneeling: medium-light skin tone', '🧎🏼\u200d♀️': 'woman kneeling: medium-light skin tone', '🧎🏼\u200d♀️\u200d➡️': 'woman kneeling facing right: medium-light skin tone', '🧎🏼\u200d♂️': 'man kneeling: medium-light skin tone', '🧎🏼\u200d♂️\u200d➡️': 'man kneeling facing right: medium-light skin tone', '🧎🏼\u200d➡️': 'person kneeling facing right: medium-light skin tone', '🧎🏽': 'person kneeling: medium skin tone', '🧎🏽\u200d♀️': 'woman kneeling: medium skin tone', '🧎🏽\u200d♀️\u200d➡️': 'woman kneeling facing right: medium skin tone', '🧎🏽\u200d♂️': 'man kneeling: medium skin tone', '🧎🏽\u200d♂️\u200d➡️': 'man kneeling facing right: medium skin tone', '🧎🏽\u200d➡️': 'person kneeling facing right: medium skin tone', '🧎🏾': 'person kneeling: medium-dark skin tone', '🧎🏾\u200d♀️': 'woman kneeling: medium-dark skin tone', '🧎🏾\u200d♀️\u200d➡️': 'woman kneeling facing right: medium-dark skin tone', '🧎🏾\u200d♂️': 'man kneeling: medium-dark skin tone', '🧎🏾\u200d♂️\u200d➡️': 'man kneeling facing right: medium-dark skin tone', '🧎🏾\u200d➡️': 'person kneeling facing right: medium-dark skin tone', '🧎🏿': 'person kneeling: dark skin tone', '🧎🏿\u200d♀️': 'woman kneeling: dark skin tone', '🧎🏿\u200d♀️\u200d➡️': 'woman kneeling facing right: dark skin tone', '🧎🏿\u200d♂️': 'man kneeling: dark skin tone', '🧎🏿\u200d♂️\u200d➡️': 'man kneeling facing right: dark skin tone', '🧎🏿\u200d➡️': 'person kneeling facing right: dark skin tone', '🧏\u200d♀️': 'deaf woman', '🧏\u200d♂️': 'deaf man', '🧏🏻': 'deaf person: light skin tone', '🧏🏻\u200d♀️': 'deaf woman: light skin tone', '🧏🏻\u200d♂️': 'deaf man: light skin tone', '🧏🏼': 'deaf person: medium-light skin tone', '🧏🏼\u200d♀️': 'deaf woman: medium-light skin tone', '🧏🏼\u200d♂️': 'deaf man: medium-light skin tone', '🧏🏽': 'deaf person: medium skin tone', '🧏🏽\u200d♀️': 'deaf woman: medium skin tone', '🧏🏽\u200d♂️': 'deaf man: medium skin tone', '🧏🏾': 'deaf person: medium-dark skin tone', '🧏🏾\u200d♀️': 'deaf woman: medium-dark skin tone', '🧏🏾\u200d♂️': 'deaf man: medium-dark skin tone', '🧏🏿': 'deaf person: dark skin tone', '🧏🏿\u200d♀️': 'deaf woman: dark skin tone', '🧏🏿\u200d♂️': 'deaf man: dark skin tone', '🧑\u200d⚕️': 'health worker', '🧑\u200d⚖️': 'judge', '🧑\u200d✈️': 'pilot', '🧑\u200d🌾': 'farmer', '🧑\u200d🍳': 'cook', '🧑\u200d🍼': 'person feeding baby', '🧑\u200d🎄': 'Mx Claus', '🧑\u200d🎓': 'student', '🧑\u200d🎤': 'singer', '🧑\u200d🎨': 'artist', '🧑\u200d🏫': 'teacher', '🧑\u200d🏭': 'factory worker', '🧑\u200d💻': 'technologist', '🧑\u200d💼': 'office worker', '🧑\u200d🔧': 'mechanic', '🧑\u200d🔬': 'scientist', '🧑\u200d🚀': 'astronaut', '🧑\u200d🚒': 'firefighter', '🧑\u200d🤝\u200d🧑': 'people holding hands', '🧑\u200d🦯': 'person with white cane', '🧑\u200d🦯\u200d➡️': 'person with white cane facing right', '🧑\u200d🦰': 'person: red hair', '🧑\u200d🦱': 'person: curly hair', '🧑\u200d🦲': 'person: bald', '🧑\u200d🦳': 'person: white hair', '🧑\u200d🦼': 'person in motorized wheelchair', '🧑\u200d🦼\u200d➡️': 'person in motorized wheelchair facing right', '🧑\u200d🦽': 'person in manual wheelchair', '🧑\u200d🦽\u200d➡️': 'person in manual wheelchair facing right', '🧑\u200d🧑\u200d🧒': 'family: adult, adult, child', '🧑\u200d🧑\u200d🧒\u200d🧒': 'family: adult, adult, child, child', '🧑\u200d🧒': 'family: adult, child', '🧑\u200d🧒\u200d🧒': 'family: adult, child, child', '🧑🏻': 'person: light skin tone', '🧑🏻\u200d⚕️': 'health worker: light skin tone', '🧑🏻\u200d⚖️': 'judge: light skin tone', '🧑🏻\u200d✈️': 'pilot: light skin tone', '🧑🏻\u200d❤️\u200d💋\u200d🧑🏼': 'kiss: person, person, light skin tone, medium-light skin tone', '🧑🏻\u200d❤️\u200d💋\u200d🧑🏽': 'kiss: person, person, light skin tone, medium skin tone', '🧑🏻\u200d❤️\u200d💋\u200d🧑🏾': 'kiss: person, person, light skin tone, medium-dark skin tone', '🧑🏻\u200d❤️\u200d💋\u200d🧑🏿': 'kiss: person, person, light skin tone, dark skin tone', '🧑🏻\u200d❤️\u200d🧑🏼': 'couple with heart: person, person, light skin tone, medium-light skin tone', '🧑🏻\u200d❤️\u200d🧑🏽': 'couple with heart: person, person, light skin tone, medium skin tone', '🧑🏻\u200d❤️\u200d🧑🏾': 'couple with heart: person, person, light skin tone, medium-dark skin tone', '🧑🏻\u200d❤️\u200d🧑🏿': 'couple with heart: person, person, light skin tone, dark skin tone', '🧑🏻\u200d🌾': 'farmer: light skin tone', '🧑🏻\u200d🍳': 'cook: light skin tone', '🧑🏻\u200d🍼': 'person feeding baby: light skin tone', '🧑🏻\u200d🎄': 'Mx Claus: light skin tone', '🧑🏻\u200d🎓': 'student: light skin tone', '🧑🏻\u200d🎤': 'singer: light skin tone', '🧑🏻\u200d🎨': 'artist: light skin tone', '🧑🏻\u200d🏫': 'teacher: light skin tone', '🧑🏻\u200d🏭': 'factory worker: light skin tone', '🧑🏻\u200d💻': 'technologist: light skin tone', '🧑🏻\u200d💼': 'office worker: light skin tone', '🧑🏻\u200d🔧': 'mechanic: light skin tone', '🧑🏻\u200d🔬': 'scientist: light skin tone', '🧑🏻\u200d🚀': 'astronaut: light skin tone', '🧑🏻\u200d🚒': 'firefighter: light skin tone', '🧑🏻\u200d🤝\u200d🧑🏻': 'people holding hands: light skin tone', '🧑🏻\u200d🤝\u200d🧑🏼': 'people holding hands: light skin tone, medium-light skin tone', '🧑🏻\u200d🤝\u200d🧑🏽': 'people holding hands: light skin tone, medium skin tone', '🧑🏻\u200d🤝\u200d🧑🏾': 'people holding hands: light skin tone, medium-dark skin tone', '🧑🏻\u200d🤝\u200d🧑🏿': 'people holding hands: light skin tone, dark skin tone', '🧑🏻\u200d🦯': 'person with white cane: light skin tone', '🧑🏻\u200d🦯\u200d➡️': 'person with white cane facing right: light skin tone', '🧑🏻\u200d🦰': 'person: light skin tone, red hair', '🧑🏻\u200d🦱': 'person: light skin tone, curly hair', '🧑🏻\u200d🦲': 'person: light skin tone, bald', '🧑🏻\u200d🦳': 'person: light skin tone, white hair', '🧑🏻\u200d🦼': 'person in motorized wheelchair: light skin tone', '🧑🏻\u200d🦼\u200d➡️': 'person in motorized wheelchair facing right: light skin tone', '🧑🏻\u200d🦽': 'person in manual wheelchair: light skin tone', '🧑🏻\u200d🦽\u200d➡️': 'person in manual wheelchair facing right: light skin tone', '🧑🏼': 'person: medium-light skin tone', '🧑🏼\u200d⚕️': 'health worker: medium-light skin tone', '🧑🏼\u200d⚖️': 'judge: medium-light skin tone', '🧑🏼\u200d✈️': 'pilot: medium-light skin tone', '🧑🏼\u200d❤️\u200d💋\u200d🧑🏻': 'kiss: person, person, medium-light skin tone, light skin tone', '🧑🏼\u200d❤️\u200d💋\u200d🧑🏽': 'kiss: person, person, medium-light skin tone, medium skin tone', '🧑🏼\u200d❤️\u200d💋\u200d🧑🏾': 'kiss: person, person, medium-light skin tone, medium-dark skin tone', '🧑🏼\u200d❤️\u200d💋\u200d🧑🏿': 'kiss: person, person, medium-light skin tone, dark skin tone', '🧑🏼\u200d❤️\u200d🧑🏻': 'couple with heart: person, person, medium-light skin tone, light skin tone', '🧑🏼\u200d❤️\u200d🧑🏽': 'couple with heart: person, person, medium-light skin tone, medium skin tone', '🧑🏼\u200d❤️\u200d🧑🏾': 'couple with heart: person, person, medium-light skin tone, medium-dark skin tone', '🧑🏼\u200d❤️\u200d🧑🏿': 'couple with heart: person, person, medium-light skin tone, dark skin tone', '🧑🏼\u200d🌾': 'farmer: medium-light skin tone', '🧑🏼\u200d🍳': 'cook: medium-light skin tone', '🧑🏼\u200d🍼': 'person feeding baby: medium-light skin tone', '🧑🏼\u200d🎄': 'Mx Claus: medium-light skin tone', '🧑🏼\u200d🎓': 'student: medium-light skin tone', '🧑🏼\u200d🎤': 'singer: medium-light skin tone', '🧑🏼\u200d🎨': 'artist: medium-light skin tone', '🧑🏼\u200d🏫': 'teacher: medium-light skin tone', '🧑🏼\u200d🏭': 'factory worker: medium-light skin tone', '🧑🏼\u200d💻': 'technologist: medium-light skin tone', '🧑🏼\u200d💼': 'office worker: medium-light skin tone', '🧑🏼\u200d🔧': 'mechanic: medium-light skin tone', '🧑🏼\u200d🔬': 'scientist: medium-light skin tone', '🧑🏼\u200d🚀': 'astronaut: medium-light skin tone', '🧑🏼\u200d🚒': 'firefighter: medium-light skin tone', '🧑🏼\u200d🤝\u200d🧑🏻': 'people holding hands: medium-light skin tone, light skin tone', '🧑🏼\u200d🤝\u200d🧑🏼': 'people holding hands: medium-light skin tone', '🧑🏼\u200d🤝\u200d🧑🏽': 'people holding hands: medium-light skin tone, medium skin tone', '🧑🏼\u200d🤝\u200d🧑🏾': 'people holding hands: medium-light skin tone, medium-dark skin tone', '🧑🏼\u200d🤝\u200d🧑🏿': 'people holding hands: medium-light skin tone, dark skin tone', '🧑🏼\u200d🦯': 'person with white cane: medium-light skin tone', '🧑🏼\u200d🦯\u200d➡️': 'person with white cane facing right: medium-light skin tone', '🧑🏼\u200d🦰': 'person: medium-light skin tone, red hair', '🧑🏼\u200d🦱': 'person: medium-light skin tone, curly hair', '🧑🏼\u200d🦲': 'person: medium-light skin tone, bald', '🧑🏼\u200d🦳': 'person: medium-light skin tone, white hair', '🧑🏼\u200d🦼': 'person in motorized wheelchair: medium-light skin tone', '🧑🏼\u200d🦼\u200d➡️': 'person in motorized wheelchair facing right: medium-light skin tone', '🧑🏼\u200d🦽': 'person in manual wheelchair: medium-light skin tone', '🧑🏼\u200d🦽\u200d➡️': 'person in manual wheelchair facing right: medium-light skin tone', '🧑🏽': 'person: medium skin tone', '🧑🏽\u200d⚕️': 'health worker: medium skin tone', '🧑🏽\u200d⚖️': 'judge: medium skin tone', '🧑🏽\u200d✈️': 'pilot: medium skin tone', '🧑🏽\u200d❤️\u200d💋\u200d🧑🏻': 'kiss: person, person, medium skin tone, light skin tone', '🧑🏽\u200d❤️\u200d💋\u200d🧑🏼': 'kiss: person, person, medium skin tone, medium-light skin tone', '🧑🏽\u200d❤️\u200d💋\u200d🧑🏾': 'kiss: person, person, medium skin tone, medium-dark skin tone', '🧑🏽\u200d❤️\u200d💋\u200d🧑🏿': 'kiss: person, person, medium skin tone, dark skin tone', '🧑🏽\u200d❤️\u200d🧑🏻': 'couple with heart: person, person, medium skin tone, light skin tone', '🧑🏽\u200d❤️\u200d🧑🏼': 'couple with heart: person, person, medium skin tone, medium-light skin tone', '🧑🏽\u200d❤️\u200d🧑🏾': 'couple with heart: person, person, medium skin tone, medium-dark skin tone', '🧑🏽\u200d❤️\u200d🧑🏿': 'couple with heart: person, person, medium skin tone, dark skin tone', '🧑🏽\u200d🌾': 'farmer: medium skin tone', '🧑🏽\u200d🍳': 'cook: medium skin tone', '🧑🏽\u200d🍼': 'person feeding baby: medium skin tone', '🧑🏽\u200d🎄': 'Mx Claus: medium skin tone', '🧑🏽\u200d🎓': 'student: medium skin tone', '🧑🏽\u200d🎤': 'singer: medium skin tone', '🧑🏽\u200d🎨': 'artist: medium skin tone', '🧑🏽\u200d🏫': 'teacher: medium skin tone', '🧑🏽\u200d🏭': 'factory worker: medium skin tone', '🧑🏽\u200d💻': 'technologist: medium skin tone', '🧑🏽\u200d💼': 'office worker: medium skin tone', '🧑🏽\u200d🔧': 'mechanic: medium skin tone', '🧑🏽\u200d🔬': 'scientist: medium skin tone', '🧑🏽\u200d🚀': 'astronaut: medium skin tone', '🧑🏽\u200d🚒': 'firefighter: medium skin tone', '🧑🏽\u200d🤝\u200d🧑🏻': 'people holding hands: medium skin tone, light skin tone', '🧑🏽\u200d🤝\u200d🧑🏼': 'people holding hands: medium skin tone, medium-light skin tone', '🧑🏽\u200d🤝\u200d🧑🏽': 'people holding hands: medium skin tone', '🧑🏽\u200d🤝\u200d🧑🏾': 'people holding hands: medium skin tone, medium-dark skin tone', '🧑🏽\u200d🤝\u200d🧑🏿': 'people holding hands: medium skin tone, dark skin tone', '🧑🏽\u200d🦯': 'person with white cane: medium skin tone', '🧑🏽\u200d🦯\u200d➡️': 'person with white cane facing right: medium skin tone', '🧑🏽\u200d🦰': 'person: medium skin tone, red hair', '🧑🏽\u200d🦱': 'person: medium skin tone, curly hair', '🧑🏽\u200d🦲': 'person: medium skin tone, bald', '🧑🏽\u200d🦳': 'person: medium skin tone, white hair', '🧑🏽\u200d🦼': 'person in motorized wheelchair: medium skin tone', '🧑🏽\u200d🦼\u200d➡️': 'person in motorized wheelchair facing right: medium skin tone', '🧑🏽\u200d🦽': 'person in manual wheelchair: medium skin tone', '🧑🏽\u200d🦽\u200d➡️': 'person in manual wheelchair facing right: medium skin tone', '🧑🏾': 'person: medium-dark skin tone', '🧑🏾\u200d⚕️': 'health worker: medium-dark skin tone', '🧑🏾\u200d⚖️': 'judge: medium-dark skin tone', '🧑🏾\u200d✈️': 'pilot: medium-dark skin tone', '🧑🏾\u200d❤️\u200d💋\u200d🧑🏻': 'kiss: person, person, medium-dark skin tone, light skin tone', '🧑🏾\u200d❤️\u200d💋\u200d🧑🏼': 'kiss: person, person, medium-dark skin tone, medium-light skin tone', '🧑🏾\u200d❤️\u200d💋\u200d🧑🏽': 'kiss: person, person, medium-dark skin tone, medium skin tone', '🧑🏾\u200d❤️\u200d💋\u200d🧑🏿': 'kiss: person, person, medium-dark skin tone, dark skin tone', '🧑🏾\u200d❤️\u200d🧑🏻': 'couple with heart: person, person, medium-dark skin tone, light skin tone', '🧑🏾\u200d❤️\u200d🧑🏼': 'couple with heart: person, person, medium-dark skin tone, medium-light skin tone', '🧑🏾\u200d❤️\u200d🧑🏽': 'couple with heart: person, person, medium-dark skin tone, medium skin tone', '🧑🏾\u200d❤️\u200d🧑🏿': 'couple with heart: person, person, medium-dark skin tone, dark skin tone', '🧑🏾\u200d🌾': 'farmer: medium-dark skin tone', '🧑🏾\u200d🍳': 'cook: medium-dark skin tone', '🧑🏾\u200d🍼': 'person feeding baby: medium-dark skin tone', '🧑🏾\u200d🎄': 'Mx Claus: medium-dark skin tone', '🧑🏾\u200d🎓': 'student: medium-dark skin tone', '🧑🏾\u200d🎤': 'singer: medium-dark skin tone', '🧑🏾\u200d🎨': 'artist: medium-dark skin tone', '🧑🏾\u200d🏫': 'teacher: medium-dark skin tone', '🧑🏾\u200d🏭': 'factory worker: medium-dark skin tone', '🧑🏾\u200d💻': 'technologist: medium-dark skin tone', '🧑🏾\u200d💼': 'office worker: medium-dark skin tone', '🧑🏾\u200d🔧': 'mechanic: medium-dark skin tone', '🧑🏾\u200d🔬': 'scientist: medium-dark skin tone', '🧑🏾\u200d🚀': 'astronaut: medium-dark skin tone', '🧑🏾\u200d🚒': 'firefighter: medium-dark skin tone', '🧑🏾\u200d🤝\u200d🧑🏻': 'people holding hands: medium-dark skin tone, light skin tone', '🧑🏾\u200d🤝\u200d🧑🏼': 'people holding hands: medium-dark skin tone, medium-light skin tone', '🧑🏾\u200d🤝\u200d🧑🏽': 'people holding hands: medium-dark skin tone, medium skin tone', '🧑🏾\u200d🤝\u200d🧑🏾': 'people holding hands: medium-dark skin tone', '🧑🏾\u200d🤝\u200d🧑🏿': 'people holding hands: medium-dark skin tone, dark skin tone', '🧑🏾\u200d🦯': 'person with white cane: medium-dark skin tone', '🧑🏾\u200d🦯\u200d➡️': 'person with white cane facing right: medium-dark skin tone', '🧑🏾\u200d🦰': 'person: medium-dark skin tone, red hair', '🧑🏾\u200d🦱': 'person: medium-dark skin tone, curly hair', '🧑🏾\u200d🦲': 'person: medium-dark skin tone, bald', '🧑🏾\u200d🦳': 'person: medium-dark skin tone, white hair', '🧑🏾\u200d🦼': 'person in motorized wheelchair: medium-dark skin tone', '🧑🏾\u200d🦼\u200d➡️': 'person in motorized wheelchair facing right: medium-dark skin tone', '🧑🏾\u200d🦽': 'person in manual wheelchair: medium-dark skin tone', '🧑🏾\u200d🦽\u200d➡️': 'person in manual wheelchair facing right: medium-dark skin tone', '🧑🏿': 'person: dark skin tone', '🧑🏿\u200d⚕️': 'health worker: dark skin tone', '🧑🏿\u200d⚖️': 'judge: dark skin tone', '🧑🏿\u200d✈️': 'pilot: dark skin tone', '🧑🏿\u200d❤️\u200d💋\u200d🧑🏻': 'kiss: person, person, dark skin tone, light skin tone', '🧑🏿\u200d❤️\u200d💋\u200d🧑🏼': 'kiss: person, person, dark skin tone, medium-light skin tone', '🧑🏿\u200d❤️\u200d💋\u200d🧑🏽': 'kiss: person, person, dark skin tone, medium skin tone', '🧑🏿\u200d❤️\u200d💋\u200d🧑🏾': 'kiss: person, person, dark skin tone, medium-dark skin tone', '🧑🏿\u200d❤️\u200d🧑🏻': 'couple with heart: person, person, dark skin tone, light skin tone', '🧑🏿\u200d❤️\u200d🧑🏼': 'couple with heart: person, person, dark skin tone, medium-light skin tone', '🧑🏿\u200d❤️\u200d🧑🏽': 'couple with heart: person, person, dark skin tone, medium skin tone', '🧑🏿\u200d❤️\u200d🧑🏾': 'couple with heart: person, person, dark skin tone, medium-dark skin tone', '🧑🏿\u200d🌾': 'farmer: dark skin tone', '🧑🏿\u200d🍳': 'cook: dark skin tone', '🧑🏿\u200d🍼': 'person feeding baby: dark skin tone', '🧑🏿\u200d🎄': 'Mx Claus: dark skin tone', '🧑🏿\u200d🎓': 'student: dark skin tone', '🧑🏿\u200d🎤': 'singer: dark skin tone', '🧑🏿\u200d🎨': 'artist: dark skin tone', '🧑🏿\u200d🏫': 'teacher: dark skin tone', '🧑🏿\u200d🏭': 'factory worker: dark skin tone', '🧑🏿\u200d💻': 'technologist: dark skin tone', '🧑🏿\u200d💼': 'office worker: dark skin tone', '🧑🏿\u200d🔧': 'mechanic: dark skin tone', '🧑🏿\u200d🔬': 'scientist: dark skin tone', '🧑🏿\u200d🚀': 'astronaut: dark skin tone', '🧑🏿\u200d🚒': 'firefighter: dark skin tone', '🧑🏿\u200d🤝\u200d🧑🏻': 'people holding hands: dark skin tone, light skin tone', '🧑🏿\u200d🤝\u200d🧑🏼': 'people holding hands: dark skin tone, medium-light skin tone', '🧑🏿\u200d🤝\u200d🧑🏽': 'people holding hands: dark skin tone, medium skin tone', '🧑🏿\u200d🤝\u200d🧑🏾': 'people holding hands: dark skin tone, medium-dark skin tone', '🧑🏿\u200d🤝\u200d🧑🏿': 'people holding hands: dark skin tone', '🧑🏿\u200d🦯': 'person with white cane: dark skin tone', '🧑🏿\u200d🦯\u200d➡️': 'person with white cane facing right: dark skin tone', '🧑🏿\u200d🦰': 'person: dark skin tone, red hair', '🧑🏿\u200d🦱': 'person: dark skin tone, curly hair', '🧑🏿\u200d🦲': 'person: dark skin tone, bald', '🧑🏿\u200d🦳': 'person: dark skin tone, white hair', '🧑🏿\u200d🦼': 'person in motorized wheelchair: dark skin tone', '🧑🏿\u200d🦼\u200d➡️': 'person in motorized wheelchair facing right: dark skin tone', '🧑🏿\u200d🦽': 'person in manual wheelchair: dark skin tone', '🧑🏿\u200d🦽\u200d➡️': 'person in manual wheelchair facing right: dark skin tone', '🧒🏻': 'child: light skin tone', '🧒🏼': 'child: medium-light skin tone', '🧒🏽': 'child: medium skin tone', '🧒🏾': 'child: medium-dark skin tone', '🧒🏿': 'child: dark skin tone', '🧓🏻': 'older person: light skin tone', '🧓🏼': 'older person: medium-light skin tone', '🧓🏽': 'older person: medium skin tone', '🧓🏾': 'older person: medium-dark skin tone', '🧓🏿': 'older person: dark skin tone', '🧔\u200d♀️': 'woman: beard', '🧔\u200d♂️': 'man: beard', '🧔🏻': 'person: light skin tone, beard', '🧔🏻\u200d♀️': 'woman: light skin tone, beard', '🧔🏻\u200d♂️': 'man: light skin tone, beard', '🧔🏼': 'person: medium-light skin tone, beard', '🧔🏼\u200d♀️': 'woman: medium-light skin tone, beard', '🧔🏼\u200d♂️': 'man: medium-light skin tone, beard', '🧔🏽': 'person: medium skin tone, beard', '🧔🏽\u200d♀️': 'woman: medium skin tone, beard', '🧔🏽\u200d♂️': 'man: medium skin tone, beard', '🧔🏾': 'person: medium-dark skin tone, beard', '🧔🏾\u200d♀️': 'woman: medium-dark skin tone, beard', '🧔🏾\u200d♂️': 'man: medium-dark skin tone, beard', '🧔🏿': 'person: dark skin tone, beard', '🧔🏿\u200d♀️': 'woman: dark skin tone, beard', '🧔🏿\u200d♂️': 'man: dark skin tone, beard', '🧕🏻': 'woman with headscarf: light skin tone', '🧕🏼': 'woman with headscarf: medium-light skin tone', '🧕🏽': 'woman with headscarf: medium skin tone', '🧕🏾': 'woman with headscarf: medium-dark skin tone', '🧕🏿': 'woman with headscarf: dark skin tone', '🧖\u200d♀️': 'woman in steamy room', '🧖\u200d♂️': 'man in steamy room', '🧖🏻': 'person in steamy room: light skin tone', '🧖🏻\u200d♀️': 'woman in steamy room: light skin tone', '🧖🏻\u200d♂️': 'man in steamy room: light skin tone', '🧖🏼': 'person in steamy room: medium-light skin tone', '🧖🏼\u200d♀️': 'woman in steamy room: medium-light skin tone', '🧖🏼\u200d♂️': 'man in steamy room: medium-light skin tone', '🧖🏽': 'person in steamy room: medium skin tone', '🧖🏽\u200d♀️': 'woman in steamy room: medium skin tone', '🧖🏽\u200d♂️': 'man in steamy room: medium skin tone', '🧖🏾': 'person in steamy room: medium-dark skin tone', '🧖🏾\u200d♀️': 'woman in steamy room: medium-dark skin tone', '🧖🏾\u200d♂️': 'man in steamy room: medium-dark skin tone', '🧖🏿': 'person in steamy room: dark skin tone', '🧖🏿\u200d♀️': 'woman in steamy room: dark skin tone', '🧖🏿\u200d♂️': 'man in steamy room: dark skin tone', '🧗\u200d♀️': 'woman climbing', '🧗\u200d♂️': 'man climbing', '🧗🏻': 'person climbing: light skin tone', '🧗🏻\u200d♀️': 'woman climbing: light skin tone', '🧗🏻\u200d♂️': 'man climbing: light skin tone', '🧗🏼': 'person climbing: medium-light skin tone', '🧗🏼\u200d♀️': 'woman climbing: medium-light skin tone', '🧗🏼\u200d♂️': 'man climbing: medium-light skin tone', '🧗🏽': 'person climbing: medium skin tone', '🧗🏽\u200d♀️': 'woman climbing: medium skin tone', '🧗🏽\u200d♂️': 'man climbing: medium skin tone', '🧗🏾': 'person climbing: medium-dark skin tone', '🧗🏾\u200d♀️': 'woman climbing: medium-dark skin tone', '🧗🏾\u200d♂️': 'man climbing: medium-dark skin tone', '🧗🏿': 'person climbing: dark skin tone', '🧗🏿\u200d♀️': 'woman climbing: dark skin tone', '🧗🏿\u200d♂️': 'man climbing: dark skin tone', '🧘\u200d♀️': 'woman in lotus position', '🧘\u200d♂️': 'man in lotus position', '🧘🏻': 'person in lotus position: light skin tone', '🧘🏻\u200d♀️': 'woman in lotus position: light skin tone', '🧘🏻\u200d♂️': 'man in lotus position: light skin tone', '🧘🏼': 'person in lotus position: medium-light skin tone', '🧘🏼\u200d♀️': 'woman in lotus position: medium-light skin tone', '🧘🏼\u200d♂️': 'man in lotus position: medium-light skin tone', '🧘🏽': 'person in lotus position: medium skin tone', '🧘🏽\u200d♀️': 'woman in lotus position: medium skin tone', '🧘🏽\u200d♂️': 'man in lotus position: medium skin tone', '🧘🏾': 'person in lotus position: medium-dark skin tone', '🧘🏾\u200d♀️': 'woman in lotus position: medium-dark skin tone', '🧘🏾\u200d♂️': 'man in lotus position: medium-dark skin tone', '🧘🏿': 'person in lotus position: dark skin tone', '🧘🏿\u200d♀️': 'woman in lotus position: dark skin tone', '🧘🏿\u200d♂️': 'man in lotus position: dark skin tone', '🧙\u200d♀️': 'woman mage', '🧙\u200d♂️': 'man mage', '🧙🏻': 'mage: light skin tone', '🧙🏻\u200d♀️': 'woman mage: light skin tone', '🧙🏻\u200d♂️': 'man mage: light skin tone', '🧙🏼': 'mage: medium-light skin tone', '🧙🏼\u200d♀️': 'woman mage: medium-light skin tone', '🧙🏼\u200d♂️': 'man mage: medium-light skin tone', '🧙🏽': 'mage: medium skin tone', '🧙🏽\u200d♀️': 'woman mage: medium skin tone', '🧙🏽\u200d♂️': 'man mage: medium skin tone', '🧙🏾': 'mage: medium-dark skin tone', '🧙🏾\u200d♀️': 'woman mage: medium-dark skin tone', '🧙🏾\u200d♂️': 'man mage: medium-dark skin tone', '🧙🏿': 'mage: dark skin tone', '🧙🏿\u200d♀️': 'woman mage: dark skin tone', '🧙🏿\u200d♂️': 'man mage: dark skin tone', '🧚\u200d♀️': 'woman fairy', '🧚\u200d♂️': 'man fairy', '🧚🏻': 'fairy: light skin tone', '🧚🏻\u200d♀️': 'woman fairy: light skin tone', '🧚🏻\u200d♂️': 'man fairy: light skin tone', '🧚🏼': 'fairy: medium-light skin tone', '🧚🏼\u200d♀️': 'woman fairy: medium-light skin tone', '🧚🏼\u200d♂️': 'man fairy: medium-light skin tone', '🧚🏽': 'fairy: medium skin tone', '🧚🏽\u200d♀️': 'woman fairy: medium skin tone', '🧚🏽\u200d♂️': 'man fairy: medium skin tone', '🧚🏾': 'fairy: medium-dark skin tone', '🧚🏾\u200d♀️': 'woman fairy: medium-dark skin tone', '🧚🏾\u200d♂️': 'man fairy: medium-dark skin tone', '🧚🏿': 'fairy: dark skin tone', '🧚🏿\u200d♀️': 'woman fairy: dark skin tone', '🧚🏿\u200d♂️': 'man fairy: dark skin tone', '🧛\u200d♀️': 'woman vampire', '🧛\u200d♂️': 'man vampire', '🧛🏻': 'vampire: light skin tone', '🧛🏻\u200d♀️': 'woman vampire: light skin tone', '🧛🏻\u200d♂️': 'man vampire: light skin tone', '🧛🏼': 'vampire: medium-light skin tone', '🧛🏼\u200d♀️': 'woman vampire: medium-light skin tone', '🧛🏼\u200d♂️': 'man vampire: medium-light skin tone', '🧛🏽': 'vampire: medium skin tone', '🧛🏽\u200d♀️': 'woman vampire: medium skin tone', '🧛🏽\u200d♂️': 'man vampire: medium skin tone', '🧛🏾': 'vampire: medium-dark skin tone', '🧛🏾\u200d♀️': 'woman vampire: medium-dark skin tone', '🧛🏾\u200d♂️': 'man vampire: medium-dark skin tone', '🧛🏿': 'vampire: dark skin tone', '🧛🏿\u200d♀️': 'woman vampire: dark skin tone', '🧛🏿\u200d♂️': 'man vampire: dark skin tone', '🧜\u200d♀️': 'mermaid', '🧜\u200d♂️': 'merman', '🧜🏻': 'merperson: light skin tone', '🧜🏻\u200d♀️': 'mermaid: light skin tone', '🧜🏻\u200d♂️': 'merman: light skin tone', '🧜🏼': 'merperson: medium-light skin tone', '🧜🏼\u200d♀️': 'mermaid: medium-light skin tone', '🧜🏼\u200d♂️': 'merman: medium-light skin tone', '🧜🏽': 'merperson: medium skin tone', '🧜🏽\u200d♀️': 'mermaid: medium skin tone', '🧜🏽\u200d♂️': 'merman: medium skin tone', '🧜🏾': 'merperson: medium-dark skin tone', '🧜🏾\u200d♀️': 'mermaid: medium-dark skin tone', '🧜🏾\u200d♂️': 'merman: medium-dark skin tone', '🧜🏿': 'merperson: dark skin tone', '🧜🏿\u200d♀️': 'mermaid: dark skin tone', '🧜🏿\u200d♂️': 'merman: dark skin tone', '🧝\u200d♀️': 'woman elf', '🧝\u200d♂️': 'man elf', '🧝🏻': 'elf: light skin tone', '🧝🏻\u200d♀️': 'woman elf: light skin tone', '🧝🏻\u200d♂️': 'man elf: light skin tone', '🧝🏼': 'elf: medium-light skin tone', '🧝🏼\u200d♀️': 'woman elf: medium-light skin tone', '🧝🏼\u200d♂️': 'man elf: medium-light skin tone', '🧝🏽': 'elf: medium skin tone', '🧝🏽\u200d♀️': 'woman elf: medium skin tone', '🧝🏽\u200d♂️': 'man elf: medium skin tone', '🧝🏾': 'elf: medium-dark skin tone', '🧝🏾\u200d♀️': 'woman elf: medium-dark skin tone', '🧝🏾\u200d♂️': 'man elf: medium-dark skin tone', '🧝🏿': 'elf: dark skin tone', '🧝🏿\u200d♀️': 'woman elf: dark skin tone', '🧝🏿\u200d♂️': 'man elf: dark skin tone', '🧞\u200d♀️': 'woman genie', '🧞\u200d♂️': 'man genie', '🧟\u200d♀️': 'woman zombie', '🧟\u200d♂️': 'man zombie', '🫃🏻': 'pregnant man: light skin tone', '🫃🏼': 'pregnant man: medium-light skin tone', '🫃🏽': 'pregnant man: medium skin tone', '🫃🏾': 'pregnant man: medium-dark skin tone', '🫃🏿': 'pregnant man: dark skin tone', '🫄🏻': 'pregnant person: light skin tone', '🫄🏼': 'pregnant person: medium-light skin tone', '🫄🏽': 'pregnant person: medium skin tone', '🫄🏾': 'pregnant person: medium-dark skin tone', '🫄🏿': 'pregnant person: dark skin tone', '🫅🏻': 'person with crown: light skin tone', '🫅🏼': 'person with crown: medium-light skin tone', '🫅🏽': 'person with crown: medium skin tone', '🫅🏾': 'person with crown: medium-dark skin tone', '🫅🏿': 'person with crown: dark skin tone', '🫰🏻': 'hand with index finger and thumb crossed: light skin tone', '🫰🏼': 'hand with index finger and thumb crossed: medium-light skin tone', '🫰🏽': 'hand with index finger and thumb crossed: medium skin tone', '🫰🏾': 'hand with index finger and thumb crossed: medium-dark skin tone', '🫰🏿': 'hand with index finger and thumb crossed: dark skin tone', '🫱🏻': 'rightwards hand: light skin tone', '🫱🏻\u200d🫲🏼': 'handshake: light skin tone, medium-light skin tone', '🫱🏻\u200d🫲🏽': 'handshake: light skin tone, medium skin tone', '🫱🏻\u200d🫲🏾': 'handshake: light skin tone, medium-dark skin tone', '🫱🏻\u200d🫲🏿': 'handshake: light skin tone, dark skin tone', '🫱🏼': 'rightwards hand: medium-light skin tone', '🫱🏼\u200d🫲🏻': 'handshake: medium-light skin tone, light skin tone', '🫱🏼\u200d🫲🏽': 'handshake: medium-light skin tone, medium skin tone', '🫱🏼\u200d🫲🏾': 'handshake: medium-light skin tone, medium-dark skin tone', '🫱🏼\u200d🫲🏿': 'handshake: medium-light skin tone, dark skin tone', '🫱🏽': 'rightwards hand: medium skin tone', '🫱🏽\u200d🫲🏻': 'handshake: medium skin tone, light skin tone', '🫱🏽\u200d🫲🏼': 'handshake: medium skin tone, medium-light skin tone', '🫱🏽\u200d🫲🏾': 'handshake: medium skin tone, medium-dark skin tone', '🫱🏽\u200d🫲🏿': 'handshake: medium skin tone, dark skin tone', '🫱🏾': 'rightwards hand: medium-dark skin tone', '🫱🏾\u200d🫲🏻': 'handshake: medium-dark skin tone, light skin tone', '🫱🏾\u200d🫲🏼': 'handshake: medium-dark skin tone, medium-light skin tone', '🫱🏾\u200d🫲🏽': 'handshake: medium-dark skin tone, medium skin tone', '🫱🏾\u200d🫲🏿': 'handshake: medium-dark skin tone, dark skin tone', '🫱🏿': 'rightwards hand: dark skin tone', '🫱🏿\u200d🫲🏻': 'handshake: dark skin tone, light skin tone', '🫱🏿\u200d🫲🏼': 'handshake: dark skin tone, medium-light skin tone', '🫱🏿\u200d🫲🏽': 'handshake: dark skin tone, medium skin tone', '🫱🏿\u200d🫲🏾': 'handshake: dark skin tone, medium-dark skin tone', '🫲🏻': 'leftwards hand: light skin tone', '🫲🏼': 'leftwards hand: medium-light skin tone', '🫲🏽': 'leftwards hand: medium skin tone', '🫲🏾': 'leftwards hand: medium-dark skin tone', '🫲🏿': 'leftwards hand: dark skin tone', '🫳🏻': 'palm down hand: light skin tone', '🫳🏼': 'palm down hand: medium-light skin tone', '🫳🏽': 'palm down hand: medium skin tone', '🫳🏾': 'palm down hand: medium-dark skin tone', '🫳🏿': 'palm down hand: dark skin tone', '🫴🏻': 'palm up hand: light skin tone', '🫴🏼': 'palm up hand: medium-light skin tone', '🫴🏽': 'palm up hand: medium skin tone', '🫴🏾': 'palm up hand: medium-dark skin tone', '🫴🏿': 'palm up hand: dark skin tone', '🫵🏻': 'index pointing at the viewer: light skin tone', '🫵🏼': 'index pointing at the viewer: medium-light skin tone', '🫵🏽': 'index pointing at the viewer: medium skin tone', '🫵🏾': 'index pointing at the viewer: medium-dark skin tone', '🫵🏿': 'index pointing at the viewer: dark skin tone', '🫶🏻': 'heart hands: light skin tone', '🫶🏼': 'heart hands: medium-light skin tone', '🫶🏽': 'heart hands: medium skin tone', '🫶🏾': 'heart hands: medium-dark skin tone', '🫶🏿': 'heart hands: dark skin tone', '🫷🏻': 'leftwards pushing hand: light skin tone', '🫷🏼': 'leftwards pushing hand: medium-light skin tone', '🫷🏽': 'leftwards pushing hand: medium skin tone', '🫷🏾': 'leftwards pushing hand: medium-dark skin tone', '🫷🏿': 'leftwards pushing hand: dark skin tone', '🫸🏻': 'rightwards pushing hand: light skin tone', '🫸🏼': 'rightwards pushing hand: medium-light skin tone', '🫸🏽': 'rightwards pushing hand: medium skin tone', '🫸🏾': 'rightwards pushing hand: medium-dark skin tone', '🫸🏿': 'rightwards pushing hand: dark skin tone'}

Other emoji; allowed to be used, but not suggested due to there’s too many of them

nkdsu.apps.vote.emoji._get_emoji() Iterable[tuple[str, str, str]][source]
nkdsu.apps.vote.emoji._get_zwj_sequences() Iterable[tuple[str, str, str]][source]
nkdsu.apps.vote.emoji._check_emoji(src: dict[str, str], char: str, expected_name: str) None[source]

nkdsu.apps.vote.forms module

class nkdsu.apps.vote.forms.ClearableFileInput(attrs=None)[source]

Bases: ClearableFileInput

The stock clearable file widget generates HTML that cannot be easily laid out in a reasonable way with CSS. In particular, the way the ‘clear’ checkbox is not put in any kind of elements makes intentional layout basically impossible. Here, we aim to fix that.

template_name = 'widgets/clearable_file_input.html'
property media
class nkdsu.apps.vote.forms.SearchForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None)[source]

Bases: Form

base_fields = {'q': <django.forms.fields.CharField object>}
declared_fields = {'q': <django.forms.fields.CharField object>}
property media
class nkdsu.apps.vote.forms.PronounsInput(attrs: dict[str, Any] | None = None)[source]

Bases: TextInput

template_name = 'widgets/pronouns_input.html'
property media
class nkdsu.apps.vote.forms.TriviaForm(*args, **kwargs)[source]

Bases: Form

A form protected by a trivia question.

new_question() str[source]
clean_trivia()[source]
base_fields = {'trivia': <django.forms.fields.CharField object>, 'trivia_question': <django.forms.fields.CharField object>}
declared_fields = {'trivia': <django.forms.fields.CharField object>, 'trivia_question': <django.forms.fields.CharField object>}
property media
class nkdsu.apps.vote.forms.BadMetadataForm(*args, track: Track, **kwargs)[source]

Bases: Form

track: Track
base_fields = {'details': <django.forms.fields.CharField object>}
declared_fields = {'details': <django.forms.fields.CharField object>}
property media
class nkdsu.apps.vote.forms.RequestForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None)[source]

Bases: Form

A form for requesting that a track be added to the library.

clean() dict[str, Any] | None[source]
base_fields = {'artist': <django.forms.fields.CharField object>, 'details': <django.forms.fields.CharField object>, 'role': <django.forms.fields.CharField object>, 'show': <django.forms.fields.CharField object>, 'title': <django.forms.fields.CharField object>}
declared_fields = {'artist': <django.forms.fields.CharField object>, 'details': <django.forms.fields.CharField object>, 'role': <django.forms.fields.CharField object>, 'show': <django.forms.fields.CharField object>, 'title': <django.forms.fields.CharField object>}
property media
class nkdsu.apps.vote.forms.VoteForm(*args, tracks: Sequence[Track], **kwargs)[source]

Bases: ModelForm

A form for creating a models.Vote.

class Meta[source]

Bases: object

model

alias of Vote

fields = ['text']
widgets = {'text': <django.forms.widgets.TextInput object>}
tracks: Sequence[Track]
clean() None[source]
_meta = <django.forms.models.ModelFormOptions object>
base_fields = {'text': <django.forms.fields.CharField object>}
declared_fields = {}
property media
class nkdsu.apps.vote.forms.CheckMetadataForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None)[source]

Bases: Form

base_fields = {'composer': <django.forms.fields.CharField object>, 'id3_artist': <django.forms.fields.CharField object>, 'id3_title': <django.forms.fields.CharField object>, 'year': <django.forms.fields.IntegerField object>}
declared_fields = {'composer': <django.forms.fields.CharField object>, 'id3_artist': <django.forms.fields.CharField object>, 'id3_title': <django.forms.fields.CharField object>, 'year': <django.forms.fields.IntegerField object>}
property media
class nkdsu.apps.vote.forms.LibraryUploadForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None)[source]

Bases: Form

base_fields = {'inudesu': <django.forms.fields.BooleanField object>, 'library_xml': <django.forms.fields.FileField object>}
declared_fields = {'inudesu': <django.forms.fields.BooleanField object>, 'library_xml': <django.forms.fields.FileField object>}
property media
class nkdsu.apps.vote.forms.MyriadExportUploadForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None)[source]

Bases: Form

base_fields = {'myriad_csv': <django.forms.fields.FileField object>}
declared_fields = {'myriad_csv': <django.forms.fields.FileField object>}
property media
class nkdsu.apps.vote.forms.NoteForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None, renderer=None)[source]

Bases: ModelForm

class Meta[source]

Bases: object

model

alias of Note

fields = ['content', 'public']
_meta = <django.forms.models.ModelFormOptions object>
base_fields = {'content': <django.forms.fields.CharField object>, 'just_for_current_show': <django.forms.fields.BooleanField object>, 'public': <django.forms.fields.BooleanField object>}
declared_fields = {'just_for_current_show': <django.forms.fields.BooleanField object>}
property media
class nkdsu.apps.vote.forms.DarkModeForm(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None)[source]

Bases: Form

base_fields = {'mode': <django.forms.fields.ChoiceField object>}
declared_fields = {'mode': <django.forms.fields.ChoiceField object>}
property media

nkdsu.apps.vote.managers module

class nkdsu.apps.vote.managers.NoteQuerySet(model=None, query=None, using=None, hints=None)[source]

Bases: QuerySet

for_show_or_none(show: Show) Self[source]
class nkdsu.apps.vote.managers.TrackQuerySet(model=None, query=None, using=None, hints=None)[source]

Bases: QuerySet

_everything(show_secret_tracks: bool = False) Self[source]
for_decade(start_year: int) Self[source]
public() Self[source]
by_artist(artist: str, show_secret_tracks: bool = False) list[Track][source]

Filters with Python, so does not return a queryset and is not lazy.

by_composer(composer: str, show_secret_tracks: bool = False) list[Track][source]
by_anime(anime: str, show_secret_tracks: bool = False) list[Track][source]

Behaves similarly to by_artist.

search(query: str, show_secret_tracks: bool = False) Self[source]

nkdsu.apps.vote.mastodon_instances module

nkdsu.apps.vote.mastodon_instances._get_mastodon_instances() set[str][source]

nkdsu.apps.vote.mixcloud module

nkdsu.apps.vote.mixcloud._get_cloudcasts()[source]
nkdsu.apps.vote.mixcloud.cloudcasts_for(date) list[Any][source]

nkdsu.apps.vote.mixins module

class nkdsu.apps.vote.mixins.CurrentShowMixin[source]

Bases: ContextMixin

get_context_data(**kwargs) dict[str, Any][source]
class nkdsu.apps.vote.mixins.LetMemoizeGetObject[source]

Bases: SingleObjectMixin

A view mixin that allows objects to be memoized if, and only if, the base queryset is not overridden, so we can be confident that sequential retrievals would have been the same.

Helpful for views where get_object() is particularly expensive.

get_object(queryset: QuerySet | None = None) M[source]
abstract get_memoizable_object() M[source]
class nkdsu.apps.vote.mixins.TrackListWithAnimeGrouping[source]

Bases: ContextMixin

get_track_queryset() Sequence[Track] | TrackQuerySet[source]
grouped_tracks() OrderedDict[str, list[Track]][source]
get_context_data(**kwargs) dict[str, Any][source]
class nkdsu.apps.vote.mixins.TrackListWithAnimeGroupingListView(**kwargs)[source]

Bases: TrackListWithAnimeGrouping, ListView

get_queryset() Sequence[Track] | TrackQuerySet[source]
class nkdsu.apps.vote.mixins.ShowDetailMixin[source]

Bases: LetMemoizeGetObject

A view that will find a show for any date in the past, redirect to the showtime date if necessary, and then render a view with the correct show in context.

model

alias of Show

view_name: str | None = None
default_to_current = False
date: datetime | None = None
get_memoizable_object() Show[source]

Get the show relating to date or, if date is None, the most recent complete show. If self.default_to_current is True, get the show in progress rather than the most recent complete show.

Doesn’t use Show.at() because I don’t want views creating Show instances in the database.

get(request: HttpRequest, *args, **kwargs) HttpResponse[source]
get_context_data(**kwargs) dict[str, Any][source]
class nkdsu.apps.vote.mixins.ThisShowDetailMixin[source]

Bases: ShowDetailMixin

Like ShowDetailMixin, but defaults to the show in progress when no date is provided.

get_object(queryset: QuerySet | None = None) Show[source]
class nkdsu.apps.vote.mixins.ShowDetail(**kwargs)[source]

Bases: ShowDetailMixin, DetailView

model

alias of Show

object: Show
class nkdsu.apps.vote.mixins.ArchiveList(**kwargs)[source]

Bases: ListView

model

alias of Show

exclude_current = True
year() int[source]
get_years() list[int][source]
get_queryset() QuerySet[source]
get_context_data(**kwargs) dict[str, Any][source]
class nkdsu.apps.vote.mixins.TwitterUserDetailMixin[source]

Bases: LetMemoizeGetObject

model

alias of TwitterUser

get_memoizable_object() TwitterUser[source]
class nkdsu.apps.vote.mixins.BreadcrumbMixin[source]

Bases: object

breadcrumbs: list[tuple[str | None, str]] = []
abstract get_breadcrumbs() list[tuple[str | None, str]][source]
get_context_data(**k)[source]
class nkdsu.apps.vote.mixins.BrowseCategory(**kwargs)[source]

Bases: BreadcrumbMixin, TemplateView

template_name = 'browse_category.html'
context_category_name = 'items'
category_name: str | None = None
breadcrumbs: list[tuple[str | None, str]] = [('/browse/', 'browse')]
contents_required = True
searchable = True
abstract get_categories() Iterable[BrowsableItem][source]
filter_categories(items: Iterable[BrowsableItem]) Iterable[BrowsableItem][source]
get_context_data(**kwargs) dict[str, Any][source]

nkdsu.apps.vote.models module

class nkdsu.apps.vote.models.CleanOnSaveMixin[source]

Bases: object

save(*args, **kwargs)[source]
class nkdsu.apps.vote.models.SetShowBasedOnDateMixin[source]

Bases: object

show: ForeignKey
save(*args, **kwargs)[source]
class nkdsu.apps.vote.models.Show(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Serializable, Model

A broadcast of the show and, by extention, the week leading up to it.

showtime

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

end

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

message

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

voting_allowed

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

clean() None[source]
classmethod current(*a, **k) Any
classmethod _at(time: datetime, create: bool = True) Show | None[source]

Get (or create, if necessary) the show for time. Use .at() instead.

classmethod at(time: datetime) Show[source]

Get the show for the date specified, creating every intervening show in the process if necessary.

broadcasting(time: datetime | None = None) bool[source]

Return True if the time specified is during this week’s show.

next(create: bool = False) Show | None[source]

Return the Show chronologically after that one.

prev() Show | None[source]

Return the Show chronologically before that one.

has_ended() bool[source]
_date_kwargs(attr: str = 'date') dict[str, datetime][source]

The kwargs you would hand to a queryset to find objects applicable to this show. Should not be used unless you’re doing something that can’t use a .show ForeignKey.

votes() QuerySet[source]
plays() QuerySet[source]
playlist() list[Track][source]
shortlisted() list[Track][source]
discarded() list[Track][source]
tracks_sorted_by_votes() list[Track][source]

Return a list of tracks that have been voted for this week, in order of when they were last voted for, starting from the most recent.

revealed(show_hidden: bool = False) TrackQuerySet[source]

Return all public (unhidden, non-inudesu) tracks revealed in the library this week.

cloudcasts() list[Any][source]
get_absolute_url() str[source]
get_listen_url() str[source]
get_revealed_url() str[source]
property start: datetime | None
api_dict(verbose: bool = False) JsonDict[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_abc_impl = <_abc._abc_data object>
_is_protocol = False
_meta = <Options for Show>
block_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

discard_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

get_next_by_end(*, field=<django.db.models.fields.DateTimeField: end>, is_next=True, **kwargs)
get_next_by_showtime(*, field=<django.db.models.fields.DateTimeField: showtime>, is_next=True, **kwargs)
get_previous_by_end(*, field=<django.db.models.fields.DateTimeField: end>, is_next=False, **kwargs)
get_previous_by_showtime(*, field=<django.db.models.fields.DateTimeField: showtime>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

note_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

objects = <django.db.models.manager.Manager object>
play_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

proroulettecommitment_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

shortlist_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

vote_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class nkdsu.apps.vote.models.TwitterUser(id, screen_name, user_id, name, is_patron, is_abuser, updated)[source]

Bases: Voter, CleanOnSaveMixin, Model

is_twitteruser = True
screen_name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

user_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

name: str | CharField

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

is_patron: bool | BooleanField

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

is_abuser: bool | BooleanField

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

updated

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

property username: str
_twitter_user_and_profile() tuple[TwitterUser | None, Profile | None][source]
twitter_url() str[source]
get_absolute_url() str[source]
get_toggle_abuser_url() str[source]
get_avatar_url(try_profile: bool = True) str[source]
unordered_votes() QuerySet[source]
api_dict(verbose: bool = False) JsonDict[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_abc_impl = <_abc._abc_data object>
_is_protocol = False
_meta = <Options for TwitterUser>
get_next_by_updated(*, field=<django.db.models.fields.DateTimeField: updated>, is_next=True, **kwargs)
get_previous_by_updated(*, field=<django.db.models.fields.DateTimeField: updated>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
profile

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Place.restaurant is a ReverseOneToOneDescriptor instance.

userbadge_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

vote_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

nkdsu.apps.vote.models.avatar_upload_path(instance: Profile, filename: str) str[source]
class nkdsu.apps.vote.models.Profile(id, user, twitter_user, avatar, display_name, pronouns, is_patron, is_abuser)[source]

Bases: Voter, CleanOnSaveMixin, Model

user

Accessor to the related object on the forward side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Restaurant.place is a ForwardOneToOneDescriptor instance.

twitter_user

Accessor to the related object on the forward side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

Restaurant.place is a ForwardOneToOneDescriptor instance.

avatar

Just like the FileDescriptor, but for ImageFields. The only difference is assigning the width/height to the width_field/height_field, if appropriate.

display_name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

pronouns: str | CharField

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

is_patron: bool | BooleanField

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

is_abuser: bool | BooleanField

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

_twitter_user_and_profile() tuple[TwitterUser | None, Profile | None][source]
property username: str
get_absolute_url() str[source]
get_avatar_url() str[source]
unordered_votes() QuerySet[source]
property name: str
get_toggle_abuser_url() str[source]
has_max_websites() bool[source]
get_websites() Iterable[UserWebsite][source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_abc_impl = <_abc._abc_data object>
_is_protocol = False
_meta = <Options for Profile>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
twitter_user_id
user_id
userbadge_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

websites

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class nkdsu.apps.vote.models.UserWebsite(id, url, profile)[source]

Bases: CleanOnSaveMixin, Model

url

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

profile

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

clean() None[source]
property kind: Literal['_website', 'anilist', 'bsky', 'cohost', 'facebook', 'instagram', 'linkedin', 'mastodon', 'myanimelist', 'nkdsu', 'threads', 'tumblr', 'twitch', 'twitter', 'x', 'youtube']

Return an appropriate identify for for what kind of URL this is.

>>> UserWebsite(url='https://someone.tumblr.com').kind
'tumblr'
>>> UserWebsite(url='https://tumblr.com/someone').kind
'tumblr'
>>> UserWebsite(url='https://cohost.org/someone').kind
'cohost'
>>> UserWebsite(url='https://www.instagram.com/someone').kind
'instagram'
>>> UserWebsite(url='https://plush.city/@someone').kind
'mastodon'
>>> UserWebsite(url='https://website.tld').kind
'_website'
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for UserWebsite>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
profile_id
class nkdsu.apps.vote.models.UserTrackList(id, user, name, slug, description, public, icon)[source]

Bases: CleanOnSaveMixin, Model

user

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

slug

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

description

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

public

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

icon

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

tracks: ManyToManyField

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

Pizza.toppings and Topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

get_absolute_url() str[source]
save(*args, **kwargs) None[source]
playlist() Iterable[Track][source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for UserTrackList>
get_icon_display(*, field=<django.db.models.fields.CharField: icon>)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
user_id
usertracklisttrack_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class nkdsu.apps.vote.models.UserTrackListTrack(id, track, track_list, index)[source]

Bases: CleanOnSaveMixin, Model

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

track_list

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

index

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

save(*args, **kwargs) None[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for UserTrackListTrack>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
track_id
track_list_id
nkdsu.apps.vote.models.art_path(i: Track, f: str) str[source]
class nkdsu.apps.vote.models.Role(full_tag: str)[source]

Bases: object

caveat: str | None = None
anime: str | None
full_role: str
kind: str = ''
specifics: str = ''
sortkey_group: float
numbers_in_role() tuple[int, ...][source]
sortkey() tuple[float, str, tuple[int, ...], str][source]
anime_data() Anime | None[source]
related_anime() list[str][source]
class nkdsu.apps.vote.models.Track(id, id3_title, id3_artist, id3_album, msec, added, composer, label, year, media_id, has_hook, revealed, archived, hidden, inudesu, background_art, metadata_locked)[source]

Bases: CleanOnSaveMixin, Serializable, Model

objects = <django.db.models.manager.ManagerFromTrackQuerySet object>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

id3_title

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

id3_artist

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

id3_album

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

msec

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

added

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

composer

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

label

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

year

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

media_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

has_hook

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

revealed

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

archived

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

hidden

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

inudesu

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

background_art

Just like the FileDescriptor, but for ImageFields. The only difference is assigning the width/height to the width_field/height_field, if appropriate.

metadata_locked

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

clean() None[source]
classmethod all_anime_titles() set[str][source]
classmethod all_artists() set[str][source]
classmethod all_composers() set[str][source]
classmethod all_years() list[int][source]
classmethod complete_decade_range() list[tuple[int, bool]][source]
classmethod all_decades() list[int][source]
classmethod suggest_artists(string: str) set[str][source]
classmethod all_roles(qs: QuerySet | None = None) set[str][source]
classmethod all_public_roles() set[str][source]
is_new() bool[source]
show_revealed() Show | None[source]

Return the show that this track was revealed for.

length_str() str[source]
last_play() Play | None[source]
plays() QuerySet[source]
plays_newest_first() QuerySet[source]
weeks_since_play() int | None[source]

Get the number of weeks since this track’s last Play.

property title: str
property album: str
property role: str | None
property roles: list[str]
property role_details: list[Role]
role_details_for_anime(anime: str) list[Role][source]
has_anime(anime: str) bool[source]
property artist: str
artists() ParsedArtist[source]
artist_names(fail_silently: bool = True) Iterable[str][source]
composers() ParsedArtist[source]
composer_names(fail_silently: bool = True) Iterable[str][source]
split_id3_title() tuple[str, str | None][source]
eligible() bool[source]

Returns True if this track can be requested.

ineligible() str | None[source]

Return a string describing why a track is ineligible, or None if it is not.

votes_for(show: Show) QuerySet[source]

Return votes for this track for a given show.

notes() NoteQuerySet[source]
public_notes() NoteQuerySet[source]
visible_track_lists() QuerySet[source]
play_post_content(max_length: int, ellipsis_length: int = 1) str[source]
play_tweet_content() str[source]
play_tweet_intent_url() str[source]
play_bsky_content() str[source]
play_bsky_intent_url() str[source]
play_discord_content() str[source]
play() Play[source]

Mark this track as played.

shortlist() None[source]
discard() None[source]
reset_shortlist_discard() None[source]
archive() None[source]
unarchive() None[source]
hide() None[source]
unhide() None[source]
lock_metadata() None[source]
unlock_metadata() None[source]
slug() str[source]
get_absolute_url() str[source]
get_public_url() str[source]
get_report_url() str[source]
get_vote_url() str[source]

Return the url for voting for this track alone.

get_lastfm_track() dict[str, Any][source]
musicbrainz_release() dict[str, Any] | None[source]
_get_lastfm_album_from_album_tag() dict[str, Any] | None[source]
_get_lastfm_album_from_musicbrainz_release() dict[str, Any] | None[source]
_get_lastfm_album_from_track_tag() dict[str, Any] | None[source]
get_lastfm_album() dict[str, Any] | None[source]
get_lastfm_artist() dict[str, Any] | None[source]
get_biggest_lastfm_image_url() str | None[source]
update_background_art() None[source]
api_dict(verbose: bool = False) JsonDict[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_abc_impl = <_abc._abc_data object>
_is_protocol = False
_meta = <Options for Track>
block_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

discard_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

get_next_by_added(*, field=<django.db.models.fields.DateTimeField: added>, is_next=True, **kwargs)
get_previous_by_added(*, field=<django.db.models.fields.DateTimeField: added>, is_next=False, **kwargs)
note_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

play_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

proroulettecommitment_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

request_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

shortlist_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

usertracklist_set

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

Pizza.toppings and Topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

usertracklisttrack_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

vote_set

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

Pizza.toppings and Topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

nkdsu.apps.vote.models.MANUAL_VOTE_KINDS = (('email', 'email'), ('discord', 'discord'), ('text', 'text'), ('tweet', 'tweet'), ('person', 'in person'), ('pigeon', 'carrier pigeon'), ('phone', 'on the phone'))

The kinds of vote that can be imported manually

class nkdsu.apps.vote.models.VoteKind(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: Enum

local = 1

A request made using the website’s built-in requesting machinery.

twitter = 2

A historical request, initially derived from a tweet we received via the Twitter API.

manual = 3

A request manually created by an admin to reflect, for example, an email.

class nkdsu.apps.vote.models.Vote(id, date, show, text, user, twitter_user, tweet_id, name, kind)[source]

Bases: SetShowBasedOnDateMixin, CleanOnSaveMixin, Model

tracks: ManyToManyField

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

Pizza.toppings and Topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

date

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

show: ForeignKey

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

text

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

user

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

twitter_user

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

tweet_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

kind

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

clean() None[source]
property vote_kind: VoteKind
property is_twitter: bool
property is_manual: bool
property is_local: bool
property is_editable: bool
get_image_url() str[source]
property voter: Voter | None
content() str[source]

Return the non-mention, non-url content of the text.

birthday() bool[source]
property hat: UserBadge | None

Get the most important badge for a given vote, where the most important badge is the last one defined in BADGES that we are currently within the time range of.

success() float | None[source]

Return how successful this Vote is, as a float between 0 and 1, or None if we don’t know yet.

weight() float[source]

Return how much we should take this vote into account when calculating a user’s batting average.

api_dict(verbose: bool = False) JsonDict[source]
twitter_url() str | None[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Vote>
get_kind_display(*, field=<django.db.models.fields.CharField: kind>)
get_next_by_date(*, field=<django.db.models.fields.DateTimeField: date>, is_next=True, **kwargs)
get_previous_by_date(*, field=<django.db.models.fields.DateTimeField: date>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
show_id
twitter_user_id
user_id
class nkdsu.apps.vote.models.Play(*args, **kwargs)[source]

Bases: SetShowBasedOnDateMixin, CleanOnSaveMixin, Model

A record that a Track was played on the show.

date

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

show: ForeignKey

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

tweet_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

clean() None[source]
save(*args, **kwargs) None[source]
api_dict(verbose: bool = False) JsonDict[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Play>
get_next_by_date(*, field=<django.db.models.fields.DateTimeField: date>, is_next=True, **kwargs)
get_previous_by_date(*, field=<django.db.models.fields.DateTimeField: date>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
show_id
track_id
class nkdsu.apps.vote.models.Block(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Model

A particular track that we are not going to allow to be voted for on particular show.

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

reason

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

show

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Block>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
show_id
track_id
class nkdsu.apps.vote.models.Shortlist(id, show, track, index)[source]

Bases: CleanOnSaveMixin, Model

show

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

index

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

take_first_available_index() None[source]
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Shortlist>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
show_id
track_id
class nkdsu.apps.vote.models.Discard(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Model

A track that we’re not going to play, but that we don’t want to make public that we’re not going to play.

show

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Discard>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
show_id
track_id
class nkdsu.apps.vote.models.Request(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Model

A request for a database addition or modification.

METADATA_KEYS = ['trivia', 'trivia_question', 'contact']

keys of blob that no longer get set, but which may exist on historic Requests

created

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

blob

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

submitted_by

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

filled

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

filled_by

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

claimant

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

serialise(struct)[source]
struct()[source]
non_metadata()[source]
property active_shelving: ElfShelving | None
property is_shelved: bool
>>> from django.utils import timezone
>>> user = User.objects.create()
>>> request = Request(blob='{}')
>>> request.save()
>>> request.is_shelved
False
>>> shelving = ElfShelving.objects.create(request=request, created_by=user)
>>> del request.active_shelving  # to make @cached_property forget the cached response
>>> request.is_shelved
True
>>> shelving.disabled_at = timezone.now()
>>> shelving.save()
>>> del request.active_shelving
>>> request.is_shelved
False
exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Request>
claimant_id
filled_by_id
get_next_by_created(*, field=<django.db.models.fields.DateTimeField: created>, is_next=True, **kwargs)
get_previous_by_created(*, field=<django.db.models.fields.DateTimeField: created>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
shelvings

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

submitted_by_id
track_id
class nkdsu.apps.vote.models.ElfShelving(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Model

An expression by a elf that a Request cannot be filled at the moment.

request

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

created_at

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

created_by

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

reason_created

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

disabled_at

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

disabled_by

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

reason_disabled

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for ElfShelving>
created_by_id
disabled_by_id
get_next_by_created_at(*, field=<django.db.models.fields.DateTimeField: created_at>, is_next=True, **kwargs)
get_previous_by_created_at(*, field=<django.db.models.fields.DateTimeField: created_at>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
request_id
class nkdsu.apps.vote.models.Note(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Model

A note about whatever for a particular track.

objects = <django.db.models.manager.ManagerFromNoteQuerySet object>
track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

show

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

public

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

content

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for Note>
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

show_id
track_id
class nkdsu.apps.vote.models.ProRouletteCommitment(*args, **kwargs)[source]

Bases: CleanOnSaveMixin, Model

A commitment from a given user to only use Roulette in ‘pro’ mode until the current show ends. Retains the track they committed to and when the commitment was made.

show

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

user

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

track

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

created_at

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for ProRouletteCommitment>
get_next_by_created_at(*, field=<django.db.models.fields.DateTimeField: created_at>, is_next=True, **kwargs)
get_previous_by_created_at(*, field=<django.db.models.fields.DateTimeField: created_at>, is_next=False, **kwargs)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
show_id
track_id
user_id
class nkdsu.apps.vote.models.BadgeInfoForUser[source]

Bases: TypedDict

slug: str
description: str
summary: str
icon: str
url: str
start: datetime | None
finish: datetime | None
class nkdsu.apps.vote.models.Badge(slug: 'str', description_fmt: 'str', summary: 'str', icon: 'str', url: 'str', start: 'Optional[datetime.datetime]', finish: 'Optional[datetime.datetime]')[source]

Bases: object

slug: str
description_fmt: str
summary: str
icon: str
url: str
start: datetime | None
finish: datetime | None
info(user: Voter) BadgeInfoForUser[source]
nkdsu.apps.vote.models.BADGES: list[Badge] = [Badge(slug='tblc', description_fmt='{name} bought Take Back Love City for the RSPCA.', summary='put up with bad music for animals', icon='headphones', url='https://desus.bandcamp.com/album/take-back-love-city', start=None, finish=datetime.datetime(1990, 1, 1, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2016', description_fmt='{name} donated to the Very Scary Scenario charity streams for Special Effect in 2016.', summary='likes fun, hates exclusion', icon='heart', url='https://www.justgiving.com/fundraising/very-scary-scenario', start=datetime.datetime(2016, 10, 15, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2016, 11, 15, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2017', description_fmt='{name} donated to the Very Scary Scenario charity streams and Neko Desu All-Nighter for Cancer Research UK in 2017.', summary='likes depriving people of sleep, hates cancer', icon='heart', url='https://www.justgiving.com/fundraising/very-charity-scenario-2017', start=datetime.datetime(2017, 10, 1, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2017, 11, 27, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2018', description_fmt='{name} donated to the Very Scary Scenario charity streams for Cancer Research UK in 2018.', summary='likes depriving people of sleep, hates cancer', icon='medkit', url='https://www.justgiving.com/fundraising/very-charity-scenario-2018', start=datetime.datetime(2018, 10, 1, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2018, 11, 27, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2019', description_fmt='{name} donated to the Very Scary Scenario charity streams for Samaritans in 2019.', summary='likes depriving people of sleep, fan of good mental health', icon='life-ring', url='https://www.justgiving.com/fundraising/very-charity-scenario-2019', start=datetime.datetime(2019, 10, 1, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2019, 11, 27, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2020', description_fmt='{name} donated to the Very Scary Scenario charity streams for Cancer Research UK in 2020.', summary='donated to the 2020 Very Scary Scenario charity streams', icon='heartbeat', url='https://www.justgiving.com/fundraising/very-charity-scenario-2020', start=datetime.datetime(2020, 10, 1, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2020, 11, 27, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2021', description_fmt='{name} donated to the Very Scary Scenario charity streams for Mind in 2021.', summary='donated to the 2021 Very Scary Scenario charity streams', icon='brain', url='https://www.justgiving.com/fundraising/very-charity-scenario-2021', start=datetime.datetime(2021, 10, 9, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2021, 11, 27, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2022', description_fmt='{name} donated to the Very Scary Scenario charity streams for akt in 2022.', summary='donated to the 2022 Very Scary Scenario charity streams', icon='home', url='https://www.justgiving.com/fundraising/very-charity-scenario-2022', start=datetime.datetime(2022, 10, 9, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2022, 11, 27, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London'))), Badge(slug='charity-2023', description_fmt='{name} donated to the Very Scary Scenario charity streams and Neko Desu All-Nighter for the National Autistic Society in 2023.', summary='donated to the 2023 Very Scary Scenario charity streams', icon='infinity', url='https://www.justgiving.com/page/very-charity-scenario-2023', start=datetime.datetime(2023, 9, 9, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')), finish=datetime.datetime(2023, 12, 2, 0, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/London')))]

A list of accolades we can give to users for showing off on user pages and, during a specified time range, against every Vote they make.

class nkdsu.apps.vote.models.UserBadge(id, badge, twitter_user, profile)[source]

Bases: CleanOnSaveMixin, Model

exception DoesNotExist

Bases: ObjectDoesNotExist

exception MultipleObjectsReturned

Bases: MultipleObjectsReturned

_meta = <Options for UserBadge>
get_badge_display(*, field=<django.db.models.fields.CharField: badge>)
id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

objects = <django.db.models.manager.Manager object>
profile_id
twitter_user_id
badge

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

twitter_user

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

profile

Accessor to the related object on the forward side of a many-to-one or one-to-one (via ForwardOneToOneDescriptor subclass) relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

Child.parent is a ForwardManyToOneDescriptor instance.

classmethod for_voter(voter: Voter) QuerySet[source]
clean() None[source]
property badge_info: BadgeInfoForUser

nkdsu.apps.vote.myriad_export module

Tools for interacting with CSV exports of the library from Myriad Playout.

nkdsu.apps.vote.myriad_export.has_hook(entry: dict[str, str]) bool[source]
class nkdsu.apps.vote.myriad_export.PlayoutEntry(item_type: str, media_id: int, title: str, artists: str)[source]

Bases: object

item_type: str
media_id: int
title: str
artists: str
classmethod from_csv(entry: dict[str, str]) PlayoutEntry[source]
matched_track() Track | None[source]

Return the Track that matches this entry, if applicable.

update_matched_track() bool[source]

Update and save the Track we’re able to match against this entry.

Returns:

True if we matched against something and updated it, otherwise False.

nkdsu.apps.vote.myriad_export.entries_for_file(file: Iterable[str]) Iterable[PlayoutEntry][source]

nkdsu.apps.vote.parsers module

class nkdsu.apps.vote.parsers.ArtistChunk(text: str, is_artist: bool)[source]

Bases: object

text: str
is_artist: bool
property url: str | None
property worth_linking_to: bool
class nkdsu.apps.vote.parsers.ParsedArtist(chunks: list[nkdsu.apps.vote.parsers.ArtistChunk], should_collapse: bool)[source]

Bases: object

chunks: list[ArtistChunk]
should_collapse: bool
class nkdsu.apps.vote.parsers.ArtistLexer[source]

Bases: Lexer

tokens = {'ARTIST_COMPONENT', 'COMMA', 'CV', 'LPAREN', 'RPAREN', 'SPACE', 'SPECIAL_CASE', 'VIA'}
SPECIAL_CASE = '^(FLOWx.*)|(SawanoHiroyuki\\[nZk\\]:.*)|(\\(K\\)NoW_NAME:.*)$'
VIA = "\\s+(from|ft\\.|feat(\\.|uring)?\\.?|[Ss]tarring|and|with|meets|adding|hugs|inspi\\'|a\\.k\\.a|x|×|n\\'|vs\\.?|/|\\+|&)\\s+"
LPAREN = '(?<=\\s)\\('
RPAREN = '\\)(?=\\s|,|\\)|$)'
CV = '(CV[.:]|[Vv]ocals?:|[Mm]ain\\svocals?:|[Cc]omposed\\sby|[Ff]rom|[Ff]eat(\\.|uring)?|[Pp]erformed\\sby|Vo\\.)\\s+|='
COMMA = ',(\\sand)?\\s+'
SPACE = '\\s+'
ARTIST_COMPONENT = "(\\(K\\)NoW_NAME|AKIMA & NEOS|ANNA TSUCHIYA inspi\\' NANA\\(BLACK STONES\\)|Bird Bear Hare and Fish|Bread & Butter|Carole\\s&\\sTuesday|Daisy x Daisy|Dejo & Bon|Digz, Inc. Group|Dimitri From Paris|Eunsol\\(1008\\)|Fear,\\sand\\sLoathing\\sin\\sLas\\sVegas|HIGH and MIGHTY COLOR|Hello, Happy World!|Hifumi,inc\\.|Kamisama, Boku wa Kizuite shimatta|Kevin & Cherry|King & Queen|Kisida Kyodan & The Akebosi Rockets|Konya, Anomachikara|Louis Armstrong and His Orchestra|MYTH\\s&\\sROID|OLIVIA inspi\\' REIRA\\(TRAPNEST\\)|Oranges\\s(and|&)\\sLemons|Rough & Ready|Run Girls, Run!|Simon & Garfunkel|Tackey & Tsubasa|Takako & The Crazy Boys|Voices From Mars|Wake Up, [^\\s]+!|Yamagami Lucy \\(…\\)|devils and realist|*\\(Asterisk\\)|[^\\s=,()]+)"
_attributes = {'ARTIST_COMPONENT': "(\\(K\\)NoW_NAME|AKIMA & NEOS|ANNA TSUCHIYA inspi\\' NANA\\(BLACK STONES\\)|Bird Bear Hare and Fish|Bread & Butter|Carole\\s&\\sTuesday|Daisy x Daisy|Dejo & Bon|Digz, Inc. Group|Dimitri From Paris|Eunsol\\(1008\\)|Fear,\\sand\\sLoathing\\sin\\sLas\\sVegas|HIGH and MIGHTY COLOR|Hello, Happy World!|Hifumi,inc\\.|Kamisama, Boku wa Kizuite shimatta|Kevin & Cherry|King & Queen|Kisida Kyodan & The Akebosi Rockets|Konya, Anomachikara|Louis Armstrong and His Orchestra|MYTH\\s&\\sROID|OLIVIA inspi\\' REIRA\\(TRAPNEST\\)|Oranges\\s(and|&)\\sLemons|Rough & Ready|Run Girls, Run!|Simon & Garfunkel|Tackey & Tsubasa|Takako & The Crazy Boys|Voices From Mars|Wake Up, [^\\s]+!|Yamagami Lucy \\(…\\)|devils and realist|*\\(Asterisk\\)|[^\\s=,()]+)", 'COMMA': ',(\\sand)?\\s+', 'CV': '(CV[.:]|[Vv]ocals?:|[Mm]ain\\svocals?:|[Cc]omposed\\sby|[Ff]rom|[Ff]eat(\\.|uring)?|[Pp]erformed\\sby|Vo\\.)\\s+|=', 'LPAREN': '(?<=\\s)\\(', 'RPAREN': '\\)(?=\\s|,|\\)|$)', 'SPACE': '\\s+', 'SPECIAL_CASE': '^(FLOWx.*)|(SawanoHiroyuki\\[nZk\\]:.*)|(\\(K\\)NoW_NAME:.*)$', 'VIA': "\\s+(from|ft\\.|feat(\\.|uring)?\\.?|[Ss]tarring|and|with|meets|adding|hugs|inspi\\'|a\\.k\\.a|x|×|n\\'|vs\\.?|/|\\+|&)\\s+", '__module__': 'nkdsu.apps.vote.parsers', '__qualname__': 'ArtistLexer', 'tokens': {'ARTIST_COMPONENT', 'COMMA', 'CV', 'LPAREN', 'RPAREN', 'SPACE', 'SPECIAL_CASE', 'VIA'}}
_before = {}
_delete = ['_', 'before']
_ignored_tokens = {}
_master_re = re.compile("(?P<SPECIAL_CASE>^(FLOWx.*)|(SawanoHiroyuki\\[nZk\\]:.*)|(\\(K\\)NoW_NAME:.*)$)|(?P<VIA>\\s+(from|ft\\.|feat(\\.|uring)?\\.?|[Ss]tarring|and|with|meets|adding|hugs|inspi\\'|a\\.k\\.a|x|×|n\\'|vs\\.?|)
_remap = {}
_remapping = {}
_rules = [('SPECIAL_CASE', '^(FLOWx.*)|(SawanoHiroyuki\\[nZk\\]:.*)|(\\(K\\)NoW_NAME:.*)$'), ('VIA', "\\s+(from|ft\\.|feat(\\.|uring)?\\.?|[Ss]tarring|and|with|meets|adding|hugs|inspi\\'|a\\.k\\.a|x|×|n\\'|vs\\.?|/|\\+|&)\\s+"), ('LPAREN', '(?<=\\s)\\('), ('RPAREN', '\\)(?=\\s|,|\\)|$)'), ('CV', '(CV[.:]|[Vv]ocals?:|[Mm]ain\\svocals?:|[Cc]omposed\\sby|[Ff]rom|[Ff]eat(\\.|uring)?|[Pp]erformed\\sby|Vo\\.)\\s+|='), ('COMMA', ',(\\sand)?\\s+'), ('SPACE', '\\s+'), ('ARTIST_COMPONENT', "(\\(K\\)NoW_NAME|AKIMA & NEOS|ANNA TSUCHIYA inspi\\' NANA\\(BLACK STONES\\)|Bird Bear Hare and Fish|Bread & Butter|Carole\\s&\\sTuesday|Daisy x Daisy|Dejo & Bon|Digz, Inc. Group|Dimitri From Paris|Eunsol\\(1008\\)|Fear,\\sand\\sLoathing\\sin\\sLas\\sVegas|HIGH and MIGHTY COLOR|Hello, Happy World!|Hifumi,inc\\.|Kamisama, Boku wa Kizuite shimatta|Kevin & Cherry|King & Queen|Kisida Kyodan & The Akebosi Rockets|Konya, Anomachikara|Louis Armstrong and His Orchestra|MYTH\\s&\\sROID|OLIVIA inspi\\' REIRA\\(TRAPNEST\\)|Oranges\\s(and|&)\\sLemons|Rough & Ready|Run Girls, Run!|Simon & Garfunkel|Tackey & Tsubasa|Takako & The Crazy Boys|Voices From Mars|Wake Up, [^\\s]+!|Yamagami Lucy \\(…\\)|devils and realist|*\\(Asterisk\\)|[^\\s=,()]+)")]
_token_funcs = {}
_token_names = {'ARTIST_COMPONENT', 'COMMA', 'CV', 'LPAREN', 'RPAREN', 'SPACE', 'SPECIAL_CASE', 'VIA'}
nkdsu.apps.vote.parsers.handle_special_case(token) Iterable[ArtistChunk][source]
nkdsu.apps.vote.parsers.check_for_group(full_string: str, maybe_group_name: str) bool[source]
nkdsu.apps.vote.parsers.chunk_artist(string: str, fail_silently: bool = True) Iterable[ArtistChunk][source]

Return a bunch of ArtistChunks which, when combined, reform the string handed in.

nkdsu.apps.vote.parsers.parse_artist(string: str, fail_silently: bool = True) ParsedArtist[source]

nkdsu.apps.vote.placeholder_avatars module

nkdsu.apps.vote.placeholder_avatars.placeholder_avatar_for(voter: Voter) str[source]

nkdsu.apps.vote.signals module

nkdsu.apps.vote.signals.create_profile_on_user_creation(sender: type[Model], instance: Model, created: bool, raw: bool, using: str | None, update_fields: Sequence[str] | None, **kwargs) None[source]
nkdsu.apps.vote.signals.make_elfs(**kwargs) None[source]

nkdsu.apps.vote.trivia module

nkdsu.apps.vote.twitter_auth module

exception nkdsu.apps.vote.twitter_auth.DoNotAuthThroughTwitterPlease(msg: str)[source]

Bases: BaseException

msg: str
class nkdsu.apps.vote.twitter_auth.UserDetailsDict[source]

Bases: TypedDict

username: str
fullname: str
default_profile_image: bool
profile_image_url_https: str
class nkdsu.apps.vote.twitter_auth.NkdsuTwitterAuth(*args, **kwargs)[source]

Bases: TwitterOAuth

auth_url() str[source]
auth_allowed(response: dict, details: UserDetailsDict) bool[source]
get_user_details(response: dict) UserDetailsDict[source]

Like super().get_user_details(), but doesn’t try to split names into first and last parts.

class nkdsu.apps.vote.twitter_auth.NkdsuStrategy(storage, request=None, tpl=None)[source]

Bases: DjangoStrategy

Django social auth respects the “PIPELINE” Django setting, which we’re already using for django-pipeline, so we need to override that behaviour to ignore it.

get_pipeline(backend=None)[source]
nkdsu.apps.vote.twitter_auth.adopt_twitter_metadata(request: HttpRequest, user: User, details: UserDetailsDict, *args, **kwargs) None[source]

nkdsu.apps.vote.update_library module

nkdsu.apps.vote.update_library.check_closeness_against_list(name, canonical_names: Iterable[str], reverse: bool = False) str | None[source]
class nkdsu.apps.vote.update_library.MetadataWarning[source]

Bases: TypedDict

A warning about a potential problem with a proposed metadata update.

field: Literal['added', 'album', 'anime', 'artist', 'composer', 'msec', 'role', 'title', 'year']
message: str
class nkdsu.apps.vote.update_library.FieldAlteration[source]

Bases: TypedDict

field: str
was: str
becomes: str
class nkdsu.apps.vote.update_library.MetadataChange[source]

Bases: TypedDict

type: Literal['locked', 'change', 'new', 'hide']
item: str
changes: NotRequired[list[FieldAlteration]]
warnings: NotRequired[list[MetadataWarning]]
nkdsu.apps.vote.update_library.check_artist_consistency(track_artists: Iterable[str], all_artists: Iterable[str], field: Literal['added', 'album', 'anime', 'artist', 'composer', 'msec', 'role', 'title', 'year']) list[MetadataWarning][source]
nkdsu.apps.vote.update_library.metadata_consistency_checks(db_track: Track, all_anime_titles: Iterable[str], all_artists: Iterable[str], all_composers: Iterable[str]) list[MetadataWarning][source]

Take a proposed update to the library, and check it for various types of things that might be wrong with it.

nkdsu.apps.vote.update_library.update_library(tree, dry_run: bool = False, inudesu: bool = False) list[MetadataChange][source]

nkdsu.apps.vote.urls module

nkdsu.apps.vote.utils module

class nkdsu.apps.vote.utils.BrowsableItem(url: 'Optional[str]', name: 'str', visible: 'bool' = True)[source]

Bases: object

url: str | None
name: str
visible: bool = True
group() tuple[int, str][source]

Return a sort order and a user-facing name for the group to put this item in. By default, an initial letter.

class nkdsu.apps.vote.utils.BrowsableYear(url: 'Optional[str]', name: 'str', visible: 'bool' = True)[source]

Bases: BrowsableItem

group() tuple[int, str][source]
nkdsu.apps.vote.utils.length_str(msec: float) str[source]

Convert a number of milliseconds into a human-readable representation of the length of a track.

>>> length_str(999)
'0:00'
>>> length_str(1000)
'0:01'
>>> length_str(1000 * (60 + 15))
'1:15'
>>> length_str((60 * 60 * 1000) + (1000 * (60 + 15)))
'1:01:15'
nkdsu.apps.vote.utils.camel_to_snake(camel: str) str[source]
>>> camel_to_snake('camelCaseABCD')
'camel_case_a_b_c_d'
nkdsu.apps.vote.utils.track_with_get_param_url(tracks: Iterable[Track], url: str) str[source]

Generate a URL for a view that uses TracksFromGetParamMixin.

nkdsu.apps.vote.utils.add_to_list_url(tracks: Iterable[Track]) str[source]
nkdsu.apps.vote.utils.vote_url(tracks: Iterable[Track]) str[source]
nkdsu.apps.vote.utils.split_id3_title(id3_title: str) tuple[str, str | None][source]

Take a ‘Title (role)’-style ID3 title and return (title, role).

>>> split_id3_title('title')
('title', None)
>>> split_id3_title('title (role)')
('title', 'role')

The role will be populated if we’re able to find a set of matching brackets starting with the final character:

>>> split_id3_title('title ((role)')
('title (', 'role')
>>> split_id3_title('title ((r(o)(l)e)')
('title (', 'r(o)(l)e')

But no role will be returned if the brackets close more than they open, or if the final character is not a ):

>>> split_id3_title('title (role) ')
('title (role) ', None)
>>> split_id3_title('title (role))')
('title (role))', None)
nkdsu.apps.vote.utils.split_query_into_keywords(query: str) list[str][source]

Split the query into keywords. Where keywords are double quoted together, use as one keyword.

>>> split_query_into_keywords('hello there, how are you doing')
['hello', 'there,', 'how', 'are', 'you', 'doing']
>>> split_query_into_keywords('hello there, "how are you doing"')
['how are you doing', 'hello', 'there,']
nkdsu.apps.vote.utils.memoize(func: C) C[source]

Do nothing, for now; lru_cache() does not get wiped for new instances of self, which is a problem when we need to catch updates.

nkdsu.apps.vote.utils.cached(seconds: int, cache_key: str) Callable[[C], C][source]
nkdsu.apps.vote.utils.pk_cached(seconds: int) Callable[[C], C][source]
nkdsu.apps.vote.utils.lastfm(**kwargs)[source]
nkdsu.apps.vote.utils.assert_never(value: NoReturn) NoReturn[source]
nkdsu.apps.vote.utils.get_profile_for(user: User) Profile[source]
nkdsu.apps.vote.utils.vote_edit_cutoff() Show[source]

Return the last show for which vote comments should be editable.

nkdsu.apps.vote.utils.clear_selection_if_matches(request: HttpRequest, tracks=typing.Sequence[ForwardRef('Track')]) None[source]

nkdsu.apps.vote.validators module

nkdsu.apps.vote.validators.sluggable(value: str) None[source]

nkdsu.apps.vote.voter module

class nkdsu.apps.vote.voter.ModelVoterMeta(name, bases, namespace, /, **kwargs)[source]

Bases: _ProtocolMeta, ModelBase

class nkdsu.apps.vote.voter.Voter(*args, **kwargs)[source]

Bases: Protocol

name: str | CharField
pronouns: str | CharField = ''
pk: int
is_abuser: bool | BooleanField
is_patron: bool | BooleanField
_twitter_user_and_profile() tuple[TwitterUser | None, Profile | None][source]
property username: str
property voter_id: tuple[int | None, int | None]

A unique identifier that will be the same for TwitterUser and Profile instances that represent the same accounts.

property badges: QuerySet[UserBadge]
unordered_votes() QuerySet[Vote][source]
get_toggle_abuser_url() str[source]
votes() QuerySet[Vote][source]
votes_with_liberal_preselection() QuerySet[Vote][source]
votes_for(show: Show) QuerySet[Vote][source]
tracks_voted_for_for(show: Show) list[Track][source]
is_new() bool[source]
is_placated() bool[source]
is_shortlisted() bool[source]
has_max_websites() bool[source]
get_websites() Iterable[UserWebsite][source]
_batting_average(cutoff: datetime | None = None, minimum_weight: float = 1) float | None[source]
batting_average(minimum_weight: float = 1) float | None[source]

Return a user’s batting average for the past six months.

_streak(ls=[]) int[source]
streak() int[source]
all_time_batting_average(minimum_weight: float = 1) float | None[source]
_abc_impl = <_abc._abc_data object>
_is_protocol = True