From 48523a22693a59054c15d14e24565cd25fa1bf4c Mon Sep 17 00:00:00 2001 From: Philipp Heckel <pheckel@datto.com> Date: Thu, 24 Feb 2022 12:26:07 -0500 Subject: [PATCH] Emojis, formatting, clear all --- scripts/emoji-convert.sh | 2 +- web/public/index.html | 61 +++++++++++++---------- web/public/static/img/favicon.png | Bin 0 -> 4701 bytes web/public/static/img/ntfy.png | Bin 0 -> 3627 bytes web/public/static/img/priority-1.svg | 47 +++++++++++++++++ web/public/static/img/priority-2.svg | 43 ++++++++++++++++ web/public/static/img/priority-4.svg | 43 ++++++++++++++++ web/public/static/img/priority-5.svg | 47 +++++++++++++++++ web/src/app/Subscription.js | 23 ++++++++- web/src/app/emojis.js | 3 ++ web/src/app/utils.js | 42 ++++++++++++++++ web/src/components/App.js | 8 +++ web/src/components/DetailSettingsIcon.js | 6 +++ web/src/components/NotificationList.js | 22 +++++--- 14 files changed, 313 insertions(+), 34 deletions(-) create mode 100644 web/public/static/img/favicon.png create mode 100644 web/public/static/img/ntfy.png create mode 100644 web/public/static/img/priority-1.svg create mode 100644 web/public/static/img/priority-2.svg create mode 100644 web/public/static/img/priority-4.svg create mode 100644 web/public/static/img/priority-5.svg create mode 100644 web/src/app/emojis.js diff --git a/scripts/emoji-convert.sh b/scripts/emoji-convert.sh index c6504037..0df8ce6f 100755 --- a/scripts/emoji-convert.sh +++ b/scripts/emoji-convert.sh @@ -18,7 +18,7 @@ fi if [[ "$1" == *.js ]]; then echo -n "// This file is generated by scripts/emoji-convert.sh to reduce the size // Original data source: https://github.com/github/gemoji/blob/master/db/emoji.json -const rawEmojis = " > "$1" +export const rawEmojis = " > "$1" cat "$SCRIPTDIR/emoji.json" | jq -rc 'map({emoji: .emoji,aliases: .aliases})' >> "$1" elif [[ "$1" == *.md ]]; then echo "# Emoji reference diff --git a/web/public/index.html b/web/public/index.html index 5457d960..db52435b 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -1,29 +1,40 @@ <!DOCTYPE html> <html lang="en"> - <head> - <meta charset="utf-8" /> - <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" /> - <meta name="viewport" content="initial-scale=1, width=device-width" /> - <meta name="theme-color" content="#000000" /> - <!-- - manifest.json provides metadata used when your web app is installed on a - user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ - --> - <link rel="manifest" href="%PUBLIC_URL%/manifest.json"> - <!-- - Notice the use of %PUBLIC_URL% in the tags above. - It will be replaced with the URL of the `public` folder during the build. - Only files inside the `public` folder can be referenced from the HTML. +<head> + <meta charset="UTF-8"> - Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will - work correctly both with client-side routing and a non-root public URL. - Learn how to configure a non-root public URL by running `npm run build`. - --> - <title>My page</title> - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" /> - </head> - <body> - <noscript>You need to enable JavaScript to run this app.</noscript> - <div id="root"></div> - </body> + <title>ntfy.sh | Send push notifications to your phone via PUT/POST</title> + + <!-- Mobile view --> + <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="HandheldFriendly" content="true"> + + <!-- Mobile browsers, background color --> + <meta name="theme-color" content="#317f6f"> + <meta name="msapplication-navbutton-color" content="#317f6f"> + <meta name="apple-mobile-web-app-status-bar-style" content="#317f6f"> + + <!-- Favicon, see favicon.io --> + <link rel="icon" type="image/png" href="%PUBLIC_URL%/static/img/favicon.png"> + + <!-- Previews in Google, Slack, WhatsApp, etc. --> + <meta property="og:type" content="website" /> + <meta property="og:locale" content="en_US" /> + <meta property="og:site_name" content="ntfy.sh" /> + <meta property="og:title" content="ntfy.sh | Send push notifications to your phone or desktop via PUT/POST" /> + <meta property="og:description" content="ntfy is a simple HTTP-based pub-sub notification service. It allows you to send desktop notifications via scripts from any computer, entirely without signup or cost. Made with โค by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy." /> + <meta property="og:image" content="/static/img/ntfy.png" /> + <meta property="og:url" content="https://ntfy.sh" /> + + <!-- FIXME Never index topic page --> + <!-- <meta name="robots" content="noindex, nofollow" /> --> + + <!-- FIXME Roboto --> + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" /> +</head> +<body> + <noscript>You need to enable JavaScript to run this app.</noscript> + <div id="root"></div> +</body> </html> diff --git a/web/public/static/img/favicon.png b/web/public/static/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..92312feac6a3c9effe8323e76a6d30f2ce88d724 GIT binary patch literal 4701 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 Zdu`HC4VjGyX*2{dxMQmGUfU`5e*gp9@R9%k literal 0 HcmV?d00001 diff --git a/web/public/static/img/ntfy.png b/web/public/static/img/ntfy.png new file mode 100644 index 0000000000000000000000000000000000000000..6b969a846efc6c3dac70510793c72253e04389c9 GIT binary patch literal 3627 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 literal 0 HcmV?d00001 diff --git a/web/public/static/img/priority-1.svg b/web/public/static/img/priority-1.svg new file mode 100644 index 00000000..df6a0a49 --- /dev/null +++ b/web/public/static/img/priority-1.svg @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24px" + viewBox="0 0 24 24" + width="24px" + fill="#000000" + version="1.1" + id="svg1428" + sodipodi:docname="priority_1_24dp.svg" + inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs1432" /> + <sodipodi:namedview + id="namedview1430" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="20.517358" + inkscape:cx="22.834324" + inkscape:cy="15.742768" + inkscape:window-width="1863" + inkscape:window-height="1025" + inkscape:window-x="57" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg1428" /> + <path + style="color:#000000;fill:#999999;fill-opacity:1;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.195014,20.828316 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 l 6.646593,-4.037178 a 1.2745823,1.2745823 0 0 0 0.427537,-1.751107 1.2745823,1.2745823 0 0 0 -1.750928,-0.427718 l -5.984807,3.635327 -5.9848086,-3.635327 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427718 1.2745823,1.2745823 0 0 0 0.427536,1.751107 l 6.6464146,4.037178 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" + id="rect3554" /> + <path + style="color:#000000;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.195014,15.694014 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 l 6.646593,-4.037176 A 1.2745823,1.2745823 0 0 0 19.930749,9.7205243 1.2745823,1.2745823 0 0 0 18.179821,9.2928073 L 12.195014,12.928134 6.2102054,9.2928073 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427717 1.2745823,1.2745823 0 0 0 0.427536,1.7511077 l 6.6464146,4.037176 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" + id="path9314" /> + <path + style="color:#000000;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.116784,10.426777 a 1.2747098,1.2747098 0 0 0 0.661606,-0.185205 l 6.646593,-4.0371767 a 1.2745823,1.2745823 0 0 0 0.427537,-1.751108 1.2745823,1.2745823 0 0 0 -1.750928,-0.427718 l -5.984808,3.635327 -5.9848066,-3.635327 a 1.2745823,1.2745823 0 0 0 -1.750928,0.427718 1.2745823,1.2745823 0 0 0 0.427537,1.751108 L 11.455,10.241572 a 1.2747098,1.2747098 0 0 0 0.661784,0.185205 z" + id="path9316" /> +</svg> diff --git a/web/public/static/img/priority-2.svg b/web/public/static/img/priority-2.svg new file mode 100644 index 00000000..10a89ad1 --- /dev/null +++ b/web/public/static/img/priority-2.svg @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24px" + viewBox="0 0 24 24" + width="24px" + fill="#000000" + version="1.1" + id="svg1428" + sodipodi:docname="priority_2_24dp.svg" + inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs1432" /> + <sodipodi:namedview + id="namedview1430" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="20.517358" + inkscape:cx="22.834324" + inkscape:cy="15.742768" + inkscape:window-width="1863" + inkscape:window-height="1025" + inkscape:window-x="57" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg1428" /> + <path + style="color:#000000;fill:#999999;fill-opacity:1;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.172712,17.774352 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 l 6.646593,-4.037178 a 1.2745823,1.2745823 0 0 0 0.427537,-1.751107 1.2745823,1.2745823 0 0 0 -1.750928,-0.427718 L 12.172712,15.00847 6.1879033,11.373143 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427718 1.2745823,1.2745823 0 0 0 0.427536,1.751107 l 6.6464147,4.037178 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" + id="rect3554" /> + <path + style="color:#000000;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.172712,12.64005 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 L 19.48091,8.4176679 A 1.2745823,1.2745823 0 0 0 19.908447,6.6665602 1.2745823,1.2745823 0 0 0 18.157519,6.2388432 L 12.172712,9.8741699 6.1879033,6.2388432 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427717 1.2745823,1.2745823 0 0 0 0.427536,1.7511077 l 6.6464147,4.0371761 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" + id="path9314" /> +</svg> diff --git a/web/public/static/img/priority-4.svg b/web/public/static/img/priority-4.svg new file mode 100644 index 00000000..a1723cf8 --- /dev/null +++ b/web/public/static/img/priority-4.svg @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24px" + viewBox="0 0 24 24" + width="24px" + fill="#000000" + version="1.1" + id="svg1428" + sodipodi:docname="priority_4_24dp.svg" + inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs1432" /> + <sodipodi:namedview + id="namedview1430" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="20.517358" + inkscape:cx="22.834324" + inkscape:cy="15.742768" + inkscape:window-width="1863" + inkscape:window-height="1025" + inkscape:window-x="57" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg1428" /> + <path + style="color:#000000;fill:#c60000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="M 12.116784,6.5394415 A 1.2747098,1.2747098 0 0 0 11.455179,6.724648 l -6.6465926,4.037176 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.7509281,0.427717 l 5.9848065,-3.635327 5.984809,3.635327 A 1.2745823,1.2745823 0 0 0 19.85252,12.512932 1.2745823,1.2745823 0 0 0 19.424984,10.761824 L 12.778569,6.724648 A 1.2747098,1.2747098 0 0 0 12.116784,6.5394415 Z" + id="path9314" /> + <path + style="color:#000000;fill:#de0000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.195014,11.806679 a 1.2747098,1.2747098 0 0 0 -0.661606,0.185205 l -6.6465924,4.037177 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.750928,0.427718 l 5.9848074,-3.635327 5.984807,3.635327 a 1.2745823,1.2745823 0 0 0 1.750928,-0.427718 1.2745823,1.2745823 0 0 0 -0.427537,-1.751108 l -6.646414,-4.037177 a 1.2747098,1.2747098 0 0 0 -0.661784,-0.185205 z" + id="path9316" /> +</svg> diff --git a/web/public/static/img/priority-5.svg b/web/public/static/img/priority-5.svg new file mode 100644 index 00000000..2e2c4447 --- /dev/null +++ b/web/public/static/img/priority-5.svg @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24px" + viewBox="0 0 24 24" + width="24px" + fill="#000000" + version="1.1" + id="svg1428" + sodipodi:docname="priority_5_24dp.svg" + inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs1432" /> + <sodipodi:namedview + id="namedview1430" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="20.517358" + inkscape:cx="22.834323" + inkscape:cy="15.742767" + inkscape:window-width="1863" + inkscape:window-height="1025" + inkscape:window-x="57" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg1428" /> + <path + style="color:#000000;fill:#aa0000;fill-opacity:1;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="M 12.116784,3.40514 A 1.2747098,1.2747098 0 0 0 11.455179,3.5903463 L 4.8085864,7.6275238 A 1.2745823,1.2745823 0 0 0 4.3810494,9.3786313 1.2745823,1.2745823 0 0 0 6.1319775,9.8063489 L 12.116784,6.1710217 18.101593,9.8063489 A 1.2745823,1.2745823 0 0 0 19.85252,9.3786313 1.2745823,1.2745823 0 0 0 19.424984,7.6275238 L 12.778569,3.5903463 A 1.2747098,1.2747098 0 0 0 12.116784,3.40514 Z" + id="rect3554" /> + <path + style="color:#000000;fill:#c60000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="M 12.116784,8.5394415 A 1.2747098,1.2747098 0 0 0 11.455179,8.724648 l -6.6465926,4.037176 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.7509281,0.427717 l 5.9848065,-3.635327 5.984809,3.635327 A 1.2745823,1.2745823 0 0 0 19.85252,14.512932 1.2745823,1.2745823 0 0 0 19.424984,12.761824 L 12.778569,8.724648 A 1.2747098,1.2747098 0 0 0 12.116784,8.5394415 Z" + id="path9314" /> + <path + style="color:#000000;fill:#de0000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" + d="m 12.195014,13.806679 a 1.2747098,1.2747098 0 0 0 -0.661606,0.185205 l -6.6465924,4.037177 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.750928,0.427718 l 5.9848074,-3.635327 5.984807,3.635327 a 1.2745823,1.2745823 0 0 0 1.750928,-0.427718 1.2745823,1.2745823 0 0 0 -0.427537,-1.751108 l -6.646414,-4.037177 a 1.2747098,1.2747098 0 0 0 -0.661784,-0.185205 z" + id="path9316" /> +</svg> diff --git a/web/src/app/Subscription.js b/web/src/app/Subscription.js index 3a1268f1..8f4af1f6 100644 --- a/web/src/app/Subscription.js +++ b/web/src/app/Subscription.js @@ -1,14 +1,18 @@ -import {topicUrl, shortTopicUrl, topicUrlWs} from './utils'; +import {shortTopicUrl, topicUrl} from './utils'; export default class Subscription { constructor(baseUrl, topic) { this.id = topicUrl(baseUrl, topic); this.baseUrl = baseUrl; this.topic = topic; - this.notifications = new Map(); + this.notifications = new Map(); // notification ID -> notification object + this.deleted = new Set(); // notification IDs } addNotification(notification) { + if (this.notifications.has(notification.id) || this.deleted.has(notification.id)) { + return this; + } this.notifications.set(notification.id, notification); return this; } @@ -18,6 +22,21 @@ export default class Subscription { return this; } + deleteNotification(notificationId) { + this.notifications.delete(notificationId); + this.deleted.add(notificationId); + return this; + } + + deleteAllNotifications() { + console.log(this.notifications); + for (const [id] of this.notifications) { + console.log(`delete ${id}`); + this.deleteNotification(id); + } + return this; + } + getNotifications() { return Array.from(this.notifications.values()); } diff --git a/web/src/app/emojis.js b/web/src/app/emojis.js new file mode 100644 index 00000000..442456f5 --- /dev/null +++ b/web/src/app/emojis.js @@ -0,0 +1,3 @@ +// This file is generated by scripts/emoji-convert.sh to reduce the size +// Original data source: https://github.com/github/gemoji/blob/master/db/emoji.json +export const rawEmojis = [{"emoji":"๐","aliases":["grinning"]},{"emoji":"๐","aliases":["smiley"]},{"emoji":"๐","aliases":["smile"]},{"emoji":"๐","aliases":["grin"]},{"emoji":"๐","aliases":["laughing","satisfied"]},{"emoji":"๐ ","aliases":["sweat_smile"]},{"emoji":"๐คฃ","aliases":["rofl"]},{"emoji":"๐","aliases":["joy"]},{"emoji":"๐","aliases":["slightly_smiling_face"]},{"emoji":"๐","aliases":["upside_down_face"]},{"emoji":"๐","aliases":["wink"]},{"emoji":"๐","aliases":["blush"]},{"emoji":"๐","aliases":["innocent"]},{"emoji":"๐ฅฐ","aliases":["smiling_face_with_three_hearts"]},{"emoji":"๐","aliases":["heart_eyes"]},{"emoji":"๐คฉ","aliases":["star_struck"]},{"emoji":"๐","aliases":["kissing_heart"]},{"emoji":"๐","aliases":["kissing"]},{"emoji":"โบ๏ธ","aliases":["relaxed"]},{"emoji":"๐","aliases":["kissing_closed_eyes"]},{"emoji":"๐","aliases":["kissing_smiling_eyes"]},{"emoji":"๐ฅฒ","aliases":["smiling_face_with_tear"]},{"emoji":"๐","aliases":["yum"]},{"emoji":"๐","aliases":["stuck_out_tongue"]},{"emoji":"๐","aliases":["stuck_out_tongue_winking_eye"]},{"emoji":"๐คช","aliases":["zany_face"]},{"emoji":"๐","aliases":["stuck_out_tongue_closed_eyes"]},{"emoji":"๐ค","aliases":["money_mouth_face"]},{"emoji":"๐ค","aliases":["hugs"]},{"emoji":"๐คญ","aliases":["hand_over_mouth"]},{"emoji":"๐คซ","aliases":["shushing_face"]},{"emoji":"๐ค","aliases":["thinking"]},{"emoji":"๐ค","aliases":["zipper_mouth_face"]},{"emoji":"๐คจ","aliases":["raised_eyebrow"]},{"emoji":"๐","aliases":["neutral_face"]},{"emoji":"๐","aliases":["expressionless"]},{"emoji":"๐ถ","aliases":["no_mouth"]},{"emoji":"๐ถโ๐ซ๏ธ","aliases":["face_in_clouds"]},{"emoji":"๐","aliases":["smirk"]},{"emoji":"๐","aliases":["unamused"]},{"emoji":"๐","aliases":["roll_eyes"]},{"emoji":"๐ฌ","aliases":["grimacing"]},{"emoji":"๐ฎโ๐จ","aliases":["face_exhaling"]},{"emoji":"๐คฅ","aliases":["lying_face"]},{"emoji":"๐","aliases":["relieved"]},{"emoji":"๐","aliases":["pensive"]},{"emoji":"๐ช","aliases":["sleepy"]},{"emoji":"๐คค","aliases":["drooling_face"]},{"emoji":"๐ด","aliases":["sleeping"]},{"emoji":"๐ท","aliases":["mask"]},{"emoji":"๐ค","aliases":["face_with_thermometer"]},{"emoji":"๐ค","aliases":["face_with_head_bandage"]},{"emoji":"๐คข","aliases":["nauseated_face"]},{"emoji":"๐คฎ","aliases":["vomiting_face"]},{"emoji":"๐คง","aliases":["sneezing_face"]},{"emoji":"๐ฅต","aliases":["hot_face"]},{"emoji":"๐ฅถ","aliases":["cold_face"]},{"emoji":"๐ฅด","aliases":["woozy_face"]},{"emoji":"๐ต","aliases":["dizzy_face"]},{"emoji":"๐ตโ๐ซ","aliases":["face_with_spiral_eyes"]},{"emoji":"๐คฏ","aliases":["exploding_head"]},{"emoji":"๐ค ","aliases":["cowboy_hat_face"]},{"emoji":"๐ฅณ","aliases":["partying_face"]},{"emoji":"๐ฅธ","aliases":["disguised_face"]},{"emoji":"๐","aliases":["sunglasses"]},{"emoji":"๐ค","aliases":["nerd_face"]},{"emoji":"๐ง","aliases":["monocle_face"]},{"emoji":"๐","aliases":["confused"]},{"emoji":"๐","aliases":["worried"]},{"emoji":"๐","aliases":["slightly_frowning_face"]},{"emoji":"โน๏ธ","aliases":["frowning_face"]},{"emoji":"๐ฎ","aliases":["open_mouth"]},{"emoji":"๐ฏ","aliases":["hushed"]},{"emoji":"๐ฒ","aliases":["astonished"]},{"emoji":"๐ณ","aliases":["flushed"]},{"emoji":"๐ฅบ","aliases":["pleading_face"]},{"emoji":"๐ฆ","aliases":["frowning"]},{"emoji":"๐ง","aliases":["anguished"]},{"emoji":"๐จ","aliases":["fearful"]},{"emoji":"๐ฐ","aliases":["cold_sweat"]},{"emoji":"๐ฅ","aliases":["disappointed_relieved"]},{"emoji":"๐ข","aliases":["cry"]},{"emoji":"๐ญ","aliases":["sob"]},{"emoji":"๐ฑ","aliases":["scream"]},{"emoji":"๐","aliases":["confounded"]},{"emoji":"๐ฃ","aliases":["persevere"]},{"emoji":"๐","aliases":["disappointed"]},{"emoji":"๐","aliases":["sweat"]},{"emoji":"๐ฉ","aliases":["weary"]},{"emoji":"๐ซ","aliases":["tired_face"]},{"emoji":"๐ฅฑ","aliases":["yawning_face"]},{"emoji":"๐ค","aliases":["triumph"]},{"emoji":"๐ก","aliases":["rage","pout"]},{"emoji":"๐ ","aliases":["angry"]},{"emoji":"๐คฌ","aliases":["cursing_face"]},{"emoji":"๐","aliases":["smiling_imp"]},{"emoji":"๐ฟ","aliases":["imp"]},{"emoji":"๐","aliases":["skull"]},{"emoji":"โ ๏ธ","aliases":["skull_and_crossbones"]},{"emoji":"๐ฉ","aliases":["hankey","poop","shit"]},{"emoji":"๐คก","aliases":["clown_face"]},{"emoji":"๐น","aliases":["japanese_ogre"]},{"emoji":"๐บ","aliases":["japanese_goblin"]},{"emoji":"๐ป","aliases":["ghost"]},{"emoji":"๐ฝ","aliases":["alien"]},{"emoji":"๐พ","aliases":["space_invader"]},{"emoji":"๐ค","aliases":["robot"]},{"emoji":"๐บ","aliases":["smiley_cat"]},{"emoji":"๐ธ","aliases":["smile_cat"]},{"emoji":"๐น","aliases":["joy_cat"]},{"emoji":"๐ป","aliases":["heart_eyes_cat"]},{"emoji":"๐ผ","aliases":["smirk_cat"]},{"emoji":"๐ฝ","aliases":["kissing_cat"]},{"emoji":"๐","aliases":["scream_cat"]},{"emoji":"๐ฟ","aliases":["crying_cat_face"]},{"emoji":"๐พ","aliases":["pouting_cat"]},{"emoji":"๐","aliases":["see_no_evil"]},{"emoji":"๐","aliases":["hear_no_evil"]},{"emoji":"๐","aliases":["speak_no_evil"]},{"emoji":"๐","aliases":["kiss"]},{"emoji":"๐","aliases":["love_letter"]},{"emoji":"๐","aliases":["cupid"]},{"emoji":"๐","aliases":["gift_heart"]},{"emoji":"๐","aliases":["sparkling_heart"]},{"emoji":"๐","aliases":["heartpulse"]},{"emoji":"๐","aliases":["heartbeat"]},{"emoji":"๐","aliases":["revolving_hearts"]},{"emoji":"๐","aliases":["two_hearts"]},{"emoji":"๐","aliases":["heart_decoration"]},{"emoji":"โฃ๏ธ","aliases":["heavy_heart_exclamation"]},{"emoji":"๐","aliases":["broken_heart"]},{"emoji":"โค๏ธโ๐ฅ","aliases":["heart_on_fire"]},{"emoji":"โค๏ธโ๐ฉน","aliases":["mending_heart"]},{"emoji":"โค๏ธ","aliases":["heart"]},{"emoji":"๐งก","aliases":["orange_heart"]},{"emoji":"๐","aliases":["yellow_heart"]},{"emoji":"๐","aliases":["green_heart"]},{"emoji":"๐","aliases":["blue_heart"]},{"emoji":"๐","aliases":["purple_heart"]},{"emoji":"๐ค","aliases":["brown_heart"]},{"emoji":"๐ค","aliases":["black_heart"]},{"emoji":"๐ค","aliases":["white_heart"]},{"emoji":"๐ฏ","aliases":["100"]},{"emoji":"๐ข","aliases":["anger"]},{"emoji":"๐ฅ","aliases":["boom","collision"]},{"emoji":"๐ซ","aliases":["dizzy"]},{"emoji":"๐ฆ","aliases":["sweat_drops"]},{"emoji":"๐จ","aliases":["dash"]},{"emoji":"๐ณ๏ธ","aliases":["hole"]},{"emoji":"๐ฃ","aliases":["bomb"]},{"emoji":"๐ฌ","aliases":["speech_balloon"]},{"emoji":"๐๏ธโ๐จ๏ธ","aliases":["eye_speech_bubble"]},{"emoji":"๐จ๏ธ","aliases":["left_speech_bubble"]},{"emoji":"๐ฏ๏ธ","aliases":["right_anger_bubble"]},{"emoji":"๐ญ","aliases":["thought_balloon"]},{"emoji":"๐ค","aliases":["zzz"]},{"emoji":"๐","aliases":["wave"]},{"emoji":"๐ค","aliases":["raised_back_of_hand"]},{"emoji":"๐๏ธ","aliases":["raised_hand_with_fingers_splayed"]},{"emoji":"โ","aliases":["hand","raised_hand"]},{"emoji":"๐","aliases":["vulcan_salute"]},{"emoji":"๐","aliases":["ok_hand"]},{"emoji":"๐ค","aliases":["pinched_fingers"]},{"emoji":"๐ค","aliases":["pinching_hand"]},{"emoji":"โ๏ธ","aliases":["v"]},{"emoji":"๐ค","aliases":["crossed_fingers"]},{"emoji":"๐ค","aliases":["love_you_gesture"]},{"emoji":"๐ค","aliases":["metal"]},{"emoji":"๐ค","aliases":["call_me_hand"]},{"emoji":"๐","aliases":["point_left"]},{"emoji":"๐","aliases":["point_right"]},{"emoji":"๐","aliases":["point_up_2"]},{"emoji":"๐","aliases":["middle_finger","fu"]},{"emoji":"๐","aliases":["point_down"]},{"emoji":"โ๏ธ","aliases":["point_up"]},{"emoji":"๐","aliases":["+1","thumbsup"]},{"emoji":"๐","aliases":["-1","thumbsdown"]},{"emoji":"โ","aliases":["fist_raised","fist"]},{"emoji":"๐","aliases":["fist_oncoming","facepunch","punch"]},{"emoji":"๐ค","aliases":["fist_left"]},{"emoji":"๐ค","aliases":["fist_right"]},{"emoji":"๐","aliases":["clap"]},{"emoji":"๐","aliases":["raised_hands"]},{"emoji":"๐","aliases":["open_hands"]},{"emoji":"๐คฒ","aliases":["palms_up_together"]},{"emoji":"๐ค","aliases":["handshake"]},{"emoji":"๐","aliases":["pray"]},{"emoji":"โ๏ธ","aliases":["writing_hand"]},{"emoji":"๐ ","aliases":["nail_care"]},{"emoji":"๐คณ","aliases":["selfie"]},{"emoji":"๐ช","aliases":["muscle"]},{"emoji":"๐ฆพ","aliases":["mechanical_arm"]},{"emoji":"๐ฆฟ","aliases":["mechanical_leg"]},{"emoji":"๐ฆต","aliases":["leg"]},{"emoji":"๐ฆถ","aliases":["foot"]},{"emoji":"๐","aliases":["ear"]},{"emoji":"๐ฆป","aliases":["ear_with_hearing_aid"]},{"emoji":"๐","aliases":["nose"]},{"emoji":"๐ง ","aliases":["brain"]},{"emoji":"๐ซ","aliases":["anatomical_heart"]},{"emoji":"๐ซ","aliases":["lungs"]},{"emoji":"๐ฆท","aliases":["tooth"]},{"emoji":"๐ฆด","aliases":["bone"]},{"emoji":"๐","aliases":["eyes"]},{"emoji":"๐๏ธ","aliases":["eye"]},{"emoji":"๐ ","aliases":["tongue"]},{"emoji":"๐","aliases":["lips"]},{"emoji":"๐ถ","aliases":["baby"]},{"emoji":"๐ง","aliases":["child"]},{"emoji":"๐ฆ","aliases":["boy"]},{"emoji":"๐ง","aliases":["girl"]},{"emoji":"๐ง","aliases":["adult"]},{"emoji":"๐ฑ","aliases":["blond_haired_person"]},{"emoji":"๐จ","aliases":["man"]},{"emoji":"๐ง","aliases":["bearded_person"]},{"emoji":"๐งโโ๏ธ","aliases":["man_beard"]},{"emoji":"๐งโโ๏ธ","aliases":["woman_beard"]},{"emoji":"๐จโ๐ฆฐ","aliases":["red_haired_man"]},{"emoji":"๐จโ๐ฆฑ","aliases":["curly_haired_man"]},{"emoji":"๐จโ๐ฆณ","aliases":["white_haired_man"]},{"emoji":"๐จโ๐ฆฒ","aliases":["bald_man"]},{"emoji":"๐ฉ","aliases":["woman"]},{"emoji":"๐ฉโ๐ฆฐ","aliases":["red_haired_woman"]},{"emoji":"๐งโ๐ฆฐ","aliases":["person_red_hair"]},{"emoji":"๐ฉโ๐ฆฑ","aliases":["curly_haired_woman"]},{"emoji":"๐งโ๐ฆฑ","aliases":["person_curly_hair"]},{"emoji":"๐ฉโ๐ฆณ","aliases":["white_haired_woman"]},{"emoji":"๐งโ๐ฆณ","aliases":["person_white_hair"]},{"emoji":"๐ฉโ๐ฆฒ","aliases":["bald_woman"]},{"emoji":"๐งโ๐ฆฒ","aliases":["person_bald"]},{"emoji":"๐ฑโโ๏ธ","aliases":["blond_haired_woman","blonde_woman"]},{"emoji":"๐ฑโโ๏ธ","aliases":["blond_haired_man"]},{"emoji":"๐ง","aliases":["older_adult"]},{"emoji":"๐ด","aliases":["older_man"]},{"emoji":"๐ต","aliases":["older_woman"]},{"emoji":"๐","aliases":["frowning_person"]},{"emoji":"๐โโ๏ธ","aliases":["frowning_man"]},{"emoji":"๐โโ๏ธ","aliases":["frowning_woman"]},{"emoji":"๐","aliases":["pouting_face"]},{"emoji":"๐โโ๏ธ","aliases":["pouting_man"]},{"emoji":"๐โโ๏ธ","aliases":["pouting_woman"]},{"emoji":"๐ ","aliases":["no_good"]},{"emoji":"๐ โโ๏ธ","aliases":["no_good_man","ng_man"]},{"emoji":"๐ โโ๏ธ","aliases":["no_good_woman","ng_woman"]},{"emoji":"๐","aliases":["ok_person"]},{"emoji":"๐โโ๏ธ","aliases":["ok_man"]},{"emoji":"๐โโ๏ธ","aliases":["ok_woman"]},{"emoji":"๐","aliases":["tipping_hand_person","information_desk_person"]},{"emoji":"๐โโ๏ธ","aliases":["tipping_hand_man","sassy_man"]},{"emoji":"๐โโ๏ธ","aliases":["tipping_hand_woman","sassy_woman"]},{"emoji":"๐","aliases":["raising_hand"]},{"emoji":"๐โโ๏ธ","aliases":["raising_hand_man"]},{"emoji":"๐โโ๏ธ","aliases":["raising_hand_woman"]},{"emoji":"๐ง","aliases":["deaf_person"]},{"emoji":"๐งโโ๏ธ","aliases":["deaf_man"]},{"emoji":"๐งโโ๏ธ","aliases":["deaf_woman"]},{"emoji":"๐","aliases":["bow"]},{"emoji":"๐โโ๏ธ","aliases":["bowing_man"]},{"emoji":"๐โโ๏ธ","aliases":["bowing_woman"]},{"emoji":"๐คฆ","aliases":["facepalm"]},{"emoji":"๐คฆโโ๏ธ","aliases":["man_facepalming"]},{"emoji":"๐คฆโโ๏ธ","aliases":["woman_facepalming"]},{"emoji":"๐คท","aliases":["shrug"]},{"emoji":"๐คทโโ๏ธ","aliases":["man_shrugging"]},{"emoji":"๐คทโโ๏ธ","aliases":["woman_shrugging"]},{"emoji":"๐งโโ๏ธ","aliases":["health_worker"]},{"emoji":"๐จโโ๏ธ","aliases":["man_health_worker"]},{"emoji":"๐ฉโโ๏ธ","aliases":["woman_health_worker"]},{"emoji":"๐งโ๐","aliases":["student"]},{"emoji":"๐จโ๐","aliases":["man_student"]},{"emoji":"๐ฉโ๐","aliases":["woman_student"]},{"emoji":"๐งโ๐ซ","aliases":["teacher"]},{"emoji":"๐จโ๐ซ","aliases":["man_teacher"]},{"emoji":"๐ฉโ๐ซ","aliases":["woman_teacher"]},{"emoji":"๐งโโ๏ธ","aliases":["judge"]},{"emoji":"๐จโโ๏ธ","aliases":["man_judge"]},{"emoji":"๐ฉโโ๏ธ","aliases":["woman_judge"]},{"emoji":"๐งโ๐พ","aliases":["farmer"]},{"emoji":"๐จโ๐พ","aliases":["man_farmer"]},{"emoji":"๐ฉโ๐พ","aliases":["woman_farmer"]},{"emoji":"๐งโ๐ณ","aliases":["cook"]},{"emoji":"๐จโ๐ณ","aliases":["man_cook"]},{"emoji":"๐ฉโ๐ณ","aliases":["woman_cook"]},{"emoji":"๐งโ๐ง","aliases":["mechanic"]},{"emoji":"๐จโ๐ง","aliases":["man_mechanic"]},{"emoji":"๐ฉโ๐ง","aliases":["woman_mechanic"]},{"emoji":"๐งโ๐ญ","aliases":["factory_worker"]},{"emoji":"๐จโ๐ญ","aliases":["man_factory_worker"]},{"emoji":"๐ฉโ๐ญ","aliases":["woman_factory_worker"]},{"emoji":"๐งโ๐ผ","aliases":["office_worker"]},{"emoji":"๐จโ๐ผ","aliases":["man_office_worker"]},{"emoji":"๐ฉโ๐ผ","aliases":["woman_office_worker"]},{"emoji":"๐งโ๐ฌ","aliases":["scientist"]},{"emoji":"๐จโ๐ฌ","aliases":["man_scientist"]},{"emoji":"๐ฉโ๐ฌ","aliases":["woman_scientist"]},{"emoji":"๐งโ๐ป","aliases":["technologist"]},{"emoji":"๐จโ๐ป","aliases":["man_technologist"]},{"emoji":"๐ฉโ๐ป","aliases":["woman_technologist"]},{"emoji":"๐งโ๐ค","aliases":["singer"]},{"emoji":"๐จโ๐ค","aliases":["man_singer"]},{"emoji":"๐ฉโ๐ค","aliases":["woman_singer"]},{"emoji":"๐งโ๐จ","aliases":["artist"]},{"emoji":"๐จโ๐จ","aliases":["man_artist"]},{"emoji":"๐ฉโ๐จ","aliases":["woman_artist"]},{"emoji":"๐งโโ๏ธ","aliases":["pilot"]},{"emoji":"๐จโโ๏ธ","aliases":["man_pilot"]},{"emoji":"๐ฉโโ๏ธ","aliases":["woman_pilot"]},{"emoji":"๐งโ๐","aliases":["astronaut"]},{"emoji":"๐จโ๐","aliases":["man_astronaut"]},{"emoji":"๐ฉโ๐","aliases":["woman_astronaut"]},{"emoji":"๐งโ๐","aliases":["firefighter"]},{"emoji":"๐จโ๐","aliases":["man_firefighter"]},{"emoji":"๐ฉโ๐","aliases":["woman_firefighter"]},{"emoji":"๐ฎ","aliases":["police_officer","cop"]},{"emoji":"๐ฎโโ๏ธ","aliases":["policeman"]},{"emoji":"๐ฎโโ๏ธ","aliases":["policewoman"]},{"emoji":"๐ต๏ธ","aliases":["detective"]},{"emoji":"๐ต๏ธโโ๏ธ","aliases":["male_detective"]},{"emoji":"๐ต๏ธโโ๏ธ","aliases":["female_detective"]},{"emoji":"๐","aliases":["guard"]},{"emoji":"๐โโ๏ธ","aliases":["guardsman"]},{"emoji":"๐โโ๏ธ","aliases":["guardswoman"]},{"emoji":"๐ฅท","aliases":["ninja"]},{"emoji":"๐ท","aliases":["construction_worker"]},{"emoji":"๐ทโโ๏ธ","aliases":["construction_worker_man"]},{"emoji":"๐ทโโ๏ธ","aliases":["construction_worker_woman"]},{"emoji":"๐คด","aliases":["prince"]},{"emoji":"๐ธ","aliases":["princess"]},{"emoji":"๐ณ","aliases":["person_with_turban"]},{"emoji":"๐ณโโ๏ธ","aliases":["man_with_turban"]},{"emoji":"๐ณโโ๏ธ","aliases":["woman_with_turban"]},{"emoji":"๐ฒ","aliases":["man_with_gua_pi_mao"]},{"emoji":"๐ง","aliases":["woman_with_headscarf"]},{"emoji":"๐คต","aliases":["person_in_tuxedo"]},{"emoji":"๐คตโโ๏ธ","aliases":["man_in_tuxedo"]},{"emoji":"๐คตโโ๏ธ","aliases":["woman_in_tuxedo"]},{"emoji":"๐ฐ","aliases":["person_with_veil"]},{"emoji":"๐ฐโโ๏ธ","aliases":["man_with_veil"]},{"emoji":"๐ฐโโ๏ธ","aliases":["woman_with_veil","bride_with_veil"]},{"emoji":"๐คฐ","aliases":["pregnant_woman"]},{"emoji":"๐คฑ","aliases":["breast_feeding"]},{"emoji":"๐ฉโ๐ผ","aliases":["woman_feeding_baby"]},{"emoji":"๐จโ๐ผ","aliases":["man_feeding_baby"]},{"emoji":"๐งโ๐ผ","aliases":["person_feeding_baby"]},{"emoji":"๐ผ","aliases":["angel"]},{"emoji":"๐ ","aliases":["santa"]},{"emoji":"๐คถ","aliases":["mrs_claus"]},{"emoji":"๐งโ๐","aliases":["mx_claus"]},{"emoji":"๐ฆธ","aliases":["superhero"]},{"emoji":"๐ฆธโโ๏ธ","aliases":["superhero_man"]},{"emoji":"๐ฆธโโ๏ธ","aliases":["superhero_woman"]},{"emoji":"๐ฆน","aliases":["supervillain"]},{"emoji":"๐ฆนโโ๏ธ","aliases":["supervillain_man"]},{"emoji":"๐ฆนโโ๏ธ","aliases":["supervillain_woman"]},{"emoji":"๐ง","aliases":["mage"]},{"emoji":"๐งโโ๏ธ","aliases":["mage_man"]},{"emoji":"๐งโโ๏ธ","aliases":["mage_woman"]},{"emoji":"๐ง","aliases":["fairy"]},{"emoji":"๐งโโ๏ธ","aliases":["fairy_man"]},{"emoji":"๐งโโ๏ธ","aliases":["fairy_woman"]},{"emoji":"๐ง","aliases":["vampire"]},{"emoji":"๐งโโ๏ธ","aliases":["vampire_man"]},{"emoji":"๐งโโ๏ธ","aliases":["vampire_woman"]},{"emoji":"๐ง","aliases":["merperson"]},{"emoji":"๐งโโ๏ธ","aliases":["merman"]},{"emoji":"๐งโโ๏ธ","aliases":["mermaid"]},{"emoji":"๐ง","aliases":["elf"]},{"emoji":"๐งโโ๏ธ","aliases":["elf_man"]},{"emoji":"๐งโโ๏ธ","aliases":["elf_woman"]},{"emoji":"๐ง","aliases":["genie"]},{"emoji":"๐งโโ๏ธ","aliases":["genie_man"]},{"emoji":"๐งโโ๏ธ","aliases":["genie_woman"]},{"emoji":"๐ง","aliases":["zombie"]},{"emoji":"๐งโโ๏ธ","aliases":["zombie_man"]},{"emoji":"๐งโโ๏ธ","aliases":["zombie_woman"]},{"emoji":"๐","aliases":["massage"]},{"emoji":"๐โโ๏ธ","aliases":["massage_man"]},{"emoji":"๐โโ๏ธ","aliases":["massage_woman"]},{"emoji":"๐","aliases":["haircut"]},{"emoji":"๐โโ๏ธ","aliases":["haircut_man"]},{"emoji":"๐โโ๏ธ","aliases":["haircut_woman"]},{"emoji":"๐ถ","aliases":["walking"]},{"emoji":"๐ถโโ๏ธ","aliases":["walking_man"]},{"emoji":"๐ถโโ๏ธ","aliases":["walking_woman"]},{"emoji":"๐ง","aliases":["standing_person"]},{"emoji":"๐งโโ๏ธ","aliases":["standing_man"]},{"emoji":"๐งโโ๏ธ","aliases":["standing_woman"]},{"emoji":"๐ง","aliases":["kneeling_person"]},{"emoji":"๐งโโ๏ธ","aliases":["kneeling_man"]},{"emoji":"๐งโโ๏ธ","aliases":["kneeling_woman"]},{"emoji":"๐งโ๐ฆฏ","aliases":["person_with_probing_cane"]},{"emoji":"๐จโ๐ฆฏ","aliases":["man_with_probing_cane"]},{"emoji":"๐ฉโ๐ฆฏ","aliases":["woman_with_probing_cane"]},{"emoji":"๐งโ๐ฆผ","aliases":["person_in_motorized_wheelchair"]},{"emoji":"๐จโ๐ฆผ","aliases":["man_in_motorized_wheelchair"]},{"emoji":"๐ฉโ๐ฆผ","aliases":["woman_in_motorized_wheelchair"]},{"emoji":"๐งโ๐ฆฝ","aliases":["person_in_manual_wheelchair"]},{"emoji":"๐จโ๐ฆฝ","aliases":["man_in_manual_wheelchair"]},{"emoji":"๐ฉโ๐ฆฝ","aliases":["woman_in_manual_wheelchair"]},{"emoji":"๐","aliases":["runner","running"]},{"emoji":"๐โโ๏ธ","aliases":["running_man"]},{"emoji":"๐โโ๏ธ","aliases":["running_woman"]},{"emoji":"๐","aliases":["woman_dancing","dancer"]},{"emoji":"๐บ","aliases":["man_dancing"]},{"emoji":"๐ด๏ธ","aliases":["business_suit_levitating"]},{"emoji":"๐ฏ","aliases":["dancers"]},{"emoji":"๐ฏโโ๏ธ","aliases":["dancing_men"]},{"emoji":"๐ฏโโ๏ธ","aliases":["dancing_women"]},{"emoji":"๐ง","aliases":["sauna_person"]},{"emoji":"๐งโโ๏ธ","aliases":["sauna_man"]},{"emoji":"๐งโโ๏ธ","aliases":["sauna_woman"]},{"emoji":"๐ง","aliases":["climbing"]},{"emoji":"๐งโโ๏ธ","aliases":["climbing_man"]},{"emoji":"๐งโโ๏ธ","aliases":["climbing_woman"]},{"emoji":"๐คบ","aliases":["person_fencing"]},{"emoji":"๐","aliases":["horse_racing"]},{"emoji":"โท๏ธ","aliases":["skier"]},{"emoji":"๐","aliases":["snowboarder"]},{"emoji":"๐๏ธ","aliases":["golfing"]},{"emoji":"๐๏ธโโ๏ธ","aliases":["golfing_man"]},{"emoji":"๐๏ธโโ๏ธ","aliases":["golfing_woman"]},{"emoji":"๐","aliases":["surfer"]},{"emoji":"๐โโ๏ธ","aliases":["surfing_man"]},{"emoji":"๐โโ๏ธ","aliases":["surfing_woman"]},{"emoji":"๐ฃ","aliases":["rowboat"]},{"emoji":"๐ฃโโ๏ธ","aliases":["rowing_man"]},{"emoji":"๐ฃโโ๏ธ","aliases":["rowing_woman"]},{"emoji":"๐","aliases":["swimmer"]},{"emoji":"๐โโ๏ธ","aliases":["swimming_man"]},{"emoji":"๐โโ๏ธ","aliases":["swimming_woman"]},{"emoji":"โน๏ธ","aliases":["bouncing_ball_person"]},{"emoji":"โน๏ธโโ๏ธ","aliases":["bouncing_ball_man","basketball_man"]},{"emoji":"โน๏ธโโ๏ธ","aliases":["bouncing_ball_woman","basketball_woman"]},{"emoji":"๐๏ธ","aliases":["weight_lifting"]},{"emoji":"๐๏ธโโ๏ธ","aliases":["weight_lifting_man"]},{"emoji":"๐๏ธโโ๏ธ","aliases":["weight_lifting_woman"]},{"emoji":"๐ด","aliases":["bicyclist"]},{"emoji":"๐ดโโ๏ธ","aliases":["biking_man"]},{"emoji":"๐ดโโ๏ธ","aliases":["biking_woman"]},{"emoji":"๐ต","aliases":["mountain_bicyclist"]},{"emoji":"๐ตโโ๏ธ","aliases":["mountain_biking_man"]},{"emoji":"๐ตโโ๏ธ","aliases":["mountain_biking_woman"]},{"emoji":"๐คธ","aliases":["cartwheeling"]},{"emoji":"๐คธโโ๏ธ","aliases":["man_cartwheeling"]},{"emoji":"๐คธโโ๏ธ","aliases":["woman_cartwheeling"]},{"emoji":"๐คผ","aliases":["wrestling"]},{"emoji":"๐คผโโ๏ธ","aliases":["men_wrestling"]},{"emoji":"๐คผโโ๏ธ","aliases":["women_wrestling"]},{"emoji":"๐คฝ","aliases":["water_polo"]},{"emoji":"๐คฝโโ๏ธ","aliases":["man_playing_water_polo"]},{"emoji":"๐คฝโโ๏ธ","aliases":["woman_playing_water_polo"]},{"emoji":"๐คพ","aliases":["handball_person"]},{"emoji":"๐คพโโ๏ธ","aliases":["man_playing_handball"]},{"emoji":"๐คพโโ๏ธ","aliases":["woman_playing_handball"]},{"emoji":"๐คน","aliases":["juggling_person"]},{"emoji":"๐คนโโ๏ธ","aliases":["man_juggling"]},{"emoji":"๐คนโโ๏ธ","aliases":["woman_juggling"]},{"emoji":"๐ง","aliases":["lotus_position"]},{"emoji":"๐งโโ๏ธ","aliases":["lotus_position_man"]},{"emoji":"๐งโโ๏ธ","aliases":["lotus_position_woman"]},{"emoji":"๐","aliases":["bath"]},{"emoji":"๐","aliases":["sleeping_bed"]},{"emoji":"๐งโ๐คโ๐ง","aliases":["people_holding_hands"]},{"emoji":"๐ญ","aliases":["two_women_holding_hands"]},{"emoji":"๐ซ","aliases":["couple"]},{"emoji":"๐ฌ","aliases":["two_men_holding_hands"]},{"emoji":"๐","aliases":["couplekiss"]},{"emoji":"๐ฉโโค๏ธโ๐โ๐จ","aliases":["couplekiss_man_woman"]},{"emoji":"๐จโโค๏ธโ๐โ๐จ","aliases":["couplekiss_man_man"]},{"emoji":"๐ฉโโค๏ธโ๐โ๐ฉ","aliases":["couplekiss_woman_woman"]},{"emoji":"๐","aliases":["couple_with_heart"]},{"emoji":"๐ฉโโค๏ธโ๐จ","aliases":["couple_with_heart_woman_man"]},{"emoji":"๐จโโค๏ธโ๐จ","aliases":["couple_with_heart_man_man"]},{"emoji":"๐ฉโโค๏ธโ๐ฉ","aliases":["couple_with_heart_woman_woman"]},{"emoji":"๐ช","aliases":["family"]},{"emoji":"๐จโ๐ฉโ๐ฆ","aliases":["family_man_woman_boy"]},{"emoji":"๐จโ๐ฉโ๐ง","aliases":["family_man_woman_girl"]},{"emoji":"๐จโ๐ฉโ๐งโ๐ฆ","aliases":["family_man_woman_girl_boy"]},{"emoji":"๐จโ๐ฉโ๐ฆโ๐ฆ","aliases":["family_man_woman_boy_boy"]},{"emoji":"๐จโ๐ฉโ๐งโ๐ง","aliases":["family_man_woman_girl_girl"]},{"emoji":"๐จโ๐จโ๐ฆ","aliases":["family_man_man_boy"]},{"emoji":"๐จโ๐จโ๐ง","aliases":["family_man_man_girl"]},{"emoji":"๐จโ๐จโ๐งโ๐ฆ","aliases":["family_man_man_girl_boy"]},{"emoji":"๐จโ๐จโ๐ฆโ๐ฆ","aliases":["family_man_man_boy_boy"]},{"emoji":"๐จโ๐จโ๐งโ๐ง","aliases":["family_man_man_girl_girl"]},{"emoji":"๐ฉโ๐ฉโ๐ฆ","aliases":["family_woman_woman_boy"]},{"emoji":"๐ฉโ๐ฉโ๐ง","aliases":["family_woman_woman_girl"]},{"emoji":"๐ฉโ๐ฉโ๐งโ๐ฆ","aliases":["family_woman_woman_girl_boy"]},{"emoji":"๐ฉโ๐ฉโ๐ฆโ๐ฆ","aliases":["family_woman_woman_boy_boy"]},{"emoji":"๐ฉโ๐ฉโ๐งโ๐ง","aliases":["family_woman_woman_girl_girl"]},{"emoji":"๐จโ๐ฆ","aliases":["family_man_boy"]},{"emoji":"๐จโ๐ฆโ๐ฆ","aliases":["family_man_boy_boy"]},{"emoji":"๐จโ๐ง","aliases":["family_man_girl"]},{"emoji":"๐จโ๐งโ๐ฆ","aliases":["family_man_girl_boy"]},{"emoji":"๐จโ๐งโ๐ง","aliases":["family_man_girl_girl"]},{"emoji":"๐ฉโ๐ฆ","aliases":["family_woman_boy"]},{"emoji":"๐ฉโ๐ฆโ๐ฆ","aliases":["family_woman_boy_boy"]},{"emoji":"๐ฉโ๐ง","aliases":["family_woman_girl"]},{"emoji":"๐ฉโ๐งโ๐ฆ","aliases":["family_woman_girl_boy"]},{"emoji":"๐ฉโ๐งโ๐ง","aliases":["family_woman_girl_girl"]},{"emoji":"๐ฃ๏ธ","aliases":["speaking_head"]},{"emoji":"๐ค","aliases":["bust_in_silhouette"]},{"emoji":"๐ฅ","aliases":["busts_in_silhouette"]},{"emoji":"๐ซ","aliases":["people_hugging"]},{"emoji":"๐ฃ","aliases":["footprints"]},{"emoji":"๐ต","aliases":["monkey_face"]},{"emoji":"๐","aliases":["monkey"]},{"emoji":"๐ฆ","aliases":["gorilla"]},{"emoji":"๐ฆง","aliases":["orangutan"]},{"emoji":"๐ถ","aliases":["dog"]},{"emoji":"๐","aliases":["dog2"]},{"emoji":"๐ฆฎ","aliases":["guide_dog"]},{"emoji":"๐โ๐ฆบ","aliases":["service_dog"]},{"emoji":"๐ฉ","aliases":["poodle"]},{"emoji":"๐บ","aliases":["wolf"]},{"emoji":"๐ฆ","aliases":["fox_face"]},{"emoji":"๐ฆ","aliases":["raccoon"]},{"emoji":"๐ฑ","aliases":["cat"]},{"emoji":"๐","aliases":["cat2"]},{"emoji":"๐โโฌ","aliases":["black_cat"]},{"emoji":"๐ฆ","aliases":["lion"]},{"emoji":"๐ฏ","aliases":["tiger"]},{"emoji":"๐ ","aliases":["tiger2"]},{"emoji":"๐","aliases":["leopard"]},{"emoji":"๐ด","aliases":["horse"]},{"emoji":"๐","aliases":["racehorse"]},{"emoji":"๐ฆ","aliases":["unicorn"]},{"emoji":"๐ฆ","aliases":["zebra"]},{"emoji":"๐ฆ","aliases":["deer"]},{"emoji":"๐ฆฌ","aliases":["bison"]},{"emoji":"๐ฎ","aliases":["cow"]},{"emoji":"๐","aliases":["ox"]},{"emoji":"๐","aliases":["water_buffalo"]},{"emoji":"๐","aliases":["cow2"]},{"emoji":"๐ท","aliases":["pig"]},{"emoji":"๐","aliases":["pig2"]},{"emoji":"๐","aliases":["boar"]},{"emoji":"๐ฝ","aliases":["pig_nose"]},{"emoji":"๐","aliases":["ram"]},{"emoji":"๐","aliases":["sheep"]},{"emoji":"๐","aliases":["goat"]},{"emoji":"๐ช","aliases":["dromedary_camel"]},{"emoji":"๐ซ","aliases":["camel"]},{"emoji":"๐ฆ","aliases":["llama"]},{"emoji":"๐ฆ","aliases":["giraffe"]},{"emoji":"๐","aliases":["elephant"]},{"emoji":"๐ฆฃ","aliases":["mammoth"]},{"emoji":"๐ฆ","aliases":["rhinoceros"]},{"emoji":"๐ฆ","aliases":["hippopotamus"]},{"emoji":"๐ญ","aliases":["mouse"]},{"emoji":"๐","aliases":["mouse2"]},{"emoji":"๐","aliases":["rat"]},{"emoji":"๐น","aliases":["hamster"]},{"emoji":"๐ฐ","aliases":["rabbit"]},{"emoji":"๐","aliases":["rabbit2"]},{"emoji":"๐ฟ๏ธ","aliases":["chipmunk"]},{"emoji":"๐ฆซ","aliases":["beaver"]},{"emoji":"๐ฆ","aliases":["hedgehog"]},{"emoji":"๐ฆ","aliases":["bat"]},{"emoji":"๐ป","aliases":["bear"]},{"emoji":"๐ปโโ๏ธ","aliases":["polar_bear"]},{"emoji":"๐จ","aliases":["koala"]},{"emoji":"๐ผ","aliases":["panda_face"]},{"emoji":"๐ฆฅ","aliases":["sloth"]},{"emoji":"๐ฆฆ","aliases":["otter"]},{"emoji":"๐ฆจ","aliases":["skunk"]},{"emoji":"๐ฆ","aliases":["kangaroo"]},{"emoji":"๐ฆก","aliases":["badger"]},{"emoji":"๐พ","aliases":["feet","paw_prints"]},{"emoji":"๐ฆ","aliases":["turkey"]},{"emoji":"๐","aliases":["chicken"]},{"emoji":"๐","aliases":["rooster"]},{"emoji":"๐ฃ","aliases":["hatching_chick"]},{"emoji":"๐ค","aliases":["baby_chick"]},{"emoji":"๐ฅ","aliases":["hatched_chick"]},{"emoji":"๐ฆ","aliases":["bird"]},{"emoji":"๐ง","aliases":["penguin"]},{"emoji":"๐๏ธ","aliases":["dove"]},{"emoji":"๐ฆ ","aliases":["eagle"]},{"emoji":"๐ฆ","aliases":["duck"]},{"emoji":"๐ฆข","aliases":["swan"]},{"emoji":"๐ฆ","aliases":["owl"]},{"emoji":"๐ฆค","aliases":["dodo"]},{"emoji":"๐ชถ","aliases":["feather"]},{"emoji":"๐ฆฉ","aliases":["flamingo"]},{"emoji":"๐ฆ","aliases":["peacock"]},{"emoji":"๐ฆ","aliases":["parrot"]},{"emoji":"๐ธ","aliases":["frog"]},{"emoji":"๐","aliases":["crocodile"]},{"emoji":"๐ข","aliases":["turtle"]},{"emoji":"๐ฆ","aliases":["lizard"]},{"emoji":"๐","aliases":["snake"]},{"emoji":"๐ฒ","aliases":["dragon_face"]},{"emoji":"๐","aliases":["dragon"]},{"emoji":"๐ฆ","aliases":["sauropod"]},{"emoji":"๐ฆ","aliases":["t-rex"]},{"emoji":"๐ณ","aliases":["whale"]},{"emoji":"๐","aliases":["whale2"]},{"emoji":"๐ฌ","aliases":["dolphin","flipper"]},{"emoji":"๐ฆญ","aliases":["seal"]},{"emoji":"๐","aliases":["fish"]},{"emoji":"๐ ","aliases":["tropical_fish"]},{"emoji":"๐ก","aliases":["blowfish"]},{"emoji":"๐ฆ","aliases":["shark"]},{"emoji":"๐","aliases":["octopus"]},{"emoji":"๐","aliases":["shell"]},{"emoji":"๐","aliases":["snail"]},{"emoji":"๐ฆ","aliases":["butterfly"]},{"emoji":"๐","aliases":["bug"]},{"emoji":"๐","aliases":["ant"]},{"emoji":"๐","aliases":["bee","honeybee"]},{"emoji":"๐ชฒ","aliases":["beetle"]},{"emoji":"๐","aliases":["lady_beetle"]},{"emoji":"๐ฆ","aliases":["cricket"]},{"emoji":"๐ชณ","aliases":["cockroach"]},{"emoji":"๐ท๏ธ","aliases":["spider"]},{"emoji":"๐ธ๏ธ","aliases":["spider_web"]},{"emoji":"๐ฆ","aliases":["scorpion"]},{"emoji":"๐ฆ","aliases":["mosquito"]},{"emoji":"๐ชฐ","aliases":["fly"]},{"emoji":"๐ชฑ","aliases":["worm"]},{"emoji":"๐ฆ ","aliases":["microbe"]},{"emoji":"๐","aliases":["bouquet"]},{"emoji":"๐ธ","aliases":["cherry_blossom"]},{"emoji":"๐ฎ","aliases":["white_flower"]},{"emoji":"๐ต๏ธ","aliases":["rosette"]},{"emoji":"๐น","aliases":["rose"]},{"emoji":"๐ฅ","aliases":["wilted_flower"]},{"emoji":"๐บ","aliases":["hibiscus"]},{"emoji":"๐ป","aliases":["sunflower"]},{"emoji":"๐ผ","aliases":["blossom"]},{"emoji":"๐ท","aliases":["tulip"]},{"emoji":"๐ฑ","aliases":["seedling"]},{"emoji":"๐ชด","aliases":["potted_plant"]},{"emoji":"๐ฒ","aliases":["evergreen_tree"]},{"emoji":"๐ณ","aliases":["deciduous_tree"]},{"emoji":"๐ด","aliases":["palm_tree"]},{"emoji":"๐ต","aliases":["cactus"]},{"emoji":"๐พ","aliases":["ear_of_rice"]},{"emoji":"๐ฟ","aliases":["herb"]},{"emoji":"โ๏ธ","aliases":["shamrock"]},{"emoji":"๐","aliases":["four_leaf_clover"]},{"emoji":"๐","aliases":["maple_leaf"]},{"emoji":"๐","aliases":["fallen_leaf"]},{"emoji":"๐","aliases":["leaves"]},{"emoji":"๐","aliases":["grapes"]},{"emoji":"๐","aliases":["melon"]},{"emoji":"๐","aliases":["watermelon"]},{"emoji":"๐","aliases":["tangerine","orange","mandarin"]},{"emoji":"๐","aliases":["lemon"]},{"emoji":"๐","aliases":["banana"]},{"emoji":"๐","aliases":["pineapple"]},{"emoji":"๐ฅญ","aliases":["mango"]},{"emoji":"๐","aliases":["apple"]},{"emoji":"๐","aliases":["green_apple"]},{"emoji":"๐","aliases":["pear"]},{"emoji":"๐","aliases":["peach"]},{"emoji":"๐","aliases":["cherries"]},{"emoji":"๐","aliases":["strawberry"]},{"emoji":"๐ซ","aliases":["blueberries"]},{"emoji":"๐ฅ","aliases":["kiwi_fruit"]},{"emoji":"๐ ","aliases":["tomato"]},{"emoji":"๐ซ","aliases":["olive"]},{"emoji":"๐ฅฅ","aliases":["coconut"]},{"emoji":"๐ฅ","aliases":["avocado"]},{"emoji":"๐","aliases":["eggplant"]},{"emoji":"๐ฅ","aliases":["potato"]},{"emoji":"๐ฅ","aliases":["carrot"]},{"emoji":"๐ฝ","aliases":["corn"]},{"emoji":"๐ถ๏ธ","aliases":["hot_pepper"]},{"emoji":"๐ซ","aliases":["bell_pepper"]},{"emoji":"๐ฅ","aliases":["cucumber"]},{"emoji":"๐ฅฌ","aliases":["leafy_green"]},{"emoji":"๐ฅฆ","aliases":["broccoli"]},{"emoji":"๐ง","aliases":["garlic"]},{"emoji":"๐ง ","aliases":["onion"]},{"emoji":"๐","aliases":["mushroom"]},{"emoji":"๐ฅ","aliases":["peanuts"]},{"emoji":"๐ฐ","aliases":["chestnut"]},{"emoji":"๐","aliases":["bread"]},{"emoji":"๐ฅ","aliases":["croissant"]},{"emoji":"๐ฅ","aliases":["baguette_bread"]},{"emoji":"๐ซ","aliases":["flatbread"]},{"emoji":"๐ฅจ","aliases":["pretzel"]},{"emoji":"๐ฅฏ","aliases":["bagel"]},{"emoji":"๐ฅ","aliases":["pancakes"]},{"emoji":"๐ง","aliases":["waffle"]},{"emoji":"๐ง","aliases":["cheese"]},{"emoji":"๐","aliases":["meat_on_bone"]},{"emoji":"๐","aliases":["poultry_leg"]},{"emoji":"๐ฅฉ","aliases":["cut_of_meat"]},{"emoji":"๐ฅ","aliases":["bacon"]},{"emoji":"๐","aliases":["hamburger"]},{"emoji":"๐","aliases":["fries"]},{"emoji":"๐","aliases":["pizza"]},{"emoji":"๐ญ","aliases":["hotdog"]},{"emoji":"๐ฅช","aliases":["sandwich"]},{"emoji":"๐ฎ","aliases":["taco"]},{"emoji":"๐ฏ","aliases":["burrito"]},{"emoji":"๐ซ","aliases":["tamale"]},{"emoji":"๐ฅ","aliases":["stuffed_flatbread"]},{"emoji":"๐ง","aliases":["falafel"]},{"emoji":"๐ฅ","aliases":["egg"]},{"emoji":"๐ณ","aliases":["fried_egg"]},{"emoji":"๐ฅ","aliases":["shallow_pan_of_food"]},{"emoji":"๐ฒ","aliases":["stew"]},{"emoji":"๐ซ","aliases":["fondue"]},{"emoji":"๐ฅฃ","aliases":["bowl_with_spoon"]},{"emoji":"๐ฅ","aliases":["green_salad"]},{"emoji":"๐ฟ","aliases":["popcorn"]},{"emoji":"๐ง","aliases":["butter"]},{"emoji":"๐ง","aliases":["salt"]},{"emoji":"๐ฅซ","aliases":["canned_food"]},{"emoji":"๐ฑ","aliases":["bento"]},{"emoji":"๐","aliases":["rice_cracker"]},{"emoji":"๐","aliases":["rice_ball"]},{"emoji":"๐","aliases":["rice"]},{"emoji":"๐","aliases":["curry"]},{"emoji":"๐","aliases":["ramen"]},{"emoji":"๐","aliases":["spaghetti"]},{"emoji":"๐ ","aliases":["sweet_potato"]},{"emoji":"๐ข","aliases":["oden"]},{"emoji":"๐ฃ","aliases":["sushi"]},{"emoji":"๐ค","aliases":["fried_shrimp"]},{"emoji":"๐ฅ","aliases":["fish_cake"]},{"emoji":"๐ฅฎ","aliases":["moon_cake"]},{"emoji":"๐ก","aliases":["dango"]},{"emoji":"๐ฅ","aliases":["dumpling"]},{"emoji":"๐ฅ ","aliases":["fortune_cookie"]},{"emoji":"๐ฅก","aliases":["takeout_box"]},{"emoji":"๐ฆ","aliases":["crab"]},{"emoji":"๐ฆ","aliases":["lobster"]},{"emoji":"๐ฆ","aliases":["shrimp"]},{"emoji":"๐ฆ","aliases":["squid"]},{"emoji":"๐ฆช","aliases":["oyster"]},{"emoji":"๐ฆ","aliases":["icecream"]},{"emoji":"๐ง","aliases":["shaved_ice"]},{"emoji":"๐จ","aliases":["ice_cream"]},{"emoji":"๐ฉ","aliases":["doughnut"]},{"emoji":"๐ช","aliases":["cookie"]},{"emoji":"๐","aliases":["birthday"]},{"emoji":"๐ฐ","aliases":["cake"]},{"emoji":"๐ง","aliases":["cupcake"]},{"emoji":"๐ฅง","aliases":["pie"]},{"emoji":"๐ซ","aliases":["chocolate_bar"]},{"emoji":"๐ฌ","aliases":["candy"]},{"emoji":"๐ญ","aliases":["lollipop"]},{"emoji":"๐ฎ","aliases":["custard"]},{"emoji":"๐ฏ","aliases":["honey_pot"]},{"emoji":"๐ผ","aliases":["baby_bottle"]},{"emoji":"๐ฅ","aliases":["milk_glass"]},{"emoji":"โ","aliases":["coffee"]},{"emoji":"๐ซ","aliases":["teapot"]},{"emoji":"๐ต","aliases":["tea"]},{"emoji":"๐ถ","aliases":["sake"]},{"emoji":"๐พ","aliases":["champagne"]},{"emoji":"๐ท","aliases":["wine_glass"]},{"emoji":"๐ธ","aliases":["cocktail"]},{"emoji":"๐น","aliases":["tropical_drink"]},{"emoji":"๐บ","aliases":["beer"]},{"emoji":"๐ป","aliases":["beers"]},{"emoji":"๐ฅ","aliases":["clinking_glasses"]},{"emoji":"๐ฅ","aliases":["tumbler_glass"]},{"emoji":"๐ฅค","aliases":["cup_with_straw"]},{"emoji":"๐ง","aliases":["bubble_tea"]},{"emoji":"๐ง","aliases":["beverage_box"]},{"emoji":"๐ง","aliases":["mate"]},{"emoji":"๐ง","aliases":["ice_cube"]},{"emoji":"๐ฅข","aliases":["chopsticks"]},{"emoji":"๐ฝ๏ธ","aliases":["plate_with_cutlery"]},{"emoji":"๐ด","aliases":["fork_and_knife"]},{"emoji":"๐ฅ","aliases":["spoon"]},{"emoji":"๐ช","aliases":["hocho","knife"]},{"emoji":"๐บ","aliases":["amphora"]},{"emoji":"๐","aliases":["earth_africa"]},{"emoji":"๐","aliases":["earth_americas"]},{"emoji":"๐","aliases":["earth_asia"]},{"emoji":"๐","aliases":["globe_with_meridians"]},{"emoji":"๐บ๏ธ","aliases":["world_map"]},{"emoji":"๐พ","aliases":["japan"]},{"emoji":"๐งญ","aliases":["compass"]},{"emoji":"๐๏ธ","aliases":["mountain_snow"]},{"emoji":"โฐ๏ธ","aliases":["mountain"]},{"emoji":"๐","aliases":["volcano"]},{"emoji":"๐ป","aliases":["mount_fuji"]},{"emoji":"๐๏ธ","aliases":["camping"]},{"emoji":"๐๏ธ","aliases":["beach_umbrella"]},{"emoji":"๐๏ธ","aliases":["desert"]},{"emoji":"๐๏ธ","aliases":["desert_island"]},{"emoji":"๐๏ธ","aliases":["national_park"]},{"emoji":"๐๏ธ","aliases":["stadium"]},{"emoji":"๐๏ธ","aliases":["classical_building"]},{"emoji":"๐๏ธ","aliases":["building_construction"]},{"emoji":"๐งฑ","aliases":["bricks"]},{"emoji":"๐ชจ","aliases":["rock"]},{"emoji":"๐ชต","aliases":["wood"]},{"emoji":"๐","aliases":["hut"]},{"emoji":"๐๏ธ","aliases":["houses"]},{"emoji":"๐๏ธ","aliases":["derelict_house"]},{"emoji":"๐ ","aliases":["house"]},{"emoji":"๐ก","aliases":["house_with_garden"]},{"emoji":"๐ข","aliases":["office"]},{"emoji":"๐ฃ","aliases":["post_office"]},{"emoji":"๐ค","aliases":["european_post_office"]},{"emoji":"๐ฅ","aliases":["hospital"]},{"emoji":"๐ฆ","aliases":["bank"]},{"emoji":"๐จ","aliases":["hotel"]},{"emoji":"๐ฉ","aliases":["love_hotel"]},{"emoji":"๐ช","aliases":["convenience_store"]},{"emoji":"๐ซ","aliases":["school"]},{"emoji":"๐ฌ","aliases":["department_store"]},{"emoji":"๐ญ","aliases":["factory"]},{"emoji":"๐ฏ","aliases":["japanese_castle"]},{"emoji":"๐ฐ","aliases":["european_castle"]},{"emoji":"๐","aliases":["wedding"]},{"emoji":"๐ผ","aliases":["tokyo_tower"]},{"emoji":"๐ฝ","aliases":["statue_of_liberty"]},{"emoji":"โช","aliases":["church"]},{"emoji":"๐","aliases":["mosque"]},{"emoji":"๐","aliases":["hindu_temple"]},{"emoji":"๐","aliases":["synagogue"]},{"emoji":"โฉ๏ธ","aliases":["shinto_shrine"]},{"emoji":"๐","aliases":["kaaba"]},{"emoji":"โฒ","aliases":["fountain"]},{"emoji":"โบ","aliases":["tent"]},{"emoji":"๐","aliases":["foggy"]},{"emoji":"๐","aliases":["night_with_stars"]},{"emoji":"๐๏ธ","aliases":["cityscape"]},{"emoji":"๐","aliases":["sunrise_over_mountains"]},{"emoji":"๐ ","aliases":["sunrise"]},{"emoji":"๐","aliases":["city_sunset"]},{"emoji":"๐","aliases":["city_sunrise"]},{"emoji":"๐","aliases":["bridge_at_night"]},{"emoji":"โจ๏ธ","aliases":["hotsprings"]},{"emoji":"๐ ","aliases":["carousel_horse"]},{"emoji":"๐ก","aliases":["ferris_wheel"]},{"emoji":"๐ข","aliases":["roller_coaster"]},{"emoji":"๐","aliases":["barber"]},{"emoji":"๐ช","aliases":["circus_tent"]},{"emoji":"๐","aliases":["steam_locomotive"]},{"emoji":"๐","aliases":["railway_car"]},{"emoji":"๐","aliases":["bullettrain_side"]},{"emoji":"๐ ","aliases":["bullettrain_front"]},{"emoji":"๐","aliases":["train2"]},{"emoji":"๐","aliases":["metro"]},{"emoji":"๐","aliases":["light_rail"]},{"emoji":"๐","aliases":["station"]},{"emoji":"๐","aliases":["tram"]},{"emoji":"๐","aliases":["monorail"]},{"emoji":"๐","aliases":["mountain_railway"]},{"emoji":"๐","aliases":["train"]},{"emoji":"๐","aliases":["bus"]},{"emoji":"๐","aliases":["oncoming_bus"]},{"emoji":"๐","aliases":["trolleybus"]},{"emoji":"๐","aliases":["minibus"]},{"emoji":"๐","aliases":["ambulance"]},{"emoji":"๐","aliases":["fire_engine"]},{"emoji":"๐","aliases":["police_car"]},{"emoji":"๐","aliases":["oncoming_police_car"]},{"emoji":"๐","aliases":["taxi"]},{"emoji":"๐","aliases":["oncoming_taxi"]},{"emoji":"๐","aliases":["car","red_car"]},{"emoji":"๐","aliases":["oncoming_automobile"]},{"emoji":"๐","aliases":["blue_car"]},{"emoji":"๐ป","aliases":["pickup_truck"]},{"emoji":"๐","aliases":["truck"]},{"emoji":"๐","aliases":["articulated_lorry"]},{"emoji":"๐","aliases":["tractor"]},{"emoji":"๐๏ธ","aliases":["racing_car"]},{"emoji":"๐๏ธ","aliases":["motorcycle"]},{"emoji":"๐ต","aliases":["motor_scooter"]},{"emoji":"๐ฆฝ","aliases":["manual_wheelchair"]},{"emoji":"๐ฆผ","aliases":["motorized_wheelchair"]},{"emoji":"๐บ","aliases":["auto_rickshaw"]},{"emoji":"๐ฒ","aliases":["bike"]},{"emoji":"๐ด","aliases":["kick_scooter"]},{"emoji":"๐น","aliases":["skateboard"]},{"emoji":"๐ผ","aliases":["roller_skate"]},{"emoji":"๐","aliases":["busstop"]},{"emoji":"๐ฃ๏ธ","aliases":["motorway"]},{"emoji":"๐ค๏ธ","aliases":["railway_track"]},{"emoji":"๐ข๏ธ","aliases":["oil_drum"]},{"emoji":"โฝ","aliases":["fuelpump"]},{"emoji":"๐จ","aliases":["rotating_light"]},{"emoji":"๐ฅ","aliases":["traffic_light"]},{"emoji":"๐ฆ","aliases":["vertical_traffic_light"]},{"emoji":"๐","aliases":["stop_sign"]},{"emoji":"๐ง","aliases":["construction"]},{"emoji":"โ","aliases":["anchor"]},{"emoji":"โต","aliases":["boat","sailboat"]},{"emoji":"๐ถ","aliases":["canoe"]},{"emoji":"๐ค","aliases":["speedboat"]},{"emoji":"๐ณ๏ธ","aliases":["passenger_ship"]},{"emoji":"โด๏ธ","aliases":["ferry"]},{"emoji":"๐ฅ๏ธ","aliases":["motor_boat"]},{"emoji":"๐ข","aliases":["ship"]},{"emoji":"โ๏ธ","aliases":["airplane"]},{"emoji":"๐ฉ๏ธ","aliases":["small_airplane"]},{"emoji":"๐ซ","aliases":["flight_departure"]},{"emoji":"๐ฌ","aliases":["flight_arrival"]},{"emoji":"๐ช","aliases":["parachute"]},{"emoji":"๐บ","aliases":["seat"]},{"emoji":"๐","aliases":["helicopter"]},{"emoji":"๐","aliases":["suspension_railway"]},{"emoji":"๐ ","aliases":["mountain_cableway"]},{"emoji":"๐ก","aliases":["aerial_tramway"]},{"emoji":"๐ฐ๏ธ","aliases":["artificial_satellite"]},{"emoji":"๐","aliases":["rocket"]},{"emoji":"๐ธ","aliases":["flying_saucer"]},{"emoji":"๐๏ธ","aliases":["bellhop_bell"]},{"emoji":"๐งณ","aliases":["luggage"]},{"emoji":"โ","aliases":["hourglass"]},{"emoji":"โณ","aliases":["hourglass_flowing_sand"]},{"emoji":"โ","aliases":["watch"]},{"emoji":"โฐ","aliases":["alarm_clock"]},{"emoji":"โฑ๏ธ","aliases":["stopwatch"]},{"emoji":"โฒ๏ธ","aliases":["timer_clock"]},{"emoji":"๐ฐ๏ธ","aliases":["mantelpiece_clock"]},{"emoji":"๐","aliases":["clock12"]},{"emoji":"๐ง","aliases":["clock1230"]},{"emoji":"๐","aliases":["clock1"]},{"emoji":"๐","aliases":["clock130"]},{"emoji":"๐","aliases":["clock2"]},{"emoji":"๐","aliases":["clock230"]},{"emoji":"๐","aliases":["clock3"]},{"emoji":"๐","aliases":["clock330"]},{"emoji":"๐","aliases":["clock4"]},{"emoji":"๐","aliases":["clock430"]},{"emoji":"๐","aliases":["clock5"]},{"emoji":"๐ ","aliases":["clock530"]},{"emoji":"๐","aliases":["clock6"]},{"emoji":"๐ก","aliases":["clock630"]},{"emoji":"๐","aliases":["clock7"]},{"emoji":"๐ข","aliases":["clock730"]},{"emoji":"๐","aliases":["clock8"]},{"emoji":"๐ฃ","aliases":["clock830"]},{"emoji":"๐","aliases":["clock9"]},{"emoji":"๐ค","aliases":["clock930"]},{"emoji":"๐","aliases":["clock10"]},{"emoji":"๐ฅ","aliases":["clock1030"]},{"emoji":"๐","aliases":["clock11"]},{"emoji":"๐ฆ","aliases":["clock1130"]},{"emoji":"๐","aliases":["new_moon"]},{"emoji":"๐","aliases":["waxing_crescent_moon"]},{"emoji":"๐","aliases":["first_quarter_moon"]},{"emoji":"๐","aliases":["moon","waxing_gibbous_moon"]},{"emoji":"๐","aliases":["full_moon"]},{"emoji":"๐","aliases":["waning_gibbous_moon"]},{"emoji":"๐","aliases":["last_quarter_moon"]},{"emoji":"๐","aliases":["waning_crescent_moon"]},{"emoji":"๐","aliases":["crescent_moon"]},{"emoji":"๐","aliases":["new_moon_with_face"]},{"emoji":"๐","aliases":["first_quarter_moon_with_face"]},{"emoji":"๐","aliases":["last_quarter_moon_with_face"]},{"emoji":"๐ก๏ธ","aliases":["thermometer"]},{"emoji":"โ๏ธ","aliases":["sunny"]},{"emoji":"๐","aliases":["full_moon_with_face"]},{"emoji":"๐","aliases":["sun_with_face"]},{"emoji":"๐ช","aliases":["ringed_planet"]},{"emoji":"โญ","aliases":["star"]},{"emoji":"๐","aliases":["star2"]},{"emoji":"๐ ","aliases":["stars"]},{"emoji":"๐","aliases":["milky_way"]},{"emoji":"โ๏ธ","aliases":["cloud"]},{"emoji":"โ ","aliases":["partly_sunny"]},{"emoji":"โ๏ธ","aliases":["cloud_with_lightning_and_rain"]},{"emoji":"๐ค๏ธ","aliases":["sun_behind_small_cloud"]},{"emoji":"๐ฅ๏ธ","aliases":["sun_behind_large_cloud"]},{"emoji":"๐ฆ๏ธ","aliases":["sun_behind_rain_cloud"]},{"emoji":"๐ง๏ธ","aliases":["cloud_with_rain"]},{"emoji":"๐จ๏ธ","aliases":["cloud_with_snow"]},{"emoji":"๐ฉ๏ธ","aliases":["cloud_with_lightning"]},{"emoji":"๐ช๏ธ","aliases":["tornado"]},{"emoji":"๐ซ๏ธ","aliases":["fog"]},{"emoji":"๐ฌ๏ธ","aliases":["wind_face"]},{"emoji":"๐","aliases":["cyclone"]},{"emoji":"๐","aliases":["rainbow"]},{"emoji":"๐","aliases":["closed_umbrella"]},{"emoji":"โ๏ธ","aliases":["open_umbrella"]},{"emoji":"โ","aliases":["umbrella"]},{"emoji":"โฑ๏ธ","aliases":["parasol_on_ground"]},{"emoji":"โก","aliases":["zap"]},{"emoji":"โ๏ธ","aliases":["snowflake"]},{"emoji":"โ๏ธ","aliases":["snowman_with_snow"]},{"emoji":"โ","aliases":["snowman"]},{"emoji":"โ๏ธ","aliases":["comet"]},{"emoji":"๐ฅ","aliases":["fire"]},{"emoji":"๐ง","aliases":["droplet"]},{"emoji":"๐","aliases":["ocean"]},{"emoji":"๐","aliases":["jack_o_lantern"]},{"emoji":"๐","aliases":["christmas_tree"]},{"emoji":"๐","aliases":["fireworks"]},{"emoji":"๐","aliases":["sparkler"]},{"emoji":"๐งจ","aliases":["firecracker"]},{"emoji":"โจ","aliases":["sparkles"]},{"emoji":"๐","aliases":["balloon"]},{"emoji":"๐","aliases":["tada"]},{"emoji":"๐","aliases":["confetti_ball"]},{"emoji":"๐","aliases":["tanabata_tree"]},{"emoji":"๐","aliases":["bamboo"]},{"emoji":"๐","aliases":["dolls"]},{"emoji":"๐","aliases":["flags"]},{"emoji":"๐","aliases":["wind_chime"]},{"emoji":"๐","aliases":["rice_scene"]},{"emoji":"๐งง","aliases":["red_envelope"]},{"emoji":"๐","aliases":["ribbon"]},{"emoji":"๐","aliases":["gift"]},{"emoji":"๐๏ธ","aliases":["reminder_ribbon"]},{"emoji":"๐๏ธ","aliases":["tickets"]},{"emoji":"๐ซ","aliases":["ticket"]},{"emoji":"๐๏ธ","aliases":["medal_military"]},{"emoji":"๐","aliases":["trophy"]},{"emoji":"๐ ","aliases":["medal_sports"]},{"emoji":"๐ฅ","aliases":["1st_place_medal"]},{"emoji":"๐ฅ","aliases":["2nd_place_medal"]},{"emoji":"๐ฅ","aliases":["3rd_place_medal"]},{"emoji":"โฝ","aliases":["soccer"]},{"emoji":"โพ","aliases":["baseball"]},{"emoji":"๐ฅ","aliases":["softball"]},{"emoji":"๐","aliases":["basketball"]},{"emoji":"๐","aliases":["volleyball"]},{"emoji":"๐","aliases":["football"]},{"emoji":"๐","aliases":["rugby_football"]},{"emoji":"๐พ","aliases":["tennis"]},{"emoji":"๐ฅ","aliases":["flying_disc"]},{"emoji":"๐ณ","aliases":["bowling"]},{"emoji":"๐","aliases":["cricket_game"]},{"emoji":"๐","aliases":["field_hockey"]},{"emoji":"๐","aliases":["ice_hockey"]},{"emoji":"๐ฅ","aliases":["lacrosse"]},{"emoji":"๐","aliases":["ping_pong"]},{"emoji":"๐ธ","aliases":["badminton"]},{"emoji":"๐ฅ","aliases":["boxing_glove"]},{"emoji":"๐ฅ","aliases":["martial_arts_uniform"]},{"emoji":"๐ฅ ","aliases":["goal_net"]},{"emoji":"โณ","aliases":["golf"]},{"emoji":"โธ๏ธ","aliases":["ice_skate"]},{"emoji":"๐ฃ","aliases":["fishing_pole_and_fish"]},{"emoji":"๐คฟ","aliases":["diving_mask"]},{"emoji":"๐ฝ","aliases":["running_shirt_with_sash"]},{"emoji":"๐ฟ","aliases":["ski"]},{"emoji":"๐ท","aliases":["sled"]},{"emoji":"๐ฅ","aliases":["curling_stone"]},{"emoji":"๐ฏ","aliases":["dart"]},{"emoji":"๐ช","aliases":["yo_yo"]},{"emoji":"๐ช","aliases":["kite"]},{"emoji":"๐ฑ","aliases":["8ball"]},{"emoji":"๐ฎ","aliases":["crystal_ball"]},{"emoji":"๐ช","aliases":["magic_wand"]},{"emoji":"๐งฟ","aliases":["nazar_amulet"]},{"emoji":"๐ฎ","aliases":["video_game"]},{"emoji":"๐น๏ธ","aliases":["joystick"]},{"emoji":"๐ฐ","aliases":["slot_machine"]},{"emoji":"๐ฒ","aliases":["game_die"]},{"emoji":"๐งฉ","aliases":["jigsaw"]},{"emoji":"๐งธ","aliases":["teddy_bear"]},{"emoji":"๐ช ","aliases":["pinata"]},{"emoji":"๐ช","aliases":["nesting_dolls"]},{"emoji":"โ ๏ธ","aliases":["spades"]},{"emoji":"โฅ๏ธ","aliases":["hearts"]},{"emoji":"โฆ๏ธ","aliases":["diamonds"]},{"emoji":"โฃ๏ธ","aliases":["clubs"]},{"emoji":"โ๏ธ","aliases":["chess_pawn"]},{"emoji":"๐","aliases":["black_joker"]},{"emoji":"๐","aliases":["mahjong"]},{"emoji":"๐ด","aliases":["flower_playing_cards"]},{"emoji":"๐ญ","aliases":["performing_arts"]},{"emoji":"๐ผ๏ธ","aliases":["framed_picture"]},{"emoji":"๐จ","aliases":["art"]},{"emoji":"๐งต","aliases":["thread"]},{"emoji":"๐ชก","aliases":["sewing_needle"]},{"emoji":"๐งถ","aliases":["yarn"]},{"emoji":"๐ชข","aliases":["knot"]},{"emoji":"๐","aliases":["eyeglasses"]},{"emoji":"๐ถ๏ธ","aliases":["dark_sunglasses"]},{"emoji":"๐ฅฝ","aliases":["goggles"]},{"emoji":"๐ฅผ","aliases":["lab_coat"]},{"emoji":"๐ฆบ","aliases":["safety_vest"]},{"emoji":"๐","aliases":["necktie"]},{"emoji":"๐","aliases":["shirt","tshirt"]},{"emoji":"๐","aliases":["jeans"]},{"emoji":"๐งฃ","aliases":["scarf"]},{"emoji":"๐งค","aliases":["gloves"]},{"emoji":"๐งฅ","aliases":["coat"]},{"emoji":"๐งฆ","aliases":["socks"]},{"emoji":"๐","aliases":["dress"]},{"emoji":"๐","aliases":["kimono"]},{"emoji":"๐ฅป","aliases":["sari"]},{"emoji":"๐ฉฑ","aliases":["one_piece_swimsuit"]},{"emoji":"๐ฉฒ","aliases":["swim_brief"]},{"emoji":"๐ฉณ","aliases":["shorts"]},{"emoji":"๐","aliases":["bikini"]},{"emoji":"๐","aliases":["womans_clothes"]},{"emoji":"๐","aliases":["purse"]},{"emoji":"๐","aliases":["handbag"]},{"emoji":"๐","aliases":["pouch"]},{"emoji":"๐๏ธ","aliases":["shopping"]},{"emoji":"๐","aliases":["school_satchel"]},{"emoji":"๐ฉด","aliases":["thong_sandal"]},{"emoji":"๐","aliases":["mans_shoe","shoe"]},{"emoji":"๐","aliases":["athletic_shoe"]},{"emoji":"๐ฅพ","aliases":["hiking_boot"]},{"emoji":"๐ฅฟ","aliases":["flat_shoe"]},{"emoji":"๐ ","aliases":["high_heel"]},{"emoji":"๐ก","aliases":["sandal"]},{"emoji":"๐ฉฐ","aliases":["ballet_shoes"]},{"emoji":"๐ข","aliases":["boot"]},{"emoji":"๐","aliases":["crown"]},{"emoji":"๐","aliases":["womans_hat"]},{"emoji":"๐ฉ","aliases":["tophat"]},{"emoji":"๐","aliases":["mortar_board"]},{"emoji":"๐งข","aliases":["billed_cap"]},{"emoji":"๐ช","aliases":["military_helmet"]},{"emoji":"โ๏ธ","aliases":["rescue_worker_helmet"]},{"emoji":"๐ฟ","aliases":["prayer_beads"]},{"emoji":"๐","aliases":["lipstick"]},{"emoji":"๐","aliases":["ring"]},{"emoji":"๐","aliases":["gem"]},{"emoji":"๐","aliases":["mute"]},{"emoji":"๐","aliases":["speaker"]},{"emoji":"๐","aliases":["sound"]},{"emoji":"๐","aliases":["loud_sound"]},{"emoji":"๐ข","aliases":["loudspeaker"]},{"emoji":"๐ฃ","aliases":["mega"]},{"emoji":"๐ฏ","aliases":["postal_horn"]},{"emoji":"๐","aliases":["bell"]},{"emoji":"๐","aliases":["no_bell"]},{"emoji":"๐ผ","aliases":["musical_score"]},{"emoji":"๐ต","aliases":["musical_note"]},{"emoji":"๐ถ","aliases":["notes"]},{"emoji":"๐๏ธ","aliases":["studio_microphone"]},{"emoji":"๐๏ธ","aliases":["level_slider"]},{"emoji":"๐๏ธ","aliases":["control_knobs"]},{"emoji":"๐ค","aliases":["microphone"]},{"emoji":"๐ง","aliases":["headphones"]},{"emoji":"๐ป","aliases":["radio"]},{"emoji":"๐ท","aliases":["saxophone"]},{"emoji":"๐ช","aliases":["accordion"]},{"emoji":"๐ธ","aliases":["guitar"]},{"emoji":"๐น","aliases":["musical_keyboard"]},{"emoji":"๐บ","aliases":["trumpet"]},{"emoji":"๐ป","aliases":["violin"]},{"emoji":"๐ช","aliases":["banjo"]},{"emoji":"๐ฅ","aliases":["drum"]},{"emoji":"๐ช","aliases":["long_drum"]},{"emoji":"๐ฑ","aliases":["iphone"]},{"emoji":"๐ฒ","aliases":["calling"]},{"emoji":"โ๏ธ","aliases":["phone","telephone"]},{"emoji":"๐","aliases":["telephone_receiver"]},{"emoji":"๐","aliases":["pager"]},{"emoji":"๐ ","aliases":["fax"]},{"emoji":"๐","aliases":["battery"]},{"emoji":"๐","aliases":["electric_plug"]},{"emoji":"๐ป","aliases":["computer"]},{"emoji":"๐ฅ๏ธ","aliases":["desktop_computer"]},{"emoji":"๐จ๏ธ","aliases":["printer"]},{"emoji":"โจ๏ธ","aliases":["keyboard"]},{"emoji":"๐ฑ๏ธ","aliases":["computer_mouse"]},{"emoji":"๐ฒ๏ธ","aliases":["trackball"]},{"emoji":"๐ฝ","aliases":["minidisc"]},{"emoji":"๐พ","aliases":["floppy_disk"]},{"emoji":"๐ฟ","aliases":["cd"]},{"emoji":"๐","aliases":["dvd"]},{"emoji":"๐งฎ","aliases":["abacus"]},{"emoji":"๐ฅ","aliases":["movie_camera"]},{"emoji":"๐๏ธ","aliases":["film_strip"]},{"emoji":"๐ฝ๏ธ","aliases":["film_projector"]},{"emoji":"๐ฌ","aliases":["clapper"]},{"emoji":"๐บ","aliases":["tv"]},{"emoji":"๐ท","aliases":["camera"]},{"emoji":"๐ธ","aliases":["camera_flash"]},{"emoji":"๐น","aliases":["video_camera"]},{"emoji":"๐ผ","aliases":["vhs"]},{"emoji":"๐","aliases":["mag"]},{"emoji":"๐","aliases":["mag_right"]},{"emoji":"๐ฏ๏ธ","aliases":["candle"]},{"emoji":"๐ก","aliases":["bulb"]},{"emoji":"๐ฆ","aliases":["flashlight"]},{"emoji":"๐ฎ","aliases":["izakaya_lantern","lantern"]},{"emoji":"๐ช","aliases":["diya_lamp"]},{"emoji":"๐","aliases":["notebook_with_decorative_cover"]},{"emoji":"๐","aliases":["closed_book"]},{"emoji":"๐","aliases":["book","open_book"]},{"emoji":"๐","aliases":["green_book"]},{"emoji":"๐","aliases":["blue_book"]},{"emoji":"๐","aliases":["orange_book"]},{"emoji":"๐","aliases":["books"]},{"emoji":"๐","aliases":["notebook"]},{"emoji":"๐","aliases":["ledger"]},{"emoji":"๐","aliases":["page_with_curl"]},{"emoji":"๐","aliases":["scroll"]},{"emoji":"๐","aliases":["page_facing_up"]},{"emoji":"๐ฐ","aliases":["newspaper"]},{"emoji":"๐๏ธ","aliases":["newspaper_roll"]},{"emoji":"๐","aliases":["bookmark_tabs"]},{"emoji":"๐","aliases":["bookmark"]},{"emoji":"๐ท๏ธ","aliases":["label"]},{"emoji":"๐ฐ","aliases":["moneybag"]},{"emoji":"๐ช","aliases":["coin"]},{"emoji":"๐ด","aliases":["yen"]},{"emoji":"๐ต","aliases":["dollar"]},{"emoji":"๐ถ","aliases":["euro"]},{"emoji":"๐ท","aliases":["pound"]},{"emoji":"๐ธ","aliases":["money_with_wings"]},{"emoji":"๐ณ","aliases":["credit_card"]},{"emoji":"๐งพ","aliases":["receipt"]},{"emoji":"๐น","aliases":["chart"]},{"emoji":"โ๏ธ","aliases":["envelope"]},{"emoji":"๐ง","aliases":["email","e-mail"]},{"emoji":"๐จ","aliases":["incoming_envelope"]},{"emoji":"๐ฉ","aliases":["envelope_with_arrow"]},{"emoji":"๐ค","aliases":["outbox_tray"]},{"emoji":"๐ฅ","aliases":["inbox_tray"]},{"emoji":"๐ฆ","aliases":["package"]},{"emoji":"๐ซ","aliases":["mailbox"]},{"emoji":"๐ช","aliases":["mailbox_closed"]},{"emoji":"๐ฌ","aliases":["mailbox_with_mail"]},{"emoji":"๐ญ","aliases":["mailbox_with_no_mail"]},{"emoji":"๐ฎ","aliases":["postbox"]},{"emoji":"๐ณ๏ธ","aliases":["ballot_box"]},{"emoji":"โ๏ธ","aliases":["pencil2"]},{"emoji":"โ๏ธ","aliases":["black_nib"]},{"emoji":"๐๏ธ","aliases":["fountain_pen"]},{"emoji":"๐๏ธ","aliases":["pen"]},{"emoji":"๐๏ธ","aliases":["paintbrush"]},{"emoji":"๐๏ธ","aliases":["crayon"]},{"emoji":"๐","aliases":["memo","pencil"]},{"emoji":"๐ผ","aliases":["briefcase"]},{"emoji":"๐","aliases":["file_folder"]},{"emoji":"๐","aliases":["open_file_folder"]},{"emoji":"๐๏ธ","aliases":["card_index_dividers"]},{"emoji":"๐ ","aliases":["date"]},{"emoji":"๐","aliases":["calendar"]},{"emoji":"๐๏ธ","aliases":["spiral_notepad"]},{"emoji":"๐๏ธ","aliases":["spiral_calendar"]},{"emoji":"๐","aliases":["card_index"]},{"emoji":"๐","aliases":["chart_with_upwards_trend"]},{"emoji":"๐","aliases":["chart_with_downwards_trend"]},{"emoji":"๐","aliases":["bar_chart"]},{"emoji":"๐","aliases":["clipboard"]},{"emoji":"๐","aliases":["pushpin"]},{"emoji":"๐","aliases":["round_pushpin"]},{"emoji":"๐","aliases":["paperclip"]},{"emoji":"๐๏ธ","aliases":["paperclips"]},{"emoji":"๐","aliases":["straight_ruler"]},{"emoji":"๐","aliases":["triangular_ruler"]},{"emoji":"โ๏ธ","aliases":["scissors"]},{"emoji":"๐๏ธ","aliases":["card_file_box"]},{"emoji":"๐๏ธ","aliases":["file_cabinet"]},{"emoji":"๐๏ธ","aliases":["wastebasket"]},{"emoji":"๐","aliases":["lock"]},{"emoji":"๐","aliases":["unlock"]},{"emoji":"๐","aliases":["lock_with_ink_pen"]},{"emoji":"๐","aliases":["closed_lock_with_key"]},{"emoji":"๐","aliases":["key"]},{"emoji":"๐๏ธ","aliases":["old_key"]},{"emoji":"๐จ","aliases":["hammer"]},{"emoji":"๐ช","aliases":["axe"]},{"emoji":"โ๏ธ","aliases":["pick"]},{"emoji":"โ๏ธ","aliases":["hammer_and_pick"]},{"emoji":"๐ ๏ธ","aliases":["hammer_and_wrench"]},{"emoji":"๐ก๏ธ","aliases":["dagger"]},{"emoji":"โ๏ธ","aliases":["crossed_swords"]},{"emoji":"๐ซ","aliases":["gun"]},{"emoji":"๐ช","aliases":["boomerang"]},{"emoji":"๐น","aliases":["bow_and_arrow"]},{"emoji":"๐ก๏ธ","aliases":["shield"]},{"emoji":"๐ช","aliases":["carpentry_saw"]},{"emoji":"๐ง","aliases":["wrench"]},{"emoji":"๐ช","aliases":["screwdriver"]},{"emoji":"๐ฉ","aliases":["nut_and_bolt"]},{"emoji":"โ๏ธ","aliases":["gear"]},{"emoji":"๐๏ธ","aliases":["clamp"]},{"emoji":"โ๏ธ","aliases":["balance_scale"]},{"emoji":"๐ฆฏ","aliases":["probing_cane"]},{"emoji":"๐","aliases":["link"]},{"emoji":"โ๏ธ","aliases":["chains"]},{"emoji":"๐ช","aliases":["hook"]},{"emoji":"๐งฐ","aliases":["toolbox"]},{"emoji":"๐งฒ","aliases":["magnet"]},{"emoji":"๐ช","aliases":["ladder"]},{"emoji":"โ๏ธ","aliases":["alembic"]},{"emoji":"๐งช","aliases":["test_tube"]},{"emoji":"๐งซ","aliases":["petri_dish"]},{"emoji":"๐งฌ","aliases":["dna"]},{"emoji":"๐ฌ","aliases":["microscope"]},{"emoji":"๐ญ","aliases":["telescope"]},{"emoji":"๐ก","aliases":["satellite"]},{"emoji":"๐","aliases":["syringe"]},{"emoji":"๐ฉธ","aliases":["drop_of_blood"]},{"emoji":"๐","aliases":["pill"]},{"emoji":"๐ฉน","aliases":["adhesive_bandage"]},{"emoji":"๐ฉบ","aliases":["stethoscope"]},{"emoji":"๐ช","aliases":["door"]},{"emoji":"๐","aliases":["elevator"]},{"emoji":"๐ช","aliases":["mirror"]},{"emoji":"๐ช","aliases":["window"]},{"emoji":"๐๏ธ","aliases":["bed"]},{"emoji":"๐๏ธ","aliases":["couch_and_lamp"]},{"emoji":"๐ช","aliases":["chair"]},{"emoji":"๐ฝ","aliases":["toilet"]},{"emoji":"๐ช ","aliases":["plunger"]},{"emoji":"๐ฟ","aliases":["shower"]},{"emoji":"๐","aliases":["bathtub"]},{"emoji":"๐ชค","aliases":["mouse_trap"]},{"emoji":"๐ช","aliases":["razor"]},{"emoji":"๐งด","aliases":["lotion_bottle"]},{"emoji":"๐งท","aliases":["safety_pin"]},{"emoji":"๐งน","aliases":["broom"]},{"emoji":"๐งบ","aliases":["basket"]},{"emoji":"๐งป","aliases":["roll_of_paper"]},{"emoji":"๐ชฃ","aliases":["bucket"]},{"emoji":"๐งผ","aliases":["soap"]},{"emoji":"๐ชฅ","aliases":["toothbrush"]},{"emoji":"๐งฝ","aliases":["sponge"]},{"emoji":"๐งฏ","aliases":["fire_extinguisher"]},{"emoji":"๐","aliases":["shopping_cart"]},{"emoji":"๐ฌ","aliases":["smoking"]},{"emoji":"โฐ๏ธ","aliases":["coffin"]},{"emoji":"๐ชฆ","aliases":["headstone"]},{"emoji":"โฑ๏ธ","aliases":["funeral_urn"]},{"emoji":"๐ฟ","aliases":["moyai"]},{"emoji":"๐ชง","aliases":["placard"]},{"emoji":"๐ง","aliases":["atm"]},{"emoji":"๐ฎ","aliases":["put_litter_in_its_place"]},{"emoji":"๐ฐ","aliases":["potable_water"]},{"emoji":"โฟ","aliases":["wheelchair"]},{"emoji":"๐น","aliases":["mens"]},{"emoji":"๐บ","aliases":["womens"]},{"emoji":"๐ป","aliases":["restroom"]},{"emoji":"๐ผ","aliases":["baby_symbol"]},{"emoji":"๐พ","aliases":["wc"]},{"emoji":"๐","aliases":["passport_control"]},{"emoji":"๐","aliases":["customs"]},{"emoji":"๐","aliases":["baggage_claim"]},{"emoji":"๐ ","aliases":["left_luggage"]},{"emoji":"โ ๏ธ","aliases":["warning"]},{"emoji":"๐ธ","aliases":["children_crossing"]},{"emoji":"โ","aliases":["no_entry"]},{"emoji":"๐ซ","aliases":["no_entry_sign"]},{"emoji":"๐ณ","aliases":["no_bicycles"]},{"emoji":"๐ญ","aliases":["no_smoking"]},{"emoji":"๐ฏ","aliases":["do_not_litter"]},{"emoji":"๐ฑ","aliases":["non-potable_water"]},{"emoji":"๐ท","aliases":["no_pedestrians"]},{"emoji":"๐ต","aliases":["no_mobile_phones"]},{"emoji":"๐","aliases":["underage"]},{"emoji":"โข๏ธ","aliases":["radioactive"]},{"emoji":"โฃ๏ธ","aliases":["biohazard"]},{"emoji":"โฌ๏ธ","aliases":["arrow_up"]},{"emoji":"โ๏ธ","aliases":["arrow_upper_right"]},{"emoji":"โก๏ธ","aliases":["arrow_right"]},{"emoji":"โ๏ธ","aliases":["arrow_lower_right"]},{"emoji":"โฌ๏ธ","aliases":["arrow_down"]},{"emoji":"โ๏ธ","aliases":["arrow_lower_left"]},{"emoji":"โฌ ๏ธ","aliases":["arrow_left"]},{"emoji":"โ๏ธ","aliases":["arrow_upper_left"]},{"emoji":"โ๏ธ","aliases":["arrow_up_down"]},{"emoji":"โ๏ธ","aliases":["left_right_arrow"]},{"emoji":"โฉ๏ธ","aliases":["leftwards_arrow_with_hook"]},{"emoji":"โช๏ธ","aliases":["arrow_right_hook"]},{"emoji":"โคด๏ธ","aliases":["arrow_heading_up"]},{"emoji":"โคต๏ธ","aliases":["arrow_heading_down"]},{"emoji":"๐","aliases":["arrows_clockwise"]},{"emoji":"๐","aliases":["arrows_counterclockwise"]},{"emoji":"๐","aliases":["back"]},{"emoji":"๐","aliases":["end"]},{"emoji":"๐","aliases":["on"]},{"emoji":"๐","aliases":["soon"]},{"emoji":"๐","aliases":["top"]},{"emoji":"๐","aliases":["place_of_worship"]},{"emoji":"โ๏ธ","aliases":["atom_symbol"]},{"emoji":"๐๏ธ","aliases":["om"]},{"emoji":"โก๏ธ","aliases":["star_of_david"]},{"emoji":"โธ๏ธ","aliases":["wheel_of_dharma"]},{"emoji":"โฏ๏ธ","aliases":["yin_yang"]},{"emoji":"โ๏ธ","aliases":["latin_cross"]},{"emoji":"โฆ๏ธ","aliases":["orthodox_cross"]},{"emoji":"โช๏ธ","aliases":["star_and_crescent"]},{"emoji":"โฎ๏ธ","aliases":["peace_symbol"]},{"emoji":"๐","aliases":["menorah"]},{"emoji":"๐ฏ","aliases":["six_pointed_star"]},{"emoji":"โ","aliases":["aries"]},{"emoji":"โ","aliases":["taurus"]},{"emoji":"โ","aliases":["gemini"]},{"emoji":"โ","aliases":["cancer"]},{"emoji":"โ","aliases":["leo"]},{"emoji":"โ","aliases":["virgo"]},{"emoji":"โ","aliases":["libra"]},{"emoji":"โ","aliases":["scorpius"]},{"emoji":"โ","aliases":["sagittarius"]},{"emoji":"โ","aliases":["capricorn"]},{"emoji":"โ","aliases":["aquarius"]},{"emoji":"โ","aliases":["pisces"]},{"emoji":"โ","aliases":["ophiuchus"]},{"emoji":"๐","aliases":["twisted_rightwards_arrows"]},{"emoji":"๐","aliases":["repeat"]},{"emoji":"๐","aliases":["repeat_one"]},{"emoji":"โถ๏ธ","aliases":["arrow_forward"]},{"emoji":"โฉ","aliases":["fast_forward"]},{"emoji":"โญ๏ธ","aliases":["next_track_button"]},{"emoji":"โฏ๏ธ","aliases":["play_or_pause_button"]},{"emoji":"โ๏ธ","aliases":["arrow_backward"]},{"emoji":"โช","aliases":["rewind"]},{"emoji":"โฎ๏ธ","aliases":["previous_track_button"]},{"emoji":"๐ผ","aliases":["arrow_up_small"]},{"emoji":"โซ","aliases":["arrow_double_up"]},{"emoji":"๐ฝ","aliases":["arrow_down_small"]},{"emoji":"โฌ","aliases":["arrow_double_down"]},{"emoji":"โธ๏ธ","aliases":["pause_button"]},{"emoji":"โน๏ธ","aliases":["stop_button"]},{"emoji":"โบ๏ธ","aliases":["record_button"]},{"emoji":"โ๏ธ","aliases":["eject_button"]},{"emoji":"๐ฆ","aliases":["cinema"]},{"emoji":"๐ ","aliases":["low_brightness"]},{"emoji":"๐","aliases":["high_brightness"]},{"emoji":"๐ถ","aliases":["signal_strength"]},{"emoji":"๐ณ","aliases":["vibration_mode"]},{"emoji":"๐ด","aliases":["mobile_phone_off"]},{"emoji":"โ๏ธ","aliases":["female_sign"]},{"emoji":"โ๏ธ","aliases":["male_sign"]},{"emoji":"โง๏ธ","aliases":["transgender_symbol"]},{"emoji":"โ๏ธ","aliases":["heavy_multiplication_x"]},{"emoji":"โ","aliases":["heavy_plus_sign"]},{"emoji":"โ","aliases":["heavy_minus_sign"]},{"emoji":"โ","aliases":["heavy_division_sign"]},{"emoji":"โพ๏ธ","aliases":["infinity"]},{"emoji":"โผ๏ธ","aliases":["bangbang"]},{"emoji":"โ๏ธ","aliases":["interrobang"]},{"emoji":"โ","aliases":["question"]},{"emoji":"โ","aliases":["grey_question"]},{"emoji":"โ","aliases":["grey_exclamation"]},{"emoji":"โ","aliases":["exclamation","heavy_exclamation_mark"]},{"emoji":"ใฐ๏ธ","aliases":["wavy_dash"]},{"emoji":"๐ฑ","aliases":["currency_exchange"]},{"emoji":"๐ฒ","aliases":["heavy_dollar_sign"]},{"emoji":"โ๏ธ","aliases":["medical_symbol"]},{"emoji":"โป๏ธ","aliases":["recycle"]},{"emoji":"โ๏ธ","aliases":["fleur_de_lis"]},{"emoji":"๐ฑ","aliases":["trident"]},{"emoji":"๐","aliases":["name_badge"]},{"emoji":"๐ฐ","aliases":["beginner"]},{"emoji":"โญ","aliases":["o"]},{"emoji":"โ ","aliases":["white_check_mark"]},{"emoji":"โ๏ธ","aliases":["ballot_box_with_check"]},{"emoji":"โ๏ธ","aliases":["heavy_check_mark"]},{"emoji":"โ","aliases":["x"]},{"emoji":"โ","aliases":["negative_squared_cross_mark"]},{"emoji":"โฐ","aliases":["curly_loop"]},{"emoji":"โฟ","aliases":["loop"]},{"emoji":"ใฝ๏ธ","aliases":["part_alternation_mark"]},{"emoji":"โณ๏ธ","aliases":["eight_spoked_asterisk"]},{"emoji":"โด๏ธ","aliases":["eight_pointed_black_star"]},{"emoji":"โ๏ธ","aliases":["sparkle"]},{"emoji":"ยฉ๏ธ","aliases":["copyright"]},{"emoji":"ยฎ๏ธ","aliases":["registered"]},{"emoji":"โข๏ธ","aliases":["tm"]},{"emoji":"#๏ธโฃ","aliases":["hash"]},{"emoji":"*๏ธโฃ","aliases":["asterisk"]},{"emoji":"0๏ธโฃ","aliases":["zero"]},{"emoji":"1๏ธโฃ","aliases":["one"]},{"emoji":"2๏ธโฃ","aliases":["two"]},{"emoji":"3๏ธโฃ","aliases":["three"]},{"emoji":"4๏ธโฃ","aliases":["four"]},{"emoji":"5๏ธโฃ","aliases":["five"]},{"emoji":"6๏ธโฃ","aliases":["six"]},{"emoji":"7๏ธโฃ","aliases":["seven"]},{"emoji":"8๏ธโฃ","aliases":["eight"]},{"emoji":"9๏ธโฃ","aliases":["nine"]},{"emoji":"๐","aliases":["keycap_ten"]},{"emoji":"๐ ","aliases":["capital_abcd"]},{"emoji":"๐ก","aliases":["abcd"]},{"emoji":"๐ข","aliases":["1234"]},{"emoji":"๐ฃ","aliases":["symbols"]},{"emoji":"๐ค","aliases":["abc"]},{"emoji":"๐ ฐ๏ธ","aliases":["a"]},{"emoji":"๐","aliases":["ab"]},{"emoji":"๐ ฑ๏ธ","aliases":["b"]},{"emoji":"๐","aliases":["cl"]},{"emoji":"๐","aliases":["cool"]},{"emoji":"๐","aliases":["free"]},{"emoji":"โน๏ธ","aliases":["information_source"]},{"emoji":"๐","aliases":["id"]},{"emoji":"โ๏ธ","aliases":["m"]},{"emoji":"๐","aliases":["new"]},{"emoji":"๐","aliases":["ng"]},{"emoji":"๐ พ๏ธ","aliases":["o2"]},{"emoji":"๐","aliases":["ok"]},{"emoji":"๐ ฟ๏ธ","aliases":["parking"]},{"emoji":"๐","aliases":["sos"]},{"emoji":"๐","aliases":["up"]},{"emoji":"๐","aliases":["vs"]},{"emoji":"๐","aliases":["koko"]},{"emoji":"๐๏ธ","aliases":["sa"]},{"emoji":"๐ท๏ธ","aliases":["u6708"]},{"emoji":"๐ถ","aliases":["u6709"]},{"emoji":"๐ฏ","aliases":["u6307"]},{"emoji":"๐","aliases":["ideograph_advantage"]},{"emoji":"๐น","aliases":["u5272"]},{"emoji":"๐","aliases":["u7121"]},{"emoji":"๐ฒ","aliases":["u7981"]},{"emoji":"๐","aliases":["accept"]},{"emoji":"๐ธ","aliases":["u7533"]},{"emoji":"๐ด","aliases":["u5408"]},{"emoji":"๐ณ","aliases":["u7a7a"]},{"emoji":"ใ๏ธ","aliases":["congratulations"]},{"emoji":"ใ๏ธ","aliases":["secret"]},{"emoji":"๐บ","aliases":["u55b6"]},{"emoji":"๐ต","aliases":["u6e80"]},{"emoji":"๐ด","aliases":["red_circle"]},{"emoji":"๐ ","aliases":["orange_circle"]},{"emoji":"๐ก","aliases":["yellow_circle"]},{"emoji":"๐ข","aliases":["green_circle"]},{"emoji":"๐ต","aliases":["large_blue_circle"]},{"emoji":"๐ฃ","aliases":["purple_circle"]},{"emoji":"๐ค","aliases":["brown_circle"]},{"emoji":"โซ","aliases":["black_circle"]},{"emoji":"โช","aliases":["white_circle"]},{"emoji":"๐ฅ","aliases":["red_square"]},{"emoji":"๐ง","aliases":["orange_square"]},{"emoji":"๐จ","aliases":["yellow_square"]},{"emoji":"๐ฉ","aliases":["green_square"]},{"emoji":"๐ฆ","aliases":["blue_square"]},{"emoji":"๐ช","aliases":["purple_square"]},{"emoji":"๐ซ","aliases":["brown_square"]},{"emoji":"โฌ","aliases":["black_large_square"]},{"emoji":"โฌ","aliases":["white_large_square"]},{"emoji":"โผ๏ธ","aliases":["black_medium_square"]},{"emoji":"โป๏ธ","aliases":["white_medium_square"]},{"emoji":"โพ","aliases":["black_medium_small_square"]},{"emoji":"โฝ","aliases":["white_medium_small_square"]},{"emoji":"โช๏ธ","aliases":["black_small_square"]},{"emoji":"โซ๏ธ","aliases":["white_small_square"]},{"emoji":"๐ถ","aliases":["large_orange_diamond"]},{"emoji":"๐ท","aliases":["large_blue_diamond"]},{"emoji":"๐ธ","aliases":["small_orange_diamond"]},{"emoji":"๐น","aliases":["small_blue_diamond"]},{"emoji":"๐บ","aliases":["small_red_triangle"]},{"emoji":"๐ป","aliases":["small_red_triangle_down"]},{"emoji":"๐ ","aliases":["diamond_shape_with_a_dot_inside"]},{"emoji":"๐","aliases":["radio_button"]},{"emoji":"๐ณ","aliases":["white_square_button"]},{"emoji":"๐ฒ","aliases":["black_square_button"]},{"emoji":"๐","aliases":["checkered_flag"]},{"emoji":"๐ฉ","aliases":["triangular_flag_on_post"]},{"emoji":"๐","aliases":["crossed_flags"]},{"emoji":"๐ด","aliases":["black_flag"]},{"emoji":"๐ณ๏ธ","aliases":["white_flag"]},{"emoji":"๐ณ๏ธโ๐","aliases":["rainbow_flag"]},{"emoji":"๐ณ๏ธโโง๏ธ","aliases":["transgender_flag"]},{"emoji":"๐ดโโ ๏ธ","aliases":["pirate_flag"]},{"emoji":"๐ฆ๐จ","aliases":["ascension_island"]},{"emoji":"๐ฆ๐ฉ","aliases":["andorra"]},{"emoji":"๐ฆ๐ช","aliases":["united_arab_emirates"]},{"emoji":"๐ฆ๐ซ","aliases":["afghanistan"]},{"emoji":"๐ฆ๐ฌ","aliases":["antigua_barbuda"]},{"emoji":"๐ฆ๐ฎ","aliases":["anguilla"]},{"emoji":"๐ฆ๐ฑ","aliases":["albania"]},{"emoji":"๐ฆ๐ฒ","aliases":["armenia"]},{"emoji":"๐ฆ๐ด","aliases":["angola"]},{"emoji":"๐ฆ๐ถ","aliases":["antarctica"]},{"emoji":"๐ฆ๐ท","aliases":["argentina"]},{"emoji":"๐ฆ๐ธ","aliases":["american_samoa"]},{"emoji":"๐ฆ๐น","aliases":["austria"]},{"emoji":"๐ฆ๐บ","aliases":["australia"]},{"emoji":"๐ฆ๐ผ","aliases":["aruba"]},{"emoji":"๐ฆ๐ฝ","aliases":["aland_islands"]},{"emoji":"๐ฆ๐ฟ","aliases":["azerbaijan"]},{"emoji":"๐ง๐ฆ","aliases":["bosnia_herzegovina"]},{"emoji":"๐ง๐ง","aliases":["barbados"]},{"emoji":"๐ง๐ฉ","aliases":["bangladesh"]},{"emoji":"๐ง๐ช","aliases":["belgium"]},{"emoji":"๐ง๐ซ","aliases":["burkina_faso"]},{"emoji":"๐ง๐ฌ","aliases":["bulgaria"]},{"emoji":"๐ง๐ญ","aliases":["bahrain"]},{"emoji":"๐ง๐ฎ","aliases":["burundi"]},{"emoji":"๐ง๐ฏ","aliases":["benin"]},{"emoji":"๐ง๐ฑ","aliases":["st_barthelemy"]},{"emoji":"๐ง๐ฒ","aliases":["bermuda"]},{"emoji":"๐ง๐ณ","aliases":["brunei"]},{"emoji":"๐ง๐ด","aliases":["bolivia"]},{"emoji":"๐ง๐ถ","aliases":["caribbean_netherlands"]},{"emoji":"๐ง๐ท","aliases":["brazil"]},{"emoji":"๐ง๐ธ","aliases":["bahamas"]},{"emoji":"๐ง๐น","aliases":["bhutan"]},{"emoji":"๐ง๐ป","aliases":["bouvet_island"]},{"emoji":"๐ง๐ผ","aliases":["botswana"]},{"emoji":"๐ง๐พ","aliases":["belarus"]},{"emoji":"๐ง๐ฟ","aliases":["belize"]},{"emoji":"๐จ๐ฆ","aliases":["canada"]},{"emoji":"๐จ๐จ","aliases":["cocos_islands"]},{"emoji":"๐จ๐ฉ","aliases":["congo_kinshasa"]},{"emoji":"๐จ๐ซ","aliases":["central_african_republic"]},{"emoji":"๐จ๐ฌ","aliases":["congo_brazzaville"]},{"emoji":"๐จ๐ญ","aliases":["switzerland"]},{"emoji":"๐จ๐ฎ","aliases":["cote_divoire"]},{"emoji":"๐จ๐ฐ","aliases":["cook_islands"]},{"emoji":"๐จ๐ฑ","aliases":["chile"]},{"emoji":"๐จ๐ฒ","aliases":["cameroon"]},{"emoji":"๐จ๐ณ","aliases":["cn"]},{"emoji":"๐จ๐ด","aliases":["colombia"]},{"emoji":"๐จ๐ต","aliases":["clipperton_island"]},{"emoji":"๐จ๐ท","aliases":["costa_rica"]},{"emoji":"๐จ๐บ","aliases":["cuba"]},{"emoji":"๐จ๐ป","aliases":["cape_verde"]},{"emoji":"๐จ๐ผ","aliases":["curacao"]},{"emoji":"๐จ๐ฝ","aliases":["christmas_island"]},{"emoji":"๐จ๐พ","aliases":["cyprus"]},{"emoji":"๐จ๐ฟ","aliases":["czech_republic"]},{"emoji":"๐ฉ๐ช","aliases":["de"]},{"emoji":"๐ฉ๐ฌ","aliases":["diego_garcia"]},{"emoji":"๐ฉ๐ฏ","aliases":["djibouti"]},{"emoji":"๐ฉ๐ฐ","aliases":["denmark"]},{"emoji":"๐ฉ๐ฒ","aliases":["dominica"]},{"emoji":"๐ฉ๐ด","aliases":["dominican_republic"]},{"emoji":"๐ฉ๐ฟ","aliases":["algeria"]},{"emoji":"๐ช๐ฆ","aliases":["ceuta_melilla"]},{"emoji":"๐ช๐จ","aliases":["ecuador"]},{"emoji":"๐ช๐ช","aliases":["estonia"]},{"emoji":"๐ช๐ฌ","aliases":["egypt"]},{"emoji":"๐ช๐ญ","aliases":["western_sahara"]},{"emoji":"๐ช๐ท","aliases":["eritrea"]},{"emoji":"๐ช๐ธ","aliases":["es"]},{"emoji":"๐ช๐น","aliases":["ethiopia"]},{"emoji":"๐ช๐บ","aliases":["eu","european_union"]},{"emoji":"๐ซ๐ฎ","aliases":["finland"]},{"emoji":"๐ซ๐ฏ","aliases":["fiji"]},{"emoji":"๐ซ๐ฐ","aliases":["falkland_islands"]},{"emoji":"๐ซ๐ฒ","aliases":["micronesia"]},{"emoji":"๐ซ๐ด","aliases":["faroe_islands"]},{"emoji":"๐ซ๐ท","aliases":["fr"]},{"emoji":"๐ฌ๐ฆ","aliases":["gabon"]},{"emoji":"๐ฌ๐ง","aliases":["gb","uk"]},{"emoji":"๐ฌ๐ฉ","aliases":["grenada"]},{"emoji":"๐ฌ๐ช","aliases":["georgia"]},{"emoji":"๐ฌ๐ซ","aliases":["french_guiana"]},{"emoji":"๐ฌ๐ฌ","aliases":["guernsey"]},{"emoji":"๐ฌ๐ญ","aliases":["ghana"]},{"emoji":"๐ฌ๐ฎ","aliases":["gibraltar"]},{"emoji":"๐ฌ๐ฑ","aliases":["greenland"]},{"emoji":"๐ฌ๐ฒ","aliases":["gambia"]},{"emoji":"๐ฌ๐ณ","aliases":["guinea"]},{"emoji":"๐ฌ๐ต","aliases":["guadeloupe"]},{"emoji":"๐ฌ๐ถ","aliases":["equatorial_guinea"]},{"emoji":"๐ฌ๐ท","aliases":["greece"]},{"emoji":"๐ฌ๐ธ","aliases":["south_georgia_south_sandwich_islands"]},{"emoji":"๐ฌ๐น","aliases":["guatemala"]},{"emoji":"๐ฌ๐บ","aliases":["guam"]},{"emoji":"๐ฌ๐ผ","aliases":["guinea_bissau"]},{"emoji":"๐ฌ๐พ","aliases":["guyana"]},{"emoji":"๐ญ๐ฐ","aliases":["hong_kong"]},{"emoji":"๐ญ๐ฒ","aliases":["heard_mcdonald_islands"]},{"emoji":"๐ญ๐ณ","aliases":["honduras"]},{"emoji":"๐ญ๐ท","aliases":["croatia"]},{"emoji":"๐ญ๐น","aliases":["haiti"]},{"emoji":"๐ญ๐บ","aliases":["hungary"]},{"emoji":"๐ฎ๐จ","aliases":["canary_islands"]},{"emoji":"๐ฎ๐ฉ","aliases":["indonesia"]},{"emoji":"๐ฎ๐ช","aliases":["ireland"]},{"emoji":"๐ฎ๐ฑ","aliases":["israel"]},{"emoji":"๐ฎ๐ฒ","aliases":["isle_of_man"]},{"emoji":"๐ฎ๐ณ","aliases":["india"]},{"emoji":"๐ฎ๐ด","aliases":["british_indian_ocean_territory"]},{"emoji":"๐ฎ๐ถ","aliases":["iraq"]},{"emoji":"๐ฎ๐ท","aliases":["iran"]},{"emoji":"๐ฎ๐ธ","aliases":["iceland"]},{"emoji":"๐ฎ๐น","aliases":["it"]},{"emoji":"๐ฏ๐ช","aliases":["jersey"]},{"emoji":"๐ฏ๐ฒ","aliases":["jamaica"]},{"emoji":"๐ฏ๐ด","aliases":["jordan"]},{"emoji":"๐ฏ๐ต","aliases":["jp"]},{"emoji":"๐ฐ๐ช","aliases":["kenya"]},{"emoji":"๐ฐ๐ฌ","aliases":["kyrgyzstan"]},{"emoji":"๐ฐ๐ญ","aliases":["cambodia"]},{"emoji":"๐ฐ๐ฎ","aliases":["kiribati"]},{"emoji":"๐ฐ๐ฒ","aliases":["comoros"]},{"emoji":"๐ฐ๐ณ","aliases":["st_kitts_nevis"]},{"emoji":"๐ฐ๐ต","aliases":["north_korea"]},{"emoji":"๐ฐ๐ท","aliases":["kr"]},{"emoji":"๐ฐ๐ผ","aliases":["kuwait"]},{"emoji":"๐ฐ๐พ","aliases":["cayman_islands"]},{"emoji":"๐ฐ๐ฟ","aliases":["kazakhstan"]},{"emoji":"๐ฑ๐ฆ","aliases":["laos"]},{"emoji":"๐ฑ๐ง","aliases":["lebanon"]},{"emoji":"๐ฑ๐จ","aliases":["st_lucia"]},{"emoji":"๐ฑ๐ฎ","aliases":["liechtenstein"]},{"emoji":"๐ฑ๐ฐ","aliases":["sri_lanka"]},{"emoji":"๐ฑ๐ท","aliases":["liberia"]},{"emoji":"๐ฑ๐ธ","aliases":["lesotho"]},{"emoji":"๐ฑ๐น","aliases":["lithuania"]},{"emoji":"๐ฑ๐บ","aliases":["luxembourg"]},{"emoji":"๐ฑ๐ป","aliases":["latvia"]},{"emoji":"๐ฑ๐พ","aliases":["libya"]},{"emoji":"๐ฒ๐ฆ","aliases":["morocco"]},{"emoji":"๐ฒ๐จ","aliases":["monaco"]},{"emoji":"๐ฒ๐ฉ","aliases":["moldova"]},{"emoji":"๐ฒ๐ช","aliases":["montenegro"]},{"emoji":"๐ฒ๐ซ","aliases":["st_martin"]},{"emoji":"๐ฒ๐ฌ","aliases":["madagascar"]},{"emoji":"๐ฒ๐ญ","aliases":["marshall_islands"]},{"emoji":"๐ฒ๐ฐ","aliases":["macedonia"]},{"emoji":"๐ฒ๐ฑ","aliases":["mali"]},{"emoji":"๐ฒ๐ฒ","aliases":["myanmar"]},{"emoji":"๐ฒ๐ณ","aliases":["mongolia"]},{"emoji":"๐ฒ๐ด","aliases":["macau"]},{"emoji":"๐ฒ๐ต","aliases":["northern_mariana_islands"]},{"emoji":"๐ฒ๐ถ","aliases":["martinique"]},{"emoji":"๐ฒ๐ท","aliases":["mauritania"]},{"emoji":"๐ฒ๐ธ","aliases":["montserrat"]},{"emoji":"๐ฒ๐น","aliases":["malta"]},{"emoji":"๐ฒ๐บ","aliases":["mauritius"]},{"emoji":"๐ฒ๐ป","aliases":["maldives"]},{"emoji":"๐ฒ๐ผ","aliases":["malawi"]},{"emoji":"๐ฒ๐ฝ","aliases":["mexico"]},{"emoji":"๐ฒ๐พ","aliases":["malaysia"]},{"emoji":"๐ฒ๐ฟ","aliases":["mozambique"]},{"emoji":"๐ณ๐ฆ","aliases":["namibia"]},{"emoji":"๐ณ๐จ","aliases":["new_caledonia"]},{"emoji":"๐ณ๐ช","aliases":["niger"]},{"emoji":"๐ณ๐ซ","aliases":["norfolk_island"]},{"emoji":"๐ณ๐ฌ","aliases":["nigeria"]},{"emoji":"๐ณ๐ฎ","aliases":["nicaragua"]},{"emoji":"๐ณ๐ฑ","aliases":["netherlands"]},{"emoji":"๐ณ๐ด","aliases":["norway"]},{"emoji":"๐ณ๐ต","aliases":["nepal"]},{"emoji":"๐ณ๐ท","aliases":["nauru"]},{"emoji":"๐ณ๐บ","aliases":["niue"]},{"emoji":"๐ณ๐ฟ","aliases":["new_zealand"]},{"emoji":"๐ด๐ฒ","aliases":["oman"]},{"emoji":"๐ต๐ฆ","aliases":["panama"]},{"emoji":"๐ต๐ช","aliases":["peru"]},{"emoji":"๐ต๐ซ","aliases":["french_polynesia"]},{"emoji":"๐ต๐ฌ","aliases":["papua_new_guinea"]},{"emoji":"๐ต๐ญ","aliases":["philippines"]},{"emoji":"๐ต๐ฐ","aliases":["pakistan"]},{"emoji":"๐ต๐ฑ","aliases":["poland"]},{"emoji":"๐ต๐ฒ","aliases":["st_pierre_miquelon"]},{"emoji":"๐ต๐ณ","aliases":["pitcairn_islands"]},{"emoji":"๐ต๐ท","aliases":["puerto_rico"]},{"emoji":"๐ต๐ธ","aliases":["palestinian_territories"]},{"emoji":"๐ต๐น","aliases":["portugal"]},{"emoji":"๐ต๐ผ","aliases":["palau"]},{"emoji":"๐ต๐พ","aliases":["paraguay"]},{"emoji":"๐ถ๐ฆ","aliases":["qatar"]},{"emoji":"๐ท๐ช","aliases":["reunion"]},{"emoji":"๐ท๐ด","aliases":["romania"]},{"emoji":"๐ท๐ธ","aliases":["serbia"]},{"emoji":"๐ท๐บ","aliases":["ru"]},{"emoji":"๐ท๐ผ","aliases":["rwanda"]},{"emoji":"๐ธ๐ฆ","aliases":["saudi_arabia"]},{"emoji":"๐ธ๐ง","aliases":["solomon_islands"]},{"emoji":"๐ธ๐จ","aliases":["seychelles"]},{"emoji":"๐ธ๐ฉ","aliases":["sudan"]},{"emoji":"๐ธ๐ช","aliases":["sweden"]},{"emoji":"๐ธ๐ฌ","aliases":["singapore"]},{"emoji":"๐ธ๐ญ","aliases":["st_helena"]},{"emoji":"๐ธ๐ฎ","aliases":["slovenia"]},{"emoji":"๐ธ๐ฏ","aliases":["svalbard_jan_mayen"]},{"emoji":"๐ธ๐ฐ","aliases":["slovakia"]},{"emoji":"๐ธ๐ฑ","aliases":["sierra_leone"]},{"emoji":"๐ธ๐ฒ","aliases":["san_marino"]},{"emoji":"๐ธ๐ณ","aliases":["senegal"]},{"emoji":"๐ธ๐ด","aliases":["somalia"]},{"emoji":"๐ธ๐ท","aliases":["suriname"]},{"emoji":"๐ธ๐ธ","aliases":["south_sudan"]},{"emoji":"๐ธ๐น","aliases":["sao_tome_principe"]},{"emoji":"๐ธ๐ป","aliases":["el_salvador"]},{"emoji":"๐ธ๐ฝ","aliases":["sint_maarten"]},{"emoji":"๐ธ๐พ","aliases":["syria"]},{"emoji":"๐ธ๐ฟ","aliases":["swaziland"]},{"emoji":"๐น๐ฆ","aliases":["tristan_da_cunha"]},{"emoji":"๐น๐จ","aliases":["turks_caicos_islands"]},{"emoji":"๐น๐ฉ","aliases":["chad"]},{"emoji":"๐น๐ซ","aliases":["french_southern_territories"]},{"emoji":"๐น๐ฌ","aliases":["togo"]},{"emoji":"๐น๐ญ","aliases":["thailand"]},{"emoji":"๐น๐ฏ","aliases":["tajikistan"]},{"emoji":"๐น๐ฐ","aliases":["tokelau"]},{"emoji":"๐น๐ฑ","aliases":["timor_leste"]},{"emoji":"๐น๐ฒ","aliases":["turkmenistan"]},{"emoji":"๐น๐ณ","aliases":["tunisia"]},{"emoji":"๐น๐ด","aliases":["tonga"]},{"emoji":"๐น๐ท","aliases":["tr"]},{"emoji":"๐น๐น","aliases":["trinidad_tobago"]},{"emoji":"๐น๐ป","aliases":["tuvalu"]},{"emoji":"๐น๐ผ","aliases":["taiwan"]},{"emoji":"๐น๐ฟ","aliases":["tanzania"]},{"emoji":"๐บ๐ฆ","aliases":["ukraine"]},{"emoji":"๐บ๐ฌ","aliases":["uganda"]},{"emoji":"๐บ๐ฒ","aliases":["us_outlying_islands"]},{"emoji":"๐บ๐ณ","aliases":["united_nations"]},{"emoji":"๐บ๐ธ","aliases":["us"]},{"emoji":"๐บ๐พ","aliases":["uruguay"]},{"emoji":"๐บ๐ฟ","aliases":["uzbekistan"]},{"emoji":"๐ป๐ฆ","aliases":["vatican_city"]},{"emoji":"๐ป๐จ","aliases":["st_vincent_grenadines"]},{"emoji":"๐ป๐ช","aliases":["venezuela"]},{"emoji":"๐ป๐ฌ","aliases":["british_virgin_islands"]},{"emoji":"๐ป๐ฎ","aliases":["us_virgin_islands"]},{"emoji":"๐ป๐ณ","aliases":["vietnam"]},{"emoji":"๐ป๐บ","aliases":["vanuatu"]},{"emoji":"๐ผ๐ซ","aliases":["wallis_futuna"]},{"emoji":"๐ผ๐ธ","aliases":["samoa"]},{"emoji":"๐ฝ๐ฐ","aliases":["kosovo"]},{"emoji":"๐พ๐ช","aliases":["yemen"]},{"emoji":"๐พ๐น","aliases":["mayotte"]},{"emoji":"๐ฟ๐ฆ","aliases":["south_africa"]},{"emoji":"๐ฟ๐ฒ","aliases":["zambia"]},{"emoji":"๐ฟ๐ผ","aliases":["zimbabwe"]},{"emoji":"๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ","aliases":["england"]},{"emoji":"๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ","aliases":["scotland"]},{"emoji":"๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ","aliases":["wales"]}] diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 5936ee5a..00d56dbd 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -1,3 +1,5 @@ +import { rawEmojis} from "./emojis"; + export const topicUrl = (baseUrl, topic) => `${baseUrl}/${topic}`; export const topicUrlWs = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/ws` .replaceAll("https://", "wss://") @@ -8,6 +10,46 @@ export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, top export const shortUrl = (url) => url.replaceAll(/https?:\/\//g, ""); export const shortTopicUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); +// Format emojis (see emoji.js) +const emojis = {}; +rawEmojis.forEach(emoji => { + emoji.aliases.forEach(alias => { + emojis[alias] = emoji.emoji; + }); +}); + +const toEmojis = (tags) => { + if (!tags) return []; + else return tags.filter(tag => tag in emojis).map(tag => emojis[tag]); +} + +export const formatTitle = (m) => { + const emojiList = toEmojis(m.tags); + if (emojiList.length > 0) { + return `${emojiList.join(" ")} ${m.title}`; + } else { + return m.title; + } +}; + +export const formatMessage = (m) => { + if (m.title) { + return m.message; + } else { + const emojiList = toEmojis(m.tags); + if (emojiList.length > 0) { + return `${emojiList.join(" ")} ${m.message}`; + } else { + return m.message; + } + } +}; + +export const unmatchedTags = (tags) => { + if (!tags) return []; + else return tags.filter(tag => !(tag in emojis)); +} + // From: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch export async function* fetchLinesIterator(fileURL) { const utf8Decoder = new TextDecoder('utf-8'); diff --git a/web/src/components/App.js b/web/src/components/App.js index d63b928d..80743a94 100644 --- a/web/src/components/App.js +++ b/web/src/components/App.js @@ -130,6 +130,13 @@ const App = () => { console.log(`[App] Cancel clicked`); setSubscribeDialogOpen(false); }; + const handleClearAll = (subscriptionId) => { + console.log(`[App] Deleting all notifications from ${subscriptionId}`); + setSubscriptions(prev => { + const newSubscription = prev.get(subscriptionId).deleteAllNotifications(); + return prev.update(newSubscription).clone(); + }); + }; const handleUnsubscribe = (subscriptionId) => { console.log(`[App] Unsubscribing from ${subscriptionId}`); setSubscriptions(prev => { @@ -179,6 +186,7 @@ const App = () => { </Typography> {selectedSubscription !== null && <DetailSettingsIcon subscription={selectedSubscription} + onClearAll={handleClearAll} onUnsubscribe={handleUnsubscribe} />} </Toolbar> diff --git a/web/src/components/DetailSettingsIcon.js b/web/src/components/DetailSettingsIcon.js index 486ec83c..af103d9b 100644 --- a/web/src/components/DetailSettingsIcon.js +++ b/web/src/components/DetailSettingsIcon.js @@ -26,6 +26,11 @@ const DetailSettingsIcon = (props) => { setOpen(false); }; + const handleClearAll = (event) => { + handleClose(event); + props.onClearAll(props.subscription.id); + }; + const handleUnsubscribe = (event) => { handleClose(event); props.onUnsubscribe(props.subscription.id); @@ -97,6 +102,7 @@ const DetailSettingsIcon = (props) => { onKeyDown={handleListKeyDown} > <MenuItem onClick={handleSendTestMessage}>Send test notification</MenuItem> + <MenuItem onClick={handleClearAll}>Clear all notifications</MenuItem> <MenuItem onClick={handleUnsubscribe}>Unsubscribe</MenuItem> </MenuList> </ClickAwayListener> diff --git a/web/src/components/NotificationList.js b/web/src/components/NotificationList.js index 36917c0d..48b0e3f8 100644 --- a/web/src/components/NotificationList.js +++ b/web/src/components/NotificationList.js @@ -3,12 +3,13 @@ import {CardContent, Stack} from "@mui/material"; import Card from "@mui/material/Card"; import Typography from "@mui/material/Typography"; import * as React from "react"; +import {formatTitle, formatMessage, unmatchedTags} from "../app/utils"; const NotificationList = (props) => { const sortedNotifications = props.notifications.sort((a, b) => a.time < b.time); return ( - <Container maxWidth="lg" sx={{ marginTop: 3 }}> - <Stack container spacing={3}> + <Container maxWidth="lg" sx={{ marginTop: 3, marginBottom: 3 }}> + <Stack spacing={3}> {sortedNotifications.map(notification => <NotificationItem key={notification.id} notification={notification}/>)} </Stack> @@ -20,13 +21,22 @@ const NotificationItem = (props) => { const notification = props.notification; const date = new Intl.DateTimeFormat('default', {dateStyle: 'short', timeStyle: 'short'}) .format(new Date(notification.time * 1000)); - const tags = (notification.tags && notification.tags.length > 0) ? notification.tags.join(', ') : null; + const otherTags = unmatchedTags(notification.tags); + const tags = (otherTags.length > 0) ? otherTags.join(', ') : null; return ( <Card sx={{ minWidth: 275 }}> <CardContent> - <Typography sx={{ fontSize: 14 }} color="text.secondary">{date}</Typography> - {notification.title && <Typography variant="h5" component="div">{notification.title}</Typography>} - <Typography variant="body1" sx={{ whiteSpace: 'pre-line' }}>{notification.message}</Typography> + <Typography sx={{ fontSize: 14 }} color="text.secondary"> + {date} + {[1,2,4,5].includes(notification.priority) && + <img + src={`static/img/priority-${notification.priority}.svg`} + alt={`Priority ${notification.priority}`} + style={{ verticalAlign: 'bottom' }} + />} + </Typography> + {notification.title && <Typography variant="h5" component="div">{formatTitle(notification)}</Typography>} + <Typography variant="body1" sx={{ whiteSpace: 'pre-line' }}>{formatMessage(notification)}</Typography> {tags && <Typography sx={{ fontSize: 14 }} color="text.secondary">Tags: {tags}</Typography>} </CardContent> </Card>