diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..80c574c9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "qml/opaque"] + path = qml/opaque + url = https://git.openprivacy.ca/openprivacy/opaque diff --git a/go.mod b/go.mod index ac957848..3acfd98c 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( git.openprivacy.ca/openprivacy/connectivity v1.1.4 git.openprivacy.ca/openprivacy/log v1.0.0 github.com/gopherjs/gopherjs v0.0.0-20200209183636-89e6cbcd0b6d // indirect - github.com/therecipe/qt v0.0.0-20191101232336-18864661ae4f - github.com/therecipe/qt/internal/binding/files/docs/5.13.0 v0.0.0-20191002095216-73192f6811d0 // indirect; Required - do not delete or `go tidy` away + github.com/therecipe/qt v0.0.0-20200126204426-5074eb6d8c41 + github.com/therecipe/qt/internal/binding/files/docs/5.12.0 v0.0.0-20200126204426-5074eb6d8c41 // indirect + github.com/therecipe/qt/internal/binding/files/docs/5.13.0 v0.0.0-20200126204426-5074eb6d8c41 // indirect ) diff --git a/go/ui/gcd.go b/go/ui/gcd.go index 2aa034c0..afabe59e 100644 --- a/go/ui/gcd.go +++ b/go/ui/gcd.go @@ -21,7 +21,7 @@ type GrandCentralDispatcher struct { core.QObject QMLEngine *qml.QQmlApplicationEngine - Translator *core.QTranslator + Translator, OpaqueTranslator *core.QTranslator uIManagers map[string]Manager // profile-onion : Manager diff --git a/i18n/translation_de.ts b/i18n/translation_de.ts index 0bee62d0..af483be3 100644 --- a/i18n/translation_de.ts +++ b/i18n/translation_de.ts @@ -55,111 +55,12 @@ ContactList - + paste-address-to-add-contact ex: "... paste an address here to add a contact ..." Adresse hier hinzufügen, um einen Kontakt aufzunehmen - - EmojiDrawer - - - cycle-cats-android - - - - - cycle-cats-desktop - - - - - cycle-morphs-android - - - - - cycle-morphs-desktop - - - - - cycle-colours-android - - - - - cycle-colours-desktop - - - - - search - Search... - - - - - emojicat-expressions - Expressions - - - - - emojicat-activities - Activities - - - - - emojicat-food - Food, drink & herbs - - - - - emojicat-gender - Gender, relationships & sexuality - - - - - emojicat-nature - Nature and effects - - - - - emojicat-objects - Objects - - - - - emojicat-people - People and animals - - - - - emojicat-symbols - Symbols - - - - - emojicat-travel - Travel & places - - - - - emojicat-misc - Miscellaneous - - - GroupSettingsPane @@ -205,14 +106,6 @@ Löschen - - InplaceEditText - - - Update - - - ListOverlay @@ -237,7 +130,7 @@ MembershipOverlay - + membership-description Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group. Unten steht eine Liste der Benutzer, die Nachrichten an die Gruppe gesendet haben. Möglicherweise enthält diese Benutzerzliste nicht alle, die Zugang zur Gruppe haben. @@ -246,24 +139,24 @@ Message - + dm-tooltip Click to DM Klicken, um DM zu senden - + could-not-send-msg-error Could not send this message Nachricht konnte nicht gesendet werden - + acknowledged-label bestätigt - + pending-label Bestätigung ausstehend @@ -294,35 +187,35 @@ OverlayPane - + accept-group-invite-label Do you want to accept the invitation to $GROUP Möchtest Du die Einladung annehmen - + accept-group-btn Accept group invite button Annehmen - + reject-group-btn Reject Group invite button Ablehnen - + chat-btn Chat - + lists-btn Listen - + bulletins-btn Meldungen @@ -344,28 +237,28 @@ Kopieren - + copied-to-clipboard-notification notification: copied to clipboard in die Zwischenablage kopiert - + display-name-label Angezeigter Name - + save-btn speichern - + delete-btn löschen - + block-btn @@ -478,7 +371,7 @@ ProfileList - + add-new-profile-btn @@ -486,24 +379,24 @@ ProfileManagerPane - + enter-profile-password Please enter password: - + password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password - + unlock Unlock @@ -550,31 +443,4 @@ - - Statusbar - - - network-status-disconnected - Disconnected from the internet, check your connection - - - - - network-status-attempting-tor - Attempting to connect to Tor network - - - - - network-status-connecting - Connecting... - - - - - network-status-online - Online - - - diff --git a/i18n/translation_en.qm b/i18n/translation_en.qm index f62ab2f5..fb3618ba 100644 Binary files a/i18n/translation_en.qm and b/i18n/translation_en.qm differ diff --git a/i18n/translation_en.ts b/i18n/translation_en.ts index f06eea6e..bce3a55a 100644 --- a/i18n/translation_en.ts +++ b/i18n/translation_en.ts @@ -55,7 +55,7 @@ ContactList - + paste-address-to-add-contact ex: "... paste an address here to add a contact ..." ... paste an address here to add a contact... @@ -64,106 +64,89 @@ EmojiDrawer - cycle-cats-android - Click to cycle category. + Click to cycle category. Long-press to reset. - cycle-cats-desktop - Click to cycle category. + Click to cycle category. Right-click to reset. - cycle-morphs-android - Click to cycle morphs. + Click to cycle morphs. Long-press to reset. - cycle-morphs-desktop - Click to cycle morphs. + Click to cycle morphs. Right-click to reset. - cycle-colours-android - Click to cycle colours. + Click to cycle colours. Long-press to reset. - cycle-colours-desktop - Click to cycle colours. + Click to cycle colours. Right-click to reset. - search Search... - Search... + Search... - emojicat-expressions Expressions - Expressions + Expressions - emojicat-activities Activities - Activities + Activities - emojicat-food Food, drink & herbs - Food, drink & herbs + Food, drink & herbs - emojicat-gender Gender, relationships & sexuality - Gender, relationships & sexuality + Gender, relationships & sexuality - emojicat-nature Nature and effects - Nature and effects + Nature and effects - emojicat-objects Objects - Objects + Objects - emojicat-people People and animals - People and animals + People and animals - emojicat-symbols Symbols - Symbols + Symbols - emojicat-travel Travel & places - Travel & places + Travel & places - emojicat-misc Miscellaneous - Miscellaneous + Miscellaneous @@ -214,9 +197,8 @@ Right-click to reset. InplaceEditText - Update - Update + Update @@ -243,7 +225,7 @@ Right-click to reset. MembershipOverlay - + membership-description Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group. Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group. @@ -252,24 +234,24 @@ Right-click to reset. Message - + dm-tooltip Click to DM Click to DM - + could-not-send-msg-error Could not send this message Could not send this message - + acknowledged-label Acknowledged - + pending-label Pending @@ -300,35 +282,35 @@ Right-click to reset. OverlayPane - + accept-group-invite-label Do you want to accept the invitation to $GROUP Do you want to accept the invitation to - + accept-group-btn Accept group invite button Accept - + reject-group-btn Reject Group invite button Reject - + chat-btn Chat - + lists-btn Lists - + bulletins-btn Bulletins @@ -350,23 +332,23 @@ Right-click to reset. Copy - + copied-to-clipboard-notification notification: copied to clipboard Copied to Clipboard - + display-name-label Display Name - + save-btn Save - + block-btn Block Peer @@ -375,7 +357,7 @@ Right-click to reset. Unblock Peer - + delete-btn Delete @@ -496,7 +478,7 @@ Right-click to reset. ProfileList - + add-new-profile-btn Add new profile @@ -504,24 +486,24 @@ Right-click to reset. ProfileManagerPane - + enter-profile-password Please enter password: Please enter password - + password Password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password 0 profiles loaded with that password - + unlock Unlock Unlock @@ -579,28 +561,24 @@ Right-click to reset. Statusbar - network-status-disconnected Disconnected from the internet, check your connection - Disconnected from the internet, check your connection + Disconnected from the internet, check your connection - network-status-attempting-tor Attempting to connect to Tor network - Attempting to connect to Tor network + Attempting to connect to Tor network - network-status-connecting Connecting... - Connecting to network and peers... + Connecting to network and peers... - network-status-online Online - Online + Online diff --git a/i18n/translation_fr.ts b/i18n/translation_fr.ts index b8cd61fc..6453d504 100644 --- a/i18n/translation_fr.ts +++ b/i18n/translation_fr.ts @@ -55,111 +55,12 @@ ContactList - + paste-address-to-add-contact ex: "... paste an address here to add a contact ..." ... coller une adresse ici pour ajouter un contact... - - EmojiDrawer - - - cycle-cats-android - - - - - cycle-cats-desktop - - - - - cycle-morphs-android - - - - - cycle-morphs-desktop - - - - - cycle-colours-android - - - - - cycle-colours-desktop - - - - - search - Search... - - - - - emojicat-expressions - Expressions - - - - - emojicat-activities - Activities - - - - - emojicat-food - Food, drink & herbs - - - - - emojicat-gender - Gender, relationships & sexuality - - - - - emojicat-nature - Nature and effects - - - - - emojicat-objects - Objects - - - - - emojicat-people - People and animals - - - - - emojicat-symbols - Symbols - - - - - emojicat-travel - Travel & places - - - - - emojicat-misc - Miscellaneous - - - GroupSettingsPane @@ -205,14 +106,6 @@ Effacer - - InplaceEditText - - - Update - - - ListOverlay @@ -237,7 +130,7 @@ MembershipOverlay - + membership-description Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group. Liste des utilisateurs ayant envoyés un ou plusieurs messages au groupe. Cette liste peut ne pas être representatives de l'ensemble des membres du groupe. @@ -246,24 +139,24 @@ Message - + dm-tooltip Click to DM Envoyer un message privé - + could-not-send-msg-error Could not send this message Impossible d'envoyer ce message - + acknowledged-label Confirmé - + pending-label En attente @@ -294,35 +187,35 @@ OverlayPane - + accept-group-invite-label Do you want to accept the invitation to $GROUP Voulez-vous accepter l'invitation au groupe - + accept-group-btn Accept group invite button Accepter - + reject-group-btn Reject Group invite button Refuser - + chat-btn Discuter - + lists-btn Listes - + bulletins-btn Bulletins @@ -344,28 +237,28 @@ Copier - + copied-to-clipboard-notification notification: copied to clipboard Copié dans le presse-papier - + display-name-label Pseudo - + save-btn Sauvegarder - + delete-btn Effacer - + block-btn @@ -478,7 +371,7 @@ ProfileList - + add-new-profile-btn @@ -486,24 +379,24 @@ ProfileManagerPane - + enter-profile-password Please enter password: - + password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password - + unlock Unlock @@ -550,31 +443,4 @@ - - Statusbar - - - network-status-disconnected - Disconnected from the internet, check your connection - - - - - network-status-attempting-tor - Attempting to connect to Tor network - - - - - network-status-connecting - Connecting... - - - - - network-status-online - Online - - - diff --git a/i18n/translation_pt.ts b/i18n/translation_pt.ts index df0402bd..2c823d90 100644 --- a/i18n/translation_pt.ts +++ b/i18n/translation_pt.ts @@ -55,111 +55,12 @@ ContactList - + paste-address-to-add-contact ex: "... paste an address here to add a contact ..." … cole um endereço aqui para adicionar um contato… - - EmojiDrawer - - - cycle-cats-android - - - - - cycle-cats-desktop - - - - - cycle-morphs-android - - - - - cycle-morphs-desktop - - - - - cycle-colours-android - - - - - cycle-colours-desktop - - - - - search - Search... - - - - - emojicat-expressions - Expressions - - - - - emojicat-activities - Activities - - - - - emojicat-food - Food, drink & herbs - - - - - emojicat-gender - Gender, relationships & sexuality - - - - - emojicat-nature - Nature and effects - - - - - emojicat-objects - Objects - - - - - emojicat-people - People and animals - - - - - emojicat-symbols - Symbols - - - - - emojicat-travel - Travel & places - - - - - emojicat-misc - Miscellaneous - - - GroupSettingsPane @@ -205,14 +106,6 @@ Deletar - - InplaceEditText - - - Update - - - ListOverlay @@ -237,7 +130,7 @@ MembershipOverlay - + membership-description Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group. A lista abaixo é de usuários que enviaram mensagens ao grupo. Essa lista pode não refletir todos os usuários que têm acesso ao grupo. @@ -246,24 +139,24 @@ Message - + dm-tooltip Click to DM Clique para DM - + could-not-send-msg-error Could not send this message Não deu para enviar esta mensagem - + acknowledged-label Confirmada - + pending-label Pendente @@ -294,35 +187,35 @@ OverlayPane - + accept-group-invite-label Do you want to accept the invitation to $GROUP Você quer aceitar o convite para - + accept-group-btn Accept group invite button Aceitar - + reject-group-btn Reject Group invite button Recusar - + chat-btn Chat - + lists-btn Listas - + bulletins-btn Boletins @@ -344,28 +237,28 @@ Copiar - + copied-to-clipboard-notification notification: copied to clipboard Copiado - + display-name-label Nome de Exibição - + save-btn Salvar - + delete-btn Deletar - + block-btn @@ -478,7 +371,7 @@ ProfileList - + add-new-profile-btn @@ -486,24 +379,24 @@ ProfileManagerPane - + enter-profile-password Please enter password: - + password - + error-0-profiles-loaded-for-password 0 profiles loaded with that password - + unlock Unlock @@ -550,31 +443,4 @@ - - Statusbar - - - network-status-disconnected - Disconnected from the internet, check your connection - - - - - network-status-attempting-tor - Attempting to connect to Tor network - - - - - network-status-connecting - Connecting... - - - - - network-status-online - Online - - - diff --git a/main.go b/main.go index 1d28ce20..f506b647 100644 --- a/main.go +++ b/main.go @@ -171,10 +171,16 @@ func mainUi(flagLocal bool, flagClientUI bool) { translator := core.NewQTranslator(nil) translator.Load("translation_en", ":/i18n/", "", "") core.QCoreApplication_InstallTranslator(translator) + opaqueTranslator := core.NewQTranslator(nil) + opaqueTranslator.Load("translation_en", ":/qml/opaque/i18n/", "", "") + core.QCoreApplication_InstallTranslator(opaqueTranslator) gcd.Translator = core.NewQTranslator(nil) gcd.Translator.Load("translation_"+core.QLocale_System().Name(), ":/i18n/", "", "") core.QCoreApplication_InstallTranslator(gcd.Translator) + gcd.OpaqueTranslator = core.NewQTranslator(nil) + gcd.OpaqueTranslator.Load("translation_"+core.QLocale_System().Name(), ":/qml/opaque/i18n/", "", "") + core.QCoreApplication_InstallTranslator(gcd.OpaqueTranslator) core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true) quickcontrols2.QQuickStyle_SetStyle("Universe") diff --git a/qml.qrc b/qml.qrc index 279eeeec..d8bacb3c 100644 --- a/qml.qrc +++ b/qml.qrc @@ -13,38 +13,16 @@ qml/panes/SplashPane.qml qml/panes/ProfileManagerPane.qml qml/panes/ProfileAddEditPane.qml - qml/styles/CwtchComboBoxStyle.qml - qml/styles/CwtchExpandingButton.qml - qml/styles/CwtchTextAreaStyle.qml - qml/styles/CwtchTextFieldStyle.qml - qml/widgets/ContactList.qml - qml/widgets/Portrait.qml - qml/widgets/Badge.qml - qml/widgets/PortraitRow.qml - qml/widgets/ProfileRow.qml - qml/widgets/ContactRow.qml - qml/widgets/EmojiDrawer.qml - qml/widgets/FontAwesome.qml - qml/widgets/IconTextField.qml - qml/widgets/InplaceEditText.qml - qml/widgets/Message.qml - qml/widgets/ScalingLabel.qml - qml/widgets/EllipsisLabel.qml - qml/widgets/MyProfile.qml - qml/widgets/ProfileList.qml - qml/widgets/RadioButton.qml - qml/widgets/Button.qml - qml/widgets/TextField.qml - qml/widgets/Toolbar.qml - qml/widgets/Statusbar.qml - qml/widgets/UnderlineTextField.qml - qml/widgets/controls/Loader.qml - qml/widgets/controls/Variables.qml + qml/widgets/ContactList.qml + qml/widgets/ContactRow.qml + qml/widgets/Message.qml + qml/widgets/MyProfile.qml + qml/widgets/ProfileList.qml + qml/widgets/ProfileRow.qml i18n/translation_de.qm i18n/translation_en.qm i18n/translation_fr.qm i18n/translation_pt.qm qml/images/cwtch_logo.png - qml/styles/CwtchProgress.qml diff --git a/qml/fonts/AdobeBlank.ttf b/qml/fonts/AdobeBlank.ttf deleted file mode 100644 index 899d4876..00000000 Binary files a/qml/fonts/AdobeBlank.ttf and /dev/null differ diff --git a/qml/fonts/Fonts.qml b/qml/fonts/Fonts.qml deleted file mode 100644 index 40d135de..00000000 --- a/qml/fonts/Fonts.qml +++ /dev/null @@ -1,27 +0,0 @@ -pragma Singleton - -import QtQuick 2.5 - -QtObject { - - property FontLoader applicationFontBold: FontLoader { - id: opensansBold - source: "qrc:/qml/fonts/opensans/OpenSans-Bold.ttf" - } - - property FontLoader applicationFontExtrBold: FontLoader { - id: opensansExtraBold - source: "qrc:/qml/fonts/opensans/OpenSans-ExtraBold.ttf" - } - - property FontLoader applicationFontRegular: FontLoader { - id: opensansRegular - source: "qrc:/qml/fonts/opensans/OpenSans-Regular.ttf" - } - - property FontLoader applicationFontLight: FontLoader { - id: opensansLight - source: "qrc:/qml/fonts/opensans/OpenSans-Light.ttf" - } - -} diff --git a/qml/fonts/MutantStandard.js b/qml/fonts/MutantStandard.js deleted file mode 100644 index 6393208e..00000000 --- a/qml/fonts/MutantStandard.js +++ /dev/null @@ -1,73 +0,0 @@ -var standard = (function () { - 'use strict'; - - var manifest = [] - var xhr = new XMLHttpRequest; - xhr.open("GET", "../images/mtnt_data.json", false); - xhr.onreadystatechange = function() { - if (xhr.readyState == XMLHttpRequest.DONE) { - manifest = JSON.parse(xhr.responseText); - } - }; - xhr.send(); - - var basecolors = ["r1","r2","r3","d1","d2","d3","o1","o2","o3","y1","y2","y3","l1","l2","l3","g1","g2","g3","t1","t2","t3","c1","c2","c3","s1","s2","s3","b1","b2","b3","v1","v2","v3","m1","m2","m3","p1","p2","p3","e1","e2","e3","k1","k2","k3"]; - - var extracolors = { - "hmn": ["h1","h2","h3","h4","h5"], - "paw": ["fe1","ft1","fk1"], - "clw": [] - } - - var standard = { - imagePath: "/", - basecolors: basecolors, - extracolors: extracolors, - morphs: ["hmn", "clw", "paw"], - parse: parse, - numColors: numColors, - colorByIndex: colorByIndex, - manifest: manifest, - } - - return standard; - - function numColors(morph) { - if (typeof extracolors[morph] === "undefined") return basecolors.length; - return basecolors.length + extracolors[morph].length; - } - - function colorByIndex(idx, morph) { - console.log(idx, morph, numColors(morph), idx % numColors(morph), basecolors.length) - var i = idx % numColors(morph); - if (i >= basecolors.length) return extracolors[morph][i - basecolors.length]; - else return basecolors[i]; - } - - function imagePath() { - return standard.imagePath; - } - - function parse(str) { - var re = ":(artist|artist_r1|artist_r2|artist_r3|artist_d1|artist_d2|artist_d3|artist_o1|artist_o2|artist_o3|artist_y1|artist_y2|artist_y3|artist_l1|artist_l2|artist_l3|artist_g1|artist_g2|artist_g3|artist_t1|artist_t2|artist_t3|artist_c1|artist_c2|artist_c3|artist_s1|artist_s2|artist_s3|artist_b1|artist_b2|artist_b3|artist_v1|artist_v2|artist_v3|artist_m1|artist_m2|artist_m3|artist_p1|artist_p2|artist_p3|artist_e1|artist_e2|artist_e3|artist_k1|artist_k2|artist_k3|artist_h1|artist_h2|artist_h3|artist_h4|artist_h5|artist_fe1|artist_ft1|artist_fk1|astronaut|astronaut_r1|astronaut_r2|astronaut_r3|astronaut_d1|astronaut_d2|astronaut_d3|astronaut_o1|astronaut_o2|astronaut_o3|astronaut_y1|astronaut_y2|astronaut_y3|astronaut_l1|astronaut_l2|astronaut_l3|astronaut_g1|astronaut_g2|astronaut_g3|astronaut_t1|astronaut_t2|astronaut_t3|astronaut_c1|astronaut_c2|astronaut_c3|astronaut_s1|astronaut_s2|astronaut_s3|astronaut_b1|astronaut_b2|astronaut_b3|astronaut_v1|astronaut_v2|astronaut_v3|astronaut_m1|astronaut_m2|astronaut_m3|astronaut_p1|astronaut_p2|astronaut_p3|astronaut_e1|astronaut_e2|astronaut_e3|astronaut_k1|astronaut_k2|astronaut_k3|astronaut_h1|astronaut_h2|astronaut_h3|astronaut_h4|astronaut_h5|astronaut_fe1|astronaut_ft1|astronaut_fk1|chef|chef_r1|chef_r2|chef_r3|chef_d1|chef_d2|chef_d3|chef_o1|chef_o2|chef_o3|chef_y1|chef_y2|chef_y3|chef_l1|chef_l2|chef_l3|chef_g1|chef_g2|chef_g3|chef_t1|chef_t2|chef_t3|chef_c1|chef_c2|chef_c3|chef_s1|chef_s2|chef_s3|chef_b1|chef_b2|chef_b3|chef_v1|chef_v2|chef_v3|chef_m1|chef_m2|chef_m3|chef_p1|chef_p2|chef_p3|chef_e1|chef_e2|chef_e3|chef_k1|chef_k2|chef_k3|chef_h1|chef_h2|chef_h3|chef_h4|chef_h5|chef_fe1|chef_ft1|chef_fk1|construction_worker|construction_worker_r1|construction_worker_r2|construction_worker_r3|construction_worker_d1|construction_worker_d2|construction_worker_d3|construction_worker_o1|construction_worker_o2|construction_worker_o3|construction_worker_y1|construction_worker_y2|construction_worker_y3|construction_worker_l1|construction_worker_l2|construction_worker_l3|construction_worker_g1|construction_worker_g2|construction_worker_g3|construction_worker_t1|construction_worker_t2|construction_worker_t3|construction_worker_c1|construction_worker_c2|construction_worker_c3|construction_worker_s1|construction_worker_s2|construction_worker_s3|construction_worker_b1|construction_worker_b2|construction_worker_b3|construction_worker_v1|construction_worker_v2|construction_worker_v3|construction_worker_m1|construction_worker_m2|construction_worker_m3|construction_worker_p1|construction_worker_p2|construction_worker_p3|construction_worker_e1|construction_worker_e2|construction_worker_e3|construction_worker_k1|construction_worker_k2|construction_worker_k3|construction_worker_h1|construction_worker_h2|construction_worker_h3|construction_worker_h4|construction_worker_h5|construction_worker_fe1|construction_worker_ft1|construction_worker_fk1|detective|detective_r1|detective_r2|detective_r3|detective_d1|detective_d2|detective_d3|detective_o1|detective_o2|detective_o3|detective_y1|detective_y2|detective_y3|detective_l1|detective_l2|detective_l3|detective_g1|detective_g2|detective_g3|detective_t1|detective_t2|detective_t3|detective_c1|detective_c2|detective_c3|detective_s1|detective_s2|detective_s3|detective_b1|detective_b2|detective_b3|detective_v1|detective_v2|detective_v3|detective_m1|detective_m2|detective_m3|detective_p1|detective_p2|detective_p3|detective_e1|detective_e2|detective_e3|detective_k1|detective_k2|detective_k3|detective_h1|detective_h2|detective_h3|detective_h4|detective_h5|detective_fe1|detective_ft1|detective_fk1|factory_worker|factory_worker_r1|factory_worker_r2|factory_worker_r3|factory_worker_d1|factory_worker_d2|factory_worker_d3|factory_worker_o1|factory_worker_o2|factory_worker_o3|factory_worker_y1|factory_worker_y2|factory_worker_y3|factory_worker_l1|factory_worker_l2|factory_worker_l3|factory_worker_g1|factory_worker_g2|factory_worker_g3|factory_worker_t1|factory_worker_t2|factory_worker_t3|factory_worker_c1|factory_worker_c2|factory_worker_c3|factory_worker_s1|factory_worker_s2|factory_worker_s3|factory_worker_b1|factory_worker_b2|factory_worker_b3|factory_worker_v1|factory_worker_v2|factory_worker_v3|factory_worker_m1|factory_worker_m2|factory_worker_m3|factory_worker_p1|factory_worker_p2|factory_worker_p3|factory_worker_e1|factory_worker_e2|factory_worker_e3|factory_worker_k1|factory_worker_k2|factory_worker_k3|factory_worker_h1|factory_worker_h2|factory_worker_h3|factory_worker_h4|factory_worker_h5|factory_worker_fe1|factory_worker_ft1|factory_worker_fk1|farmer|farmer_r1|farmer_r2|farmer_r3|farmer_d1|farmer_d2|farmer_d3|farmer_o1|farmer_o2|farmer_o3|farmer_y1|farmer_y2|farmer_y3|farmer_l1|farmer_l2|farmer_l3|farmer_g1|farmer_g2|farmer_g3|farmer_t1|farmer_t2|farmer_t3|farmer_c1|farmer_c2|farmer_c3|farmer_s1|farmer_s2|farmer_s3|farmer_b1|farmer_b2|farmer_b3|farmer_v1|farmer_v2|farmer_v3|farmer_m1|farmer_m2|farmer_m3|farmer_p1|farmer_p2|farmer_p3|farmer_e1|farmer_e2|farmer_e3|farmer_k1|farmer_k2|farmer_k3|farmer_h1|farmer_h2|farmer_h3|farmer_h4|farmer_h5|farmer_fe1|farmer_ft1|farmer_fk1|firefighter|firefighter_r1|firefighter_r2|firefighter_r3|firefighter_d1|firefighter_d2|firefighter_d3|firefighter_o1|firefighter_o2|firefighter_o3|firefighter_y1|firefighter_y2|firefighter_y3|firefighter_l1|firefighter_l2|firefighter_l3|firefighter_g1|firefighter_g2|firefighter_g3|firefighter_t1|firefighter_t2|firefighter_t3|firefighter_c1|firefighter_c2|firefighter_c3|firefighter_s1|firefighter_s2|firefighter_s3|firefighter_b1|firefighter_b2|firefighter_b3|firefighter_v1|firefighter_v2|firefighter_v3|firefighter_m1|firefighter_m2|firefighter_m3|firefighter_p1|firefighter_p2|firefighter_p3|firefighter_e1|firefighter_e2|firefighter_e3|firefighter_k1|firefighter_k2|firefighter_k3|firefighter_h1|firefighter_h2|firefighter_h3|firefighter_h4|firefighter_h5|firefighter_fe1|firefighter_ft1|firefighter_fk1|health_worker|health_worker_r1|health_worker_r2|health_worker_r3|health_worker_d1|health_worker_d2|health_worker_d3|health_worker_o1|health_worker_o2|health_worker_o3|health_worker_y1|health_worker_y2|health_worker_y3|health_worker_l1|health_worker_l2|health_worker_l3|health_worker_g1|health_worker_g2|health_worker_g3|health_worker_t1|health_worker_t2|health_worker_t3|health_worker_c1|health_worker_c2|health_worker_c3|health_worker_s1|health_worker_s2|health_worker_s3|health_worker_b1|health_worker_b2|health_worker_b3|health_worker_v1|health_worker_v2|health_worker_v3|health_worker_m1|health_worker_m2|health_worker_m3|health_worker_p1|health_worker_p2|health_worker_p3|health_worker_e1|health_worker_e2|health_worker_e3|health_worker_k1|health_worker_k2|health_worker_k3|health_worker_h1|health_worker_h2|health_worker_h3|health_worker_h4|health_worker_h5|health_worker_fe1|health_worker_ft1|health_worker_fk1|judge|judge_r1|judge_r2|judge_r3|judge_d1|judge_d2|judge_d3|judge_o1|judge_o2|judge_o3|judge_y1|judge_y2|judge_y3|judge_l1|judge_l2|judge_l3|judge_g1|judge_g2|judge_g3|judge_t1|judge_t2|judge_t3|judge_c1|judge_c2|judge_c3|judge_s1|judge_s2|judge_s3|judge_b1|judge_b2|judge_b3|judge_v1|judge_v2|judge_v3|judge_m1|judge_m2|judge_m3|judge_p1|judge_p2|judge_p3|judge_e1|judge_e2|judge_e3|judge_k1|judge_k2|judge_k3|judge_h1|judge_h2|judge_h3|judge_h4|judge_h5|judge_fe1|judge_ft1|judge_fk1|mechanic|mechanic_r1|mechanic_r2|mechanic_r3|mechanic_d1|mechanic_d2|mechanic_d3|mechanic_o1|mechanic_o2|mechanic_o3|mechanic_y1|mechanic_y2|mechanic_y3|mechanic_l1|mechanic_l2|mechanic_l3|mechanic_g1|mechanic_g2|mechanic_g3|mechanic_t1|mechanic_t2|mechanic_t3|mechanic_c1|mechanic_c2|mechanic_c3|mechanic_s1|mechanic_s2|mechanic_s3|mechanic_b1|mechanic_b2|mechanic_b3|mechanic_v1|mechanic_v2|mechanic_v3|mechanic_m1|mechanic_m2|mechanic_m3|mechanic_p1|mechanic_p2|mechanic_p3|mechanic_e1|mechanic_e2|mechanic_e3|mechanic_k1|mechanic_k2|mechanic_k3|mechanic_h1|mechanic_h2|mechanic_h3|mechanic_h4|mechanic_h5|mechanic_fe1|mechanic_ft1|mechanic_fk1|office_worker|office_worker_r1|office_worker_r2|office_worker_r3|office_worker_d1|office_worker_d2|office_worker_d3|office_worker_o1|office_worker_o2|office_worker_o3|office_worker_y1|office_worker_y2|office_worker_y3|office_worker_l1|office_worker_l2|office_worker_l3|office_worker_g1|office_worker_g2|office_worker_g3|office_worker_t1|office_worker_t2|office_worker_t3|office_worker_c1|office_worker_c2|office_worker_c3|office_worker_s1|office_worker_s2|office_worker_s3|office_worker_b1|office_worker_b2|office_worker_b3|office_worker_v1|office_worker_v2|office_worker_v3|office_worker_m1|office_worker_m2|office_worker_m3|office_worker_p1|office_worker_p2|office_worker_p3|office_worker_e1|office_worker_e2|office_worker_e3|office_worker_k1|office_worker_k2|office_worker_k3|office_worker_h1|office_worker_h2|office_worker_h3|office_worker_h4|office_worker_h5|office_worker_fe1|office_worker_ft1|office_worker_fk1|pilot|pilot_r1|pilot_r2|pilot_r3|pilot_d1|pilot_d2|pilot_d3|pilot_o1|pilot_o2|pilot_o3|pilot_y1|pilot_y2|pilot_y3|pilot_l1|pilot_l2|pilot_l3|pilot_g1|pilot_g2|pilot_g3|pilot_t1|pilot_t2|pilot_t3|pilot_c1|pilot_c2|pilot_c3|pilot_s1|pilot_s2|pilot_s3|pilot_b1|pilot_b2|pilot_b3|pilot_v1|pilot_v2|pilot_v3|pilot_m1|pilot_m2|pilot_m3|pilot_p1|pilot_p2|pilot_p3|pilot_e1|pilot_e2|pilot_e3|pilot_k1|pilot_k2|pilot_k3|pilot_h1|pilot_h2|pilot_h3|pilot_h4|pilot_h5|pilot_fe1|pilot_ft1|pilot_fk1|scientist|scientist_r1|scientist_r2|scientist_r3|scientist_d1|scientist_d2|scientist_d3|scientist_o1|scientist_o2|scientist_o3|scientist_y1|scientist_y2|scientist_y3|scientist_l1|scientist_l2|scientist_l3|scientist_g1|scientist_g2|scientist_g3|scientist_t1|scientist_t2|scientist_t3|scientist_c1|scientist_c2|scientist_c3|scientist_s1|scientist_s2|scientist_s3|scientist_b1|scientist_b2|scientist_b3|scientist_v1|scientist_v2|scientist_v3|scientist_m1|scientist_m2|scientist_m3|scientist_p1|scientist_p2|scientist_p3|scientist_e1|scientist_e2|scientist_e3|scientist_k1|scientist_k2|scientist_k3|scientist_h1|scientist_h2|scientist_h3|scientist_h4|scientist_h5|scientist_fe1|scientist_ft1|scientist_fk1|singer|singer_r1|singer_r2|singer_r3|singer_d1|singer_d2|singer_d3|singer_o1|singer_o2|singer_o3|singer_y1|singer_y2|singer_y3|singer_l1|singer_l2|singer_l3|singer_g1|singer_g2|singer_g3|singer_t1|singer_t2|singer_t3|singer_c1|singer_c2|singer_c3|singer_s1|singer_s2|singer_s3|singer_b1|singer_b2|singer_b3|singer_v1|singer_v2|singer_v3|singer_m1|singer_m2|singer_m3|singer_p1|singer_p2|singer_p3|singer_e1|singer_e2|singer_e3|singer_k1|singer_k2|singer_k3|singer_h1|singer_h2|singer_h3|singer_h4|singer_h5|singer_fe1|singer_ft1|singer_fk1|student|student_r1|student_r2|student_r3|student_d1|student_d2|student_d3|student_o1|student_o2|student_o3|student_y1|student_y2|student_y3|student_l1|student_l2|student_l3|student_g1|student_g2|student_g3|student_t1|student_t2|student_t3|student_c1|student_c2|student_c3|student_s1|student_s2|student_s3|student_b1|student_b2|student_b3|student_v1|student_v2|student_v3|student_m1|student_m2|student_m3|student_p1|student_p2|student_p3|student_e1|student_e2|student_e3|student_k1|student_k2|student_k3|student_h1|student_h2|student_h3|student_h4|student_h5|student_fe1|student_ft1|student_fk1|teacher|teacher_r1|teacher_r2|teacher_r3|teacher_d1|teacher_d2|teacher_d3|teacher_o1|teacher_o2|teacher_o3|teacher_y1|teacher_y2|teacher_y3|teacher_l1|teacher_l2|teacher_l3|teacher_g1|teacher_g2|teacher_g3|teacher_t1|teacher_t2|teacher_t3|teacher_c1|teacher_c2|teacher_c3|teacher_s1|teacher_s2|teacher_s3|teacher_b1|teacher_b2|teacher_b3|teacher_v1|teacher_v2|teacher_v3|teacher_m1|teacher_m2|teacher_m3|teacher_p1|teacher_p2|teacher_p3|teacher_e1|teacher_e2|teacher_e3|teacher_k1|teacher_k2|teacher_k3|teacher_h1|teacher_h2|teacher_h3|teacher_h4|teacher_h5|teacher_fe1|teacher_ft1|teacher_fk1|technologist|technologist_r1|technologist_r2|technologist_r3|technologist_d1|technologist_d2|technologist_d3|technologist_o1|technologist_o2|technologist_o3|technologist_y1|technologist_y2|technologist_y3|technologist_l1|technologist_l2|technologist_l3|technologist_g1|technologist_g2|technologist_g3|technologist_t1|technologist_t2|technologist_t3|technologist_c1|technologist_c2|technologist_c3|technologist_s1|technologist_s2|technologist_s3|technologist_b1|technologist_b2|technologist_b3|technologist_v1|technologist_v2|technologist_v3|technologist_m1|technologist_m2|technologist_m3|technologist_p1|technologist_p2|technologist_p3|technologist_e1|technologist_e2|technologist_e3|technologist_k1|technologist_k2|technologist_k3|technologist_h1|technologist_h2|technologist_h3|technologist_h4|technologist_h5|technologist_fe1|technologist_ft1|technologist_fk1|umbrella|closed_umbrella|studio_microphone|musical_score|football|basketball|baseball|softball|tennis|8_ball|volleyball|american_football|rugby_ball|smile|wink|upside_down_smile|halo|content|big_smile|happy|grin|sweat_smile|grinning|laughing|joy|rofl|stick_out_tongue|wink_tongue|xd_tongue|yum|money_face|party_face|embarrassed|blushing|relaxed|hug|kiss|wink_kiss|happy_kiss|blush_kiss|smile_hearts|heart_eyes|soft|headpats|face_without_mouth|straight_face|expressionless|concern|disappointed_but_relieved|pensive|unamused|smirk|thinking|shush|hand_over_mouth|monocle|raised_eyebrow|lying_face|rolling_eyes|grimace|starry_eyes|confused|woozy|crazy|dead|mind_blown|open_mouth|surprised|worried|shocked|scared|cold_sweat|scream|astonished|weary|exhausted|pleading|asleep|sleepy|zippy_face|drooling|hot|cold|bandaged|medical_mask|sneezing|nauseous|sick|vomiting|angry|very_angry|angry_steam|swearing|sweat|unsure|slight_frown|frown|unhappy|disappointed|persevering|confounded|crying|loud_cry|cool_face|nerd_face|cowhand|clown|shit|hot_shit|imp_devious|imp_angry|tengu_mask|robot|alien_monster|alien|grumpy_block|cat_smile|cat_grin|cat_joy|cat_devious|cat_pouting|cat_crying|cat_kiss|cat_heart_eyes|cat_scream|blep|eyes|ghost|skull|skull_and_crossbones|jack_o_lantern|hand_hmn|hand_hmn_r1|hand_hmn_r2|hand_hmn_r3|hand_hmn_d1|hand_hmn_d2|hand_hmn_d3|hand_hmn_o1|hand_hmn_o2|hand_hmn_o3|hand_hmn_y1|hand_hmn_y2|hand_hmn_y3|hand_hmn_l1|hand_hmn_l2|hand_hmn_l3|hand_hmn_g1|hand_hmn_g2|hand_hmn_g3|hand_hmn_t1|hand_hmn_t2|hand_hmn_t3|hand_hmn_c1|hand_hmn_c2|hand_hmn_c3|hand_hmn_s1|hand_hmn_s2|hand_hmn_s3|hand_hmn_b1|hand_hmn_b2|hand_hmn_b3|hand_hmn_v1|hand_hmn_v2|hand_hmn_v3|hand_hmn_m1|hand_hmn_m2|hand_hmn_m3|hand_hmn_p1|hand_hmn_p2|hand_hmn_p3|hand_hmn_e1|hand_hmn_e2|hand_hmn_e3|hand_hmn_k1|hand_hmn_k2|hand_hmn_k3|hand_hmn_h1|hand_hmn_h2|hand_hmn_h3|hand_hmn_h4|hand_hmn_h5|hand_splayed_hmn|hand_splayed_hmn_r1|hand_splayed_hmn_r2|hand_splayed_hmn_r3|hand_splayed_hmn_d1|hand_splayed_hmn_d2|hand_splayed_hmn_d3|hand_splayed_hmn_o1|hand_splayed_hmn_o2|hand_splayed_hmn_o3|hand_splayed_hmn_y1|hand_splayed_hmn_y2|hand_splayed_hmn_y3|hand_splayed_hmn_l1|hand_splayed_hmn_l2|hand_splayed_hmn_l3|hand_splayed_hmn_g1|hand_splayed_hmn_g2|hand_splayed_hmn_g3|hand_splayed_hmn_t1|hand_splayed_hmn_t2|hand_splayed_hmn_t3|hand_splayed_hmn_c1|hand_splayed_hmn_c2|hand_splayed_hmn_c3|hand_splayed_hmn_s1|hand_splayed_hmn_s2|hand_splayed_hmn_s3|hand_splayed_hmn_b1|hand_splayed_hmn_b2|hand_splayed_hmn_b3|hand_splayed_hmn_v1|hand_splayed_hmn_v2|hand_splayed_hmn_v3|hand_splayed_hmn_m1|hand_splayed_hmn_m2|hand_splayed_hmn_m3|hand_splayed_hmn_p1|hand_splayed_hmn_p2|hand_splayed_hmn_p3|hand_splayed_hmn_e1|hand_splayed_hmn_e2|hand_splayed_hmn_e3|hand_splayed_hmn_k1|hand_splayed_hmn_k2|hand_splayed_hmn_k3|hand_splayed_hmn_h1|hand_splayed_hmn_h2|hand_splayed_hmn_h3|hand_splayed_hmn_h4|hand_splayed_hmn_h5|back_of_hand_hmn|back_of_hand_hmn_r1|back_of_hand_hmn_r2|back_of_hand_hmn_r3|back_of_hand_hmn_d1|back_of_hand_hmn_d2|back_of_hand_hmn_d3|back_of_hand_hmn_o1|back_of_hand_hmn_o2|back_of_hand_hmn_o3|back_of_hand_hmn_y1|back_of_hand_hmn_y2|back_of_hand_hmn_y3|back_of_hand_hmn_l1|back_of_hand_hmn_l2|back_of_hand_hmn_l3|back_of_hand_hmn_g1|back_of_hand_hmn_g2|back_of_hand_hmn_g3|back_of_hand_hmn_t1|back_of_hand_hmn_t2|back_of_hand_hmn_t3|back_of_hand_hmn_c1|back_of_hand_hmn_c2|back_of_hand_hmn_c3|back_of_hand_hmn_s1|back_of_hand_hmn_s2|back_of_hand_hmn_s3|back_of_hand_hmn_b1|back_of_hand_hmn_b2|back_of_hand_hmn_b3|back_of_hand_hmn_v1|back_of_hand_hmn_v2|back_of_hand_hmn_v3|back_of_hand_hmn_m1|back_of_hand_hmn_m2|back_of_hand_hmn_m3|back_of_hand_hmn_p1|back_of_hand_hmn_p2|back_of_hand_hmn_p3|back_of_hand_hmn_e1|back_of_hand_hmn_e2|back_of_hand_hmn_e3|back_of_hand_hmn_k1|back_of_hand_hmn_k2|back_of_hand_hmn_k3|back_of_hand_hmn_h1|back_of_hand_hmn_h2|back_of_hand_hmn_h3|back_of_hand_hmn_h4|back_of_hand_hmn_h5|v_hmn|v_hmn_r1|v_hmn_r2|v_hmn_r3|v_hmn_d1|v_hmn_d2|v_hmn_d3|v_hmn_o1|v_hmn_o2|v_hmn_o3|v_hmn_y1|v_hmn_y2|v_hmn_y3|v_hmn_l1|v_hmn_l2|v_hmn_l3|v_hmn_g1|v_hmn_g2|v_hmn_g3|v_hmn_t1|v_hmn_t2|v_hmn_t3|v_hmn_c1|v_hmn_c2|v_hmn_c3|v_hmn_s1|v_hmn_s2|v_hmn_s3|v_hmn_b1|v_hmn_b2|v_hmn_b3|v_hmn_v1|v_hmn_v2|v_hmn_v3|v_hmn_m1|v_hmn_m2|v_hmn_m3|v_hmn_p1|v_hmn_p2|v_hmn_p3|v_hmn_e1|v_hmn_e2|v_hmn_e3|v_hmn_k1|v_hmn_k2|v_hmn_k3|v_hmn_h1|v_hmn_h2|v_hmn_h3|v_hmn_h4|v_hmn_h5|crossed_fingers_hmn|crossed_fingers_hmn_r1|crossed_fingers_hmn_r2|crossed_fingers_hmn_r3|crossed_fingers_hmn_d1|crossed_fingers_hmn_d2|crossed_fingers_hmn_d3|crossed_fingers_hmn_o1|crossed_fingers_hmn_o2|crossed_fingers_hmn_o3|crossed_fingers_hmn_y1|crossed_fingers_hmn_y2|crossed_fingers_hmn_y3|crossed_fingers_hmn_l1|crossed_fingers_hmn_l2|crossed_fingers_hmn_l3|crossed_fingers_hmn_g1|crossed_fingers_hmn_g2|crossed_fingers_hmn_g3|crossed_fingers_hmn_t1|crossed_fingers_hmn_t2|crossed_fingers_hmn_t3|crossed_fingers_hmn_c1|crossed_fingers_hmn_c2|crossed_fingers_hmn_c3|crossed_fingers_hmn_s1|crossed_fingers_hmn_s2|crossed_fingers_hmn_s3|crossed_fingers_hmn_b1|crossed_fingers_hmn_b2|crossed_fingers_hmn_b3|crossed_fingers_hmn_v1|crossed_fingers_hmn_v2|crossed_fingers_hmn_v3|crossed_fingers_hmn_m1|crossed_fingers_hmn_m2|crossed_fingers_hmn_m3|crossed_fingers_hmn_p1|crossed_fingers_hmn_p2|crossed_fingers_hmn_p3|crossed_fingers_hmn_e1|crossed_fingers_hmn_e2|crossed_fingers_hmn_e3|crossed_fingers_hmn_k1|crossed_fingers_hmn_k2|crossed_fingers_hmn_k3|crossed_fingers_hmn_h1|crossed_fingers_hmn_h2|crossed_fingers_hmn_h3|crossed_fingers_hmn_h4|crossed_fingers_hmn_h5|index_finger_hmn|index_finger_hmn_r1|index_finger_hmn_r2|index_finger_hmn_r3|index_finger_hmn_d1|index_finger_hmn_d2|index_finger_hmn_d3|index_finger_hmn_o1|index_finger_hmn_o2|index_finger_hmn_o3|index_finger_hmn_y1|index_finger_hmn_y2|index_finger_hmn_y3|index_finger_hmn_l1|index_finger_hmn_l2|index_finger_hmn_l3|index_finger_hmn_g1|index_finger_hmn_g2|index_finger_hmn_g3|index_finger_hmn_t1|index_finger_hmn_t2|index_finger_hmn_t3|index_finger_hmn_c1|index_finger_hmn_c2|index_finger_hmn_c3|index_finger_hmn_s1|index_finger_hmn_s2|index_finger_hmn_s3|index_finger_hmn_b1|index_finger_hmn_b2|index_finger_hmn_b3|index_finger_hmn_v1|index_finger_hmn_v2|index_finger_hmn_v3|index_finger_hmn_m1|index_finger_hmn_m2|index_finger_hmn_m3|index_finger_hmn_p1|index_finger_hmn_p2|index_finger_hmn_p3|index_finger_hmn_e1|index_finger_hmn_e2|index_finger_hmn_e3|index_finger_hmn_k1|index_finger_hmn_k2|index_finger_hmn_k3|index_finger_hmn_h1|index_finger_hmn_h2|index_finger_hmn_h3|index_finger_hmn_h4|index_finger_hmn_h5|metal_hmn|metal_hmn_r1|metal_hmn_r2|metal_hmn_r3|metal_hmn_d1|metal_hmn_d2|metal_hmn_d3|metal_hmn_o1|metal_hmn_o2|metal_hmn_o3|metal_hmn_y1|metal_hmn_y2|metal_hmn_y3|metal_hmn_l1|metal_hmn_l2|metal_hmn_l3|metal_hmn_g1|metal_hmn_g2|metal_hmn_g3|metal_hmn_t1|metal_hmn_t2|metal_hmn_t3|metal_hmn_c1|metal_hmn_c2|metal_hmn_c3|metal_hmn_s1|metal_hmn_s2|metal_hmn_s3|metal_hmn_b1|metal_hmn_b2|metal_hmn_b3|metal_hmn_v1|metal_hmn_v2|metal_hmn_v3|metal_hmn_m1|metal_hmn_m2|metal_hmn_m3|metal_hmn_p1|metal_hmn_p2|metal_hmn_p3|metal_hmn_e1|metal_hmn_e2|metal_hmn_e3|metal_hmn_k1|metal_hmn_k2|metal_hmn_k3|metal_hmn_h1|metal_hmn_h2|metal_hmn_h3|metal_hmn_h4|metal_hmn_h5|vulcan_hmn|vulcan_hmn_r1|vulcan_hmn_r2|vulcan_hmn_r3|vulcan_hmn_d1|vulcan_hmn_d2|vulcan_hmn_d3|vulcan_hmn_o1|vulcan_hmn_o2|vulcan_hmn_o3|vulcan_hmn_y1|vulcan_hmn_y2|vulcan_hmn_y3|vulcan_hmn_l1|vulcan_hmn_l2|vulcan_hmn_l3|vulcan_hmn_g1|vulcan_hmn_g2|vulcan_hmn_g3|vulcan_hmn_t1|vulcan_hmn_t2|vulcan_hmn_t3|vulcan_hmn_c1|vulcan_hmn_c2|vulcan_hmn_c3|vulcan_hmn_s1|vulcan_hmn_s2|vulcan_hmn_s3|vulcan_hmn_b1|vulcan_hmn_b2|vulcan_hmn_b3|vulcan_hmn_v1|vulcan_hmn_v2|vulcan_hmn_v3|vulcan_hmn_m1|vulcan_hmn_m2|vulcan_hmn_m3|vulcan_hmn_p1|vulcan_hmn_p2|vulcan_hmn_p3|vulcan_hmn_e1|vulcan_hmn_e2|vulcan_hmn_e3|vulcan_hmn_k1|vulcan_hmn_k2|vulcan_hmn_k3|vulcan_hmn_h1|vulcan_hmn_h2|vulcan_hmn_h3|vulcan_hmn_h4|vulcan_hmn_h5|thumbs_up_hmn|thumbs_up_hmn_r1|thumbs_up_hmn_r2|thumbs_up_hmn_r3|thumbs_up_hmn_d1|thumbs_up_hmn_d2|thumbs_up_hmn_d3|thumbs_up_hmn_o1|thumbs_up_hmn_o2|thumbs_up_hmn_o3|thumbs_up_hmn_y1|thumbs_up_hmn_y2|thumbs_up_hmn_y3|thumbs_up_hmn_l1|thumbs_up_hmn_l2|thumbs_up_hmn_l3|thumbs_up_hmn_g1|thumbs_up_hmn_g2|thumbs_up_hmn_g3|thumbs_up_hmn_t1|thumbs_up_hmn_t2|thumbs_up_hmn_t3|thumbs_up_hmn_c1|thumbs_up_hmn_c2|thumbs_up_hmn_c3|thumbs_up_hmn_s1|thumbs_up_hmn_s2|thumbs_up_hmn_s3|thumbs_up_hmn_b1|thumbs_up_hmn_b2|thumbs_up_hmn_b3|thumbs_up_hmn_v1|thumbs_up_hmn_v2|thumbs_up_hmn_v3|thumbs_up_hmn_m1|thumbs_up_hmn_m2|thumbs_up_hmn_m3|thumbs_up_hmn_p1|thumbs_up_hmn_p2|thumbs_up_hmn_p3|thumbs_up_hmn_e1|thumbs_up_hmn_e2|thumbs_up_hmn_e3|thumbs_up_hmn_k1|thumbs_up_hmn_k2|thumbs_up_hmn_k3|thumbs_up_hmn_h1|thumbs_up_hmn_h2|thumbs_up_hmn_h3|thumbs_up_hmn_h4|thumbs_up_hmn_h5|thumbs_down_hmn|thumbs_down_hmn_r1|thumbs_down_hmn_r2|thumbs_down_hmn_r3|thumbs_down_hmn_d1|thumbs_down_hmn_d2|thumbs_down_hmn_d3|thumbs_down_hmn_o1|thumbs_down_hmn_o2|thumbs_down_hmn_o3|thumbs_down_hmn_y1|thumbs_down_hmn_y2|thumbs_down_hmn_y3|thumbs_down_hmn_l1|thumbs_down_hmn_l2|thumbs_down_hmn_l3|thumbs_down_hmn_g1|thumbs_down_hmn_g2|thumbs_down_hmn_g3|thumbs_down_hmn_t1|thumbs_down_hmn_t2|thumbs_down_hmn_t3|thumbs_down_hmn_c1|thumbs_down_hmn_c2|thumbs_down_hmn_c3|thumbs_down_hmn_s1|thumbs_down_hmn_s2|thumbs_down_hmn_s3|thumbs_down_hmn_b1|thumbs_down_hmn_b2|thumbs_down_hmn_b3|thumbs_down_hmn_v1|thumbs_down_hmn_v2|thumbs_down_hmn_v3|thumbs_down_hmn_m1|thumbs_down_hmn_m2|thumbs_down_hmn_m3|thumbs_down_hmn_p1|thumbs_down_hmn_p2|thumbs_down_hmn_p3|thumbs_down_hmn_e1|thumbs_down_hmn_e2|thumbs_down_hmn_e3|thumbs_down_hmn_k1|thumbs_down_hmn_k2|thumbs_down_hmn_k3|thumbs_down_hmn_h1|thumbs_down_hmn_h2|thumbs_down_hmn_h3|thumbs_down_hmn_h4|thumbs_down_hmn_h5|call_me_hmn|call_me_hmn_r1|call_me_hmn_r2|call_me_hmn_r3|call_me_hmn_d1|call_me_hmn_d2|call_me_hmn_d3|call_me_hmn_o1|call_me_hmn_o2|call_me_hmn_o3|call_me_hmn_y1|call_me_hmn_y2|call_me_hmn_y3|call_me_hmn_l1|call_me_hmn_l2|call_me_hmn_l3|call_me_hmn_g1|call_me_hmn_g2|call_me_hmn_g3|call_me_hmn_t1|call_me_hmn_t2|call_me_hmn_t3|call_me_hmn_c1|call_me_hmn_c2|call_me_hmn_c3|call_me_hmn_s1|call_me_hmn_s2|call_me_hmn_s3|call_me_hmn_b1|call_me_hmn_b2|call_me_hmn_b3|call_me_hmn_v1|call_me_hmn_v2|call_me_hmn_v3|call_me_hmn_m1|call_me_hmn_m2|call_me_hmn_m3|call_me_hmn_p1|call_me_hmn_p2|call_me_hmn_p3|call_me_hmn_e1|call_me_hmn_e2|call_me_hmn_e3|call_me_hmn_k1|call_me_hmn_k2|call_me_hmn_k3|call_me_hmn_h1|call_me_hmn_h2|call_me_hmn_h3|call_me_hmn_h4|call_me_hmn_h5|middle_finger_hmn|middle_finger_hmn_r1|middle_finger_hmn_r2|middle_finger_hmn_r3|middle_finger_hmn_d1|middle_finger_hmn_d2|middle_finger_hmn_d3|middle_finger_hmn_o1|middle_finger_hmn_o2|middle_finger_hmn_o3|middle_finger_hmn_y1|middle_finger_hmn_y2|middle_finger_hmn_y3|middle_finger_hmn_l1|middle_finger_hmn_l2|middle_finger_hmn_l3|middle_finger_hmn_g1|middle_finger_hmn_g2|middle_finger_hmn_g3|middle_finger_hmn_t1|middle_finger_hmn_t2|middle_finger_hmn_t3|middle_finger_hmn_c1|middle_finger_hmn_c2|middle_finger_hmn_c3|middle_finger_hmn_s1|middle_finger_hmn_s2|middle_finger_hmn_s3|middle_finger_hmn_b1|middle_finger_hmn_b2|middle_finger_hmn_b3|middle_finger_hmn_v1|middle_finger_hmn_v2|middle_finger_hmn_v3|middle_finger_hmn_m1|middle_finger_hmn_m2|middle_finger_hmn_m3|middle_finger_hmn_p1|middle_finger_hmn_p2|middle_finger_hmn_p3|middle_finger_hmn_e1|middle_finger_hmn_e2|middle_finger_hmn_e3|middle_finger_hmn_k1|middle_finger_hmn_k2|middle_finger_hmn_k3|middle_finger_hmn_h1|middle_finger_hmn_h2|middle_finger_hmn_h3|middle_finger_hmn_h4|middle_finger_hmn_h5|point_up_hmn|point_up_hmn_r1|point_up_hmn_r2|point_up_hmn_r3|point_up_hmn_d1|point_up_hmn_d2|point_up_hmn_d3|point_up_hmn_o1|point_up_hmn_o2|point_up_hmn_o3|point_up_hmn_y1|point_up_hmn_y2|point_up_hmn_y3|point_up_hmn_l1|point_up_hmn_l2|point_up_hmn_l3|point_up_hmn_g1|point_up_hmn_g2|point_up_hmn_g3|point_up_hmn_t1|point_up_hmn_t2|point_up_hmn_t3|point_up_hmn_c1|point_up_hmn_c2|point_up_hmn_c3|point_up_hmn_s1|point_up_hmn_s2|point_up_hmn_s3|point_up_hmn_b1|point_up_hmn_b2|point_up_hmn_b3|point_up_hmn_v1|point_up_hmn_v2|point_up_hmn_v3|point_up_hmn_m1|point_up_hmn_m2|point_up_hmn_m3|point_up_hmn_p1|point_up_hmn_p2|point_up_hmn_p3|point_up_hmn_e1|point_up_hmn_e2|point_up_hmn_e3|point_up_hmn_k1|point_up_hmn_k2|point_up_hmn_k3|point_up_hmn_h1|point_up_hmn_h2|point_up_hmn_h3|point_up_hmn_h4|point_up_hmn_h5|point_down_hmn|point_down_hmn_r1|point_down_hmn_r2|point_down_hmn_r3|point_down_hmn_d1|point_down_hmn_d2|point_down_hmn_d3|point_down_hmn_o1|point_down_hmn_o2|point_down_hmn_o3|point_down_hmn_y1|point_down_hmn_y2|point_down_hmn_y3|point_down_hmn_l1|point_down_hmn_l2|point_down_hmn_l3|point_down_hmn_g1|point_down_hmn_g2|point_down_hmn_g3|point_down_hmn_t1|point_down_hmn_t2|point_down_hmn_t3|point_down_hmn_c1|point_down_hmn_c2|point_down_hmn_c3|point_down_hmn_s1|point_down_hmn_s2|point_down_hmn_s3|point_down_hmn_b1|point_down_hmn_b2|point_down_hmn_b3|point_down_hmn_v1|point_down_hmn_v2|point_down_hmn_v3|point_down_hmn_m1|point_down_hmn_m2|point_down_hmn_m3|point_down_hmn_p1|point_down_hmn_p2|point_down_hmn_p3|point_down_hmn_e1|point_down_hmn_e2|point_down_hmn_e3|point_down_hmn_k1|point_down_hmn_k2|point_down_hmn_k3|point_down_hmn_h1|point_down_hmn_h2|point_down_hmn_h3|point_down_hmn_h4|point_down_hmn_h5|point_left_hmn|point_left_hmn_r1|point_left_hmn_r2|point_left_hmn_r3|point_left_hmn_d1|point_left_hmn_d2|point_left_hmn_d3|point_left_hmn_o1|point_left_hmn_o2|point_left_hmn_o3|point_left_hmn_y1|point_left_hmn_y2|point_left_hmn_y3|point_left_hmn_l1|point_left_hmn_l2|point_left_hmn_l3|point_left_hmn_g1|point_left_hmn_g2|point_left_hmn_g3|point_left_hmn_t1|point_left_hmn_t2|point_left_hmn_t3|point_left_hmn_c1|point_left_hmn_c2|point_left_hmn_c3|point_left_hmn_s1|point_left_hmn_s2|point_left_hmn_s3|point_left_hmn_b1|point_left_hmn_b2|point_left_hmn_b3|point_left_hmn_v1|point_left_hmn_v2|point_left_hmn_v3|point_left_hmn_m1|point_left_hmn_m2|point_left_hmn_m3|point_left_hmn_p1|point_left_hmn_p2|point_left_hmn_p3|point_left_hmn_e1|point_left_hmn_e2|point_left_hmn_e3|point_left_hmn_k1|point_left_hmn_k2|point_left_hmn_k3|point_left_hmn_h1|point_left_hmn_h2|point_left_hmn_h3|point_left_hmn_h4|point_left_hmn_h5|point_right_hmn|point_right_hmn_r1|point_right_hmn_r2|point_right_hmn_r3|point_right_hmn_d1|point_right_hmn_d2|point_right_hmn_d3|point_right_hmn_o1|point_right_hmn_o2|point_right_hmn_o3|point_right_hmn_y1|point_right_hmn_y2|point_right_hmn_y3|point_right_hmn_l1|point_right_hmn_l2|point_right_hmn_l3|point_right_hmn_g1|point_right_hmn_g2|point_right_hmn_g3|point_right_hmn_t1|point_right_hmn_t2|point_right_hmn_t3|point_right_hmn_c1|point_right_hmn_c2|point_right_hmn_c3|point_right_hmn_s1|point_right_hmn_s2|point_right_hmn_s3|point_right_hmn_b1|point_right_hmn_b2|point_right_hmn_b3|point_right_hmn_v1|point_right_hmn_v2|point_right_hmn_v3|point_right_hmn_m1|point_right_hmn_m2|point_right_hmn_m3|point_right_hmn_p1|point_right_hmn_p2|point_right_hmn_p3|point_right_hmn_e1|point_right_hmn_e2|point_right_hmn_e3|point_right_hmn_k1|point_right_hmn_k2|point_right_hmn_k3|point_right_hmn_h1|point_right_hmn_h2|point_right_hmn_h3|point_right_hmn_h4|point_right_hmn_h5|fist_hmn|fist_hmn_r1|fist_hmn_r2|fist_hmn_r3|fist_hmn_d1|fist_hmn_d2|fist_hmn_d3|fist_hmn_o1|fist_hmn_o2|fist_hmn_o3|fist_hmn_y1|fist_hmn_y2|fist_hmn_y3|fist_hmn_l1|fist_hmn_l2|fist_hmn_l3|fist_hmn_g1|fist_hmn_g2|fist_hmn_g3|fist_hmn_t1|fist_hmn_t2|fist_hmn_t3|fist_hmn_c1|fist_hmn_c2|fist_hmn_c3|fist_hmn_s1|fist_hmn_s2|fist_hmn_s3|fist_hmn_b1|fist_hmn_b2|fist_hmn_b3|fist_hmn_v1|fist_hmn_v2|fist_hmn_v3|fist_hmn_m1|fist_hmn_m2|fist_hmn_m3|fist_hmn_p1|fist_hmn_p2|fist_hmn_p3|fist_hmn_e1|fist_hmn_e2|fist_hmn_e3|fist_hmn_k1|fist_hmn_k2|fist_hmn_k3|fist_hmn_h1|fist_hmn_h2|fist_hmn_h3|fist_hmn_h4|fist_hmn_h5|fist_facing_left_hmn|fist_facing_left_hmn_r1|fist_facing_left_hmn_r2|fist_facing_left_hmn_r3|fist_facing_left_hmn_d1|fist_facing_left_hmn_d2|fist_facing_left_hmn_d3|fist_facing_left_hmn_o1|fist_facing_left_hmn_o2|fist_facing_left_hmn_o3|fist_facing_left_hmn_y1|fist_facing_left_hmn_y2|fist_facing_left_hmn_y3|fist_facing_left_hmn_l1|fist_facing_left_hmn_l2|fist_facing_left_hmn_l3|fist_facing_left_hmn_g1|fist_facing_left_hmn_g2|fist_facing_left_hmn_g3|fist_facing_left_hmn_t1|fist_facing_left_hmn_t2|fist_facing_left_hmn_t3|fist_facing_left_hmn_c1|fist_facing_left_hmn_c2|fist_facing_left_hmn_c3|fist_facing_left_hmn_s1|fist_facing_left_hmn_s2|fist_facing_left_hmn_s3|fist_facing_left_hmn_b1|fist_facing_left_hmn_b2|fist_facing_left_hmn_b3|fist_facing_left_hmn_v1|fist_facing_left_hmn_v2|fist_facing_left_hmn_v3|fist_facing_left_hmn_m1|fist_facing_left_hmn_m2|fist_facing_left_hmn_m3|fist_facing_left_hmn_p1|fist_facing_left_hmn_p2|fist_facing_left_hmn_p3|fist_facing_left_hmn_e1|fist_facing_left_hmn_e2|fist_facing_left_hmn_e3|fist_facing_left_hmn_k1|fist_facing_left_hmn_k2|fist_facing_left_hmn_k3|fist_facing_left_hmn_h1|fist_facing_left_hmn_h2|fist_facing_left_hmn_h3|fist_facing_left_hmn_h4|fist_facing_left_hmn_h5|fist_facing_right_hmn|fist_facing_right_hmn_r1|fist_facing_right_hmn_r2|fist_facing_right_hmn_r3|fist_facing_right_hmn_d1|fist_facing_right_hmn_d2|fist_facing_right_hmn_d3|fist_facing_right_hmn_o1|fist_facing_right_hmn_o2|fist_facing_right_hmn_o3|fist_facing_right_hmn_y1|fist_facing_right_hmn_y2|fist_facing_right_hmn_y3|fist_facing_right_hmn_l1|fist_facing_right_hmn_l2|fist_facing_right_hmn_l3|fist_facing_right_hmn_g1|fist_facing_right_hmn_g2|fist_facing_right_hmn_g3|fist_facing_right_hmn_t1|fist_facing_right_hmn_t2|fist_facing_right_hmn_t3|fist_facing_right_hmn_c1|fist_facing_right_hmn_c2|fist_facing_right_hmn_c3|fist_facing_right_hmn_s1|fist_facing_right_hmn_s2|fist_facing_right_hmn_s3|fist_facing_right_hmn_b1|fist_facing_right_hmn_b2|fist_facing_right_hmn_b3|fist_facing_right_hmn_v1|fist_facing_right_hmn_v2|fist_facing_right_hmn_v3|fist_facing_right_hmn_m1|fist_facing_right_hmn_m2|fist_facing_right_hmn_m3|fist_facing_right_hmn_p1|fist_facing_right_hmn_p2|fist_facing_right_hmn_p3|fist_facing_right_hmn_e1|fist_facing_right_hmn_e2|fist_facing_right_hmn_e3|fist_facing_right_hmn_k1|fist_facing_right_hmn_k2|fist_facing_right_hmn_k3|fist_facing_right_hmn_h1|fist_facing_right_hmn_h2|fist_facing_right_hmn_h3|fist_facing_right_hmn_h4|fist_facing_right_hmn_h5|punch_hmn|punch_hmn_r1|punch_hmn_r2|punch_hmn_r3|punch_hmn_d1|punch_hmn_d2|punch_hmn_d3|punch_hmn_o1|punch_hmn_o2|punch_hmn_o3|punch_hmn_y1|punch_hmn_y2|punch_hmn_y3|punch_hmn_l1|punch_hmn_l2|punch_hmn_l3|punch_hmn_g1|punch_hmn_g2|punch_hmn_g3|punch_hmn_t1|punch_hmn_t2|punch_hmn_t3|punch_hmn_c1|punch_hmn_c2|punch_hmn_c3|punch_hmn_s1|punch_hmn_s2|punch_hmn_s3|punch_hmn_b1|punch_hmn_b2|punch_hmn_b3|punch_hmn_v1|punch_hmn_v2|punch_hmn_v3|punch_hmn_m1|punch_hmn_m2|punch_hmn_m3|punch_hmn_p1|punch_hmn_p2|punch_hmn_p3|punch_hmn_e1|punch_hmn_e2|punch_hmn_e3|punch_hmn_k1|punch_hmn_k2|punch_hmn_k3|punch_hmn_h1|punch_hmn_h2|punch_hmn_h3|punch_hmn_h4|punch_hmn_h5|ok_hand_hmn|ok_hand_hmn_r1|ok_hand_hmn_r2|ok_hand_hmn_r3|ok_hand_hmn_d1|ok_hand_hmn_d2|ok_hand_hmn_d3|ok_hand_hmn_o1|ok_hand_hmn_o2|ok_hand_hmn_o3|ok_hand_hmn_y1|ok_hand_hmn_y2|ok_hand_hmn_y3|ok_hand_hmn_l1|ok_hand_hmn_l2|ok_hand_hmn_l3|ok_hand_hmn_g1|ok_hand_hmn_g2|ok_hand_hmn_g3|ok_hand_hmn_t1|ok_hand_hmn_t2|ok_hand_hmn_t3|ok_hand_hmn_c1|ok_hand_hmn_c2|ok_hand_hmn_c3|ok_hand_hmn_s1|ok_hand_hmn_s2|ok_hand_hmn_s3|ok_hand_hmn_b1|ok_hand_hmn_b2|ok_hand_hmn_b3|ok_hand_hmn_v1|ok_hand_hmn_v2|ok_hand_hmn_v3|ok_hand_hmn_m1|ok_hand_hmn_m2|ok_hand_hmn_m3|ok_hand_hmn_p1|ok_hand_hmn_p2|ok_hand_hmn_p3|ok_hand_hmn_e1|ok_hand_hmn_e2|ok_hand_hmn_e3|ok_hand_hmn_k1|ok_hand_hmn_k2|ok_hand_hmn_k3|ok_hand_hmn_h1|ok_hand_hmn_h2|ok_hand_hmn_h3|ok_hand_hmn_h4|ok_hand_hmn_h5|wave_hmn|wave_hmn_r1|wave_hmn_r2|wave_hmn_r3|wave_hmn_d1|wave_hmn_d2|wave_hmn_d3|wave_hmn_o1|wave_hmn_o2|wave_hmn_o3|wave_hmn_y1|wave_hmn_y2|wave_hmn_y3|wave_hmn_l1|wave_hmn_l2|wave_hmn_l3|wave_hmn_g1|wave_hmn_g2|wave_hmn_g3|wave_hmn_t1|wave_hmn_t2|wave_hmn_t3|wave_hmn_c1|wave_hmn_c2|wave_hmn_c3|wave_hmn_s1|wave_hmn_s2|wave_hmn_s3|wave_hmn_b1|wave_hmn_b2|wave_hmn_b3|wave_hmn_v1|wave_hmn_v2|wave_hmn_v3|wave_hmn_m1|wave_hmn_m2|wave_hmn_m3|wave_hmn_p1|wave_hmn_p2|wave_hmn_p3|wave_hmn_e1|wave_hmn_e2|wave_hmn_e3|wave_hmn_k1|wave_hmn_k2|wave_hmn_k3|wave_hmn_h1|wave_hmn_h2|wave_hmn_h3|wave_hmn_h4|wave_hmn_h5|clap_hmn|clap_hmn_r1|clap_hmn_r2|clap_hmn_r3|clap_hmn_d1|clap_hmn_d2|clap_hmn_d3|clap_hmn_o1|clap_hmn_o2|clap_hmn_o3|clap_hmn_y1|clap_hmn_y2|clap_hmn_y3|clap_hmn_l1|clap_hmn_l2|clap_hmn_l3|clap_hmn_g1|clap_hmn_g2|clap_hmn_g3|clap_hmn_t1|clap_hmn_t2|clap_hmn_t3|clap_hmn_c1|clap_hmn_c2|clap_hmn_c3|clap_hmn_s1|clap_hmn_s2|clap_hmn_s3|clap_hmn_b1|clap_hmn_b2|clap_hmn_b3|clap_hmn_v1|clap_hmn_v2|clap_hmn_v3|clap_hmn_m1|clap_hmn_m2|clap_hmn_m3|clap_hmn_p1|clap_hmn_p2|clap_hmn_p3|clap_hmn_e1|clap_hmn_e2|clap_hmn_e3|clap_hmn_k1|clap_hmn_k2|clap_hmn_k3|clap_hmn_h1|clap_hmn_h2|clap_hmn_h3|clap_hmn_h4|clap_hmn_h5|raised_hands_hmn|raised_hands_hmn_r1|raised_hands_hmn_r2|raised_hands_hmn_r3|raised_hands_hmn_d1|raised_hands_hmn_d2|raised_hands_hmn_d3|raised_hands_hmn_o1|raised_hands_hmn_o2|raised_hands_hmn_o3|raised_hands_hmn_y1|raised_hands_hmn_y2|raised_hands_hmn_y3|raised_hands_hmn_l1|raised_hands_hmn_l2|raised_hands_hmn_l3|raised_hands_hmn_g1|raised_hands_hmn_g2|raised_hands_hmn_g3|raised_hands_hmn_t1|raised_hands_hmn_t2|raised_hands_hmn_t3|raised_hands_hmn_c1|raised_hands_hmn_c2|raised_hands_hmn_c3|raised_hands_hmn_s1|raised_hands_hmn_s2|raised_hands_hmn_s3|raised_hands_hmn_b1|raised_hands_hmn_b2|raised_hands_hmn_b3|raised_hands_hmn_v1|raised_hands_hmn_v2|raised_hands_hmn_v3|raised_hands_hmn_m1|raised_hands_hmn_m2|raised_hands_hmn_m3|raised_hands_hmn_p1|raised_hands_hmn_p2|raised_hands_hmn_p3|raised_hands_hmn_e1|raised_hands_hmn_e2|raised_hands_hmn_e3|raised_hands_hmn_k1|raised_hands_hmn_k2|raised_hands_hmn_k3|raised_hands_hmn_h1|raised_hands_hmn_h2|raised_hands_hmn_h3|raised_hands_hmn_h4|raised_hands_hmn_h5|open_hands_hmn|open_hands_hmn_r1|open_hands_hmn_r2|open_hands_hmn_r3|open_hands_hmn_d1|open_hands_hmn_d2|open_hands_hmn_d3|open_hands_hmn_o1|open_hands_hmn_o2|open_hands_hmn_o3|open_hands_hmn_y1|open_hands_hmn_y2|open_hands_hmn_y3|open_hands_hmn_l1|open_hands_hmn_l2|open_hands_hmn_l3|open_hands_hmn_g1|open_hands_hmn_g2|open_hands_hmn_g3|open_hands_hmn_t1|open_hands_hmn_t2|open_hands_hmn_t3|open_hands_hmn_c1|open_hands_hmn_c2|open_hands_hmn_c3|open_hands_hmn_s1|open_hands_hmn_s2|open_hands_hmn_s3|open_hands_hmn_b1|open_hands_hmn_b2|open_hands_hmn_b3|open_hands_hmn_v1|open_hands_hmn_v2|open_hands_hmn_v3|open_hands_hmn_m1|open_hands_hmn_m2|open_hands_hmn_m3|open_hands_hmn_p1|open_hands_hmn_p2|open_hands_hmn_p3|open_hands_hmn_e1|open_hands_hmn_e2|open_hands_hmn_e3|open_hands_hmn_k1|open_hands_hmn_k2|open_hands_hmn_k3|open_hands_hmn_h1|open_hands_hmn_h2|open_hands_hmn_h3|open_hands_hmn_h4|open_hands_hmn_h5|pray_hmn|pray_hmn_r1|pray_hmn_r2|pray_hmn_r3|pray_hmn_d1|pray_hmn_d2|pray_hmn_d3|pray_hmn_o1|pray_hmn_o2|pray_hmn_o3|pray_hmn_y1|pray_hmn_y2|pray_hmn_y3|pray_hmn_l1|pray_hmn_l2|pray_hmn_l3|pray_hmn_g1|pray_hmn_g2|pray_hmn_g3|pray_hmn_t1|pray_hmn_t2|pray_hmn_t3|pray_hmn_c1|pray_hmn_c2|pray_hmn_c3|pray_hmn_s1|pray_hmn_s2|pray_hmn_s3|pray_hmn_b1|pray_hmn_b2|pray_hmn_b3|pray_hmn_v1|pray_hmn_v2|pray_hmn_v3|pray_hmn_m1|pray_hmn_m2|pray_hmn_m3|pray_hmn_p1|pray_hmn_p2|pray_hmn_p3|pray_hmn_e1|pray_hmn_e2|pray_hmn_e3|pray_hmn_k1|pray_hmn_k2|pray_hmn_k3|pray_hmn_h1|pray_hmn_h2|pray_hmn_h3|pray_hmn_h4|pray_hmn_h5|writing_hand_hmn|writing_hand_hmn_r1|writing_hand_hmn_r2|writing_hand_hmn_r3|writing_hand_hmn_d1|writing_hand_hmn_d2|writing_hand_hmn_d3|writing_hand_hmn_o1|writing_hand_hmn_o2|writing_hand_hmn_o3|writing_hand_hmn_y1|writing_hand_hmn_y2|writing_hand_hmn_y3|writing_hand_hmn_l1|writing_hand_hmn_l2|writing_hand_hmn_l3|writing_hand_hmn_g1|writing_hand_hmn_g2|writing_hand_hmn_g3|writing_hand_hmn_t1|writing_hand_hmn_t2|writing_hand_hmn_t3|writing_hand_hmn_c1|writing_hand_hmn_c2|writing_hand_hmn_c3|writing_hand_hmn_s1|writing_hand_hmn_s2|writing_hand_hmn_s3|writing_hand_hmn_b1|writing_hand_hmn_b2|writing_hand_hmn_b3|writing_hand_hmn_v1|writing_hand_hmn_v2|writing_hand_hmn_v3|writing_hand_hmn_m1|writing_hand_hmn_m2|writing_hand_hmn_m3|writing_hand_hmn_p1|writing_hand_hmn_p2|writing_hand_hmn_p3|writing_hand_hmn_e1|writing_hand_hmn_e2|writing_hand_hmn_e3|writing_hand_hmn_k1|writing_hand_hmn_k2|writing_hand_hmn_k3|writing_hand_hmn_h1|writing_hand_hmn_h2|writing_hand_hmn_h3|writing_hand_hmn_h4|writing_hand_hmn_h5|muscle_hmn|muscle_hmn_r1|muscle_hmn_r2|muscle_hmn_r3|muscle_hmn_d1|muscle_hmn_d2|muscle_hmn_d3|muscle_hmn_o1|muscle_hmn_o2|muscle_hmn_o3|muscle_hmn_y1|muscle_hmn_y2|muscle_hmn_y3|muscle_hmn_l1|muscle_hmn_l2|muscle_hmn_l3|muscle_hmn_g1|muscle_hmn_g2|muscle_hmn_g3|muscle_hmn_t1|muscle_hmn_t2|muscle_hmn_t3|muscle_hmn_c1|muscle_hmn_c2|muscle_hmn_c3|muscle_hmn_s1|muscle_hmn_s2|muscle_hmn_s3|muscle_hmn_b1|muscle_hmn_b2|muscle_hmn_b3|muscle_hmn_v1|muscle_hmn_v2|muscle_hmn_v3|muscle_hmn_m1|muscle_hmn_m2|muscle_hmn_m3|muscle_hmn_p1|muscle_hmn_p2|muscle_hmn_p3|muscle_hmn_e1|muscle_hmn_e2|muscle_hmn_e3|muscle_hmn_k1|muscle_hmn_k2|muscle_hmn_k3|muscle_hmn_h1|muscle_hmn_h2|muscle_hmn_h3|muscle_hmn_h4|muscle_hmn_h5|handshake_hmn|handshake_hmn_r1|handshake_hmn_r2|handshake_hmn_r3|handshake_hmn_d1|handshake_hmn_d2|handshake_hmn_d3|handshake_hmn_o1|handshake_hmn_o2|handshake_hmn_o3|handshake_hmn_y1|handshake_hmn_y2|handshake_hmn_y3|handshake_hmn_l1|handshake_hmn_l2|handshake_hmn_l3|handshake_hmn_g1|handshake_hmn_g2|handshake_hmn_g3|handshake_hmn_t1|handshake_hmn_t2|handshake_hmn_t3|handshake_hmn_c1|handshake_hmn_c2|handshake_hmn_c3|handshake_hmn_s1|handshake_hmn_s2|handshake_hmn_s3|handshake_hmn_b1|handshake_hmn_b2|handshake_hmn_b3|handshake_hmn_v1|handshake_hmn_v2|handshake_hmn_v3|handshake_hmn_m1|handshake_hmn_m2|handshake_hmn_m3|handshake_hmn_p1|handshake_hmn_p2|handshake_hmn_p3|handshake_hmn_e1|handshake_hmn_e2|handshake_hmn_e3|handshake_hmn_k1|handshake_hmn_k2|handshake_hmn_k3|handshake_hmn_h1|handshake_hmn_h2|handshake_hmn_h3|handshake_hmn_h4|handshake_hmn_h5|selfie_hmn|selfie_hmn_r1|selfie_hmn_r2|selfie_hmn_r3|selfie_hmn_d1|selfie_hmn_d2|selfie_hmn_d3|selfie_hmn_o1|selfie_hmn_o2|selfie_hmn_o3|selfie_hmn_y1|selfie_hmn_y2|selfie_hmn_y3|selfie_hmn_l1|selfie_hmn_l2|selfie_hmn_l3|selfie_hmn_g1|selfie_hmn_g2|selfie_hmn_g3|selfie_hmn_t1|selfie_hmn_t2|selfie_hmn_t3|selfie_hmn_c1|selfie_hmn_c2|selfie_hmn_c3|selfie_hmn_s1|selfie_hmn_s2|selfie_hmn_s3|selfie_hmn_b1|selfie_hmn_b2|selfie_hmn_b3|selfie_hmn_v1|selfie_hmn_v2|selfie_hmn_v3|selfie_hmn_m1|selfie_hmn_m2|selfie_hmn_m3|selfie_hmn_p1|selfie_hmn_p2|selfie_hmn_p3|selfie_hmn_e1|selfie_hmn_e2|selfie_hmn_e3|selfie_hmn_k1|selfie_hmn_k2|selfie_hmn_k3|selfie_hmn_h1|selfie_hmn_h2|selfie_hmn_h3|selfie_hmn_h4|selfie_hmn_h5|nail_varnish_hmn|nail_varnish_hmn_r1|nail_varnish_hmn_r2|nail_varnish_hmn_r3|nail_varnish_hmn_d1|nail_varnish_hmn_d2|nail_varnish_hmn_d3|nail_varnish_hmn_o1|nail_varnish_hmn_o2|nail_varnish_hmn_o3|nail_varnish_hmn_y1|nail_varnish_hmn_y2|nail_varnish_hmn_y3|nail_varnish_hmn_l1|nail_varnish_hmn_l2|nail_varnish_hmn_l3|nail_varnish_hmn_g1|nail_varnish_hmn_g2|nail_varnish_hmn_g3|nail_varnish_hmn_t1|nail_varnish_hmn_t2|nail_varnish_hmn_t3|nail_varnish_hmn_c1|nail_varnish_hmn_c2|nail_varnish_hmn_c3|nail_varnish_hmn_s1|nail_varnish_hmn_s2|nail_varnish_hmn_s3|nail_varnish_hmn_b1|nail_varnish_hmn_b2|nail_varnish_hmn_b3|nail_varnish_hmn_v1|nail_varnish_hmn_v2|nail_varnish_hmn_v3|nail_varnish_hmn_m1|nail_varnish_hmn_m2|nail_varnish_hmn_m3|nail_varnish_hmn_p1|nail_varnish_hmn_p2|nail_varnish_hmn_p3|nail_varnish_hmn_e1|nail_varnish_hmn_e2|nail_varnish_hmn_e3|nail_varnish_hmn_k1|nail_varnish_hmn_k2|nail_varnish_hmn_k3|nail_varnish_hmn_h1|nail_varnish_hmn_h2|nail_varnish_hmn_h3|nail_varnish_hmn_h4|nail_varnish_hmn_h5|hand_paw|hand_paw_r1|hand_paw_r2|hand_paw_r3|hand_paw_d1|hand_paw_d2|hand_paw_d3|hand_paw_o1|hand_paw_o2|hand_paw_o3|hand_paw_y1|hand_paw_y2|hand_paw_y3|hand_paw_l1|hand_paw_l2|hand_paw_l3|hand_paw_g1|hand_paw_g2|hand_paw_g3|hand_paw_t1|hand_paw_t2|hand_paw_t3|hand_paw_c1|hand_paw_c2|hand_paw_c3|hand_paw_s1|hand_paw_s2|hand_paw_s3|hand_paw_b1|hand_paw_b2|hand_paw_b3|hand_paw_v1|hand_paw_v2|hand_paw_v3|hand_paw_m1|hand_paw_m2|hand_paw_m3|hand_paw_p1|hand_paw_p2|hand_paw_p3|hand_paw_e1|hand_paw_e2|hand_paw_e3|hand_paw_k1|hand_paw_k2|hand_paw_k3|hand_paw_fe1|hand_paw_ft1|hand_paw_fk1|back_of_hand_paw|back_of_hand_paw_r1|back_of_hand_paw_r2|back_of_hand_paw_r3|back_of_hand_paw_d1|back_of_hand_paw_d2|back_of_hand_paw_d3|back_of_hand_paw_o1|back_of_hand_paw_o2|back_of_hand_paw_o3|back_of_hand_paw_y1|back_of_hand_paw_y2|back_of_hand_paw_y3|back_of_hand_paw_l1|back_of_hand_paw_l2|back_of_hand_paw_l3|back_of_hand_paw_g1|back_of_hand_paw_g2|back_of_hand_paw_g3|back_of_hand_paw_t1|back_of_hand_paw_t2|back_of_hand_paw_t3|back_of_hand_paw_c1|back_of_hand_paw_c2|back_of_hand_paw_c3|back_of_hand_paw_s1|back_of_hand_paw_s2|back_of_hand_paw_s3|back_of_hand_paw_b1|back_of_hand_paw_b2|back_of_hand_paw_b3|back_of_hand_paw_v1|back_of_hand_paw_v2|back_of_hand_paw_v3|back_of_hand_paw_m1|back_of_hand_paw_m2|back_of_hand_paw_m3|back_of_hand_paw_p1|back_of_hand_paw_p2|back_of_hand_paw_p3|back_of_hand_paw_e1|back_of_hand_paw_e2|back_of_hand_paw_e3|back_of_hand_paw_k1|back_of_hand_paw_k2|back_of_hand_paw_k3|back_of_hand_paw_fe1|back_of_hand_paw_ft1|back_of_hand_paw_fk1|v_paw|v_paw_r1|v_paw_r2|v_paw_r3|v_paw_d1|v_paw_d2|v_paw_d3|v_paw_o1|v_paw_o2|v_paw_o3|v_paw_y1|v_paw_y2|v_paw_y3|v_paw_l1|v_paw_l2|v_paw_l3|v_paw_g1|v_paw_g2|v_paw_g3|v_paw_t1|v_paw_t2|v_paw_t3|v_paw_c1|v_paw_c2|v_paw_c3|v_paw_s1|v_paw_s2|v_paw_s3|v_paw_b1|v_paw_b2|v_paw_b3|v_paw_v1|v_paw_v2|v_paw_v3|v_paw_m1|v_paw_m2|v_paw_m3|v_paw_p1|v_paw_p2|v_paw_p3|v_paw_e1|v_paw_e2|v_paw_e3|v_paw_k1|v_paw_k2|v_paw_k3|v_paw_fe1|v_paw_ft1|v_paw_fk1|crossed_fingers_paw|crossed_fingers_paw_r1|crossed_fingers_paw_r2|crossed_fingers_paw_r3|crossed_fingers_paw_d1|crossed_fingers_paw_d2|crossed_fingers_paw_d3|crossed_fingers_paw_o1|crossed_fingers_paw_o2|crossed_fingers_paw_o3|crossed_fingers_paw_y1|crossed_fingers_paw_y2|crossed_fingers_paw_y3|crossed_fingers_paw_l1|crossed_fingers_paw_l2|crossed_fingers_paw_l3|crossed_fingers_paw_g1|crossed_fingers_paw_g2|crossed_fingers_paw_g3|crossed_fingers_paw_t1|crossed_fingers_paw_t2|crossed_fingers_paw_t3|crossed_fingers_paw_c1|crossed_fingers_paw_c2|crossed_fingers_paw_c3|crossed_fingers_paw_s1|crossed_fingers_paw_s2|crossed_fingers_paw_s3|crossed_fingers_paw_b1|crossed_fingers_paw_b2|crossed_fingers_paw_b3|crossed_fingers_paw_v1|crossed_fingers_paw_v2|crossed_fingers_paw_v3|crossed_fingers_paw_m1|crossed_fingers_paw_m2|crossed_fingers_paw_m3|crossed_fingers_paw_p1|crossed_fingers_paw_p2|crossed_fingers_paw_p3|crossed_fingers_paw_e1|crossed_fingers_paw_e2|crossed_fingers_paw_e3|crossed_fingers_paw_k1|crossed_fingers_paw_k2|crossed_fingers_paw_k3|crossed_fingers_paw_fe1|crossed_fingers_paw_ft1|crossed_fingers_paw_fk1|index_finger_paw|index_finger_paw_r1|index_finger_paw_r2|index_finger_paw_r3|index_finger_paw_d1|index_finger_paw_d2|index_finger_paw_d3|index_finger_paw_o1|index_finger_paw_o2|index_finger_paw_o3|index_finger_paw_y1|index_finger_paw_y2|index_finger_paw_y3|index_finger_paw_l1|index_finger_paw_l2|index_finger_paw_l3|index_finger_paw_g1|index_finger_paw_g2|index_finger_paw_g3|index_finger_paw_t1|index_finger_paw_t2|index_finger_paw_t3|index_finger_paw_c1|index_finger_paw_c2|index_finger_paw_c3|index_finger_paw_s1|index_finger_paw_s2|index_finger_paw_s3|index_finger_paw_b1|index_finger_paw_b2|index_finger_paw_b3|index_finger_paw_v1|index_finger_paw_v2|index_finger_paw_v3|index_finger_paw_m1|index_finger_paw_m2|index_finger_paw_m3|index_finger_paw_p1|index_finger_paw_p2|index_finger_paw_p3|index_finger_paw_e1|index_finger_paw_e2|index_finger_paw_e3|index_finger_paw_k1|index_finger_paw_k2|index_finger_paw_k3|index_finger_paw_fe1|index_finger_paw_ft1|index_finger_paw_fk1|metal_paw|metal_paw_r1|metal_paw_r2|metal_paw_r3|metal_paw_d1|metal_paw_d2|metal_paw_d3|metal_paw_o1|metal_paw_o2|metal_paw_o3|metal_paw_y1|metal_paw_y2|metal_paw_y3|metal_paw_l1|metal_paw_l2|metal_paw_l3|metal_paw_g1|metal_paw_g2|metal_paw_g3|metal_paw_t1|metal_paw_t2|metal_paw_t3|metal_paw_c1|metal_paw_c2|metal_paw_c3|metal_paw_s1|metal_paw_s2|metal_paw_s3|metal_paw_b1|metal_paw_b2|metal_paw_b3|metal_paw_v1|metal_paw_v2|metal_paw_v3|metal_paw_m1|metal_paw_m2|metal_paw_m3|metal_paw_p1|metal_paw_p2|metal_paw_p3|metal_paw_e1|metal_paw_e2|metal_paw_e3|metal_paw_k1|metal_paw_k2|metal_paw_k3|metal_paw_fe1|metal_paw_ft1|metal_paw_fk1|vulcan_paw|vulcan_paw_r1|vulcan_paw_r2|vulcan_paw_r3|vulcan_paw_d1|vulcan_paw_d2|vulcan_paw_d3|vulcan_paw_o1|vulcan_paw_o2|vulcan_paw_o3|vulcan_paw_y1|vulcan_paw_y2|vulcan_paw_y3|vulcan_paw_l1|vulcan_paw_l2|vulcan_paw_l3|vulcan_paw_g1|vulcan_paw_g2|vulcan_paw_g3|vulcan_paw_t1|vulcan_paw_t2|vulcan_paw_t3|vulcan_paw_c1|vulcan_paw_c2|vulcan_paw_c3|vulcan_paw_s1|vulcan_paw_s2|vulcan_paw_s3|vulcan_paw_b1|vulcan_paw_b2|vulcan_paw_b3|vulcan_paw_v1|vulcan_paw_v2|vulcan_paw_v3|vulcan_paw_m1|vulcan_paw_m2|vulcan_paw_m3|vulcan_paw_p1|vulcan_paw_p2|vulcan_paw_p3|vulcan_paw_e1|vulcan_paw_e2|vulcan_paw_e3|vulcan_paw_k1|vulcan_paw_k2|vulcan_paw_k3|vulcan_paw_fe1|vulcan_paw_ft1|vulcan_paw_fk1|thumbs_up_paw|thumbs_up_paw_r1|thumbs_up_paw_r2|thumbs_up_paw_r3|thumbs_up_paw_d1|thumbs_up_paw_d2|thumbs_up_paw_d3|thumbs_up_paw_o1|thumbs_up_paw_o2|thumbs_up_paw_o3|thumbs_up_paw_y1|thumbs_up_paw_y2|thumbs_up_paw_y3|thumbs_up_paw_l1|thumbs_up_paw_l2|thumbs_up_paw_l3|thumbs_up_paw_g1|thumbs_up_paw_g2|thumbs_up_paw_g3|thumbs_up_paw_t1|thumbs_up_paw_t2|thumbs_up_paw_t3|thumbs_up_paw_c1|thumbs_up_paw_c2|thumbs_up_paw_c3|thumbs_up_paw_s1|thumbs_up_paw_s2|thumbs_up_paw_s3|thumbs_up_paw_b1|thumbs_up_paw_b2|thumbs_up_paw_b3|thumbs_up_paw_v1|thumbs_up_paw_v2|thumbs_up_paw_v3|thumbs_up_paw_m1|thumbs_up_paw_m2|thumbs_up_paw_m3|thumbs_up_paw_p1|thumbs_up_paw_p2|thumbs_up_paw_p3|thumbs_up_paw_e1|thumbs_up_paw_e2|thumbs_up_paw_e3|thumbs_up_paw_k1|thumbs_up_paw_k2|thumbs_up_paw_k3|thumbs_up_paw_fe1|thumbs_up_paw_ft1|thumbs_up_paw_fk1|thumbs_down_paw|thumbs_down_paw_r1|thumbs_down_paw_r2|thumbs_down_paw_r3|thumbs_down_paw_d1|thumbs_down_paw_d2|thumbs_down_paw_d3|thumbs_down_paw_o1|thumbs_down_paw_o2|thumbs_down_paw_o3|thumbs_down_paw_y1|thumbs_down_paw_y2|thumbs_down_paw_y3|thumbs_down_paw_l1|thumbs_down_paw_l2|thumbs_down_paw_l3|thumbs_down_paw_g1|thumbs_down_paw_g2|thumbs_down_paw_g3|thumbs_down_paw_t1|thumbs_down_paw_t2|thumbs_down_paw_t3|thumbs_down_paw_c1|thumbs_down_paw_c2|thumbs_down_paw_c3|thumbs_down_paw_s1|thumbs_down_paw_s2|thumbs_down_paw_s3|thumbs_down_paw_b1|thumbs_down_paw_b2|thumbs_down_paw_b3|thumbs_down_paw_v1|thumbs_down_paw_v2|thumbs_down_paw_v3|thumbs_down_paw_m1|thumbs_down_paw_m2|thumbs_down_paw_m3|thumbs_down_paw_p1|thumbs_down_paw_p2|thumbs_down_paw_p3|thumbs_down_paw_e1|thumbs_down_paw_e2|thumbs_down_paw_e3|thumbs_down_paw_k1|thumbs_down_paw_k2|thumbs_down_paw_k3|thumbs_down_paw_fe1|thumbs_down_paw_ft1|thumbs_down_paw_fk1|call_me_paw|call_me_paw_r1|call_me_paw_r2|call_me_paw_r3|call_me_paw_d1|call_me_paw_d2|call_me_paw_d3|call_me_paw_o1|call_me_paw_o2|call_me_paw_o3|call_me_paw_y1|call_me_paw_y2|call_me_paw_y3|call_me_paw_l1|call_me_paw_l2|call_me_paw_l3|call_me_paw_g1|call_me_paw_g2|call_me_paw_g3|call_me_paw_t1|call_me_paw_t2|call_me_paw_t3|call_me_paw_c1|call_me_paw_c2|call_me_paw_c3|call_me_paw_s1|call_me_paw_s2|call_me_paw_s3|call_me_paw_b1|call_me_paw_b2|call_me_paw_b3|call_me_paw_v1|call_me_paw_v2|call_me_paw_v3|call_me_paw_m1|call_me_paw_m2|call_me_paw_m3|call_me_paw_p1|call_me_paw_p2|call_me_paw_p3|call_me_paw_e1|call_me_paw_e2|call_me_paw_e3|call_me_paw_k1|call_me_paw_k2|call_me_paw_k3|call_me_paw_fe1|call_me_paw_ft1|call_me_paw_fk1|middle_finger_paw|middle_finger_paw_r1|middle_finger_paw_r2|middle_finger_paw_r3|middle_finger_paw_d1|middle_finger_paw_d2|middle_finger_paw_d3|middle_finger_paw_o1|middle_finger_paw_o2|middle_finger_paw_o3|middle_finger_paw_y1|middle_finger_paw_y2|middle_finger_paw_y3|middle_finger_paw_l1|middle_finger_paw_l2|middle_finger_paw_l3|middle_finger_paw_g1|middle_finger_paw_g2|middle_finger_paw_g3|middle_finger_paw_t1|middle_finger_paw_t2|middle_finger_paw_t3|middle_finger_paw_c1|middle_finger_paw_c2|middle_finger_paw_c3|middle_finger_paw_s1|middle_finger_paw_s2|middle_finger_paw_s3|middle_finger_paw_b1|middle_finger_paw_b2|middle_finger_paw_b3|middle_finger_paw_v1|middle_finger_paw_v2|middle_finger_paw_v3|middle_finger_paw_m1|middle_finger_paw_m2|middle_finger_paw_m3|middle_finger_paw_p1|middle_finger_paw_p2|middle_finger_paw_p3|middle_finger_paw_e1|middle_finger_paw_e2|middle_finger_paw_e3|middle_finger_paw_k1|middle_finger_paw_k2|middle_finger_paw_k3|middle_finger_paw_fe1|middle_finger_paw_ft1|middle_finger_paw_fk1|point_up_paw|point_up_paw_r1|point_up_paw_r2|point_up_paw_r3|point_up_paw_d1|point_up_paw_d2|point_up_paw_d3|point_up_paw_o1|point_up_paw_o2|point_up_paw_o3|point_up_paw_y1|point_up_paw_y2|point_up_paw_y3|point_up_paw_l1|point_up_paw_l2|point_up_paw_l3|point_up_paw_g1|point_up_paw_g2|point_up_paw_g3|point_up_paw_t1|point_up_paw_t2|point_up_paw_t3|point_up_paw_c1|point_up_paw_c2|point_up_paw_c3|point_up_paw_s1|point_up_paw_s2|point_up_paw_s3|point_up_paw_b1|point_up_paw_b2|point_up_paw_b3|point_up_paw_v1|point_up_paw_v2|point_up_paw_v3|point_up_paw_m1|point_up_paw_m2|point_up_paw_m3|point_up_paw_p1|point_up_paw_p2|point_up_paw_p3|point_up_paw_e1|point_up_paw_e2|point_up_paw_e3|point_up_paw_k1|point_up_paw_k2|point_up_paw_k3|point_up_paw_fe1|point_up_paw_ft1|point_up_paw_fk1|point_down_paw|point_down_paw_r1|point_down_paw_r2|point_down_paw_r3|point_down_paw_d1|point_down_paw_d2|point_down_paw_d3|point_down_paw_o1|point_down_paw_o2|point_down_paw_o3|point_down_paw_y1|point_down_paw_y2|point_down_paw_y3|point_down_paw_l1|point_down_paw_l2|point_down_paw_l3|point_down_paw_g1|point_down_paw_g2|point_down_paw_g3|point_down_paw_t1|point_down_paw_t2|point_down_paw_t3|point_down_paw_c1|point_down_paw_c2|point_down_paw_c3|point_down_paw_s1|point_down_paw_s2|point_down_paw_s3|point_down_paw_b1|point_down_paw_b2|point_down_paw_b3|point_down_paw_v1|point_down_paw_v2|point_down_paw_v3|point_down_paw_m1|point_down_paw_m2|point_down_paw_m3|point_down_paw_p1|point_down_paw_p2|point_down_paw_p3|point_down_paw_e1|point_down_paw_e2|point_down_paw_e3|point_down_paw_k1|point_down_paw_k2|point_down_paw_k3|point_down_paw_fe1|point_down_paw_ft1|point_down_paw_fk1|point_left_paw|point_left_paw_r1|point_left_paw_r2|point_left_paw_r3|point_left_paw_d1|point_left_paw_d2|point_left_paw_d3|point_left_paw_o1|point_left_paw_o2|point_left_paw_o3|point_left_paw_y1|point_left_paw_y2|point_left_paw_y3|point_left_paw_l1|point_left_paw_l2|point_left_paw_l3|point_left_paw_g1|point_left_paw_g2|point_left_paw_g3|point_left_paw_t1|point_left_paw_t2|point_left_paw_t3|point_left_paw_c1|point_left_paw_c2|point_left_paw_c3|point_left_paw_s1|point_left_paw_s2|point_left_paw_s3|point_left_paw_b1|point_left_paw_b2|point_left_paw_b3|point_left_paw_v1|point_left_paw_v2|point_left_paw_v3|point_left_paw_m1|point_left_paw_m2|point_left_paw_m3|point_left_paw_p1|point_left_paw_p2|point_left_paw_p3|point_left_paw_e1|point_left_paw_e2|point_left_paw_e3|point_left_paw_k1|point_left_paw_k2|point_left_paw_k3|point_left_paw_fe1|point_left_paw_ft1|point_left_paw_fk1|point_right_paw|point_right_paw_r1|point_right_paw_r2|point_right_paw_r3|point_right_paw_d1|point_right_paw_d2|point_right_paw_d3|point_right_paw_o1|point_right_paw_o2|point_right_paw_o3|point_right_paw_y1|point_right_paw_y2|point_right_paw_y3|point_right_paw_l1|point_right_paw_l2|point_right_paw_l3|point_right_paw_g1|point_right_paw_g2|point_right_paw_g3|point_right_paw_t1|point_right_paw_t2|point_right_paw_t3|point_right_paw_c1|point_right_paw_c2|point_right_paw_c3|point_right_paw_s1|point_right_paw_s2|point_right_paw_s3|point_right_paw_b1|point_right_paw_b2|point_right_paw_b3|point_right_paw_v1|point_right_paw_v2|point_right_paw_v3|point_right_paw_m1|point_right_paw_m2|point_right_paw_m3|point_right_paw_p1|point_right_paw_p2|point_right_paw_p3|point_right_paw_e1|point_right_paw_e2|point_right_paw_e3|point_right_paw_k1|point_right_paw_k2|point_right_paw_k3|point_right_paw_fe1|point_right_paw_ft1|point_right_paw_fk1|fist_paw|fist_paw_r1|fist_paw_r2|fist_paw_r3|fist_paw_d1|fist_paw_d2|fist_paw_d3|fist_paw_o1|fist_paw_o2|fist_paw_o3|fist_paw_y1|fist_paw_y2|fist_paw_y3|fist_paw_l1|fist_paw_l2|fist_paw_l3|fist_paw_g1|fist_paw_g2|fist_paw_g3|fist_paw_t1|fist_paw_t2|fist_paw_t3|fist_paw_c1|fist_paw_c2|fist_paw_c3|fist_paw_s1|fist_paw_s2|fist_paw_s3|fist_paw_b1|fist_paw_b2|fist_paw_b3|fist_paw_v1|fist_paw_v2|fist_paw_v3|fist_paw_m1|fist_paw_m2|fist_paw_m3|fist_paw_p1|fist_paw_p2|fist_paw_p3|fist_paw_e1|fist_paw_e2|fist_paw_e3|fist_paw_k1|fist_paw_k2|fist_paw_k3|fist_paw_fe1|fist_paw_ft1|fist_paw_fk1|fist_facing_left_paw|fist_facing_left_paw_r1|fist_facing_left_paw_r2|fist_facing_left_paw_r3|fist_facing_left_paw_d1|fist_facing_left_paw_d2|fist_facing_left_paw_d3|fist_facing_left_paw_o1|fist_facing_left_paw_o2|fist_facing_left_paw_o3|fist_facing_left_paw_y1|fist_facing_left_paw_y2|fist_facing_left_paw_y3|fist_facing_left_paw_l1|fist_facing_left_paw_l2|fist_facing_left_paw_l3|fist_facing_left_paw_g1|fist_facing_left_paw_g2|fist_facing_left_paw_g3|fist_facing_left_paw_t1|fist_facing_left_paw_t2|fist_facing_left_paw_t3|fist_facing_left_paw_c1|fist_facing_left_paw_c2|fist_facing_left_paw_c3|fist_facing_left_paw_s1|fist_facing_left_paw_s2|fist_facing_left_paw_s3|fist_facing_left_paw_b1|fist_facing_left_paw_b2|fist_facing_left_paw_b3|fist_facing_left_paw_v1|fist_facing_left_paw_v2|fist_facing_left_paw_v3|fist_facing_left_paw_m1|fist_facing_left_paw_m2|fist_facing_left_paw_m3|fist_facing_left_paw_p1|fist_facing_left_paw_p2|fist_facing_left_paw_p3|fist_facing_left_paw_e1|fist_facing_left_paw_e2|fist_facing_left_paw_e3|fist_facing_left_paw_k1|fist_facing_left_paw_k2|fist_facing_left_paw_k3|fist_facing_left_paw_fe1|fist_facing_left_paw_ft1|fist_facing_left_paw_fk1|fist_facing_right_paw|fist_facing_right_paw_r1|fist_facing_right_paw_r2|fist_facing_right_paw_r3|fist_facing_right_paw_d1|fist_facing_right_paw_d2|fist_facing_right_paw_d3|fist_facing_right_paw_o1|fist_facing_right_paw_o2|fist_facing_right_paw_o3|fist_facing_right_paw_y1|fist_facing_right_paw_y2|fist_facing_right_paw_y3|fist_facing_right_paw_l1|fist_facing_right_paw_l2|fist_facing_right_paw_l3|fist_facing_right_paw_g1|fist_facing_right_paw_g2|fist_facing_right_paw_g3|fist_facing_right_paw_t1|fist_facing_right_paw_t2|fist_facing_right_paw_t3|fist_facing_right_paw_c1|fist_facing_right_paw_c2|fist_facing_right_paw_c3|fist_facing_right_paw_s1|fist_facing_right_paw_s2|fist_facing_right_paw_s3|fist_facing_right_paw_b1|fist_facing_right_paw_b2|fist_facing_right_paw_b3|fist_facing_right_paw_v1|fist_facing_right_paw_v2|fist_facing_right_paw_v3|fist_facing_right_paw_m1|fist_facing_right_paw_m2|fist_facing_right_paw_m3|fist_facing_right_paw_p1|fist_facing_right_paw_p2|fist_facing_right_paw_p3|fist_facing_right_paw_e1|fist_facing_right_paw_e2|fist_facing_right_paw_e3|fist_facing_right_paw_k1|fist_facing_right_paw_k2|fist_facing_right_paw_k3|fist_facing_right_paw_fe1|fist_facing_right_paw_ft1|fist_facing_right_paw_fk1|punch_paw|punch_paw_r1|punch_paw_r2|punch_paw_r3|punch_paw_d1|punch_paw_d2|punch_paw_d3|punch_paw_o1|punch_paw_o2|punch_paw_o3|punch_paw_y1|punch_paw_y2|punch_paw_y3|punch_paw_l1|punch_paw_l2|punch_paw_l3|punch_paw_g1|punch_paw_g2|punch_paw_g3|punch_paw_t1|punch_paw_t2|punch_paw_t3|punch_paw_c1|punch_paw_c2|punch_paw_c3|punch_paw_s1|punch_paw_s2|punch_paw_s3|punch_paw_b1|punch_paw_b2|punch_paw_b3|punch_paw_v1|punch_paw_v2|punch_paw_v3|punch_paw_m1|punch_paw_m2|punch_paw_m3|punch_paw_p1|punch_paw_p2|punch_paw_p3|punch_paw_e1|punch_paw_e2|punch_paw_e3|punch_paw_k1|punch_paw_k2|punch_paw_k3|punch_paw_fe1|punch_paw_ft1|punch_paw_fk1|ok_hand_paw|ok_hand_paw_r1|ok_hand_paw_r2|ok_hand_paw_r3|ok_hand_paw_d1|ok_hand_paw_d2|ok_hand_paw_d3|ok_hand_paw_o1|ok_hand_paw_o2|ok_hand_paw_o3|ok_hand_paw_y1|ok_hand_paw_y2|ok_hand_paw_y3|ok_hand_paw_l1|ok_hand_paw_l2|ok_hand_paw_l3|ok_hand_paw_g1|ok_hand_paw_g2|ok_hand_paw_g3|ok_hand_paw_t1|ok_hand_paw_t2|ok_hand_paw_t3|ok_hand_paw_c1|ok_hand_paw_c2|ok_hand_paw_c3|ok_hand_paw_s1|ok_hand_paw_s2|ok_hand_paw_s3|ok_hand_paw_b1|ok_hand_paw_b2|ok_hand_paw_b3|ok_hand_paw_v1|ok_hand_paw_v2|ok_hand_paw_v3|ok_hand_paw_m1|ok_hand_paw_m2|ok_hand_paw_m3|ok_hand_paw_p1|ok_hand_paw_p2|ok_hand_paw_p3|ok_hand_paw_e1|ok_hand_paw_e2|ok_hand_paw_e3|ok_hand_paw_k1|ok_hand_paw_k2|ok_hand_paw_k3|ok_hand_paw_fe1|ok_hand_paw_ft1|ok_hand_paw_fk1|wave_paw|wave_paw_r1|wave_paw_r2|wave_paw_r3|wave_paw_d1|wave_paw_d2|wave_paw_d3|wave_paw_o1|wave_paw_o2|wave_paw_o3|wave_paw_y1|wave_paw_y2|wave_paw_y3|wave_paw_l1|wave_paw_l2|wave_paw_l3|wave_paw_g1|wave_paw_g2|wave_paw_g3|wave_paw_t1|wave_paw_t2|wave_paw_t3|wave_paw_c1|wave_paw_c2|wave_paw_c3|wave_paw_s1|wave_paw_s2|wave_paw_s3|wave_paw_b1|wave_paw_b2|wave_paw_b3|wave_paw_v1|wave_paw_v2|wave_paw_v3|wave_paw_m1|wave_paw_m2|wave_paw_m3|wave_paw_p1|wave_paw_p2|wave_paw_p3|wave_paw_e1|wave_paw_e2|wave_paw_e3|wave_paw_k1|wave_paw_k2|wave_paw_k3|wave_paw_fe1|wave_paw_ft1|wave_paw_fk1|clap_paw|clap_paw_r1|clap_paw_r2|clap_paw_r3|clap_paw_d1|clap_paw_d2|clap_paw_d3|clap_paw_o1|clap_paw_o2|clap_paw_o3|clap_paw_y1|clap_paw_y2|clap_paw_y3|clap_paw_l1|clap_paw_l2|clap_paw_l3|clap_paw_g1|clap_paw_g2|clap_paw_g3|clap_paw_t1|clap_paw_t2|clap_paw_t3|clap_paw_c1|clap_paw_c2|clap_paw_c3|clap_paw_s1|clap_paw_s2|clap_paw_s3|clap_paw_b1|clap_paw_b2|clap_paw_b3|clap_paw_v1|clap_paw_v2|clap_paw_v3|clap_paw_m1|clap_paw_m2|clap_paw_m3|clap_paw_p1|clap_paw_p2|clap_paw_p3|clap_paw_e1|clap_paw_e2|clap_paw_e3|clap_paw_k1|clap_paw_k2|clap_paw_k3|clap_paw_fe1|clap_paw_ft1|clap_paw_fk1|raised_hands_paw|raised_hands_paw_r1|raised_hands_paw_r2|raised_hands_paw_r3|raised_hands_paw_d1|raised_hands_paw_d2|raised_hands_paw_d3|raised_hands_paw_o1|raised_hands_paw_o2|raised_hands_paw_o3|raised_hands_paw_y1|raised_hands_paw_y2|raised_hands_paw_y3|raised_hands_paw_l1|raised_hands_paw_l2|raised_hands_paw_l3|raised_hands_paw_g1|raised_hands_paw_g2|raised_hands_paw_g3|raised_hands_paw_t1|raised_hands_paw_t2|raised_hands_paw_t3|raised_hands_paw_c1|raised_hands_paw_c2|raised_hands_paw_c3|raised_hands_paw_s1|raised_hands_paw_s2|raised_hands_paw_s3|raised_hands_paw_b1|raised_hands_paw_b2|raised_hands_paw_b3|raised_hands_paw_v1|raised_hands_paw_v2|raised_hands_paw_v3|raised_hands_paw_m1|raised_hands_paw_m2|raised_hands_paw_m3|raised_hands_paw_p1|raised_hands_paw_p2|raised_hands_paw_p3|raised_hands_paw_e1|raised_hands_paw_e2|raised_hands_paw_e3|raised_hands_paw_k1|raised_hands_paw_k2|raised_hands_paw_k3|raised_hands_paw_fe1|raised_hands_paw_ft1|raised_hands_paw_fk1|open_hands_paw|open_hands_paw_r1|open_hands_paw_r2|open_hands_paw_r3|open_hands_paw_d1|open_hands_paw_d2|open_hands_paw_d3|open_hands_paw_o1|open_hands_paw_o2|open_hands_paw_o3|open_hands_paw_y1|open_hands_paw_y2|open_hands_paw_y3|open_hands_paw_l1|open_hands_paw_l2|open_hands_paw_l3|open_hands_paw_g1|open_hands_paw_g2|open_hands_paw_g3|open_hands_paw_t1|open_hands_paw_t2|open_hands_paw_t3|open_hands_paw_c1|open_hands_paw_c2|open_hands_paw_c3|open_hands_paw_s1|open_hands_paw_s2|open_hands_paw_s3|open_hands_paw_b1|open_hands_paw_b2|open_hands_paw_b3|open_hands_paw_v1|open_hands_paw_v2|open_hands_paw_v3|open_hands_paw_m1|open_hands_paw_m2|open_hands_paw_m3|open_hands_paw_p1|open_hands_paw_p2|open_hands_paw_p3|open_hands_paw_e1|open_hands_paw_e2|open_hands_paw_e3|open_hands_paw_k1|open_hands_paw_k2|open_hands_paw_k3|open_hands_paw_fe1|open_hands_paw_ft1|open_hands_paw_fk1|pray_paw|pray_paw_r1|pray_paw_r2|pray_paw_r3|pray_paw_d1|pray_paw_d2|pray_paw_d3|pray_paw_o1|pray_paw_o2|pray_paw_o3|pray_paw_y1|pray_paw_y2|pray_paw_y3|pray_paw_l1|pray_paw_l2|pray_paw_l3|pray_paw_g1|pray_paw_g2|pray_paw_g3|pray_paw_t1|pray_paw_t2|pray_paw_t3|pray_paw_c1|pray_paw_c2|pray_paw_c3|pray_paw_s1|pray_paw_s2|pray_paw_s3|pray_paw_b1|pray_paw_b2|pray_paw_b3|pray_paw_v1|pray_paw_v2|pray_paw_v3|pray_paw_m1|pray_paw_m2|pray_paw_m3|pray_paw_p1|pray_paw_p2|pray_paw_p3|pray_paw_e1|pray_paw_e2|pray_paw_e3|pray_paw_k1|pray_paw_k2|pray_paw_k3|pray_paw_fe1|pray_paw_ft1|pray_paw_fk1|writing_hand_paw|writing_hand_paw_r1|writing_hand_paw_r2|writing_hand_paw_r3|writing_hand_paw_d1|writing_hand_paw_d2|writing_hand_paw_d3|writing_hand_paw_o1|writing_hand_paw_o2|writing_hand_paw_o3|writing_hand_paw_y1|writing_hand_paw_y2|writing_hand_paw_y3|writing_hand_paw_l1|writing_hand_paw_l2|writing_hand_paw_l3|writing_hand_paw_g1|writing_hand_paw_g2|writing_hand_paw_g3|writing_hand_paw_t1|writing_hand_paw_t2|writing_hand_paw_t3|writing_hand_paw_c1|writing_hand_paw_c2|writing_hand_paw_c3|writing_hand_paw_s1|writing_hand_paw_s2|writing_hand_paw_s3|writing_hand_paw_b1|writing_hand_paw_b2|writing_hand_paw_b3|writing_hand_paw_v1|writing_hand_paw_v2|writing_hand_paw_v3|writing_hand_paw_m1|writing_hand_paw_m2|writing_hand_paw_m3|writing_hand_paw_p1|writing_hand_paw_p2|writing_hand_paw_p3|writing_hand_paw_e1|writing_hand_paw_e2|writing_hand_paw_e3|writing_hand_paw_k1|writing_hand_paw_k2|writing_hand_paw_k3|writing_hand_paw_fe1|writing_hand_paw_ft1|writing_hand_paw_fk1|muscle_paw|muscle_paw_r1|muscle_paw_r2|muscle_paw_r3|muscle_paw_d1|muscle_paw_d2|muscle_paw_d3|muscle_paw_o1|muscle_paw_o2|muscle_paw_o3|muscle_paw_y1|muscle_paw_y2|muscle_paw_y3|muscle_paw_l1|muscle_paw_l2|muscle_paw_l3|muscle_paw_g1|muscle_paw_g2|muscle_paw_g3|muscle_paw_t1|muscle_paw_t2|muscle_paw_t3|muscle_paw_c1|muscle_paw_c2|muscle_paw_c3|muscle_paw_s1|muscle_paw_s2|muscle_paw_s3|muscle_paw_b1|muscle_paw_b2|muscle_paw_b3|muscle_paw_v1|muscle_paw_v2|muscle_paw_v3|muscle_paw_m1|muscle_paw_m2|muscle_paw_m3|muscle_paw_p1|muscle_paw_p2|muscle_paw_p3|muscle_paw_e1|muscle_paw_e2|muscle_paw_e3|muscle_paw_k1|muscle_paw_k2|muscle_paw_k3|muscle_paw_fe1|muscle_paw_ft1|muscle_paw_fk1|handshake_paw|handshake_paw_r1|handshake_paw_r2|handshake_paw_r3|handshake_paw_d1|handshake_paw_d2|handshake_paw_d3|handshake_paw_o1|handshake_paw_o2|handshake_paw_o3|handshake_paw_y1|handshake_paw_y2|handshake_paw_y3|handshake_paw_l1|handshake_paw_l2|handshake_paw_l3|handshake_paw_g1|handshake_paw_g2|handshake_paw_g3|handshake_paw_t1|handshake_paw_t2|handshake_paw_t3|handshake_paw_c1|handshake_paw_c2|handshake_paw_c3|handshake_paw_s1|handshake_paw_s2|handshake_paw_s3|handshake_paw_b1|handshake_paw_b2|handshake_paw_b3|handshake_paw_v1|handshake_paw_v2|handshake_paw_v3|handshake_paw_m1|handshake_paw_m2|handshake_paw_m3|handshake_paw_p1|handshake_paw_p2|handshake_paw_p3|handshake_paw_e1|handshake_paw_e2|handshake_paw_e3|handshake_paw_k1|handshake_paw_k2|handshake_paw_k3|handshake_paw_fe1|handshake_paw_ft1|handshake_paw_fk1|selfie_paw|selfie_paw_r1|selfie_paw_r2|selfie_paw_r3|selfie_paw_d1|selfie_paw_d2|selfie_paw_d3|selfie_paw_o1|selfie_paw_o2|selfie_paw_o3|selfie_paw_y1|selfie_paw_y2|selfie_paw_y3|selfie_paw_l1|selfie_paw_l2|selfie_paw_l3|selfie_paw_g1|selfie_paw_g2|selfie_paw_g3|selfie_paw_t1|selfie_paw_t2|selfie_paw_t3|selfie_paw_c1|selfie_paw_c2|selfie_paw_c3|selfie_paw_s1|selfie_paw_s2|selfie_paw_s3|selfie_paw_b1|selfie_paw_b2|selfie_paw_b3|selfie_paw_v1|selfie_paw_v2|selfie_paw_v3|selfie_paw_m1|selfie_paw_m2|selfie_paw_m3|selfie_paw_p1|selfie_paw_p2|selfie_paw_p3|selfie_paw_e1|selfie_paw_e2|selfie_paw_e3|selfie_paw_k1|selfie_paw_k2|selfie_paw_k3|selfie_paw_fe1|selfie_paw_ft1|selfie_paw_fk1|nail_varnish_paw|nail_varnish_paw_r1|nail_varnish_paw_r2|nail_varnish_paw_r3|nail_varnish_paw_d1|nail_varnish_paw_d2|nail_varnish_paw_d3|nail_varnish_paw_o1|nail_varnish_paw_o2|nail_varnish_paw_o3|nail_varnish_paw_y1|nail_varnish_paw_y2|nail_varnish_paw_y3|nail_varnish_paw_l1|nail_varnish_paw_l2|nail_varnish_paw_l3|nail_varnish_paw_g1|nail_varnish_paw_g2|nail_varnish_paw_g3|nail_varnish_paw_t1|nail_varnish_paw_t2|nail_varnish_paw_t3|nail_varnish_paw_c1|nail_varnish_paw_c2|nail_varnish_paw_c3|nail_varnish_paw_s1|nail_varnish_paw_s2|nail_varnish_paw_s3|nail_varnish_paw_b1|nail_varnish_paw_b2|nail_varnish_paw_b3|nail_varnish_paw_v1|nail_varnish_paw_v2|nail_varnish_paw_v3|nail_varnish_paw_m1|nail_varnish_paw_m2|nail_varnish_paw_m3|nail_varnish_paw_p1|nail_varnish_paw_p2|nail_varnish_paw_p3|nail_varnish_paw_e1|nail_varnish_paw_e2|nail_varnish_paw_e3|nail_varnish_paw_k1|nail_varnish_paw_k2|nail_varnish_paw_k3|nail_varnish_paw_fe1|nail_varnish_paw_ft1|nail_varnish_paw_fk1|hand_clw|hand_clw_r1|hand_clw_r2|hand_clw_r3|hand_clw_d1|hand_clw_d2|hand_clw_d3|hand_clw_o1|hand_clw_o2|hand_clw_o3|hand_clw_y1|hand_clw_y2|hand_clw_y3|hand_clw_l1|hand_clw_l2|hand_clw_l3|hand_clw_g1|hand_clw_g2|hand_clw_g3|hand_clw_t1|hand_clw_t2|hand_clw_t3|hand_clw_c1|hand_clw_c2|hand_clw_c3|hand_clw_s1|hand_clw_s2|hand_clw_s3|hand_clw_b1|hand_clw_b2|hand_clw_b3|hand_clw_v1|hand_clw_v2|hand_clw_v3|hand_clw_m1|hand_clw_m2|hand_clw_m3|hand_clw_p1|hand_clw_p2|hand_clw_p3|hand_clw_e1|hand_clw_e2|hand_clw_e3|hand_clw_k1|hand_clw_k2|hand_clw_k3|hand_splayed_clw|hand_splayed_clw_r1|hand_splayed_clw_r2|hand_splayed_clw_r3|hand_splayed_clw_d1|hand_splayed_clw_d2|hand_splayed_clw_d3|hand_splayed_clw_o1|hand_splayed_clw_o2|hand_splayed_clw_o3|hand_splayed_clw_y1|hand_splayed_clw_y2|hand_splayed_clw_y3|hand_splayed_clw_l1|hand_splayed_clw_l2|hand_splayed_clw_l3|hand_splayed_clw_g1|hand_splayed_clw_g2|hand_splayed_clw_g3|hand_splayed_clw_t1|hand_splayed_clw_t2|hand_splayed_clw_t3|hand_splayed_clw_c1|hand_splayed_clw_c2|hand_splayed_clw_c3|hand_splayed_clw_s1|hand_splayed_clw_s2|hand_splayed_clw_s3|hand_splayed_clw_b1|hand_splayed_clw_b2|hand_splayed_clw_b3|hand_splayed_clw_v1|hand_splayed_clw_v2|hand_splayed_clw_v3|hand_splayed_clw_m1|hand_splayed_clw_m2|hand_splayed_clw_m3|hand_splayed_clw_p1|hand_splayed_clw_p2|hand_splayed_clw_p3|hand_splayed_clw_e1|hand_splayed_clw_e2|hand_splayed_clw_e3|hand_splayed_clw_k1|hand_splayed_clw_k2|hand_splayed_clw_k3|back_of_hand_clw|back_of_hand_clw_r1|back_of_hand_clw_r2|back_of_hand_clw_r3|back_of_hand_clw_d1|back_of_hand_clw_d2|back_of_hand_clw_d3|back_of_hand_clw_o1|back_of_hand_clw_o2|back_of_hand_clw_o3|back_of_hand_clw_y1|back_of_hand_clw_y2|back_of_hand_clw_y3|back_of_hand_clw_l1|back_of_hand_clw_l2|back_of_hand_clw_l3|back_of_hand_clw_g1|back_of_hand_clw_g2|back_of_hand_clw_g3|back_of_hand_clw_t1|back_of_hand_clw_t2|back_of_hand_clw_t3|back_of_hand_clw_c1|back_of_hand_clw_c2|back_of_hand_clw_c3|back_of_hand_clw_s1|back_of_hand_clw_s2|back_of_hand_clw_s3|back_of_hand_clw_b1|back_of_hand_clw_b2|back_of_hand_clw_b3|back_of_hand_clw_v1|back_of_hand_clw_v2|back_of_hand_clw_v3|back_of_hand_clw_m1|back_of_hand_clw_m2|back_of_hand_clw_m3|back_of_hand_clw_p1|back_of_hand_clw_p2|back_of_hand_clw_p3|back_of_hand_clw_e1|back_of_hand_clw_e2|back_of_hand_clw_e3|back_of_hand_clw_k1|back_of_hand_clw_k2|back_of_hand_clw_k3|v_clw|v_clw_r1|v_clw_r2|v_clw_r3|v_clw_d1|v_clw_d2|v_clw_d3|v_clw_o1|v_clw_o2|v_clw_o3|v_clw_y1|v_clw_y2|v_clw_y3|v_clw_l1|v_clw_l2|v_clw_l3|v_clw_g1|v_clw_g2|v_clw_g3|v_clw_t1|v_clw_t2|v_clw_t3|v_clw_c1|v_clw_c2|v_clw_c3|v_clw_s1|v_clw_s2|v_clw_s3|v_clw_b1|v_clw_b2|v_clw_b3|v_clw_v1|v_clw_v2|v_clw_v3|v_clw_m1|v_clw_m2|v_clw_m3|v_clw_p1|v_clw_p2|v_clw_p3|v_clw_e1|v_clw_e2|v_clw_e3|v_clw_k1|v_clw_k2|v_clw_k3|crossed_fingers_clw|crossed_fingers_clw_r1|crossed_fingers_clw_r2|crossed_fingers_clw_r3|crossed_fingers_clw_d1|crossed_fingers_clw_d2|crossed_fingers_clw_d3|crossed_fingers_clw_o1|crossed_fingers_clw_o2|crossed_fingers_clw_o3|crossed_fingers_clw_y1|crossed_fingers_clw_y2|crossed_fingers_clw_y3|crossed_fingers_clw_l1|crossed_fingers_clw_l2|crossed_fingers_clw_l3|crossed_fingers_clw_g1|crossed_fingers_clw_g2|crossed_fingers_clw_g3|crossed_fingers_clw_t1|crossed_fingers_clw_t2|crossed_fingers_clw_t3|crossed_fingers_clw_c1|crossed_fingers_clw_c2|crossed_fingers_clw_c3|crossed_fingers_clw_s1|crossed_fingers_clw_s2|crossed_fingers_clw_s3|crossed_fingers_clw_b1|crossed_fingers_clw_b2|crossed_fingers_clw_b3|crossed_fingers_clw_v1|crossed_fingers_clw_v2|crossed_fingers_clw_v3|crossed_fingers_clw_m1|crossed_fingers_clw_m2|crossed_fingers_clw_m3|crossed_fingers_clw_p1|crossed_fingers_clw_p2|crossed_fingers_clw_p3|crossed_fingers_clw_e1|crossed_fingers_clw_e2|crossed_fingers_clw_e3|crossed_fingers_clw_k1|crossed_fingers_clw_k2|crossed_fingers_clw_k3|index_finger_clw|index_finger_clw_r1|index_finger_clw_r2|index_finger_clw_r3|index_finger_clw_d1|index_finger_clw_d2|index_finger_clw_d3|index_finger_clw_o1|index_finger_clw_o2|index_finger_clw_o3|index_finger_clw_y1|index_finger_clw_y2|index_finger_clw_y3|index_finger_clw_l1|index_finger_clw_l2|index_finger_clw_l3|index_finger_clw_g1|index_finger_clw_g2|index_finger_clw_g3|index_finger_clw_t1|index_finger_clw_t2|index_finger_clw_t3|index_finger_clw_c1|index_finger_clw_c2|index_finger_clw_c3|index_finger_clw_s1|index_finger_clw_s2|index_finger_clw_s3|index_finger_clw_b1|index_finger_clw_b2|index_finger_clw_b3|index_finger_clw_v1|index_finger_clw_v2|index_finger_clw_v3|index_finger_clw_m1|index_finger_clw_m2|index_finger_clw_m3|index_finger_clw_p1|index_finger_clw_p2|index_finger_clw_p3|index_finger_clw_e1|index_finger_clw_e2|index_finger_clw_e3|index_finger_clw_k1|index_finger_clw_k2|index_finger_clw_k3|metal_clw|metal_clw_r1|metal_clw_r2|metal_clw_r3|metal_clw_d1|metal_clw_d2|metal_clw_d3|metal_clw_o1|metal_clw_o2|metal_clw_o3|metal_clw_y1|metal_clw_y2|metal_clw_y3|metal_clw_l1|metal_clw_l2|metal_clw_l3|metal_clw_g1|metal_clw_g2|metal_clw_g3|metal_clw_t1|metal_clw_t2|metal_clw_t3|metal_clw_c1|metal_clw_c2|metal_clw_c3|metal_clw_s1|metal_clw_s2|metal_clw_s3|metal_clw_b1|metal_clw_b2|metal_clw_b3|metal_clw_v1|metal_clw_v2|metal_clw_v3|metal_clw_m1|metal_clw_m2|metal_clw_m3|metal_clw_p1|metal_clw_p2|metal_clw_p3|metal_clw_e1|metal_clw_e2|metal_clw_e3|metal_clw_k1|metal_clw_k2|metal_clw_k3|vulcan_clw|vulcan_clw_r1|vulcan_clw_r2|vulcan_clw_r3|vulcan_clw_d1|vulcan_clw_d2|vulcan_clw_d3|vulcan_clw_o1|vulcan_clw_o2|vulcan_clw_o3|vulcan_clw_y1|vulcan_clw_y2|vulcan_clw_y3|vulcan_clw_l1|vulcan_clw_l2|vulcan_clw_l3|vulcan_clw_g1|vulcan_clw_g2|vulcan_clw_g3|vulcan_clw_t1|vulcan_clw_t2|vulcan_clw_t3|vulcan_clw_c1|vulcan_clw_c2|vulcan_clw_c3|vulcan_clw_s1|vulcan_clw_s2|vulcan_clw_s3|vulcan_clw_b1|vulcan_clw_b2|vulcan_clw_b3|vulcan_clw_v1|vulcan_clw_v2|vulcan_clw_v3|vulcan_clw_m1|vulcan_clw_m2|vulcan_clw_m3|vulcan_clw_p1|vulcan_clw_p2|vulcan_clw_p3|vulcan_clw_e1|vulcan_clw_e2|vulcan_clw_e3|vulcan_clw_k1|vulcan_clw_k2|vulcan_clw_k3|thumbs_up_clw|thumbs_up_clw_r1|thumbs_up_clw_r2|thumbs_up_clw_r3|thumbs_up_clw_d1|thumbs_up_clw_d2|thumbs_up_clw_d3|thumbs_up_clw_o1|thumbs_up_clw_o2|thumbs_up_clw_o3|thumbs_up_clw_y1|thumbs_up_clw_y2|thumbs_up_clw_y3|thumbs_up_clw_l1|thumbs_up_clw_l2|thumbs_up_clw_l3|thumbs_up_clw_g1|thumbs_up_clw_g2|thumbs_up_clw_g3|thumbs_up_clw_t1|thumbs_up_clw_t2|thumbs_up_clw_t3|thumbs_up_clw_c1|thumbs_up_clw_c2|thumbs_up_clw_c3|thumbs_up_clw_s1|thumbs_up_clw_s2|thumbs_up_clw_s3|thumbs_up_clw_b1|thumbs_up_clw_b2|thumbs_up_clw_b3|thumbs_up_clw_v1|thumbs_up_clw_v2|thumbs_up_clw_v3|thumbs_up_clw_m1|thumbs_up_clw_m2|thumbs_up_clw_m3|thumbs_up_clw_p1|thumbs_up_clw_p2|thumbs_up_clw_p3|thumbs_up_clw_e1|thumbs_up_clw_e2|thumbs_up_clw_e3|thumbs_up_clw_k1|thumbs_up_clw_k2|thumbs_up_clw_k3|thumbs_down_clw|thumbs_down_clw_r1|thumbs_down_clw_r2|thumbs_down_clw_r3|thumbs_down_clw_d1|thumbs_down_clw_d2|thumbs_down_clw_d3|thumbs_down_clw_o1|thumbs_down_clw_o2|thumbs_down_clw_o3|thumbs_down_clw_y1|thumbs_down_clw_y2|thumbs_down_clw_y3|thumbs_down_clw_l1|thumbs_down_clw_l2|thumbs_down_clw_l3|thumbs_down_clw_g1|thumbs_down_clw_g2|thumbs_down_clw_g3|thumbs_down_clw_t1|thumbs_down_clw_t2|thumbs_down_clw_t3|thumbs_down_clw_c1|thumbs_down_clw_c2|thumbs_down_clw_c3|thumbs_down_clw_s1|thumbs_down_clw_s2|thumbs_down_clw_s3|thumbs_down_clw_b1|thumbs_down_clw_b2|thumbs_down_clw_b3|thumbs_down_clw_v1|thumbs_down_clw_v2|thumbs_down_clw_v3|thumbs_down_clw_m1|thumbs_down_clw_m2|thumbs_down_clw_m3|thumbs_down_clw_p1|thumbs_down_clw_p2|thumbs_down_clw_p3|thumbs_down_clw_e1|thumbs_down_clw_e2|thumbs_down_clw_e3|thumbs_down_clw_k1|thumbs_down_clw_k2|thumbs_down_clw_k3|call_me_clw|call_me_clw_r1|call_me_clw_r2|call_me_clw_r3|call_me_clw_d1|call_me_clw_d2|call_me_clw_d3|call_me_clw_o1|call_me_clw_o2|call_me_clw_o3|call_me_clw_y1|call_me_clw_y2|call_me_clw_y3|call_me_clw_l1|call_me_clw_l2|call_me_clw_l3|call_me_clw_g1|call_me_clw_g2|call_me_clw_g3|call_me_clw_t1|call_me_clw_t2|call_me_clw_t3|call_me_clw_c1|call_me_clw_c2|call_me_clw_c3|call_me_clw_s1|call_me_clw_s2|call_me_clw_s3|call_me_clw_b1|call_me_clw_b2|call_me_clw_b3|call_me_clw_v1|call_me_clw_v2|call_me_clw_v3|call_me_clw_m1|call_me_clw_m2|call_me_clw_m3|call_me_clw_p1|call_me_clw_p2|call_me_clw_p3|call_me_clw_e1|call_me_clw_e2|call_me_clw_e3|call_me_clw_k1|call_me_clw_k2|call_me_clw_k3|middle_finger_clw|middle_finger_clw_r1|middle_finger_clw_r2|middle_finger_clw_r3|middle_finger_clw_d1|middle_finger_clw_d2|middle_finger_clw_d3|middle_finger_clw_o1|middle_finger_clw_o2|middle_finger_clw_o3|middle_finger_clw_y1|middle_finger_clw_y2|middle_finger_clw_y3|middle_finger_clw_l1|middle_finger_clw_l2|middle_finger_clw_l3|middle_finger_clw_g1|middle_finger_clw_g2|middle_finger_clw_g3|middle_finger_clw_t1|middle_finger_clw_t2|middle_finger_clw_t3|middle_finger_clw_c1|middle_finger_clw_c2|middle_finger_clw_c3|middle_finger_clw_s1|middle_finger_clw_s2|middle_finger_clw_s3|middle_finger_clw_b1|middle_finger_clw_b2|middle_finger_clw_b3|middle_finger_clw_v1|middle_finger_clw_v2|middle_finger_clw_v3|middle_finger_clw_m1|middle_finger_clw_m2|middle_finger_clw_m3|middle_finger_clw_p1|middle_finger_clw_p2|middle_finger_clw_p3|middle_finger_clw_e1|middle_finger_clw_e2|middle_finger_clw_e3|middle_finger_clw_k1|middle_finger_clw_k2|middle_finger_clw_k3|point_up_clw|point_up_clw_r1|point_up_clw_r2|point_up_clw_r3|point_up_clw_d1|point_up_clw_d2|point_up_clw_d3|point_up_clw_o1|point_up_clw_o2|point_up_clw_o3|point_up_clw_y1|point_up_clw_y2|point_up_clw_y3|point_up_clw_l1|point_up_clw_l2|point_up_clw_l3|point_up_clw_g1|point_up_clw_g2|point_up_clw_g3|point_up_clw_t1|point_up_clw_t2|point_up_clw_t3|point_up_clw_c1|point_up_clw_c2|point_up_clw_c3|point_up_clw_s1|point_up_clw_s2|point_up_clw_s3|point_up_clw_b1|point_up_clw_b2|point_up_clw_b3|point_up_clw_v1|point_up_clw_v2|point_up_clw_v3|point_up_clw_m1|point_up_clw_m2|point_up_clw_m3|point_up_clw_p1|point_up_clw_p2|point_up_clw_p3|point_up_clw_e1|point_up_clw_e2|point_up_clw_e3|point_up_clw_k1|point_up_clw_k2|point_up_clw_k3|point_down_clw|point_down_clw_r1|point_down_clw_r2|point_down_clw_r3|point_down_clw_d1|point_down_clw_d2|point_down_clw_d3|point_down_clw_o1|point_down_clw_o2|point_down_clw_o3|point_down_clw_y1|point_down_clw_y2|point_down_clw_y3|point_down_clw_l1|point_down_clw_l2|point_down_clw_l3|point_down_clw_g1|point_down_clw_g2|point_down_clw_g3|point_down_clw_t1|point_down_clw_t2|point_down_clw_t3|point_down_clw_c1|point_down_clw_c2|point_down_clw_c3|point_down_clw_s1|point_down_clw_s2|point_down_clw_s3|point_down_clw_b1|point_down_clw_b2|point_down_clw_b3|point_down_clw_v1|point_down_clw_v2|point_down_clw_v3|point_down_clw_m1|point_down_clw_m2|point_down_clw_m3|point_down_clw_p1|point_down_clw_p2|point_down_clw_p3|point_down_clw_e1|point_down_clw_e2|point_down_clw_e3|point_down_clw_k1|point_down_clw_k2|point_down_clw_k3|point_left_clw|point_left_clw_r1|point_left_clw_r2|point_left_clw_r3|point_left_clw_d1|point_left_clw_d2|point_left_clw_d3|point_left_clw_o1|point_left_clw_o2|point_left_clw_o3|point_left_clw_y1|point_left_clw_y2|point_left_clw_y3|point_left_clw_l1|point_left_clw_l2|point_left_clw_l3|point_left_clw_g1|point_left_clw_g2|point_left_clw_g3|point_left_clw_t1|point_left_clw_t2|point_left_clw_t3|point_left_clw_c1|point_left_clw_c2|point_left_clw_c3|point_left_clw_s1|point_left_clw_s2|point_left_clw_s3|point_left_clw_b1|point_left_clw_b2|point_left_clw_b3|point_left_clw_v1|point_left_clw_v2|point_left_clw_v3|point_left_clw_m1|point_left_clw_m2|point_left_clw_m3|point_left_clw_p1|point_left_clw_p2|point_left_clw_p3|point_left_clw_e1|point_left_clw_e2|point_left_clw_e3|point_left_clw_k1|point_left_clw_k2|point_left_clw_k3|point_right_clw|point_right_clw_r1|point_right_clw_r2|point_right_clw_r3|point_right_clw_d1|point_right_clw_d2|point_right_clw_d3|point_right_clw_o1|point_right_clw_o2|point_right_clw_o3|point_right_clw_y1|point_right_clw_y2|point_right_clw_y3|point_right_clw_l1|point_right_clw_l2|point_right_clw_l3|point_right_clw_g1|point_right_clw_g2|point_right_clw_g3|point_right_clw_t1|point_right_clw_t2|point_right_clw_t3|point_right_clw_c1|point_right_clw_c2|point_right_clw_c3|point_right_clw_s1|point_right_clw_s2|point_right_clw_s3|point_right_clw_b1|point_right_clw_b2|point_right_clw_b3|point_right_clw_v1|point_right_clw_v2|point_right_clw_v3|point_right_clw_m1|point_right_clw_m2|point_right_clw_m3|point_right_clw_p1|point_right_clw_p2|point_right_clw_p3|point_right_clw_e1|point_right_clw_e2|point_right_clw_e3|point_right_clw_k1|point_right_clw_k2|point_right_clw_k3|fist_clw|fist_clw_r1|fist_clw_r2|fist_clw_r3|fist_clw_d1|fist_clw_d2|fist_clw_d3|fist_clw_o1|fist_clw_o2|fist_clw_o3|fist_clw_y1|fist_clw_y2|fist_clw_y3|fist_clw_l1|fist_clw_l2|fist_clw_l3|fist_clw_g1|fist_clw_g2|fist_clw_g3|fist_clw_t1|fist_clw_t2|fist_clw_t3|fist_clw_c1|fist_clw_c2|fist_clw_c3|fist_clw_s1|fist_clw_s2|fist_clw_s3|fist_clw_b1|fist_clw_b2|fist_clw_b3|fist_clw_v1|fist_clw_v2|fist_clw_v3|fist_clw_m1|fist_clw_m2|fist_clw_m3|fist_clw_p1|fist_clw_p2|fist_clw_p3|fist_clw_e1|fist_clw_e2|fist_clw_e3|fist_clw_k1|fist_clw_k2|fist_clw_k3|fist_facing_left_clw|fist_facing_left_clw_r1|fist_facing_left_clw_r2|fist_facing_left_clw_r3|fist_facing_left_clw_d1|fist_facing_left_clw_d2|fist_facing_left_clw_d3|fist_facing_left_clw_o1|fist_facing_left_clw_o2|fist_facing_left_clw_o3|fist_facing_left_clw_y1|fist_facing_left_clw_y2|fist_facing_left_clw_y3|fist_facing_left_clw_l1|fist_facing_left_clw_l2|fist_facing_left_clw_l3|fist_facing_left_clw_g1|fist_facing_left_clw_g2|fist_facing_left_clw_g3|fist_facing_left_clw_t1|fist_facing_left_clw_t2|fist_facing_left_clw_t3|fist_facing_left_clw_c1|fist_facing_left_clw_c2|fist_facing_left_clw_c3|fist_facing_left_clw_s1|fist_facing_left_clw_s2|fist_facing_left_clw_s3|fist_facing_left_clw_b1|fist_facing_left_clw_b2|fist_facing_left_clw_b3|fist_facing_left_clw_v1|fist_facing_left_clw_v2|fist_facing_left_clw_v3|fist_facing_left_clw_m1|fist_facing_left_clw_m2|fist_facing_left_clw_m3|fist_facing_left_clw_p1|fist_facing_left_clw_p2|fist_facing_left_clw_p3|fist_facing_left_clw_e1|fist_facing_left_clw_e2|fist_facing_left_clw_e3|fist_facing_left_clw_k1|fist_facing_left_clw_k2|fist_facing_left_clw_k3|fist_facing_right_clw|fist_facing_right_clw_r1|fist_facing_right_clw_r2|fist_facing_right_clw_r3|fist_facing_right_clw_d1|fist_facing_right_clw_d2|fist_facing_right_clw_d3|fist_facing_right_clw_o1|fist_facing_right_clw_o2|fist_facing_right_clw_o3|fist_facing_right_clw_y1|fist_facing_right_clw_y2|fist_facing_right_clw_y3|fist_facing_right_clw_l1|fist_facing_right_clw_l2|fist_facing_right_clw_l3|fist_facing_right_clw_g1|fist_facing_right_clw_g2|fist_facing_right_clw_g3|fist_facing_right_clw_t1|fist_facing_right_clw_t2|fist_facing_right_clw_t3|fist_facing_right_clw_c1|fist_facing_right_clw_c2|fist_facing_right_clw_c3|fist_facing_right_clw_s1|fist_facing_right_clw_s2|fist_facing_right_clw_s3|fist_facing_right_clw_b1|fist_facing_right_clw_b2|fist_facing_right_clw_b3|fist_facing_right_clw_v1|fist_facing_right_clw_v2|fist_facing_right_clw_v3|fist_facing_right_clw_m1|fist_facing_right_clw_m2|fist_facing_right_clw_m3|fist_facing_right_clw_p1|fist_facing_right_clw_p2|fist_facing_right_clw_p3|fist_facing_right_clw_e1|fist_facing_right_clw_e2|fist_facing_right_clw_e3|fist_facing_right_clw_k1|fist_facing_right_clw_k2|fist_facing_right_clw_k3|punch_clw|punch_clw_r1|punch_clw_r2|punch_clw_r3|punch_clw_d1|punch_clw_d2|punch_clw_d3|punch_clw_o1|punch_clw_o2|punch_clw_o3|punch_clw_y1|punch_clw_y2|punch_clw_y3|punch_clw_l1|punch_clw_l2|punch_clw_l3|punch_clw_g1|punch_clw_g2|punch_clw_g3|punch_clw_t1|punch_clw_t2|punch_clw_t3|punch_clw_c1|punch_clw_c2|punch_clw_c3|punch_clw_s1|punch_clw_s2|punch_clw_s3|punch_clw_b1|punch_clw_b2|punch_clw_b3|punch_clw_v1|punch_clw_v2|punch_clw_v3|punch_clw_m1|punch_clw_m2|punch_clw_m3|punch_clw_p1|punch_clw_p2|punch_clw_p3|punch_clw_e1|punch_clw_e2|punch_clw_e3|punch_clw_k1|punch_clw_k2|punch_clw_k3|ok_hand_clw|ok_hand_clw_r1|ok_hand_clw_r2|ok_hand_clw_r3|ok_hand_clw_d1|ok_hand_clw_d2|ok_hand_clw_d3|ok_hand_clw_o1|ok_hand_clw_o2|ok_hand_clw_o3|ok_hand_clw_y1|ok_hand_clw_y2|ok_hand_clw_y3|ok_hand_clw_l1|ok_hand_clw_l2|ok_hand_clw_l3|ok_hand_clw_g1|ok_hand_clw_g2|ok_hand_clw_g3|ok_hand_clw_t1|ok_hand_clw_t2|ok_hand_clw_t3|ok_hand_clw_c1|ok_hand_clw_c2|ok_hand_clw_c3|ok_hand_clw_s1|ok_hand_clw_s2|ok_hand_clw_s3|ok_hand_clw_b1|ok_hand_clw_b2|ok_hand_clw_b3|ok_hand_clw_v1|ok_hand_clw_v2|ok_hand_clw_v3|ok_hand_clw_m1|ok_hand_clw_m2|ok_hand_clw_m3|ok_hand_clw_p1|ok_hand_clw_p2|ok_hand_clw_p3|ok_hand_clw_e1|ok_hand_clw_e2|ok_hand_clw_e3|ok_hand_clw_k1|ok_hand_clw_k2|ok_hand_clw_k3|wave_clw|wave_clw_r1|wave_clw_r2|wave_clw_r3|wave_clw_d1|wave_clw_d2|wave_clw_d3|wave_clw_o1|wave_clw_o2|wave_clw_o3|wave_clw_y1|wave_clw_y2|wave_clw_y3|wave_clw_l1|wave_clw_l2|wave_clw_l3|wave_clw_g1|wave_clw_g2|wave_clw_g3|wave_clw_t1|wave_clw_t2|wave_clw_t3|wave_clw_c1|wave_clw_c2|wave_clw_c3|wave_clw_s1|wave_clw_s2|wave_clw_s3|wave_clw_b1|wave_clw_b2|wave_clw_b3|wave_clw_v1|wave_clw_v2|wave_clw_v3|wave_clw_m1|wave_clw_m2|wave_clw_m3|wave_clw_p1|wave_clw_p2|wave_clw_p3|wave_clw_e1|wave_clw_e2|wave_clw_e3|wave_clw_k1|wave_clw_k2|wave_clw_k3|clap_clw|clap_clw_r1|clap_clw_r2|clap_clw_r3|clap_clw_d1|clap_clw_d2|clap_clw_d3|clap_clw_o1|clap_clw_o2|clap_clw_o3|clap_clw_y1|clap_clw_y2|clap_clw_y3|clap_clw_l1|clap_clw_l2|clap_clw_l3|clap_clw_g1|clap_clw_g2|clap_clw_g3|clap_clw_t1|clap_clw_t2|clap_clw_t3|clap_clw_c1|clap_clw_c2|clap_clw_c3|clap_clw_s1|clap_clw_s2|clap_clw_s3|clap_clw_b1|clap_clw_b2|clap_clw_b3|clap_clw_v1|clap_clw_v2|clap_clw_v3|clap_clw_m1|clap_clw_m2|clap_clw_m3|clap_clw_p1|clap_clw_p2|clap_clw_p3|clap_clw_e1|clap_clw_e2|clap_clw_e3|clap_clw_k1|clap_clw_k2|clap_clw_k3|raised_hands_clw|raised_hands_clw_r1|raised_hands_clw_r2|raised_hands_clw_r3|raised_hands_clw_d1|raised_hands_clw_d2|raised_hands_clw_d3|raised_hands_clw_o1|raised_hands_clw_o2|raised_hands_clw_o3|raised_hands_clw_y1|raised_hands_clw_y2|raised_hands_clw_y3|raised_hands_clw_l1|raised_hands_clw_l2|raised_hands_clw_l3|raised_hands_clw_g1|raised_hands_clw_g2|raised_hands_clw_g3|raised_hands_clw_t1|raised_hands_clw_t2|raised_hands_clw_t3|raised_hands_clw_c1|raised_hands_clw_c2|raised_hands_clw_c3|raised_hands_clw_s1|raised_hands_clw_s2|raised_hands_clw_s3|raised_hands_clw_b1|raised_hands_clw_b2|raised_hands_clw_b3|raised_hands_clw_v1|raised_hands_clw_v2|raised_hands_clw_v3|raised_hands_clw_m1|raised_hands_clw_m2|raised_hands_clw_m3|raised_hands_clw_p1|raised_hands_clw_p2|raised_hands_clw_p3|raised_hands_clw_e1|raised_hands_clw_e2|raised_hands_clw_e3|raised_hands_clw_k1|raised_hands_clw_k2|raised_hands_clw_k3|open_hands_clw|open_hands_clw_r1|open_hands_clw_r2|open_hands_clw_r3|open_hands_clw_d1|open_hands_clw_d2|open_hands_clw_d3|open_hands_clw_o1|open_hands_clw_o2|open_hands_clw_o3|open_hands_clw_y1|open_hands_clw_y2|open_hands_clw_y3|open_hands_clw_l1|open_hands_clw_l2|open_hands_clw_l3|open_hands_clw_g1|open_hands_clw_g2|open_hands_clw_g3|open_hands_clw_t1|open_hands_clw_t2|open_hands_clw_t3|open_hands_clw_c1|open_hands_clw_c2|open_hands_clw_c3|open_hands_clw_s1|open_hands_clw_s2|open_hands_clw_s3|open_hands_clw_b1|open_hands_clw_b2|open_hands_clw_b3|open_hands_clw_v1|open_hands_clw_v2|open_hands_clw_v3|open_hands_clw_m1|open_hands_clw_m2|open_hands_clw_m3|open_hands_clw_p1|open_hands_clw_p2|open_hands_clw_p3|open_hands_clw_e1|open_hands_clw_e2|open_hands_clw_e3|open_hands_clw_k1|open_hands_clw_k2|open_hands_clw_k3|pray_clw|pray_clw_r1|pray_clw_r2|pray_clw_r3|pray_clw_d1|pray_clw_d2|pray_clw_d3|pray_clw_o1|pray_clw_o2|pray_clw_o3|pray_clw_y1|pray_clw_y2|pray_clw_y3|pray_clw_l1|pray_clw_l2|pray_clw_l3|pray_clw_g1|pray_clw_g2|pray_clw_g3|pray_clw_t1|pray_clw_t2|pray_clw_t3|pray_clw_c1|pray_clw_c2|pray_clw_c3|pray_clw_s1|pray_clw_s2|pray_clw_s3|pray_clw_b1|pray_clw_b2|pray_clw_b3|pray_clw_v1|pray_clw_v2|pray_clw_v3|pray_clw_m1|pray_clw_m2|pray_clw_m3|pray_clw_p1|pray_clw_p2|pray_clw_p3|pray_clw_e1|pray_clw_e2|pray_clw_e3|pray_clw_k1|pray_clw_k2|pray_clw_k3|writing_hand_clw|writing_hand_clw_r1|writing_hand_clw_r2|writing_hand_clw_r3|writing_hand_clw_d1|writing_hand_clw_d2|writing_hand_clw_d3|writing_hand_clw_o1|writing_hand_clw_o2|writing_hand_clw_o3|writing_hand_clw_y1|writing_hand_clw_y2|writing_hand_clw_y3|writing_hand_clw_l1|writing_hand_clw_l2|writing_hand_clw_l3|writing_hand_clw_g1|writing_hand_clw_g2|writing_hand_clw_g3|writing_hand_clw_t1|writing_hand_clw_t2|writing_hand_clw_t3|writing_hand_clw_c1|writing_hand_clw_c2|writing_hand_clw_c3|writing_hand_clw_s1|writing_hand_clw_s2|writing_hand_clw_s3|writing_hand_clw_b1|writing_hand_clw_b2|writing_hand_clw_b3|writing_hand_clw_v1|writing_hand_clw_v2|writing_hand_clw_v3|writing_hand_clw_m1|writing_hand_clw_m2|writing_hand_clw_m3|writing_hand_clw_p1|writing_hand_clw_p2|writing_hand_clw_p3|writing_hand_clw_e1|writing_hand_clw_e2|writing_hand_clw_e3|writing_hand_clw_k1|writing_hand_clw_k2|writing_hand_clw_k3|muscle_clw|muscle_clw_r1|muscle_clw_r2|muscle_clw_r3|muscle_clw_d1|muscle_clw_d2|muscle_clw_d3|muscle_clw_o1|muscle_clw_o2|muscle_clw_o3|muscle_clw_y1|muscle_clw_y2|muscle_clw_y3|muscle_clw_l1|muscle_clw_l2|muscle_clw_l3|muscle_clw_g1|muscle_clw_g2|muscle_clw_g3|muscle_clw_t1|muscle_clw_t2|muscle_clw_t3|muscle_clw_c1|muscle_clw_c2|muscle_clw_c3|muscle_clw_s1|muscle_clw_s2|muscle_clw_s3|muscle_clw_b1|muscle_clw_b2|muscle_clw_b3|muscle_clw_v1|muscle_clw_v2|muscle_clw_v3|muscle_clw_m1|muscle_clw_m2|muscle_clw_m3|muscle_clw_p1|muscle_clw_p2|muscle_clw_p3|muscle_clw_e1|muscle_clw_e2|muscle_clw_e3|muscle_clw_k1|muscle_clw_k2|muscle_clw_k3|handshake_clw|handshake_clw_r1|handshake_clw_r2|handshake_clw_r3|handshake_clw_d1|handshake_clw_d2|handshake_clw_d3|handshake_clw_o1|handshake_clw_o2|handshake_clw_o3|handshake_clw_y1|handshake_clw_y2|handshake_clw_y3|handshake_clw_l1|handshake_clw_l2|handshake_clw_l3|handshake_clw_g1|handshake_clw_g2|handshake_clw_g3|handshake_clw_t1|handshake_clw_t2|handshake_clw_t3|handshake_clw_c1|handshake_clw_c2|handshake_clw_c3|handshake_clw_s1|handshake_clw_s2|handshake_clw_s3|handshake_clw_b1|handshake_clw_b2|handshake_clw_b3|handshake_clw_v1|handshake_clw_v2|handshake_clw_v3|handshake_clw_m1|handshake_clw_m2|handshake_clw_m3|handshake_clw_p1|handshake_clw_p2|handshake_clw_p3|handshake_clw_e1|handshake_clw_e2|handshake_clw_e3|handshake_clw_k1|handshake_clw_k2|handshake_clw_k3|selfie_clw|selfie_clw_r1|selfie_clw_r2|selfie_clw_r3|selfie_clw_d1|selfie_clw_d2|selfie_clw_d3|selfie_clw_o1|selfie_clw_o2|selfie_clw_o3|selfie_clw_y1|selfie_clw_y2|selfie_clw_y3|selfie_clw_l1|selfie_clw_l2|selfie_clw_l3|selfie_clw_g1|selfie_clw_g2|selfie_clw_g3|selfie_clw_t1|selfie_clw_t2|selfie_clw_t3|selfie_clw_c1|selfie_clw_c2|selfie_clw_c3|selfie_clw_s1|selfie_clw_s2|selfie_clw_s3|selfie_clw_b1|selfie_clw_b2|selfie_clw_b3|selfie_clw_v1|selfie_clw_v2|selfie_clw_v3|selfie_clw_m1|selfie_clw_m2|selfie_clw_m3|selfie_clw_p1|selfie_clw_p2|selfie_clw_p3|selfie_clw_e1|selfie_clw_e2|selfie_clw_e3|selfie_clw_k1|selfie_clw_k2|selfie_clw_k3|nail_varnish_clw|nail_varnish_clw_r1|nail_varnish_clw_r2|nail_varnish_clw_r3|nail_varnish_clw_d1|nail_varnish_clw_d2|nail_varnish_clw_d3|nail_varnish_clw_o1|nail_varnish_clw_o2|nail_varnish_clw_o3|nail_varnish_clw_y1|nail_varnish_clw_y2|nail_varnish_clw_y3|nail_varnish_clw_l1|nail_varnish_clw_l2|nail_varnish_clw_l3|nail_varnish_clw_g1|nail_varnish_clw_g2|nail_varnish_clw_g3|nail_varnish_clw_t1|nail_varnish_clw_t2|nail_varnish_clw_t3|nail_varnish_clw_c1|nail_varnish_clw_c2|nail_varnish_clw_c3|nail_varnish_clw_s1|nail_varnish_clw_s2|nail_varnish_clw_s3|nail_varnish_clw_b1|nail_varnish_clw_b2|nail_varnish_clw_b3|nail_varnish_clw_v1|nail_varnish_clw_v2|nail_varnish_clw_v3|nail_varnish_clw_m1|nail_varnish_clw_m2|nail_varnish_clw_m3|nail_varnish_clw_p1|nail_varnish_clw_p2|nail_varnish_clw_p3|nail_varnish_clw_e1|nail_varnish_clw_e2|nail_varnish_clw_e3|nail_varnish_clw_k1|nail_varnish_clw_k2|nail_varnish_clw_k3|arms_in_the_air|arms_in_the_air_r1|arms_in_the_air_r2|arms_in_the_air_r3|arms_in_the_air_d1|arms_in_the_air_d2|arms_in_the_air_d3|arms_in_the_air_o1|arms_in_the_air_o2|arms_in_the_air_o3|arms_in_the_air_y1|arms_in_the_air_y2|arms_in_the_air_y3|arms_in_the_air_l1|arms_in_the_air_l2|arms_in_the_air_l3|arms_in_the_air_g1|arms_in_the_air_g2|arms_in_the_air_g3|arms_in_the_air_t1|arms_in_the_air_t2|arms_in_the_air_t3|arms_in_the_air_c1|arms_in_the_air_c2|arms_in_the_air_c3|arms_in_the_air_s1|arms_in_the_air_s2|arms_in_the_air_s3|arms_in_the_air_b1|arms_in_the_air_b2|arms_in_the_air_b3|arms_in_the_air_v1|arms_in_the_air_v2|arms_in_the_air_v3|arms_in_the_air_m1|arms_in_the_air_m2|arms_in_the_air_m3|arms_in_the_air_p1|arms_in_the_air_p2|arms_in_the_air_p3|arms_in_the_air_e1|arms_in_the_air_e2|arms_in_the_air_e3|arms_in_the_air_k1|arms_in_the_air_k2|arms_in_the_air_k3|arms_in_the_air_h1|arms_in_the_air_h2|arms_in_the_air_h3|arms_in_the_air_h4|arms_in_the_air_h5|arms_in_the_air_fe1|arms_in_the_air_ft1|arms_in_the_air_fk1|bow|bow_r1|bow_r2|bow_r3|bow_d1|bow_d2|bow_d3|bow_o1|bow_o2|bow_o3|bow_y1|bow_y2|bow_y3|bow_l1|bow_l2|bow_l3|bow_g1|bow_g2|bow_g3|bow_t1|bow_t2|bow_t3|bow_c1|bow_c2|bow_c3|bow_s1|bow_s2|bow_s3|bow_b1|bow_b2|bow_b3|bow_v1|bow_v2|bow_v3|bow_m1|bow_m2|bow_m3|bow_p1|bow_p2|bow_p3|bow_e1|bow_e2|bow_e3|bow_k1|bow_k2|bow_k3|bow_h1|bow_h2|bow_h3|bow_h4|bow_h5|bow_fe1|bow_ft1|bow_fk1|facepalm|facepalm_r1|facepalm_r2|facepalm_r3|facepalm_d1|facepalm_d2|facepalm_d3|facepalm_o1|facepalm_o2|facepalm_o3|facepalm_y1|facepalm_y2|facepalm_y3|facepalm_l1|facepalm_l2|facepalm_l3|facepalm_g1|facepalm_g2|facepalm_g3|facepalm_t1|facepalm_t2|facepalm_t3|facepalm_c1|facepalm_c2|facepalm_c3|facepalm_s1|facepalm_s2|facepalm_s3|facepalm_b1|facepalm_b2|facepalm_b3|facepalm_v1|facepalm_v2|facepalm_v3|facepalm_m1|facepalm_m2|facepalm_m3|facepalm_p1|facepalm_p2|facepalm_p3|facepalm_e1|facepalm_e2|facepalm_e3|facepalm_k1|facepalm_k2|facepalm_k3|facepalm_h1|facepalm_h2|facepalm_h3|facepalm_h4|facepalm_h5|facepalm_fe1|facepalm_ft1|facepalm_fk1|massage|massage_r1|massage_r2|massage_r3|massage_d1|massage_d2|massage_d3|massage_o1|massage_o2|massage_o3|massage_y1|massage_y2|massage_y3|massage_l1|massage_l2|massage_l3|massage_g1|massage_g2|massage_g3|massage_t1|massage_t2|massage_t3|massage_c1|massage_c2|massage_c3|massage_s1|massage_s2|massage_s3|massage_b1|massage_b2|massage_b3|massage_v1|massage_v2|massage_v3|massage_m1|massage_m2|massage_m3|massage_p1|massage_p2|massage_p3|massage_e1|massage_e2|massage_e3|massage_k1|massage_k2|massage_k3|massage_h1|massage_h2|massage_h3|massage_h4|massage_h5|massage_fe1|massage_ft1|massage_fk1|no_good|no_good_r1|no_good_r2|no_good_r3|no_good_d1|no_good_d2|no_good_d3|no_good_o1|no_good_o2|no_good_o3|no_good_y1|no_good_y2|no_good_y3|no_good_l1|no_good_l2|no_good_l3|no_good_g1|no_good_g2|no_good_g3|no_good_t1|no_good_t2|no_good_t3|no_good_c1|no_good_c2|no_good_c3|no_good_s1|no_good_s2|no_good_s3|no_good_b1|no_good_b2|no_good_b3|no_good_v1|no_good_v2|no_good_v3|no_good_m1|no_good_m2|no_good_m3|no_good_p1|no_good_p2|no_good_p3|no_good_e1|no_good_e2|no_good_e3|no_good_k1|no_good_k2|no_good_k3|no_good_h1|no_good_h2|no_good_h3|no_good_h4|no_good_h5|no_good_fe1|no_good_ft1|no_good_fk1|ok_gesture|ok_gesture_r1|ok_gesture_r2|ok_gesture_r3|ok_gesture_d1|ok_gesture_d2|ok_gesture_d3|ok_gesture_o1|ok_gesture_o2|ok_gesture_o3|ok_gesture_y1|ok_gesture_y2|ok_gesture_y3|ok_gesture_l1|ok_gesture_l2|ok_gesture_l3|ok_gesture_g1|ok_gesture_g2|ok_gesture_g3|ok_gesture_t1|ok_gesture_t2|ok_gesture_t3|ok_gesture_c1|ok_gesture_c2|ok_gesture_c3|ok_gesture_s1|ok_gesture_s2|ok_gesture_s3|ok_gesture_b1|ok_gesture_b2|ok_gesture_b3|ok_gesture_v1|ok_gesture_v2|ok_gesture_v3|ok_gesture_m1|ok_gesture_m2|ok_gesture_m3|ok_gesture_p1|ok_gesture_p2|ok_gesture_p3|ok_gesture_e1|ok_gesture_e2|ok_gesture_e3|ok_gesture_k1|ok_gesture_k2|ok_gesture_k3|ok_gesture_h1|ok_gesture_h2|ok_gesture_h3|ok_gesture_h4|ok_gesture_h5|ok_gesture_fe1|ok_gesture_ft1|ok_gesture_fk1|person_frowning|person_frowning_r1|person_frowning_r2|person_frowning_r3|person_frowning_d1|person_frowning_d2|person_frowning_d3|person_frowning_o1|person_frowning_o2|person_frowning_o3|person_frowning_y1|person_frowning_y2|person_frowning_y3|person_frowning_l1|person_frowning_l2|person_frowning_l3|person_frowning_g1|person_frowning_g2|person_frowning_g3|person_frowning_t1|person_frowning_t2|person_frowning_t3|person_frowning_c1|person_frowning_c2|person_frowning_c3|person_frowning_s1|person_frowning_s2|person_frowning_s3|person_frowning_b1|person_frowning_b2|person_frowning_b3|person_frowning_v1|person_frowning_v2|person_frowning_v3|person_frowning_m1|person_frowning_m2|person_frowning_m3|person_frowning_p1|person_frowning_p2|person_frowning_p3|person_frowning_e1|person_frowning_e2|person_frowning_e3|person_frowning_k1|person_frowning_k2|person_frowning_k3|person_frowning_h1|person_frowning_h2|person_frowning_h3|person_frowning_h4|person_frowning_h5|person_frowning_fe1|person_frowning_ft1|person_frowning_fk1|person_pouting|person_pouting_r1|person_pouting_r2|person_pouting_r3|person_pouting_d1|person_pouting_d2|person_pouting_d3|person_pouting_o1|person_pouting_o2|person_pouting_o3|person_pouting_y1|person_pouting_y2|person_pouting_y3|person_pouting_l1|person_pouting_l2|person_pouting_l3|person_pouting_g1|person_pouting_g2|person_pouting_g3|person_pouting_t1|person_pouting_t2|person_pouting_t3|person_pouting_c1|person_pouting_c2|person_pouting_c3|person_pouting_s1|person_pouting_s2|person_pouting_s3|person_pouting_b1|person_pouting_b2|person_pouting_b3|person_pouting_v1|person_pouting_v2|person_pouting_v3|person_pouting_m1|person_pouting_m2|person_pouting_m3|person_pouting_p1|person_pouting_p2|person_pouting_p3|person_pouting_e1|person_pouting_e2|person_pouting_e3|person_pouting_k1|person_pouting_k2|person_pouting_k3|person_pouting_h1|person_pouting_h2|person_pouting_h3|person_pouting_h4|person_pouting_h5|person_pouting_fe1|person_pouting_ft1|person_pouting_fk1|raising_hand|raising_hand_r1|raising_hand_r2|raising_hand_r3|raising_hand_d1|raising_hand_d2|raising_hand_d3|raising_hand_o1|raising_hand_o2|raising_hand_o3|raising_hand_y1|raising_hand_y2|raising_hand_y3|raising_hand_l1|raising_hand_l2|raising_hand_l3|raising_hand_g1|raising_hand_g2|raising_hand_g3|raising_hand_t1|raising_hand_t2|raising_hand_t3|raising_hand_c1|raising_hand_c2|raising_hand_c3|raising_hand_s1|raising_hand_s2|raising_hand_s3|raising_hand_b1|raising_hand_b2|raising_hand_b3|raising_hand_v1|raising_hand_v2|raising_hand_v3|raising_hand_m1|raising_hand_m2|raising_hand_m3|raising_hand_p1|raising_hand_p2|raising_hand_p3|raising_hand_e1|raising_hand_e2|raising_hand_e3|raising_hand_k1|raising_hand_k2|raising_hand_k3|raising_hand_h1|raising_hand_h2|raising_hand_h3|raising_hand_h4|raising_hand_h5|raising_hand_fe1|raising_hand_ft1|raising_hand_fk1|shrug|shrug_r1|shrug_r2|shrug_r3|shrug_d1|shrug_d2|shrug_d3|shrug_o1|shrug_o2|shrug_o3|shrug_y1|shrug_y2|shrug_y3|shrug_l1|shrug_l2|shrug_l3|shrug_g1|shrug_g2|shrug_g3|shrug_t1|shrug_t2|shrug_t3|shrug_c1|shrug_c2|shrug_c3|shrug_s1|shrug_s2|shrug_s3|shrug_b1|shrug_b2|shrug_b3|shrug_v1|shrug_v2|shrug_v3|shrug_m1|shrug_m2|shrug_m3|shrug_p1|shrug_p2|shrug_p3|shrug_e1|shrug_e2|shrug_e3|shrug_k1|shrug_k2|shrug_k3|shrug_h1|shrug_h2|shrug_h3|shrug_h4|shrug_h5|shrug_fe1|shrug_ft1|shrug_fk1|tipping_hand|tipping_hand_r1|tipping_hand_r2|tipping_hand_r3|tipping_hand_d1|tipping_hand_d2|tipping_hand_d3|tipping_hand_o1|tipping_hand_o2|tipping_hand_o3|tipping_hand_y1|tipping_hand_y2|tipping_hand_y3|tipping_hand_l1|tipping_hand_l2|tipping_hand_l3|tipping_hand_g1|tipping_hand_g2|tipping_hand_g3|tipping_hand_t1|tipping_hand_t2|tipping_hand_t3|tipping_hand_c1|tipping_hand_c2|tipping_hand_c3|tipping_hand_s1|tipping_hand_s2|tipping_hand_s3|tipping_hand_b1|tipping_hand_b2|tipping_hand_b3|tipping_hand_v1|tipping_hand_v2|tipping_hand_v3|tipping_hand_m1|tipping_hand_m2|tipping_hand_m3|tipping_hand_p1|tipping_hand_p2|tipping_hand_p3|tipping_hand_e1|tipping_hand_e2|tipping_hand_e3|tipping_hand_k1|tipping_hand_k2|tipping_hand_k3|tipping_hand_h1|tipping_hand_h2|tipping_hand_h3|tipping_hand_h4|tipping_hand_h5|tipping_hand_fe1|tipping_hand_ft1|tipping_hand_fk1|haircut|peach|eggplant|melon|pineapple|red_apple|green_apple|orange|pear|watermelon|cherry|lemon|strawberry|banana|cooking|bento|curry_rice|dango|meat_drumstick|meat_on_bone|onigiri|rice|senbei|sushi|ice_cream|shaved_ice|oden|lollipop|birthday_cake|shortcake|donut|candy|knife_and_fork|plate|matcha_tea|hot_drink|milk|cup_with_straw|sake|tropical_drink|wine|martini|tumbler_glass|beer|beers|cannabis_leaf|rainbow_flag|transgender_flag|genderqueer_flag|genderfluid_flag|bigender_flag|nonbinary_flag|demigirl_flag|demiguy_flag|deminonbinary_flag|agender_flag|androgyne_flag|neutrois_flag|bisexual_flag|pansexual_flag|polysexual_flag|omnisexual_flag|polyamory_flag|asexual_flag|demisexual_flag|aromantic_flag|quoiromantic_flag|lesbian_flag|lipstick_lesbian_flag|enbian_flag|bear_flag|leather_flag|intersex_flag|lunaric_flag|mercuric_flag|solaric_flag|stellaric_flag|pride_100|furry_pride|pink_triangle|black_triangle|bisexual_triangles|labrys_symbol|lambda|two_female_symbols|two_male_symbols|transgender_mercury_symbol|transgender_symbol|neuter_symbol|male_female_symbol|androgyne_symbol|gay|so_gay|queer|ace_sign|aro_sign|nb|female_symbol|male_symbol|female_and_male_symbol|palm_tree|evergreen_tree|cactus|christmas_tree|rose|maple_leaf|sheaf_of_rice|sun|cloud|sun_behind_small_cloud|sun_behind_cloud|sun_behind_large_cloud|sun_cloud_rain|rain|lightning|lightning_rain|snow|sun_face|water_drop|sweat_drops|lightning_bolt|snowflake|rainbow|umbrella_with_rain|earth_americas|earth_asia_oceania|earth_emea|earth_pacific|earth_arctic|earth_antarctic|new_moon|full_moon|gibbous_moon_1|gibbous_moon_2|half_moon_1|half_moon_2|crescent_moon_1|crescent_moon_2|crescent|new_moon_face|full_moon_face|moon_crescent_face_left|moon_crescent_face_right|star|half_star|empty_star|shining_star|sparkles|dizzy|shooting_star|fire|bang|dash|phone|phone_with_arrow|phone_vibrate|phone_off|watch|laptop|computer|computer_mouse|trackball|keyboard|printer|fax_machine|landline_phone|phone_receiver|pager|tv|radio|speaker|projector|gamepad|arcade_stick|joystick|vr_headset|camera|camera_with_flash|camcorder|movie_camera|microphone|stylus|level_slider|control_knobs|cd|dvd|minidisc|floppy_disk|cassette|vhs|lp|film_frames|battery|crt|crt_blue_screen|crt_green_lines|crt_noise|crt_prompt|crt_test_pattern|page|page_with_pencil|bookmark|curled_page|folder|open_folder|bar_chart|decreasing_graph|increasing_graph|inbox|outbox|envelope|envelope_with_arrow|incoming_envelope|email|love_letter|closed_mailbox|closed_mailbox_with_no_mail|mailbox|mailbox_with_no_mail|spiral_notebook|date|calendar|calendar_spiral|red_book|green_book|blue_book|yellow_book|magnifying_glass_left|magnifying_glass_right|paperclip|pen|pencil|triangle_ruler|green_money|yellow_money|pink_money|purple_money|moneybag|credit_card|bath|bath_with_person|toilet_paper|candle|brick|wrench|firecracker|bomb|scales|capsule|microscope|balloon|tada|confetti_ball|d4|d6|d8|d10|d12|d20|hanafuda_card|artist_palette|broadsword|zweihander|rapier|sabre|katana|european_battle_axe|glaive|great_axe|halberd|tomahawk|mace|flail|war_hammer|bow_and_arrow|crossbow|arrow|shuriken|magic_wand|red_potion|yellow_potion|green_potion|blue_potion|purple_potion|pink_potion|oil_lamp|crystal_ball|rune_stones|pentacle|spellbook|tarot_cup|tarot_pentacle|tarot_sword|tarot_wand|bone|coffin|glowstick|hole|adult|adult_r1|adult_r2|adult_r3|adult_d1|adult_d2|adult_d3|adult_o1|adult_o2|adult_o3|adult_y1|adult_y2|adult_y3|adult_l1|adult_l2|adult_l3|adult_g1|adult_g2|adult_g3|adult_t1|adult_t2|adult_t3|adult_c1|adult_c2|adult_c3|adult_s1|adult_s2|adult_s3|adult_b1|adult_b2|adult_b3|adult_v1|adult_v2|adult_v3|adult_m1|adult_m2|adult_m3|adult_p1|adult_p2|adult_p3|adult_e1|adult_e2|adult_e3|adult_k1|adult_k2|adult_k3|adult_h1|adult_h2|adult_h3|adult_h4|adult_h5|adult_fe1|adult_ft1|adult_fk1|dark_elf|demon|elf|goblin|half_demon|oni|orc|troll|bugbear|kobold|minotaur|fish_person|merperson|coyote|fox|jackal|wolf|lion_with_mane|lion_without_mane|tiger|snow_leopard|lynx|cheetah|jaguar|leopard|hyena|bear|ram|rat|deer_with_antlers|deer_without_antlers|mouse|opossum|otter|panda|rabbit|raccoon|red_panda|boar|skunk|squirrel|bat|blue_jay|crow|dove|duck|eagle|owl|parrot|penguin|pigeon|rooster|crane|peacock|pelican|toucan|snake|western_dragon|eastern_dragon|shark|dolphin|puffer_fish|turtle|spider|gryphon|slime|eye|ear|ear_r1|ear_r2|ear_r3|ear_d1|ear_d2|ear_d3|ear_o1|ear_o2|ear_o3|ear_y1|ear_y2|ear_y3|ear_l1|ear_l2|ear_l3|ear_g1|ear_g2|ear_g3|ear_t1|ear_t2|ear_t3|ear_c1|ear_c2|ear_c3|ear_s1|ear_s2|ear_s3|ear_b1|ear_b2|ear_b3|ear_v1|ear_v2|ear_v3|ear_m1|ear_m2|ear_m3|ear_p1|ear_p2|ear_p3|ear_e1|ear_e2|ear_e3|ear_k1|ear_k2|ear_k3|ear_h1|ear_h2|ear_h3|ear_h4|ear_h5|ear_fe1|ear_ft1|ear_fk1|pointed_ear|pointed_ear_r1|pointed_ear_r2|pointed_ear_r3|pointed_ear_d1|pointed_ear_d2|pointed_ear_d3|pointed_ear_o1|pointed_ear_o2|pointed_ear_o3|pointed_ear_y1|pointed_ear_y2|pointed_ear_y3|pointed_ear_l1|pointed_ear_l2|pointed_ear_l3|pointed_ear_g1|pointed_ear_g2|pointed_ear_g3|pointed_ear_t1|pointed_ear_t2|pointed_ear_t3|pointed_ear_c1|pointed_ear_c2|pointed_ear_c3|pointed_ear_s1|pointed_ear_s2|pointed_ear_s3|pointed_ear_b1|pointed_ear_b2|pointed_ear_b3|pointed_ear_v1|pointed_ear_v2|pointed_ear_v3|pointed_ear_m1|pointed_ear_m2|pointed_ear_m3|pointed_ear_p1|pointed_ear_p2|pointed_ear_p3|pointed_ear_e1|pointed_ear_e2|pointed_ear_e3|pointed_ear_k1|pointed_ear_k2|pointed_ear_k3|pointed_ear_h1|pointed_ear_h2|pointed_ear_h3|pointed_ear_h4|pointed_ear_h5|pointed_ear_fe1|pointed_ear_ft1|pointed_ear_fk1|long_pointed_ear|long_pointed_ear_r1|long_pointed_ear_r2|long_pointed_ear_r3|long_pointed_ear_d1|long_pointed_ear_d2|long_pointed_ear_d3|long_pointed_ear_o1|long_pointed_ear_o2|long_pointed_ear_o3|long_pointed_ear_y1|long_pointed_ear_y2|long_pointed_ear_y3|long_pointed_ear_l1|long_pointed_ear_l2|long_pointed_ear_l3|long_pointed_ear_g1|long_pointed_ear_g2|long_pointed_ear_g3|long_pointed_ear_t1|long_pointed_ear_t2|long_pointed_ear_t3|long_pointed_ear_c1|long_pointed_ear_c2|long_pointed_ear_c3|long_pointed_ear_s1|long_pointed_ear_s2|long_pointed_ear_s3|long_pointed_ear_b1|long_pointed_ear_b2|long_pointed_ear_b3|long_pointed_ear_v1|long_pointed_ear_v2|long_pointed_ear_v3|long_pointed_ear_m1|long_pointed_ear_m2|long_pointed_ear_m3|long_pointed_ear_p1|long_pointed_ear_p2|long_pointed_ear_p3|long_pointed_ear_e1|long_pointed_ear_e2|long_pointed_ear_e3|long_pointed_ear_k1|long_pointed_ear_k2|long_pointed_ear_k3|long_pointed_ear_h1|long_pointed_ear_h2|long_pointed_ear_h3|long_pointed_ear_h4|long_pointed_ear_h5|long_pointed_ear_fe1|long_pointed_ear_ft1|long_pointed_ear_fk1|spider_web|bust_in_silhouette|2_busts_in_silhouette|paw_print|paws|red_heart|orange_heart|yellow_heart|green_heart|blue_heart|purple_heart|black_heart|sparkling_heart|broken_heart|beating_heart|heart_arrow|heart_ribbon|heart_exclamation_mark|growing_heart|two_hearts|two_hearts_orbit|empty_heart|half_heart|awoo|dont_awoo|battery_empty|battery_low|battery_medium|battery_full|privacy|dont_at_me|hp|mp|pp|xp|black_flag|white_flag|triangular_flag|finish_flag|crossed_flags|pirate_flag|toilet|wc|potable_water|wheelchair|litter_in_bin|info|metro_sign|atm|cinema|parking|sos|18_plus|cross|no_entry|no|stop_sign|100|8_asterisk|8_star|chart|green_tick|green_cross|diamond_with_dot|circle|staff_of_asclepius|globe|sparkle|spiral|zzz|anger_symbol|name_badge|tick_box|radio_button|aries|taurus|gemini|cancer|leo|virgo|libra|scorpio|sagittarius|capricorn|aquarius|pisces|bargain|congratulations|secret|passing_grade|no_vacancy|discount|prohibited|blood_type_a|blood_type_ab|blood_type_b|blood_type_o|month|free_of_charge|request|open_for_business|not_free|acceptable|reserved|beginner|sa|vacancy|koko|vs|ng|ok|up|cool|new|free|arrow_up|arrow_down|arrow_left|arrow_right|arrow_up_left|arrow_up_right|arrow_down_left|arrow_down_right|arrow_up_down|arrow_left_right|arrow_curve_up|arrow_curve_down|arrow_curve_left|arrow_curve_right|arrows_clockwise|back|end|on_arrow|soon|top|arrows_counterclockwise|plus|minus|multiply|divide|tilde|wavy_dash|loop|double_loop|tick|music_notes|music_note|red_exclamation_mark|gray_exclamation_mark|red_question_mark|gray_question_mark|exclamation_exclamation|exclamation_question|speech_bubble|eye_speech_bubble|thought_bubble|spiky_speech_bubble|speaker_low_volume|speaker_medium_volume|speaker_loud_volume|speaker_muted|0|1|2|3|4|5|6|7|8|9|10|asterisk|hash|cl|abc|latin_lowercase|latin_uppercase|numbers|special_characters|signal|low_brightness|high_brightness|play|reverse|play_up|play_down|play_pause|pause|stop|record|fast_down|fast_up|fast_forward|rewind|skip_back|skip_forward|eject|repeat|repeat_once|shuffle|large_black_square|large_white_square|medium_black_square|medium_white_square|medium_small_black_square|medium_small_white_square|small_black_square|small_white_square|black_circle|white_circle|black_square_button|white_square_button|blue_circle|red_circle|large_orange_diamond|large_blue_diamond|small_orange_diamond|small_blue_diamond|red_upward_triangle|red_downward_triangle|1_00|2_00|3_00|4_00|5_00|6_00|7_00|8_00|9_00|10_00|11_00|12_00|1_30|2_30|3_30|4_30|5_30|6_30|7_30|8_30|9_30|10_30|11_30|12_30|bus|trolleybus|fire_engine|traffic_light_vertical|traffic_light_horizontal|aerial_tramway|mountain_tramway|suspension_railway|railway_car|tram_car|monorail|light_rail|high_speed_train|bullet_train|metro|train|tram|station|airplane|airplane_departure|airplane_arrival|mount_fuji|mountain|snowy_mountain|volcano|statue_of_liberty|tokyo_tower|beach|desert_island|beach_umbrella|world_map|school|factory|shinto_shrine|cityscape|sunset_city|dusk_city|bridge_at_night|fireworks|sparkler|night_with_stars|milky_way|rocket|color_modifier_r1|color_modifier_r2|color_modifier_r3|color_modifier_d1|color_modifier_d2|color_modifier_d3|color_modifier_o1|color_modifier_o2|color_modifier_o3|color_modifier_y1|color_modifier_y2|color_modifier_y3|color_modifier_l1|color_modifier_l2|color_modifier_l3|color_modifier_g1|color_modifier_g2|color_modifier_g3|color_modifier_t1|color_modifier_t2|color_modifier_t3|color_modifier_c1|color_modifier_c2|color_modifier_c3|color_modifier_s1|color_modifier_s2|color_modifier_s3|color_modifier_b1|color_modifier_b2|color_modifier_b3|color_modifier_v1|color_modifier_v2|color_modifier_v3|color_modifier_m1|color_modifier_m2|color_modifier_m3|color_modifier_p1|color_modifier_p2|color_modifier_p3|color_modifier_e1|color_modifier_e2|color_modifier_e3|color_modifier_k1|color_modifier_k2|color_modifier_k3|color_modifier_h1|color_modifier_h2|color_modifier_h3|color_modifier_h4|color_modifier_h5|paw_hand_modifier|claw_hand_modifier|undefined_character|0_char|1_char|2_char|3_char|4_char|5_char|6_char|7_char|8_char|9_char|asterisk_char|hash_char|enclosing_keycap|speech_bubble_left|graduation_cap):" - var reAll = RegExp("^("+re+"){0,5}$", "g") - var repl = replacer - if (reAll.test(str)) { - repl = replacer_jumbo - } - return str.replace(RegExp(re, "g"), repl); - } - - function replacer(match, p1, offset, string) { - return replacer_helper(match, p1, offset, string, 32) - } - - function replacer_jumbo(match, p1, offset, string) { - return replacer_helper(match, p1, offset, string, 48) - } - - function replacer_helper(match, p1, offset, string, size) { - //return ":"+p1+":" - return ":"+p1+":" - } -}()) \ No newline at end of file diff --git a/qml/fonts/Twemoji.js b/qml/fonts/Twemoji.js deleted file mode 100644 index ebedca41..00000000 --- a/qml/fonts/Twemoji.js +++ /dev/null @@ -1,568 +0,0 @@ -/*jslint indent: 2, browser: true, bitwise: true, plusplus: true */ -var twemoji = (function ( - /*! Copyright Twitter Inc. and other contributors. Licensed under MIT *//* - https://github.com/twitter/twemoji/blob/gh-pages/LICENSE - */ - - // WARNING: this file is generated automatically via - // `node twemoji-generator.js` - // please update its `createTwemoji` function - // at the bottom of the same file instead. - -) { - 'use strict'; - - /*jshint maxparams:4 */ - - var - // the exported module object - twemoji = { - - - ///////////////////////// - // properties // - ///////////////////////// - - // default assets url, by default will be Twitter Inc. CDN - base: 'https://twemoji.maxcdn.com/2/', - - // default assets file extensions, by default '.png' - ext: '.png', - - // default assets/folder size, by default "72x72" - // available via Twitter CDN: 72 - size: '72x72', - - // default class name, by default 'emoji' - className: 'emoji', - - // basic utilities / helpers to convert code points - // to JavaScript surrogates and vice versa - convert: { - - /** - * Given an HEX codepoint, returns UTF16 surrogate pairs. - * - * @param string generic codepoint, i.e. '1F4A9' - * @return string codepoint transformed into utf16 surrogates pair, - * i.e. \uD83D\uDCA9 - * - * @example - * twemoji.convert.fromCodePoint('1f1e8'); - * // "\ud83c\udde8" - * - * '1f1e8-1f1f3'.split('-').map(twemoji.convert.fromCodePoint).join('') - * // "\ud83c\udde8\ud83c\uddf3" - */ - fromCodePoint: fromCodePoint, - - /** - * Given UTF16 surrogate pairs, returns the equivalent HEX codepoint. - * - * @param string generic utf16 surrogates pair, i.e. \uD83D\uDCA9 - * @param string optional separator for double code points, default='-' - * @return string utf16 transformed into codepoint, i.e. '1F4A9' - * - * @example - * twemoji.convert.toCodePoint('\ud83c\udde8\ud83c\uddf3'); - * // "1f1e8-1f1f3" - * - * twemoji.convert.toCodePoint('\ud83c\udde8\ud83c\uddf3', '~'); - * // "1f1e8~1f1f3" - */ - toCodePoint: toCodePoint - }, - - - ///////////////////////// - // methods // - ///////////////////////// - - /** - * User first: used to remove missing images - * preserving the original text intent when - * a fallback for network problems is desired. - * Automatically added to Image nodes via DOM - * It could be recycled for string operations via: - * $('img.emoji').on('error', twemoji.onerror) - */ - onerror: function onerror() { - if (this.parentNode) { - this.parentNode.replaceChild(createText(this.alt, false), this); - } - }, - - /** - * Main method/logic to generate either tags or HTMLImage nodes. - * "emojify" a generic text or DOM Element. - * - * @overloads - * - * String replacement for `innerHTML` or server side operations - * twemoji.parse(string); - * twemoji.parse(string, Function); - * twemoji.parse(string, Object); - * - * HTMLElement tree parsing for safer operations over existing DOM - * twemoji.parse(HTMLElement); - * twemoji.parse(HTMLElement, Function); - * twemoji.parse(HTMLElement, Object); - * - * @param string|HTMLElement the source to parse and enrich with emoji. - * - * string replace emoji matches with tags. - * Mainly used to inject emoji via `innerHTML` - * It does **not** parse the string or validate it, - * it simply replaces found emoji with a tag. - * NOTE: be sure this won't affect security. - * - * HTMLElement walk through the DOM tree and find emoji - * that are inside **text node only** (nodeType === 3) - * Mainly used to put emoji in already generated DOM - * without compromising surrounding nodes and - * **avoiding** the usage of `innerHTML`. - * NOTE: Using DOM elements instead of strings should - * improve security without compromising too much - * performance compared with a less safe `innerHTML`. - * - * @param Function|Object [optional] - * either the callback that will be invoked or an object - * with all properties to use per each found emoji. - * - * Function if specified, this will be invoked per each emoji - * that has been found through the RegExp except - * those follwed by the invariant \uFE0E ("as text"). - * Once invoked, parameters will be: - * - * iconId:string the lower case HEX code point - * i.e. "1f4a9" - * - * options:Object all info for this parsing operation - * - * variant:char the optional \uFE0F ("as image") - * variant, in case this info - * is anyhow meaningful. - * By default this is ignored. - * - * If such callback will return a falsy value instead - * of a valid `src` to use for the image, nothing will - * actually change for that specific emoji. - * - * - * Object if specified, an object containing the following properties - * - * callback Function the callback to invoke per each found emoji. - * base string the base url, by default twemoji.base - * ext string the image extension, by default twemoji.ext - * size string the assets size, by default twemoji.size - * - * @example - * - * twemoji.parse("I \u2764\uFE0F emoji!"); - * // I ❤️ emoji! - * - * - * twemoji.parse("I \u2764\uFE0F emoji!", function(iconId, options) { - * return '/assets/' + iconId + '.gif'; - * }); - * // I ❤️ emoji! - * - * - * twemoji.parse("I \u2764\uFE0F emoji!", { - * size: 72, - * callback: function(iconId, options) { - * return '/assets/' + options.size + '/' + iconId + options.ext; - * } - * }); - * // I ❤️ emoji! - * - */ - parse: parse, - - /** - * Given a string, invokes the callback argument - * per each emoji found in such string. - * This is the most raw version used by - * the .parse(string) method itself. - * - * @param string generic string to parse - * @param Function a generic callback that will be - * invoked to replace the content. - * This calback wil receive standard - * String.prototype.replace(str, callback) - * arguments such: - * callback( - * rawText, // the emoji match - * ); - * - * and others commonly received via replace. - */ - replace: replace, - - /** - * Simplify string tests against emoji. - * - * @param string some text that might contain emoji - * @return boolean true if any emoji was found, false otherwise. - * - * @example - * - * if (twemoji.test(someContent)) { - * console.log("emoji All The Things!"); - * } - */ - test: test - }, - - // used to escape HTML special chars in attributes - escaper = { - '&': '&', - '<': '<', - '>': '>', - "'": ''', - '"': '"' - }, - - // RegExp based on emoji's official Unicode standards - // http://www.unicode.org/Public/UNIDATA/EmojiSources.txt - re = /(?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddb0-\uddb3])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[\u0023\u002a\u0030-\u0039]\ufe0f?\u20e3|(?:[\u00a9\u00ae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\udeeb\udeec\udef4-\udef9]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd70\udd73-\udd76\udd7a\udd7c-\udda2\uddb4\uddb7\uddc0-\uddc2\uddd0\uddde-\uddff]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g, - - // avoid runtime RegExp creation for not so smart, - // not JIT based, and old browsers / engines - UFE0Fg = /\uFE0F/g, - - // avoid using a string literal like '\u200D' here because minifiers expand it inline - U200D = String.fromCharCode(0x200D), - - // used to find HTML special chars in attributes - rescaper = /[&<>'"]/g, - - // nodes with type 1 which should **not** be parsed - shouldntBeParsed = /^(?:iframe|noframes|noscript|script|select|style|textarea)$/, - - // just a private shortcut - fromCharCode = String.fromCharCode; - - return twemoji; - - - ///////////////////////// - // private functions // - // declaration // - ///////////////////////// - - /** - * Shortcut to create text nodes - * @param string text used to create DOM text node - * @return Node a DOM node with that text - */ - function createText(text, clean) { - return document.createTextNode(clean ? text.replace(UFE0Fg, '') : text); - } - - /** - * Utility function to escape html attribute text - * @param string text use in HTML attribute - * @return string text encoded to use in HTML attribute - */ - function escapeHTML(s) { - return s.replace(rescaper, replacer); - } - - /** - * Default callback used to generate emoji src - * based on Twitter CDN - * @param string the emoji codepoint string - * @param string the default size to use, i.e. "36x36" - * @return string the image source to use - */ - function defaultImageSrcGenerator(icon, options) { - return ''.concat(options.base, options.size, '/', icon, options.ext); - } - - /** - * Given a generic DOM nodeType 1, walk through all children - * and store every nodeType 3 (#text) found in the tree. - * @param Element a DOM Element with probably some text in it - * @param Array the list of previously discovered text nodes - * @return Array same list with new discovered nodes, if any - */ - function grabAllTextNodes(node, allText) { - var - childNodes = node.childNodes, - length = childNodes.length, - subnode, - nodeType; - while (length--) { - subnode = childNodes[length]; - nodeType = subnode.nodeType; - // parse emoji only in text nodes - if (nodeType === 3) { - // collect them to process emoji later - allText.push(subnode); - } - // ignore all nodes that are not type 1, that are svg, or that - // should not be parsed as script, style, and others - else if (nodeType === 1 && !('ownerSVGElement' in subnode) && - !shouldntBeParsed.test(subnode.nodeName.toLowerCase())) { - grabAllTextNodes(subnode, allText); - } - } - return allText; - } - - /** - * Used to both remove the possible variant - * and to convert utf16 into code points. - * If there is a zero-width-joiner (U+200D), leave the variants in. - * @param string the raw text of the emoji match - * @return string the code point - */ - function grabTheRightIcon(rawText) { - // if variant is present as \uFE0F - return toCodePoint(rawText.indexOf(U200D) < 0 ? - rawText.replace(UFE0Fg, '') : - rawText - ); - } - - /** - * DOM version of the same logic / parser: - * emojify all found sub-text nodes placing images node instead. - * @param Element generic DOM node with some text in some child node - * @param Object options containing info about how to parse - * - * .callback Function the callback to invoke per each found emoji. - * .base string the base url, by default twemoji.base - * .ext string the image extension, by default twemoji.ext - * .size string the assets size, by default twemoji.size - * - * @return Element same generic node with emoji in place, if any. - */ - function parseNode(node, options) { - var - allText = grabAllTextNodes(node, []), - length = allText.length, - attrib, - attrname, - modified, - fragment, - subnode, - text, - match, - i, - index, - img, - rawText, - iconId, - src; - while (length--) { - modified = false; - fragment = document.createDocumentFragment(); - subnode = allText[length]; - text = subnode.nodeValue; - i = 0; - while ((match = re.exec(text))) { - index = match.index; - if (index !== i) { - fragment.appendChild( - createText(text.slice(i, index), true) - ); - } - rawText = match[0]; - iconId = grabTheRightIcon(rawText); - i = index + rawText.length; - src = options.callback(iconId, options); - if (iconId && src) { - img = new Image(); - img.onerror = options.onerror; - img.setAttribute('draggable', 'false'); - attrib = options.attributes(rawText, iconId); - for (attrname in attrib) { - if ( - attrib.hasOwnProperty(attrname) && - // don't allow any handlers to be set + don't allow overrides - attrname.indexOf('on') !== 0 && - !img.hasAttribute(attrname) - ) { - img.setAttribute(attrname, attrib[attrname]); - } - } - img.className = options.className; - img.alt = rawText; - img.src = src; - modified = true; - fragment.appendChild(img); - } - if (!img) fragment.appendChild(createText(rawText, false)); - img = null; - } - // is there actually anything to replace in here ? - if (modified) { - // any text left to be added ? - if (i < text.length) { - fragment.appendChild( - createText(text.slice(i), true) - ); - } - // replace the text node only, leave intact - // anything else surrounding such text - subnode.parentNode.replaceChild(fragment, subnode); - } - } - return node; - } - - /** - * String/HTML version of the same logic / parser: - * emojify a generic text placing images tags instead of surrogates pair. - * @param string generic string with possibly some emoji in it - * @param Object options containing info about how to parse - * - * .callback Function the callback to invoke per each found emoji. - * .base string the base url, by default twemoji.base - * .ext string the image extension, by default twemoji.ext - * .size string the assets size, by default twemoji.size - * - * @return the string with replacing all found and parsed emoji - */ - function parseString(str, options) { - return replace(str, function (rawText) { - var - ret = rawText, - iconId = grabTheRightIcon(rawText), - src = options.callback(iconId, options), - attrib, - attrname; - if (iconId && src) { - // recycle the match string replacing the emoji - // with its image counter part - ret = ''); - } - return ret; - }); - } - - /** - * Function used to actually replace HTML special chars - * @param string HTML special char - * @return string encoded HTML special char - */ - function replacer(m) { - return escaper[m]; - } - - /** - * Default options.attribute callback - * @return null - */ - function returnNull() { - return null; - } - - /** - * Given a generic value, creates its squared counterpart if it's a number. - * As example, number 36 will return '36x36'. - * @param any a generic value. - * @return any a string representing asset size, i.e. "36x36" - * only in case the value was a number. - * Returns initial value otherwise. - */ - function toSizeSquaredAsset(value) { - return typeof value === 'number' ? - value + 'x' + value : - value; - } - - - ///////////////////////// - // exported functions // - // declaration // - ///////////////////////// - - function fromCodePoint(codepoint) { - var code = typeof codepoint === 'string' ? - parseInt(codepoint, 16) : codepoint; - if (code < 0x10000) { - return fromCharCode(code); - } - code -= 0x10000; - return fromCharCode( - 0xD800 + (code >> 10), - 0xDC00 + (code & 0x3FF) - ); - } - - function parse(what, how) { - if (!how || typeof how === 'function') { - how = {callback: how}; - } - // if first argument is string, inject html tags - // otherwise use the DOM tree and parse text nodes only - return (typeof what === 'string' ? parseString : parseNode)(what, { - callback: how.callback || defaultImageSrcGenerator, - attributes: typeof how.attributes === 'function' ? how.attributes : returnNull, - base: typeof how.base === 'string' ? how.base : twemoji.base, - ext: how.ext || twemoji.ext, - size: how.folder || toSizeSquaredAsset(how.size || twemoji.size), - className: how.className || twemoji.className, - onerror: how.onerror || twemoji.onerror - }); - } - - function replace(text, callback) { - return String(text).replace(re, callback); - } - - function test(text) { - // IE6 needs a reset before too - re.lastIndex = 0; - var result = re.test(text); - re.lastIndex = 0; - return result; - } - - function toCodePoint(unicodeSurrogates, sep) { - var - r = [], - c = 0, - p = 0, - i = 0; - while (i < unicodeSurrogates.length) { - c = unicodeSurrogates.charCodeAt(i++); - if (p) { - r.push((0x10000 + ((p - 0xD800) << 10) + (c - 0xDC00)).toString(16)); - p = 0; - } else if (0xD800 <= c && c <= 0xDBFF) { - p = c; - } else { - r.push(c.toString(16)); - } - } - return r.join(sep || '-'); - } - -}()); \ No newline at end of file diff --git a/qml/fonts/fontawesome.ttf b/qml/fonts/fontawesome.ttf deleted file mode 100644 index 4adbd66d..00000000 Binary files a/qml/fonts/fontawesome.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-Bold.ttf b/qml/fonts/opensans/OpenSans-Bold.ttf deleted file mode 100644 index efdd5e84..00000000 Binary files a/qml/fonts/opensans/OpenSans-Bold.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-BoldItalic.ttf b/qml/fonts/opensans/OpenSans-BoldItalic.ttf deleted file mode 100644 index 9bf9b4e9..00000000 Binary files a/qml/fonts/opensans/OpenSans-BoldItalic.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-ExtraBold.ttf b/qml/fonts/opensans/OpenSans-ExtraBold.ttf deleted file mode 100644 index 67fcf0fb..00000000 Binary files a/qml/fonts/opensans/OpenSans-ExtraBold.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-ExtraBoldItalic.ttf b/qml/fonts/opensans/OpenSans-ExtraBoldItalic.ttf deleted file mode 100644 index 08672280..00000000 Binary files a/qml/fonts/opensans/OpenSans-ExtraBoldItalic.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-Italic.ttf b/qml/fonts/opensans/OpenSans-Italic.ttf deleted file mode 100644 index 11785670..00000000 Binary files a/qml/fonts/opensans/OpenSans-Italic.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-Light.ttf b/qml/fonts/opensans/OpenSans-Light.ttf deleted file mode 100644 index 6580d3a1..00000000 Binary files a/qml/fonts/opensans/OpenSans-Light.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-LightItalic.ttf b/qml/fonts/opensans/OpenSans-LightItalic.ttf deleted file mode 100644 index 1e0c3319..00000000 Binary files a/qml/fonts/opensans/OpenSans-LightItalic.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-Regular.ttf b/qml/fonts/opensans/OpenSans-Regular.ttf deleted file mode 100644 index 29bfd35a..00000000 Binary files a/qml/fonts/opensans/OpenSans-Regular.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-SemiBold.ttf b/qml/fonts/opensans/OpenSans-SemiBold.ttf deleted file mode 100644 index 54e7059c..00000000 Binary files a/qml/fonts/opensans/OpenSans-SemiBold.ttf and /dev/null differ diff --git a/qml/fonts/opensans/OpenSans-SemiBoldItalic.ttf b/qml/fonts/opensans/OpenSans-SemiBoldItalic.ttf deleted file mode 100644 index aebcf142..00000000 Binary files a/qml/fonts/opensans/OpenSans-SemiBoldItalic.ttf and /dev/null differ diff --git a/qml/fonts/qmldir b/qml/fonts/qmldir deleted file mode 100644 index 8c898cef..00000000 --- a/qml/fonts/qmldir +++ /dev/null @@ -1 +0,0 @@ -singleton Fonts Fonts.qml \ No newline at end of file diff --git a/qml/main.qml b/qml/main.qml index d70ea472..0fe47487 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -5,13 +5,15 @@ import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 -import "fonts" -import "fonts/Twemoji.js" as T -import "fonts/MutantStandard.js" as Mutant +import "opaque" +import "opaque/fonts" +import "opaque/fonts/Twemoji.js" as T +import "opaque/fonts/MutantStandard.js" as Mutant +import "opaque/theme" + import "overlays" import "panes" import "widgets" -import "theme" import "utils.js" as Utils @@ -29,17 +31,13 @@ ApplicationWindow { readonly property real ratio: height / width - readonly property string cwtch_background_color: '#FF0000' - readonly property string cwtch_color: '#00FF00' - readonly property string cwtch_dark_color: '#0000FF' - FontAwesome { // PRETTY BUTTON ICONS id: awesome - resource: "qrc:/qml/fonts/fontawesome.ttf" + resource: "qrc:/qml/opaque/fonts/fontawesome.ttf" } FontLoader { - source: "qrc:/qml/fonts/AdobeBlank.ttf" + source: "qrc:/qml/opaque/fonts/AdobeBlank.ttf" } @@ -161,7 +159,7 @@ ApplicationWindow { visible: (windowItem.width >= Theme.doublePaneMinSize && !Qt.inputMethod.visible) || theStack.pane == theStack.emptyPane - ContactList{ + ContactList { anchors.fill: parent dualPane: theStack.pane != theStack.emptyPane || theStack.pane == undefined } diff --git a/qml/opaque b/qml/opaque new file mode 160000 index 00000000..db305895 --- /dev/null +++ b/qml/opaque @@ -0,0 +1 @@ +Subproject commit db305895e70fbb599d2600a7e1f2245a56380217 diff --git a/qml/overlays/BulletinOverlay.qml b/qml/overlays/BulletinOverlay.qml index 9e95d601..4be09d70 100644 --- a/qml/overlays/BulletinOverlay.qml +++ b/qml/overlays/BulletinOverlay.qml @@ -6,10 +6,10 @@ import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 -import "../widgets" as Widgets -import "../fonts/Twemoji.js" as T +import "../opaque" as Opaque +import "../opaque/fonts/Twemoji.js" as T +import "../opaque/styles" import "../utils.js" as Utils -import "../styles" ColumnLayout { Layout.fillWidth: true @@ -175,7 +175,7 @@ ColumnLayout { width: parent.width - 50 } - Widgets.Button { + Opaque.Button { id: replybtn visible: selected text: "reply" @@ -230,7 +230,7 @@ ColumnLayout { } - Widgets.Button { // SEND MESSAGE BUTTON + Opaque.Button { // SEND MESSAGE BUTTON id: btnSend icon: "regular/paper-plane" text: "post" diff --git a/qml/overlays/ChatOverlay.qml b/qml/overlays/ChatOverlay.qml index a5cdce3f..2d0f34a2 100644 --- a/qml/overlays/ChatOverlay.qml +++ b/qml/overlays/ChatOverlay.qml @@ -4,10 +4,11 @@ import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 -import "../widgets" as Widgets -import "../widgets/controls" as Awesome -import "../fonts/Twemoji.js" as T +import "../opaque" as Opaque +import "../opaque/controls" as Awesome +import "../opaque/fonts/Twemoji.js" as T import "../utils.js" as Utils +import "../widgets" Item { width: parent.width @@ -29,7 +30,7 @@ Item { ScrollBar.vertical: ScrollBar {} maximumFlickVelocity: 1250 - delegate: Widgets.Message { + delegate: Message { handle: _handle from: _from displayName: _displayName @@ -128,7 +129,7 @@ Item { } } - Widgets.EmojiDrawer { + Opaque.EmojiDrawer { id: emojiDrawer anchors.left: parent.left anchors.right: parent.right @@ -265,7 +266,7 @@ Item { spacing: 1 - Widgets.Button { // SEND MESSAGE BUTTON + Opaque.Button { // SEND MESSAGE BUTTON id: btnSend icon: "regular/paper-plane" text: "send" @@ -301,7 +302,7 @@ Item { spacing: 1 - Widgets.Button { // EMOJI DRAWER BUTTON + Opaque.Button { // EMOJI DRAWER BUTTON id: btnEmoji icon: "regular/smile" anchors.right: btnAttach.left @@ -310,7 +311,7 @@ Item { onClicked: emojiDrawer.visible ? emojiDrawer.slideclosed() : emojiDrawer.slideopen() } - Widgets.Button { + Opaque.Button { id: btnAttach icon: "solid/paperclip" anchors.right: parent.right diff --git a/qml/overlays/ListOverlay.qml b/qml/overlays/ListOverlay.qml index 8833229d..0ed706ce 100644 --- a/qml/overlays/ListOverlay.qml +++ b/qml/overlays/ListOverlay.qml @@ -5,11 +5,11 @@ import QtQuick.Controls.Material 2.0 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 -import "../widgets" as Widgets -import "../widgets/controls" as Awesome -import "../fonts/Twemoji.js" as T +import "../opaque" as Opaque +import "../opaque/controls" as Awesome +import "../opaque/fonts/Twemoji.js" as T import "../utils.js" as Utils -import "../styles" +import "../opaque/styles" ColumnLayout { Layout.fillWidth: true @@ -204,7 +204,7 @@ ColumnLayout { style: CwtchTextFieldStyle{} } - Widgets.Button { // SEND MESSAGE BUTTON + Opaque.Button { // SEND MESSAGE BUTTON id: btnSend icon: "regular/paper-plane" text: "add" diff --git a/qml/overlays/MembershipOverlay.qml b/qml/overlays/MembershipOverlay.qml index 04a79e7e..75025398 100644 --- a/qml/overlays/MembershipOverlay.qml +++ b/qml/overlays/MembershipOverlay.qml @@ -5,11 +5,12 @@ import QtQuick.Controls.Material 2.0 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 -import "../widgets" -import "../widgets/controls" as Awesome -import "../fonts/Twemoji.js" as T +import "../opaque" +import "../opaque/controls" as Awesome +import "../opaque/fonts/Twemoji.js" as T +import "../opaque/styles" import "../utils.js" as Utils -import "../styles" +import "../widgets" ColumnLayout { Text { diff --git a/qml/panes/AddGroupPane.qml b/qml/panes/AddGroupPane.qml index 26000e8b..78b5f6b2 100644 --- a/qml/panes/AddGroupPane.qml +++ b/qml/panes/AddGroupPane.qml @@ -6,8 +6,8 @@ import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 import QtQuick.Controls 1.4 -import "../widgets" as Widgets -import "../styles" +import "../opaque" as Opaque +import "../opaque/styles" ColumnLayout { // settingsPane id: root @@ -26,7 +26,7 @@ ColumnLayout { // settingsPane spacing: 5 width: root.width - Widgets.ScalingLabel { + Opaque.ScalingLabel { //: Server label text: qsTr("server-label") + ":" } @@ -37,7 +37,7 @@ ColumnLayout { // settingsPane text: "2c3kmoobnyghj2zw6pwv7d57yzld753auo3ugauezzpvfak3ahc4bdyd" } - Widgets.ScalingLabel{ + Opaque.ScalingLabel{ //: Group name label text: qsTr("group-name-label") + ":" } @@ -49,7 +49,7 @@ ColumnLayout { // settingsPane text: qsTr("default-group-name") } - Widgets.Button { + Opaque.Button { //: create group button text: qsTr("create-group-btn") diff --git a/qml/panes/GroupSettingsPane.qml b/qml/panes/GroupSettingsPane.qml index d1a81b87..d7ece6c2 100644 --- a/qml/panes/GroupSettingsPane.qml +++ b/qml/panes/GroupSettingsPane.qml @@ -6,8 +6,8 @@ import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 import QtQuick.Controls 1.4 -import "../widgets" as Widgets -import "../styles" +import "../opaque" as Opaque +import "../opaque/styles" import "../utils.js" as Utils ColumnLayout { // groupSettingsPane @@ -29,7 +29,7 @@ ColumnLayout { // groupSettingsPane leftPadding: 10 spacing: 5 - Widgets.ScalingLabel { + Opaque.ScalingLabel { text: qsTr("server-label") + ":" } @@ -39,7 +39,7 @@ ColumnLayout { // groupSettingsPane readOnly: true } - Widgets.Button { + Opaque.Button { icon: "regular/clipboard" text: qsTr("copy-btn") @@ -50,7 +50,7 @@ ColumnLayout { // groupSettingsPane } } - Widgets.ScalingLabel { + Opaque.ScalingLabel { text: qsTr("invitation-label") + ":" } @@ -60,7 +60,7 @@ ColumnLayout { // groupSettingsPane readOnly: true } - Widgets.Button { + Opaque.Button { icon: "regular/clipboard" text: qsTr("copy-btn") @@ -71,7 +71,7 @@ ColumnLayout { // groupSettingsPane } } - Widgets.ScalingLabel{ + Opaque.ScalingLabel{ text: qsTr("group-name-label") + ":" } @@ -80,7 +80,7 @@ ColumnLayout { // groupSettingsPane style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 } } - Widgets.Button { + Opaque.Button { text: qsTr("save-btn") onClicked: { @@ -91,7 +91,7 @@ ColumnLayout { // groupSettingsPane } //: Invite someone to the group - Widgets.ScalingLabel { text: qsTr("invite-to-group-label") } + Opaque.ScalingLabel { text: qsTr("invite-to-group-label") } ComboBox { id: cbInvite @@ -101,7 +101,7 @@ ColumnLayout { // groupSettingsPane style: CwtchComboBoxStyle{} } - Widgets.Button { + Opaque.Button { text: qsTr("invite-btn") onClicked: { @@ -109,7 +109,7 @@ ColumnLayout { // groupSettingsPane } } - Widgets.Button { + Opaque.Button { icon: "regular/trash-alt" text: qsTr("delete-btn") diff --git a/qml/panes/OverlayPane.qml b/qml/panes/OverlayPane.qml index 123e64f2..453899cb 100644 --- a/qml/panes/OverlayPane.qml +++ b/qml/panes/OverlayPane.qml @@ -4,7 +4,8 @@ import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 -import "../widgets" as Widgets +import "../opaque" as Opaque +import "../opaque/styles" import "../overlays" ColumnLayout { @@ -23,7 +24,7 @@ ColumnLayout { text: qsTr("accept-group-invite-label") + " " + overlay.name + "?" } - Widgets.Button { + Opaque.Button { //: Accept group invite button text: qsTr("accept-group-btn") icon: "regular/heart" @@ -33,7 +34,7 @@ ColumnLayout { } } - Widgets.Button { + Opaque.Button { //: Reject Group invite button text: qsTr("reject-group-btn") icon: "regular/trash-alt" @@ -48,21 +49,21 @@ ColumnLayout { id: switcher - Widgets.Button { + Opaque.Button { text: qsTr("chat-btn") onClicked: overlayStack.overlay = overlayStack.chatOverlay } - Widgets.Button { + Opaque.Button { text: qsTr("lists-btn") onClicked: overlayStack.overlay = overlayStack.listOverlay } - Widgets.Button { + Opaque.Button { text: qsTr("bulletins-btn") diff --git a/qml/panes/PeerSettingsPane.qml b/qml/panes/PeerSettingsPane.qml index 706468d1..d9f39dbf 100644 --- a/qml/panes/PeerSettingsPane.qml +++ b/qml/panes/PeerSettingsPane.qml @@ -7,9 +7,9 @@ import QtQuick.Window 2.11 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 -import "../widgets" as Widgets -import "../styles" -import "../theme" +import "../opaque" as Opaque +import "../opaque/styles" +import "../opaque/theme" ColumnLayout { // peerSettingsPane id: root @@ -32,7 +32,7 @@ ColumnLayout { // peerSettingsPane columns: 1 width:parent.width * 0.95 anchors.horizontalCenter: parent.horizontalCenter - Widgets.EllipsisLabel { + Opaque.EllipsisLabel { anchors.left:parent.left color: Theme.mainTextColor text: qsTr("address-label") @@ -40,7 +40,7 @@ ColumnLayout { // peerSettingsPane font.pointSize: 15 * gcd.themeScale } - Widgets.ButtonTextField { + Opaque.ButtonTextField { id: txtOnion anchors.left:parent.left anchors.right:parent.right @@ -56,13 +56,13 @@ ColumnLayout { // peerSettingsPane } } - Widgets.HLine{} + Opaque.HLine{} GridLayout { columns: 1 width:parent.width * 0.95 anchors.horizontalCenter: parent.horizontalCenter - Widgets.EllipsisLabel { + Opaque.EllipsisLabel { anchors.left:parent.left color: Theme.mainTextColor text: qsTr("display-name-label") @@ -71,7 +71,7 @@ ColumnLayout { // peerSettingsPane } - Widgets.ButtonTextField { + Opaque.ButtonTextField { id: txtDisplayName anchors.left:parent.left anchors.right:parent.right @@ -86,21 +86,21 @@ ColumnLayout { // peerSettingsPane } - Widgets.HLine{} + Opaque.HLine{} GridLayout { columns: 2 width:parent.width * 0.95 anchors.horizontalCenter: parent.horizontalCenter - Widgets.EllipsisLabel { + Opaque.EllipsisLabel { color: Theme.mainTextColor text: qsTr("block-btn") font.styleName: "ExtraBold" font.pointSize: 15 * gcd.themeScale } - Widgets.ToggleSwitch { + Opaque.ToggleSwitch { isToggled: root.blocked // ? qsTr("unblock-btn") : qsTr("block-btn") anchors.right: parent.right onToggled: function() { @@ -117,11 +117,11 @@ ColumnLayout { // peerSettingsPane } - Widgets.HLine{} + Opaque.HLine{} Column { width:parent.width * 0.95 anchors.horizontalCenter: parent.horizontalCenter - Widgets.Button { + Opaque.Button { icon: "regular/trash-alt" text: qsTr("delete-btn") anchors.right: parent.right diff --git a/qml/panes/ProfileAddEditPane.qml b/qml/panes/ProfileAddEditPane.qml index 8cb3aff8..3f1154e8 100644 --- a/qml/panes/ProfileAddEditPane.qml +++ b/qml/panes/ProfileAddEditPane.qml @@ -6,7 +6,7 @@ import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 -import "../widgets" as Widgets +import "../opaque" as Opaque // import "../styles" ColumnLayout { // Add Profile Pane @@ -71,23 +71,23 @@ ColumnLayout { // Add Profile Pane spacing: 5 width: profileAddEditPane.width - Widgets.ScalingLabel { + Opaque.ScalingLabel { //: Onion text: qsTr("profile-onion-label") + ":" visible: mode == "edit" } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: onionLabel visible: mode == "edit" } - Widgets.ScalingLabel { + Opaque.ScalingLabel { //: Display name text: qsTr("profile-name") + ":" } - Widgets.TextField { + Opaque.TextField { id: txtProfileName Layout.fillWidth: true //style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 } @@ -100,7 +100,7 @@ ColumnLayout { // Add Profile Pane RowLayout { //id: radioButtons - Widgets.RadioButton { + Opaque.RadioButton { id: radioUsePassword checked: true //: Password @@ -111,7 +111,7 @@ ColumnLayout { // Add Profile Pane } } - Widgets.RadioButton { + Opaque.RadioButton { id: radioNoPassword //: Unencrypted (No password) text: qsTr("radio-no-password") @@ -122,35 +122,35 @@ ColumnLayout { // Add Profile Pane } } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: noPasswordLabel //: Not using a password on this account means that all data stored locally will not be encrypted text: qsTr("no-password-warning") visible: radioNoPassword.checked } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: currentPasswordLabel //: Current Password text: qsTr("current-password-label") + ":" visible: radioUsePassword.checked && mode == "edit" && tag != "v1-defaultPassword" } - Widgets.TextField { + Opaque.TextField { id: txtCurrentPassword Layout.fillWidth: true echoMode: TextInput.Password visible: radioUsePassword.checked && mode == "edit" && tag != "v1-defaultPassword" } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: passwordLabel //: Password text: qsTr("password1-label") + ":" visible: radioUsePassword.checked } - Widgets.TextField { + Opaque.TextField { id: txtPassword1 Layout.fillWidth: true //style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 } @@ -163,14 +163,14 @@ ColumnLayout { // Add Profile Pane } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: passwordReLabel //: Reenter password text: qsTr("password2-label") + ":" visible: radioUsePassword.checked } - Widgets.TextField { + Opaque.TextField { id: txtPassword2 Layout.fillWidth: true //style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 } @@ -178,7 +178,7 @@ ColumnLayout { // Add Profile Pane visible: radioUsePassword.checked } - Widgets.Button { // ADD or SAVE button + Opaque.Button { // ADD or SAVE button //: Create Profile || Save Profile text: mode == "add" ? qsTr("create-profile-btn") : qsTr("save-profile-btn") @@ -209,7 +209,7 @@ ColumnLayout { // Add Profile Pane } } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: passwordErrorLabel //: Passwords do not match text: qsTr("password-error-match") @@ -217,7 +217,7 @@ ColumnLayout { // Add Profile Pane color: "red" } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: passwordChangeErrorLabel //: Error changing password: Supplied password rejected text: qsTr("password-change-error") @@ -227,7 +227,7 @@ ColumnLayout { // Add Profile Pane // ***** Delete button and confirm flow ***** - Widgets.Button { + Opaque.Button { //: Delete Profile text: qsTr("delete-profile-btn") icon: "regular/trash-alt" @@ -239,21 +239,21 @@ ColumnLayout { // Add Profile Pane } } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: deleteConfirmLabel //: Type DELETE to confirm text: qsTr("delete-confirm-label")+ ":" visible: deleting } - Widgets.TextField { + Opaque.TextField { id: confirmDeleteTxt Layout.fillWidth: true //style: CwtchTextFieldStyle{ width: tehcol.width * 0.8 } visible: deleting } - Widgets.Button { + Opaque.Button { id: confirmDeleteBtn icon: "regular/trash-alt" diff --git a/qml/panes/ProfileManagerPane.qml b/qml/panes/ProfileManagerPane.qml index 7deb581c..9447004a 100644 --- a/qml/panes/ProfileManagerPane.qml +++ b/qml/panes/ProfileManagerPane.qml @@ -8,10 +8,12 @@ import QtQuick.Window 2.11 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 -import "../widgets" as Widgets -import "../widgets/controls" -import "../styles" -import "../theme" +import "../widgets" + +import "../opaque" as Opaque +import "../opaque/controls" +import "../opaque/styles" +import "../opaque/theme" ColumnLayout { @@ -20,14 +22,14 @@ ColumnLayout { //leftPadding: 10 //spacing: 5 - Widgets.ScalingLabel { + Opaque.ScalingLabel { anchors.horizontalCenter: parent.horizontalCenter wrapMode: TextEdit.Wrap //: Please enter password: text: qsTr("enter-profile-password")+":" } - Widgets.UnderlineTextField { + Opaque.UnderlineTextField { id: txtPassword anchors.horizontalCenter: parent.horizontalCenter Layout.fillWidth: true @@ -38,7 +40,7 @@ ColumnLayout { onAccepted: button.clicked() } - Widgets.ScalingLabel { + Opaque.ScalingLabel { id: error anchors.horizontalCenter: parent.horizontalCenter color: "red" @@ -47,7 +49,7 @@ ColumnLayout { visible: false } - Widgets.Button { + Opaque.Button { id: "button" anchors.horizontalCenter: parent.horizontalCenter @@ -80,7 +82,7 @@ ColumnLayout { Layout.minimumWidth: Layout.maximumWidth //Layout.maximumWidth: theStack.pane == theStack.emptyPane ? parent.width : 450 - Widgets.ProfileList { + ProfileList { anchors.fill: parent } } diff --git a/qml/panes/SettingsPane.qml b/qml/panes/SettingsPane.qml index c6ce40ef..91f48e2d 100644 --- a/qml/panes/SettingsPane.qml +++ b/qml/panes/SettingsPane.qml @@ -7,8 +7,8 @@ import QtQuick.Window 2.11 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 -import "../widgets" -import "../widgets/controls" +import "../opaque" as Opaque +import "../opaque/controls" ColumnLayout { // settingsPane id: root @@ -28,14 +28,14 @@ ColumnLayout { // settingsPane spacing: 5 width: root.width - ScalingLabel { + Opaque.ScalingLabel { width: parent.width wrapMode: TextEdit.Wrap //: Version: %1 Built on: %2 text: qsTr("version %1 builddate %2").arg(gcd.version).arg(gcd.buildDate) } - ScalingLabel { + Opaque.ScalingLabel { width: parent.width wrapMode: TextEdit.Wrap //: Interface zoom (mostly affects text and button sizes) @@ -67,26 +67,26 @@ ColumnLayout { // settingsPane } } style: CheckBoxStyle { - label: ScalingLabel { + label: Opaque.ScalingLabel { text: qsTr("block-unknown-label") } } } - ScalingLabel { + Opaque.ScalingLabel { wrapMode: TextEdit.Wrap text: qsTr("large-text-label") size: 20 } - ScalingLabel{ + Opaque.ScalingLabel{ width: parent.width wrapMode: TextEdit.Wrap //: "Default size text (scale factor: " text: qsTr("default-scaling-text") + " " + Math.round(zoomSlider.value * 100) / 100 + ")" } - ScalingLabel { + Opaque.ScalingLabel { text: qsTr("small-text-label") size: 8 } diff --git a/qml/panes/SplashPane.qml b/qml/panes/SplashPane.qml index bd3f9a6e..45fa925d 100644 --- a/qml/panes/SplashPane.qml +++ b/qml/panes/SplashPane.qml @@ -5,7 +5,7 @@ import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 -import "../styles" +import "../opaque/styles" Item { id: sp diff --git a/qml/styles/CwtchComboBoxStyle.qml b/qml/styles/CwtchComboBoxStyle.qml deleted file mode 100644 index b4536eba..00000000 --- a/qml/styles/CwtchComboBoxStyle.qml +++ /dev/null @@ -1,7 +0,0 @@ -import QtQuick.Controls.Styles 1.4 -import QtQuick 2.7 - - -ComboBoxStyle { - textColor: "#000" -} diff --git a/qml/styles/CwtchExpandingButton.qml b/qml/styles/CwtchExpandingButton.qml deleted file mode 100644 index 76e71d26..00000000 --- a/qml/styles/CwtchExpandingButton.qml +++ /dev/null @@ -1,21 +0,0 @@ -import QtQuick.Controls.Styles 1.4 -import QtQuick 2.7 - -ButtonStyle { - background: Rectangle { - width:25 - height:25 - color: windowItem.cwtch_dark_color - border.color: windowItem.cwtch_color - } - - label: Text { - renderType: Text.NativeRendering - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font.family: "Monospace" - font.pointSize: 8 - color: windowItem.cwtch_background_color - text: control.text - } -} diff --git a/qml/styles/CwtchProgress.qml b/qml/styles/CwtchProgress.qml deleted file mode 100644 index 711227c3..00000000 --- a/qml/styles/CwtchProgress.qml +++ /dev/null @@ -1,39 +0,0 @@ -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import QtQuick.Window 2.11 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - - -Rectangle { - id: pb - border.color: "#FFFFFF" - border.width: 1 - - color: "#D2C0DD" - property bool running - - // Indeterminate animation by animating alternating stripes: - Item { - anchors.fill: parent - anchors.margins: 1 - visible: control.indeterminate - clip: true - Row { - Repeater { - Rectangle { - color: index % 2 ? "#D2C0DD" : "#b29dbe" - width: 20 ; height: control.height - } - model: control.width / 20 + 2 - } - XAnimator on x { - from: 0 ; to: -40 - loops: Animation.Infinite - running: pb.running - } - } - } -} diff --git a/qml/styles/CwtchTextAreaStyle.qml b/qml/styles/CwtchTextAreaStyle.qml deleted file mode 100644 index 4e0e584b..00000000 --- a/qml/styles/CwtchTextAreaStyle.qml +++ /dev/null @@ -1,8 +0,0 @@ -import QtQuick.Controls.Styles 1.4 -import QtQuick 2.7 - - -TextAreaStyle { - textColor: "black" - backgroundColor: windowItem.cwtch_background_color -} diff --git a/qml/styles/CwtchTextFieldStyle.qml b/qml/styles/CwtchTextFieldStyle.qml deleted file mode 100644 index 9175e212..00000000 --- a/qml/styles/CwtchTextFieldStyle.qml +++ /dev/null @@ -1,15 +0,0 @@ -import QtQuick.Controls.Styles 1.4 -import QtQuick 2.7 - -TextFieldStyle { - id: root - textColor: "black" - font.pointSize: 10 * gcd.themeScale - property int width: parent.width - - background: Rectangle { - radius: 2 - color: windowItem.cwtch_background_color - border.color: windowItem.cwtch_color - } -} diff --git a/qml/theme/CwtchDark.qml b/qml/theme/CwtchDark.qml deleted file mode 100644 index 35f04424..00000000 --- a/qml/theme/CwtchDark.qml +++ /dev/null @@ -1,51 +0,0 @@ - -ThemeType { - readonly property color darkGrayPurple: "#281831" - readonly property color deepPurple: "#422850" - readonly property color mauvePurple: "#8E64A5" - readonly property color purple: "#DFB9DE" - readonly property color whitePurple: "#FFFDFF" - readonly property color softPurple: "#FDF3FC" - readonly property color pink: "#E85DA1" - readonly property color hotPink: "#D01972" - - backgroundMainColor: darkGrayPurple - backgroundPaneColor: deepPurple - - mainTextColor: purple - altTextColor: mauvePurple - defaultButtonColor: mauvePurple - defaultButtonActiveColor: pink - defaultButtonTextColor: whitePurple - - portraitOnlineBorderColor: whitePurple - portraitOnlineBackgroundColor: darkGrayPurple - portraitOnlineTextColor: whitePurple - portraitConnectingBorderColor: mauvePurple - portraitConnectingBackgroundColor: darkGrayPurple - portraitConnectingTextColor: whitePurple - portraitOfflineBorderColor: deepPurple - portraitOfflineBackgroundColor: darkGrayPurple - portraitOfflineTextColor: softPurple - - portraitContactBadgeColor: hotPink - portraitContactBadgeTextColor: whitePurple - portraitProfileBadgeColor: mauvePurple - dropShadowColor: mauvePurple - dropShadowPaneColor: darkGrayPurple - - toggleColor: darkGrayPurple - toggleOnColor: whitePurple - toggleOffColor: mauvePurple - - toolbarIconColor: whitePurple - - statusbarDisconnectedInternetColor: whitePurple - statusbarDisconnectedInternetFontColor: deepPurple - statusbarDisconnectedTorColor: darkGrayPurple - statusbarDisconnectedTorFontColor: whitePurple - statusbarConnectingColor: deepPurple - statusbarConnectingFontColor: whitePurple - statusbarOnlineColor: mauvePurple - statusbarOnlineFontColor: whitePurple -} diff --git a/qml/theme/CwtchLight.qml b/qml/theme/CwtchLight.qml deleted file mode 100644 index aac033e4..00000000 --- a/qml/theme/CwtchLight.qml +++ /dev/null @@ -1,51 +0,0 @@ - -ThemeType { - readonly property color whitePurple: "#FFFDFF" - readonly property color softPurple: "#FDF3FC" - readonly property color purple: "#DFB9DE" - readonly property color brightPurple: "#760388" - readonly property color darkPurple: "#350052" - readonly property color greyPurple: "#775F84" - readonly property color pink: "#E85DA1" - readonly property color hotPink: "#D01972" - - backgroundMainColor: whitePurple - backgroundPaneColor: softPurple - - mainTextColor: darkPurple - altTextColor: purple - defaultButtonColor: hotPink - defaultButtonActiveColor: pink - defaultButtonTextColor: whitePurple - - portraitOnlineBorderColor: darkPurple - portraitOnlineBackgroundColor: darkPurple - portraitOnlineTextColor: darkPurple - portraitConnectingBorderColor: greyPurple - portraitConnectingBackgroundColor: greyPurple - portraitConnectingTextColor: greyPurple - portraitOfflineBorderColor: purple - portraitOfflineBackgroundColor: purple - portraitOfflineTextColor: purple - - portraitContactBadgeColor: hotPink - portraitContactBadgeTextColor: whitePurple - portraitProfileBadgeColor: brightPurple - dropShadowColor: purple - dropShadowPaneColor: purple - - toggleColor: whitePurple - toggleOnColor: hotPink - toggleOffColor: purple - - toolbarIconColor: darkPurple - - statusbarDisconnectedInternetColor: softPurple - statusbarDisconnectedInternetFontColor: darkPurple - statusbarDisconnectedTorColor: purple - statusbarDisconnectedTorFontColor: darkPurple - statusbarConnectingColor: greyPurple - statusbarConnectingFontColor: whitePurple - statusbarOnlineColor: darkPurple - statusbarOnlineFontColor: whitePurple -} diff --git a/qml/theme/Theme.qml b/qml/theme/Theme.qml deleted file mode 100644 index 7570b24b..00000000 --- a/qml/theme/Theme.qml +++ /dev/null @@ -1,61 +0,0 @@ -pragma Singleton - -import QtQuick 2.0 - -Item { - readonly property color backgroundMainColor: theme.backgroundMainColor - readonly property color backgroundPaneColor: theme.backgroundPaneColor - - readonly property color mainTextColor: theme.mainTextColor - readonly property color altTextColor: theme.altTextColor - readonly property color defaultButtonColor: theme.defaultButtonColor - readonly property color defaultButtonActiveColor: theme.defaultButtonActiveColor - readonly property color defaultButtonTextColor: theme.defaultButtonTextColor - - readonly property color dropShadowColor: theme.dropShadowColor - readonly property color dropShadowPaneColor: theme.dropShadowPaneColor - - readonly property color portraitOnlineBorderColor: theme.portraitOnlineBorderColor - readonly property color portraitOnlineBackgroundColor: theme.portraitOnlineBackgroundColor - readonly property color portraitOnlineTextColor: theme.portraitOnlineTextColor - readonly property color portraitConnectingBorderColor: theme.portraitConnectingBorderColor - readonly property color portraitConnectingBackgroundColor: theme.portraitConnectingBackgroundColor - readonly property color portraitConnectingTextColor: theme.portraitConnectingTextColor - readonly property color portraitOfflineBorderColor: theme.portraitOfflineBorderColor - readonly property color portraitOfflineBackgroundColor: theme.portraitOfflineBackgroundColor - readonly property color portraitOfflineTextColor: theme.portraitOfflineTextColor - - readonly property color portraitContactBadgeColor: theme.portraitContactBadgeColor - readonly property color portraitContactBadgeTextColor: theme.portraitContactBadgeTextColor - readonly property color portraitProfileBadgeColor: theme.portraitProfileBadgeColor - - readonly property color toggleColor: theme.toggleColor - readonly property color toggleOffColor: theme.toggleOffColor - readonly property color toggleOnColor: theme.toggleOnColor - - readonly property color toolbarIconColor: theme.toolbarIconColor - - readonly property color statusbarDisconnectedInternetColor: theme.statusbarDisconnectedInternetColor - readonly property color statusbarDisconnectedInternetFontColor: theme.statusbarDisconnectedInternetFontColor - readonly property color statusbarDisconnectedTorFontColor: theme.statusbarDisconnectedTorFontColor - readonly property color statusbarDisconnectedTorColor: theme.statusbarDisconnectedTorColor - readonly property color statusbarConnectingColor: theme.statusbarConnectingColor - readonly property color statusbarConnectingFontColor: theme.statusbarConnectingFontColor - readonly property color statusbarOnlineColor: theme.statusbarOnlineColor - readonly property color statusbarOnlineFontColor: theme.statusbarOnlineFontColor - - readonly property int headerSize: 50 - readonly property int usernameSize: 30 - readonly property int tabSize: 25 - readonly property int chatSize: 20 - readonly property int secondaryTextSize: 20 // address - readonly property int chatMetaTextSize: 15 - readonly property int badgeTextSize: 12 - readonly property int statusTextSize: 12 - - readonly property int sidePaneMinSize: 700 - readonly property int doublePaneMinSize: 1000 - - property ThemeType theme: CwtchLight { } - -} diff --git a/qml/theme/ThemeType.qml b/qml/theme/ThemeType.qml deleted file mode 100644 index 55dc9c2d..00000000 --- a/qml/theme/ThemeType.qml +++ /dev/null @@ -1,46 +0,0 @@ -import QtQuick 2.0 - -QtObject { - property color backgroundMainColor: "red" - property color backgroundPaneColor: "red" - - property color mainTextColor: "red" - property color altTextColor: "red" - property color defaultButtonColor: "red" - property color defaultButtonActiveColor: "red" - property color defaultButtonTextColor: "red" - - property color portraitOnlineBorderColor: "red" - property color portraitOnlineBackgroundColor: "red" - property color portraitOnlineTextColor: "red" - property color portraitConnectingBorderColor: "red" - property color portraitConnectingBackgroundColor: "red" - property color portraitConnectingTextColor: "red" - property color portraitOfflineBorderColor: "red" - property color portraitOfflineBackgroundColor: "red" - property color portraitOfflineTextColor: "red" - - property color portraitContactBadgeColor: "red" - property color portraitContactBadgeTextColor: "red" - property color portraitProfileBadgeColor: "red" - property color dropShadowColor: "black" - property color dropShadowPaneColor: "black" - property color toggleColor: "black" - property color toggleOnColor: "black" - property color toggleOffColor: "black" - - property color toolbarIconColor: "red" - - property color statusbarDisconnectedInternetColor: "red" - property color statusbarDisconnectedInternetFontColor: "red" - property color statusbarDisconnectedTorFontColor: "red" - property color statusbarDisconnectedTorColor: "red" - property color statusbarConnectingColor: "red" - property color statusbarConnectingFontColor: "red" - property color statusbarOnlineColor: "red" - property color statusbarOnlineFontColor: "red" - - // ... more to come - - -} diff --git a/qml/theme/qmldir b/qml/theme/qmldir deleted file mode 100644 index 4954041f..00000000 --- a/qml/theme/qmldir +++ /dev/null @@ -1 +0,0 @@ -singleton Theme 1.0 Theme.qml \ No newline at end of file diff --git a/qml/widgets/Badge.qml b/qml/widgets/Badge.qml deleted file mode 100644 index 6369eab3..00000000 --- a/qml/widgets/Badge.qml +++ /dev/null @@ -1,24 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import CustomQmlTypes 1.0 -import "../theme" - -Rectangle { - width: parent.width * 0.25 - height: width - radius: width/2 - anchors.right: parent.right - anchors.bottom: parent.bottom - anchors.margins: parent.width * 0.09 - property alias content: container.children - - Column { - id: container - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - } - -} diff --git a/qml/widgets/Button.qml b/qml/widgets/Button.qml deleted file mode 100644 index c3413346..00000000 --- a/qml/widgets/Button.qml +++ /dev/null @@ -1,79 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 - -import "../fonts/Twemoji.js" as T -import "../theme" -import "../fonts" - -Rectangle { - id: button - width: (text == undefined || text == "" ? 0 : buttonText.width) + (icon == undefined || icon == "" ? 0 : ico.width) + 24 * gcd.themeScale - Layout.minimumWidth: width - Layout.maximumWidth: width - height: 20 * gcd.themeScale - Layout.minimumHeight: height - Layout.maximumHeight: height - color: mousedown ? Theme.defaultButtonActiveColor : Theme.defaultButtonColor - border.color: mousedown ? Theme.defaultButtonActiveColor : Theme.defaultButtonColor - border.width: 1 - radius: override_radius - antialiasing: true - - property bool checked: false - property double override_radius: (height / 2.0) - property alias text: buttonText.text - property alias font: buttonText.font.family - property string icon - property bool mousedown - property string tooltip - signal clicked - - - RowLayout { - anchors.centerIn: parent - - Image { - anchors.left: parent.left - id: ico - source: icon!="" ? gcd.assetPath + "fontawesome/"+icon+".svg" : ""; - height: button.height / 2 - sourceSize.height: button.height / 2 - } - - Label { - id: buttonText - font.family: Fonts.applicationFontRegular.name - font.styleName: "ExtraBold" - font.pixelSize: button.height / 2 - color: Theme.defaultButtonTextColor - anchors.left: ico.right - anchors.leftMargin: 6 - visible: button.text != "" && button.text != undefined - } - - ToolTip.visible: tooltip != "" && mouseArea.containsMouse - ToolTip.text: tooltip - } - - - MouseArea { - id: mouseArea - anchors.fill: parent - - onClicked: { - parent.focus = true - parent.clicked() - } - - onPressed: mousedown = true - - onReleased: mousedown = false - - hoverEnabled: true - } - - Keys.onSpacePressed: clicked() -} diff --git a/qml/widgets/ButtonTextField.qml b/qml/widgets/ButtonTextField.qml deleted file mode 100644 index 9962ce2c..00000000 --- a/qml/widgets/ButtonTextField.qml +++ /dev/null @@ -1,49 +0,0 @@ -import QtQuick 2.7 - -import QtQuick.Controls 2.13 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.12 -import "." as Widgets -import "../theme" - - -// ButtonTextField integrates a text field and a button -TextField { - id: tf - color: Theme.mainTextColor - font.pixelSize: Theme.secondaryTextSize * gcd.themeScale - width: parent.width - 20 - property string icon - property string button_text - signal clicked - smooth: true - property color dropShadowColor: Theme.dropShadowColor - - background: Rectangle { - radius: 10 - color: Theme.backgroundMainColor - border.color: Theme.backgroundMainColor - layer.enabled: true - layer.effect: DropShadow { - transparentBorder: true - horizontalOffset: 4 - verticalOffset: 4 - samples:10 - color: tf.dropShadowColor - } - } - - Widgets.Button { - icon: "" - text: button_text - anchors { top: parent.top; right: parent.right } - override_radius: 10 - height: parent.height; width: parent.height * 4 - - onClicked: { - parent.focus = true; - parent.clicked(); - } - } - -} diff --git a/qml/widgets/ContactList.qml b/qml/widgets/ContactList.qml index 2011784a..6420d707 100644 --- a/qml/widgets/ContactList.qml +++ b/qml/widgets/ContactList.qml @@ -3,7 +3,9 @@ import QtQuick 2.7 import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 -import "../theme" + +import "../opaque" as Opaque +import "../opaque/theme" ColumnLayout { id: root @@ -25,7 +27,7 @@ ColumnLayout { } - IconTextField { + Opaque.IconTextField { id: searchAddText anchors.horizontalCenter: parent.horizontalCenter diff --git a/qml/widgets/ContactRow.qml b/qml/widgets/ContactRow.qml index bed4b98e..061fe130 100644 --- a/qml/widgets/ContactRow.qml +++ b/qml/widgets/ContactRow.qml @@ -4,14 +4,14 @@ import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 import CustomQmlTypes 1.0 -import "../styles" -import "../widgets" as Widgets -import "../theme" import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 -PortraitRow { +import "../opaque" as Opaque +import "../opaque/styles" +import "../opaque/theme" +Opaque.PortraitRow { property int status: 0 property int badge property bool loading diff --git a/qml/widgets/EllipsisLabel.qml b/qml/widgets/EllipsisLabel.qml deleted file mode 100644 index a0d042c5..00000000 --- a/qml/widgets/EllipsisLabel.qml +++ /dev/null @@ -1,59 +0,0 @@ -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import CustomQmlTypes 1.0 -import "../widgets" as Widgets -import "../theme" - - -// Needs the parent to have an onWidthChanged that calls .textResize() -Item { - anchors.right: parent.right - anchors.left: parent.left - - property string text - - property alias color: label.color - property alias pixelSize: label.font.pixelSize - property alias weight: label.font.weight - property alias strikeout: label.font.strikeout - property alias font: label.font - property int extraPadding: 0 - - property Item container: parent - - height: textMetric.height - width: textMetric.width + 10 - anchors.leftMargin: 10 - - Label { - id: label - textFormat: Text.PlainText - - elide: Text.ElideRight - text: textMetric.text - } - - TextMetrics { - id: textMetric - text: text - font: label.font - } - - onTextChanged: { - textResize() - } - - function textResize() { - textMetric.text = text - var i = 2 - var containerWidth = container != null ? container.width : 50 - // - 30 for padding - while (textMetric.width > containerWidth - ((30 + extraPadding) * gcd.themeScale) && containerWidth > 50) { - textMetric.text = text.slice(0, text.length - (i * 3)) + "..." - i++ - } - } - -} diff --git a/qml/widgets/EmojiDrawer.qml b/qml/widgets/EmojiDrawer.qml deleted file mode 100644 index 7bb9bba1..00000000 --- a/qml/widgets/EmojiDrawer.qml +++ /dev/null @@ -1,400 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.13 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import Qt.labs.folderlistmodel 2.13 -import QtQml.Models 2.13 - -import "../fonts/MutantStandard.js" as Mutant -import "controls" - -Item { - id: root - height: 0 - property int size: 24 - property int requestedHeight: size * 8 - property string morph: "clw" - property string color: "v1" - property bool narrowMode: width < (txtSearch.width + root.size * 14 + btnX.width) - signal picked(string shortcode) - signal slideopen() - signal slideclosed() - visible: height != 0 - - Rectangle { - color: windowItem.cwtch_dark_color - anchors.fill: parent - } - - PropertyAnimation { - id: animClose; - target: root; - properties: "height"; - to: 0; - duration: 400; - } - - PropertyAnimation { - id: animOpen; - target: root; - properties: "height"; - to: requestedHeight; - duration: 400; - } - - Button { - id: btnX - anchors.top: parent.top - anchors.right: parent.right - text: "x" - - onClicked: animClose.start() - } - - ColumnLayout { - anchors.fill: parent - - - RowLayout { - TextField { - id: txtSearch - //: Search... - placeholderText: qsTr("search") - onTextChanged: { - if (text == "") emojiModel.model = folder_expressions - else emojiModel.model = folder_search - emojiModel.updatefilters() - } - } - - ImageButton { - id: btnEmojiExpressionsGroup - visible: !root.narrowMode - //: Expressions - tooltip: qsTr("emojicat-expressions") - source: gcd.assetPath + "mutstd/smile.webp" - size: root.size - onClicked: emojiModel.model = folder_expressions - } - ImageButton { - visible: !root.narrowMode - //: Activities - tooltip: qsTr("emojicat-activities") - source: gcd.assetPath + "mutstd/artist_r1.webp" - size: root.size - onClicked: emojiModel.model = folder_activities_clothing - } - ImageButton { - visible: !root.narrowMode - //: Food, drink & herbs - tooltip: qsTr("emojicat-food") - source: gcd.assetPath + "mutstd/red_apple.webp" - size: root.size - onClicked: emojiModel.model = folder_food_drink_herbs - } - ImageButton { - visible: !root.narrowMode - //: Gender, relationships & sexuality - tooltip: qsTr("emojicat-gender") - size: root.size - source: gcd.assetPath + "mutstd/pride_100.webp" - onClicked: emojiModel.model = folder_gsr - } - ImageButton { - visible: !root.narrowMode - //: Nature and effects - tooltip: qsTr("emojicat-nature") - source: gcd.assetPath + "mutstd/sun_behind_small_cloud.webp" - size: root.size - onClicked: emojiModel.model = folder_nature - } - ImageButton { - visible: !root.narrowMode - //: Objects - tooltip: qsTr("emojicat-objects") - source: gcd.assetPath + "mutstd/crystal_ball.webp" - size: root.size - onClicked: emojiModel.model = folder_objects - } - ImageButton { - visible: !root.narrowMode - //: People and animals - tooltip: qsTr("emojicat-people") - source: gcd.assetPath + "mutstd/crow.webp" - size: root.size - onClicked: emojiModel.model = folder_people - } - ImageButton { - visible: !root.narrowMode - //: Symbols - tooltip: qsTr("emojicat-symbols") - source: gcd.assetPath + "mutstd/purple_heart.webp" - size: root.size - onClicked: emojiModel.model = folder_symbols - } - ImageButton { - visible: !root.narrowMode - //: Travel & places - tooltip: qsTr("emojicat-travel") - source: gcd.assetPath + "mutstd/airplane.webp" - size: root.size - onClicked: emojiModel.model = folder_travel_places - } - ImageButton { - visible: !root.narrowMode - //: Miscellaneous - tooltip: qsTr("emojicat-misc") - source: gcd.assetPath + "mutstd/hash_char.webp" - size: root.size - onClicked: emojiModel.model = folder_utils - } - ImageButton { - visible: !root.narrowMode - id: btnUndefinedGroup - // (no tooltip; this is a catchall group meant to detect unclassified emoji during development) - //TODO: remove this category upon finalizing the Emoji Drawer - source: gcd.assetPath + "mutstd/undefined_character.webp" - size: root.size - onClicked: emojiModel.model = folder_other - } - - Item { - visible: root.narrowMode - height: root.size - width: root.size - - Image { - id: imgCatRot - anchors.centerIn: parent - source: cats[index].source - property int index: 0 - property var cats: [ - {source: gcd.assetPath + "mutstd/smile.webp", model: folder_expressions}, - {source: gcd.assetPath + "mutstd/artist_r1.webp", model: folder_activities_clothing}, - {source: gcd.assetPath + "mutstd/red_apple.webp", model: folder_food_drink_herbs}, - {source: gcd.assetPath + "mutstd/pride_100.webp", model: folder_gsr}, - {source: gcd.assetPath + "mutstd/sun_behind_small_cloud.webp", model: folder_nature}, - {source: gcd.assetPath + "mutstd/crystal_ball.webp", model: folder_objects}, - {source: gcd.assetPath + "mutstd/crow.webp", model: folder_people}, - {source: gcd.assetPath + "mutstd/purple_heart.webp", model: folder_symbols}, - {source: gcd.assetPath + "mutstd/airplane.webp", model: folder_travel_places}, - {source: gcd.assetPath + "mutstd/hash_char.webp", model: folder_utils}, - {source: gcd.assetPath + "mutstd/undefined_character.webp", model: folder_other} - ] - height: root.size * (maCatRot.pressed ? 0.8 : 1.0) - width: root.size * (maCatRot.pressed ? 0.8 : 1.0) - - ToolTip.visible: maCatRot.containsMouse - ToolTip.text: gcd.os == "android" ? qsTr("cycle-cats-android") : qsTr("cycle-cats-desktop") - - MouseArea { - id: maCatRot - hoverEnabled: true - acceptedButtons: Qt.LeftButton | Qt.RightButton - anchors.fill: parent; - - onClicked: { - if (mouse.button == Qt.RightButton) {//todo: long press on android - imgCatRot.index = 0 - } else { - imgCatRot.index = (imgCatRot.index + 1) % imgCatRot.cats.length - } - emojiModel.model = imgCatRot.cats[imgCatRot.index].model - //root.morph = Mutant.standard.morphs[imgMorph.index] - //emojiModel.updatefilters() - } - } - } - } - - Item { - height: root.size - width: root.size - - Image { - id: imgMorph - anchors.centerIn: parent - source: gcd.assetPath + "mutstd/hand_"+Mutant.standard.morphs[index]+"_"+root.color+".webp" - property int index: 0 - height: root.size - width: root.size - - ToolTip.visible: maMorph.containsMouse - ToolTip.text: gcd.os == "android" ? qsTr("cycle-morphs-android") : qsTr("cycle-morphs-desktop") - - MouseArea { - id: maMorph - hoverEnabled: true - acceptedButtons: Qt.LeftButton | Qt.RightButton - anchors.fill: parent; - onClicked: { - if (mouse.button == Qt.RightButton) {//todo: long press on android - imgMorph.index = 0//TODO: saved morph - } else { - imgMorph.index = (imgMorph.index + 1) % Mutant.standard.morphs.length - } - root.morph = Mutant.standard.morphs[imgMorph.index] - emojiModel.updatefilters() - } - } - } - } - - Item { - height: root.size - width: root.size - - Image { - id: imgColor - anchors.centerIn: parent - source: gcd.assetPath + "mutstd/color_modifier_"+Mutant.standard.colorByIndex(index, root.morph)+".webp" - property int index: 0 - height: root.size - width: root.size - - ToolTip.visible: ma.containsMouse - ToolTip.text: gcd.os == "android" ? qsTr("cycle-colours-android") : qsTr("cycle-colours-desktop") - - MouseArea { - id: ma - anchors.fill: parent; - hoverEnabled: true - acceptedButtons: Qt.LeftButton | Qt.RightButton - - onClicked: function(mouse){ - if (mouse.button == Qt.RightButton) {//todo: long press on android - imgColor.index = 0//todo: saved color - } else { - imgColor.index = (imgColor.index + 1) % Mutant.standard.numColors(root.morph) - } - root.color = Mutant.standard.colorByIndex(imgColor.index, root.morph) - emojiModel.updatefilters() - } - } - } - } - } - - GridView { - Layout.fillWidth: true - Layout.fillHeight: true - height: root.size * 3 - cellWidth: root.size - cellHeight: root.size - clip: true - ScrollBar.vertical: ScrollBar {} - maximumFlickVelocity: 1250 - boundsBehavior: GridView.StopAtBounds - - - model: emojiModel - } - } - - ListModel { id: folder_activities_clothing } - ListModel { id: folder_expressions } - ListModel { id: folder_food_drink_herbs } - ListModel { id: folder_gsr } - ListModel { id: folder_nature } - ListModel { id: folder_objects } - ListModel { id: folder_people } - ListModel { id: folder_symbols } - ListModel { id: folder_travel_places } - ListModel { id: folder_utils } - ListModel { id: folder_other } - ListModel { id: folder_search } - - DelegateModel { - id: emojiModel - model: folder_expressions - - delegate: Item { - width: root.size - height: root.size - - Image { - id: img - //source: "file://" + gcd.binaryPath + "/assets/mutstd/" + code + ".webp" - source: gcd.assetPath + "mutstd/" + code + ".webp" - width: root.size * (mouseArea.pressed ? 0.7 : 0.8) - height: width - anchors.centerIn: parent - property string shortcode: code - - ToolTip.visible: mouseArea.containsMouse - ToolTip.text: desc + "\n:" + shortcode + ":" - - MouseArea { - id: mouseArea - anchors.fill: parent - hoverEnabled: true - - onClicked: root.picked(img.shortcode) - } - } - } - - Component.onCompleted: updatefilters() - - function clearall() { - folder_activities_clothing.clear() - folder_expressions.clear() - folder_food_drink_herbs.clear() - folder_gsr.clear() - folder_nature.clear() - folder_objects.clear() - folder_people.clear() - folder_symbols.clear() - folder_travel_places.clear() - folder_utils.clear() - folder_other.clear() - folder_search.clear() - } - - function updatefilters() { - clearall() - - for (var i in Mutant.standard.manifest) { - if (typeof Mutant.standard.manifest[i].morph !== "undefined" && Mutant.standard.manifest[i].morph != root.morph) - continue; - - if (typeof Mutant.standard.manifest[i].color !== "undefined" && Mutant.standard.manifest[i].color != root.color) - continue; - - if (txtSearch.text != "" && !(Mutant.standard.manifest[i].code.includes(txtSearch.text) || Mutant.standard.manifest[i].desc.includes(txtSearch.text))) { - continue; - } - - var model = folder_other - if (txtSearch.text == "") { - switch(Mutant.standard.manifest[i].cat) { - case "activities_clothing": model = folder_activities_clothing; break; - case "expressions": model = folder_expressions; break; - case "symbols": model = folder_symbols; break; - case "food_drink_herbs": model = folder_food_drink_herbs; break; - case "gsr": model = folder_gsr; break; - case "nature": model = folder_nature; break; - case "objects": model = folder_objects; break; - case "people": model = folder_people; break; - case "travel_places": model = folder_travel_places; break; - case "utils": model = folder_utils; break; - } - } else { - model = folder_search - } - - model.append({ - cat: Mutant.standard.manifest[i].cat, - code: Mutant.standard.manifest[i].code, - color: Mutant.standard.manifest[i].color, - morph: Mutant.standard.manifest[i].morph, - desc: Mutant.standard.manifest[i].desc - }) - } - } - } - - onSlideopen: animOpen.start() - onSlideclosed: animClose.start() -} diff --git a/qml/widgets/FontAwesome.qml b/qml/widgets/FontAwesome.qml deleted file mode 100644 index dcdaed12..00000000 --- a/qml/widgets/FontAwesome.qml +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** -** -** The MIT License (MIT) -** -** Copyright (c) 2014 Ricardo do Valle Flores de Oliveira -** -** $BEGIN_LICENSE:MIT$ -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and associated documentation files (the "Software"), to deal -** in the Software without restriction, including without limitation the rights -** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -** copies of the Software, and to permit persons to whom the Software is -** furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -** SOFTWARE. -** -** $END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.0 - -import "controls" as Awesome - -Item { - id: awesome - - property alias icons: variables - property alias loaded: loader.loaded - property alias resource: loader.resource - - readonly property string family: "FontAwesome" - - Awesome.Loader { - id: loader - } - - Awesome.Variables { - id: variables - } -} diff --git a/qml/widgets/HLine.qml b/qml/widgets/HLine.qml deleted file mode 100644 index 33c342a9..00000000 --- a/qml/widgets/HLine.qml +++ /dev/null @@ -1,28 +0,0 @@ -import QtQuick 2.12 -import "../theme" - -Column { - width: parent.width - anchors.horizontalCenter: parent.horizontalCenter - - Rectangle { - height: 10 - color:"transparent" - width: parent.width - } - - - Rectangle { - anchors.horizontalCenter: parent.horizontalCenter - height: 1 - width: parent.width * 0.95 - color: Theme.dropShadowColor - } - - - Rectangle { - height: 10 - color:"transparent" - width: parent.width - } -} diff --git a/qml/widgets/Icon.qml b/qml/widgets/Icon.qml deleted file mode 100644 index 471a3a46..00000000 --- a/qml/widgets/Icon.qml +++ /dev/null @@ -1,63 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 - -import "../fonts/Twemoji.js" as T -import "." as Widgets -import "../theme" - -Rectangle { - id: root - - property color backgroundColor: parent.color - property color hilightBackgroundColor: backgroundColor - - property bool isHover: false - - color: isHover ? backgroundColor : hilightBackgroundColor - - property alias iconColor: iconColorOverlay.color - - property alias source: srcImg.source - - signal clicked() - - Image { - id: srcImg - anchors.fill: parent - antialiasing: true - smooth: true - visible: false - // Apparently qml can now only DOWN-SCALE/SHRINK the SVG, so with this hack it which won't cause blurriness/pixelation - sourceSize.width: root.width*2 - sourceSize.height: root.height*2 - } - - ColorOverlay{ - id: iconColorOverlay - anchors.fill: srcImg - source: srcImg - - antialiasing: true - smooth: true - } - - MouseArea { // Full row mouse area triggering onClick - id: ma - anchors.fill: parent - hoverEnabled: true - - onClicked: { root.clicked() } - - onEntered: { - isHover = true - } - - onExited: { - isHover = false - } - } - -} diff --git a/qml/widgets/IconTextField.qml b/qml/widgets/IconTextField.qml deleted file mode 100644 index a1a80183..00000000 --- a/qml/widgets/IconTextField.qml +++ /dev/null @@ -1,49 +0,0 @@ -import QtQuick 2.7 - -import QtQuick.Controls 2.13 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.12 -import "." as Widgets -import "../theme" - -// IconTextField integrates a text field and an icon -TextField { - color: Theme.mainTextColor - font.pixelSize: Theme.secondaryTextSize * gcd.themeScale * gcd.themeScale - width: parent.width - 20 - property alias icon: icon_.source - signal clicked - smooth: true - placeholderTextColor: Theme.altTextColor - - - background: Rectangle { - radius: 10 - color: Theme.backgroundMainColor - border.color: Theme.backgroundMainColor - layer.enabled: true - layer.effect: DropShadow { - transparentBorder: true - horizontalOffset: 0 - verticalOffset: 0 - samples: 10 - radius: 8 - color: Theme.dropShadowColor - } - } - - Widgets.Icon { - id: icon_ - - anchors.right: parent.right - anchors.rightMargin: 4 - anchors.verticalCenter: parent.verticalCenter - - height: parent.height-4; - width: parent.height-4; - - iconColor: Theme.altTextColor - backgroundColor: Theme.backgroundMainColor - } - -} diff --git a/qml/widgets/InplaceEditText.qml b/qml/widgets/InplaceEditText.qml deleted file mode 100644 index 6cf68c61..00000000 --- a/qml/widgets/InplaceEditText.qml +++ /dev/null @@ -1,92 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import "../widgets" as Widgets - - - -Item { - id: root - height: lbl.visible ? lbl.height : txt.height + (gcd.os == "android" ? btn.height + 3 : 0) //lbl.height - implicitHeight: height //lbl.height - - property alias text: lbl.text - signal updated - - Text { // DISPLAY THE TEXT IN READONLY MODE - id: lbl - fontSizeMode: Text.HorizontalFit - font.pixelSize: 36 - minimumPixelSize: 8 - horizontalAlignment: Text.AlignHCenter - textFormat: Text.PlainText - anchors.horizontalCenter: parent.horizontalCenter - } - - Image { - id: img - anchors.left: lbl.right - anchors.leftMargin: 3 - source: gcd.assetPath + "fontawesome/solid/edit.svg" - height: 16 - sourceSize.height: 16 - } - - - MouseArea { - anchors.fill: lbl - - - onClicked: { - lbl.visible = img.visible = false - txt.visible = true - if (gcd.os == "android") btn.visible = true - txt.text = lbl.text - txt.selectAll() - txt.focus = true - } - } - - TextEdit { // MAKE IT AN EDITOR WHEN EDITING - id: txt - text: root.text - visible: false - selectByMouse: true - font.pixelSize: lbl.font.pixelSize - anchors.horizontalCenter: parent.horizontalCenter - - - onActiveFocusChanged: { - if (!activeFocus) { - save() - } - } - - Keys.onReturnPressed: { - if (event.modifiers == Qt.NoModifier) { - save() - } - } - - function save() { - root.text = txt.text - txt.visible = btn.visible = false - lbl.visible = img.visible = true - root.updated(txt.text) - } - } - - Widgets.Button { - id: btn - anchors.top: txt.bottom - anchors.topMargin: 3 - anchors.horizontalCenter: parent.horizontalCenter - visible: false - text: qsTr("Update") - - - onClicked: txt.save() - } -} diff --git a/qml/widgets/Message.qml b/qml/widgets/Message.qml index d9f6e3c6..10ea3911 100644 --- a/qml/widgets/Message.qml +++ b/qml/widgets/Message.qml @@ -4,7 +4,8 @@ import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 -import "controls" as Awesome +import "../opaque" as Opaque +import "../opaque/controls" as Awesome Item { id: root @@ -42,7 +43,7 @@ Item { } - Portrait { + Opaque.Portrait { id: imgProfile anchors.left: parent.left // TODO: currently unused? diff --git a/qml/widgets/MyProfile.qml b/qml/widgets/MyProfile.qml index a8937bf1..8a9b8898 100644 --- a/qml/widgets/MyProfile.qml +++ b/qml/widgets/MyProfile.qml @@ -7,9 +7,9 @@ import QtQuick.Layouts 1.3 import QtQuick.Window 2.11 import QtQuick.Controls 1.4 -import "." as Widgets -import "../styles" -import "../theme" +import "../opaque" as Opaque +import "../opaque/styles" +import "../opaque/theme" Item { id: root @@ -78,7 +78,7 @@ Item { id: profile color: Theme.backgroundMainColor - Portrait { + Opaque.Portrait { id: portrait source: root.image @@ -105,7 +105,7 @@ Item { id: nameCenter width: name.width + addBtn.width - EllipsisLabel { + Opaque.EllipsisLabel { id: name anchors.right: undefined @@ -119,7 +119,7 @@ Item { container: nameRow } - Widgets.Button { // Add Button + Opaque.Button { // Add Button id: addBtn anchors.left: name.right diff --git a/qml/widgets/Portrait.qml b/qml/widgets/Portrait.qml deleted file mode 100644 index 41728cd8..00000000 --- a/qml/widgets/Portrait.qml +++ /dev/null @@ -1,71 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import CustomQmlTypes 1.0 -import "../theme" - -Item { - id: imgProfile - implicitWidth: baseWidth - implicitHeight: baseWidth - - property string source - property alias badgeColor: badge.color - - property real logscale: 4 * Math.log10(gcd.themeScale + 1) - property int baseWidth: 78 * logscale - height: 78 * logscale - - property alias portraitBorderColor: mainImage.color - property alias portraitColor: imageInner.color - property alias badgeVisible: badge.visible - property alias badgeContent: badge.content - - - Rectangle { - id: mainImage - //anchors.leftMargin: baseWidth * 0.1 - anchors.horizontalCenter: parent.horizontalCenter - width: baseWidth * 0.8 - height: width - anchors.verticalCenter: parent.verticalCenter - color: Theme.portraitOfflineBorderColor - radius: width / 2 - - Rectangle { - id: imageInner - width: parent.width - 4 - height: width - color: Theme.portraitOfflineBorderColor - radius: width / 2 - anchors.centerIn:parent - - Image { // PROFILE IMAGE - id: img - source: gcd.assetPath + imgProfile.source - anchors.fill: parent - fillMode: Image.PreserveAspectFit - visible: false - } - - Image { // CIRCLE MASK - id: mask - fillMode: Image.PreserveAspectFit - visible: false - source: "qrc:/qml/images/extra/clipcircle.png" - } - - OpacityMask { - anchors.fill: img - source: img - maskSource: mask - } - } - } - - Badge { - id: badge - } -} diff --git a/qml/widgets/PortraitRow.qml b/qml/widgets/PortraitRow.qml deleted file mode 100644 index ba65e889..00000000 --- a/qml/widgets/PortraitRow.qml +++ /dev/null @@ -1,141 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import CustomQmlTypes 1.0 -import "../styles" -import "../widgets" as Widgets -import "../theme" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -Item { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY - id: crItem - anchors.left: parent.left - anchors.right: parent.right - height: 78 * logscale + 3 - implicitHeight: 78 * logscale + 3 //height - - property real logscale: 4 * Math.log10(gcd.themeScale + 1) - property string displayName - property alias image: portrait.source - property string handle - property bool isActive - property bool isHover - property string tag // profile version/type - - property alias badgeColor: portrait.badgeColor - property alias portraitBorderColor: portrait.portraitBorderColor - property alias portraitColor: portrait.portraitColor - property alias nameColor: cn.color - property alias onionColor: onion.color - property alias onionVisible: onion.visible - property alias badgeVisible: portrait.badgeVisible - property alias badgeContent: portrait.badgeContent - property alias hoverEnabled: buttonMA.hoverEnabled - - property alias content: extraMeta.children - - // TODO: should be in ContactRow - property bool blocked - - signal clicked(string handle) - - Rectangle { // CONTACT ENTRY BACKGROUND COLOR - id: crRect - anchors.left: parent.left - anchors.right: parent.right - height: crItem.height - width: parent.width - color: isHover ? Theme.backgroundPaneColor : (isActive ? Theme.backgroundPaneColor : Theme.backgroundMainColor) - - Portrait { - id: portrait - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 25 * logscale - } - - ColumnLayout { - id: portraitMeta - - anchors.left: portrait.right - anchors.right: parent.right - anchors.leftMargin: 4 * logscale - anchors.verticalCenter: parent.verticalCenter - - spacing: 2 * gcd.themeScale - - - EllipsisLabel { // CONTACT NAME - id: cn - pixelSize: Theme.usernameSize * gcd.themeScale - weight: Font.Bold - strikeout: blocked - text: displayName - } - - EllipsisLabel { // Onion - id: onion - text: handle - pixelSize: Theme.secondaryTextSize * gcd.themeScale - strikeout: blocked - } - - onWidthChanged: { - cn.textResize() - onion.textResize() - } - - } - - Column { - id: extraMeta - anchors.left: portraitMeta.right - anchors.verticalCenter: parent.verticalCenter - } - } - - MouseArea { // Full row mouse area triggering onClick - id: buttonMA - anchors.fill: parent - hoverEnabled: true - - onClicked: { crItem.clicked(crItem.handle) } - - onEntered: { - isHover = true - } - - onExited: { - isHover = false - } - } - - Connections { // UPDATE UNREAD MESSAGES COUNTER - target: gcd - - onResetMessagePane: function() { - isActive = false - } - - onUpdateContactBlocked: function(_handle, _blocked) { - if (handle == _handle) { - blocked = _blocked - } - } - - onUpdateContactDisplayName: function(_handle, _displayName) { - if (handle == _handle) { - displayName = _displayName + (blocked == true ? " (blocked)" : "") - } - } - - onUpdateContactPicture: function(_handle, _image) { - if (handle == _handle) { - image = _image - } - } - } -} diff --git a/qml/widgets/ProfileList.qml b/qml/widgets/ProfileList.qml index 0e8618ae..1a65846c 100644 --- a/qml/widgets/ProfileList.qml +++ b/qml/widgets/ProfileList.qml @@ -3,7 +3,9 @@ import QtQuick 2.7 import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 -import "../theme" + +import "../opaque" as Opaque +import "../opaque/theme" ColumnLayout { id: root @@ -101,7 +103,7 @@ ColumnLayout { } } - PortraitRow { + Opaque.PortraitRow { handle: "" displayName: qsTr("add-new-profile-btn") nameColor: Theme.mainTextColor diff --git a/qml/widgets/ProfileRow.qml b/qml/widgets/ProfileRow.qml index c70ee2d5..03fd71db 100644 --- a/qml/widgets/ProfileRow.qml +++ b/qml/widgets/ProfileRow.qml @@ -4,14 +4,14 @@ import QtQuick.Controls 2.4 import QtQuick.Controls.Material 2.0 import QtQuick.Layouts 1.3 import CustomQmlTypes 1.0 -import "../styles" -import "../widgets" as Widgets -import "../theme" import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 -PortraitRow { +import "../opaque" as Opaque +import "../opaque/styles" +import "../opaque/theme" +Opaque.PortraitRow { badgeColor: Theme.portraitProfileBadgeColor portraitBorderColor: Theme.portraitOnlineBorderColor @@ -26,7 +26,7 @@ PortraitRow { width: height } - Widgets.Button {// Edit BUTTON + Opaque.Button {// Edit BUTTON id: btnEdit icon: "solid/user-edit" diff --git a/qml/widgets/RadioButton.qml b/qml/widgets/RadioButton.qml deleted file mode 100644 index 5ce7b21a..00000000 --- a/qml/widgets/RadioButton.qml +++ /dev/null @@ -1,27 +0,0 @@ -import QtQuick 2.7 - -import QtQuick.Controls 2.13 - - -RadioButton { - id: control - - property real size: 12 - spacing: 0 - - indicator: Rectangle { - width: 16 * gcd.themeScale - height: 16 * gcd.themeScale - anchors.verticalCenter: parent.verticalCenter - radius: 9 - border.width: 1 - - Rectangle { - anchors.fill: parent - visible: control.checked - color: "black" - radius: 9 - anchors.margins: 4 - } - } -} diff --git a/qml/widgets/ScalingLabel.qml b/qml/widgets/ScalingLabel.qml deleted file mode 100644 index e0471fd0..00000000 --- a/qml/widgets/ScalingLabel.qml +++ /dev/null @@ -1,15 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import QtQuick.Window 2.11 - - -Label { - font.pixelSize: gcd.themeScale * size - wrapMode: Text.WordWrap - color: "#000000" - textFormat: Text.PlainText - property real size: 12 -} diff --git a/qml/widgets/Statusbar.qml b/qml/widgets/Statusbar.qml index 38e4aaf8..e1dfa0c0 100644 --- a/qml/widgets/Statusbar.qml +++ b/qml/widgets/Statusbar.qml @@ -1,8 +1,8 @@ import QtQuick 2.7 import QtQuick.Controls 2.4 -import "." as Widgets -import "../theme" +import "../opaque" as Opaque +import "../opaque/theme" // Statusbar is a app wide 10-25 tall bar that should be place at the bottom of the app that gives network health information // it changes color and text/icon message based on network health. when netowrk is not healthy it is always in fullsized mode @@ -37,7 +37,7 @@ Rectangle { font.pixelSize: Theme.statusTextSize * gcd.themeScale } - Icon { + Opaque.Icon { id: networkStatus opacity: 0 anchors.right: connectionStatus.left @@ -48,7 +48,7 @@ Rectangle { } - Icon { + Opaque.Icon { id: connectionStatus opacity: 0 anchors.right: parent.right diff --git a/qml/widgets/TextField.qml b/qml/widgets/TextField.qml deleted file mode 100644 index 333f3bb3..00000000 --- a/qml/widgets/TextField.qml +++ /dev/null @@ -1,16 +0,0 @@ -import QtQuick 2.7 - -import QtQuick.Controls 2.13 - - -TextField { - color: "black" - font.pointSize: 10 * gcd.themeScale - width: 100 - - background: Rectangle { - radius: 2 - color: windowItem.cwtch_background_color - border.color: windowItem.cwtch_color - } -} diff --git a/qml/widgets/ToggleSwitch.qml b/qml/widgets/ToggleSwitch.qml deleted file mode 100644 index 4c151aae..00000000 --- a/qml/widgets/ToggleSwitch.qml +++ /dev/null @@ -1,32 +0,0 @@ -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtQuick 2.12 -import "../theme" - -// ToggleSwtch implements a stylized toggle switch. It requires the user create a function called onToggled to -// perform any additional operations needed to define the behavior of the toggle switch -Switch { - property bool isToggled - property var onToggled: function () { console.log("In Superclass") }; - - style: SwitchStyle { - handle: Rectangle { - implicitWidth: 25 - implicitHeight: 25 - radius: width*0.5 - color: Theme.toggleColor - border.color: isToggled ? Theme.toggleOnColor :Theme.toggleOffColor - border.width:5 - } - groove: Rectangle { - implicitWidth: 50 - implicitHeight: 25 - radius: 25*0.5 - color: isToggled ? Theme.toggleOnColor :Theme.toggleOffColor - } - } - - onClicked: function() {isToggled = !isToggled; onToggled()} -} - - diff --git a/qml/widgets/Toolbar.qml b/qml/widgets/Toolbar.qml deleted file mode 100644 index 70d373d7..00000000 --- a/qml/widgets/Toolbar.qml +++ /dev/null @@ -1,123 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 - -import "../fonts/Twemoji.js" as T -import "." as Widgets -import "../theme" - -Rectangle { // Global Toolbar - id: toolbar - - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - height: 35 * gcd.themeScale - - - Layout.minimumHeight: height - Layout.maximumHeight: height - color: Theme.backgroundMainColor - - property alias leftMenuVisible: btnLeftMenu.visible - property alias backVisible: btnLeftBack.visible - property alias rightMenuVisible: btnRightMenu.visible - - property alias titleWidth: paneArea.width - - - signal leftMenu() - signal back() - signal rightMenu() - - Icon { - id: btnLeftMenu - iconColor: Theme.toolbarIconColor - source: gcd.assetPath + "core/menu-24px.svg" - - - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - width: 30 - height: 30 - - onClicked: { leftMenu() } - } - - Icon { - id: btnLeftBack - iconColor: Theme.toolbarIconColor - source: gcd.assetPath + "core/chevron_left-24px.svg" - - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - width: 30 - height: 30 - - onClicked: { back() } - } - - - - Rectangle { - id: paneArea - anchors.right: parent.right - - EllipsisLabel { - id: paneTitle - - visible: true - anchors.left: undefined - anchors.right: undefined - anchors.horizontalCenter: parent.horizontalCenter - - color: Theme.mainTextColor - pixelSize: Theme.tabSize * gcd.themeScale - weight: Font.Bold - text: "global toolbar" - - //extraPadding: btnRightMenu.width + 10 - - } - - onWidthChanged: { paneTitle.textResize() } - } - - Icon { - id: btnRightMenu - iconColor: Theme.toolbarIconColor - source: gcd.assetPath + "core/more_vert-24px.svg" - - visible: false - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - width: 30 - height: 30 - - onClicked: { rightMenu() } - } - - function setTitle(text, width) { - paneTitle.text = text - paneArea.width = width - paneTitle.textResize() - paneTitle.visible = true - } - - function hideTitle() { - paneTitle.visible = false - } - - - Connections { - target: gcd - - onSetToolbarTitle: function(handle) { - setTitle(handle, theStack.width) - btnRightMenu.visible = true - } - } - -} diff --git a/qml/widgets/UnderlineTextField.qml b/qml/widgets/UnderlineTextField.qml deleted file mode 100644 index c5d26619..00000000 --- a/qml/widgets/UnderlineTextField.qml +++ /dev/null @@ -1,34 +0,0 @@ -import QtQuick 2.7 - -import QtQuick.Controls 2.13 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.12 -import "." as Widgets -import "../theme" - -// UnderlineTextField is a textfield styled as just an underline -TextField { - property alias backgroundColor: bg.color - - color: Theme.mainTextColor - font.pixelSize: Theme.secondaryTextSize * gcd.themeScale * gcd.themeScale - signal clicked - smooth: true - placeholderTextColor: Theme.altTextColor - - background: Rectangle { - id: bg - anchors.fill: parent - color: Theme.backgroundMainColor - border.color: color - } - - Rectangle { - id: bottomBar - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - height: 2 - color: Theme.mainTextColor - } -} diff --git a/qml/widgets/controls/FlagButton.qml b/qml/widgets/controls/FlagButton.qml deleted file mode 100644 index 760ed21c..00000000 --- a/qml/widgets/controls/FlagButton.qml +++ /dev/null @@ -1,43 +0,0 @@ -import QtGraphicalEffects 1.0 -import QtQuick 2.7 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -import QtQuick.Window 2.11 -import QtQuick.Controls 1.4 - -Rectangle { - width: img.width + 10 - height: img.height + 5 - property string emoji - color: selected ? windowItem.cwtch_color : windowItem.cwtch_background_color - property bool selected - property string locale - - - Image { - id: img - anchors.centerIn:parent - opacity: 1.0 - - - source: gcd.assetPath + "twemoji/72x72/" + emoji + ".png" - - - MouseArea { - anchors.fill: parent - - onClicked: { - gcd.setLocale(locale) - } - } - } - - Connections { - target: gcd - - onSupplySettings: function(zoom, newLocale) { - selected = newLocale == locale - } - } -} diff --git a/qml/widgets/controls/ImageButton.qml b/qml/widgets/controls/ImageButton.qml deleted file mode 100644 index b7665c0a..00000000 --- a/qml/widgets/controls/ImageButton.qml +++ /dev/null @@ -1,33 +0,0 @@ -import QtQuick 2.4 -import QtQuick.Controls 2.4 -import QtQuick.Controls.Material 2.0 -import QtQuick.Layouts 1.3 -Item { - id: root - property alias source: img.source - property int size: 24 - property string tooltip: "" - width: size - height: size - signal clicked() - - ToolTip.visible: tooltip != "" && ma.containsMouse - ToolTip.text: tooltip - - Image { - id: img - width: root.size * (ma.pressed ? 0.5 : 0.8) - height: root.size * (ma.pressed ? 0.5 : 0.8) - anchors.topMargin: ma.pressed ? 2 : 0 - anchors.leftMargin: anchors.topMargin - anchors.centerIn: parent - } - - MouseArea { - id: ma - anchors.fill: root - - onClicked: root.clicked() - hoverEnabled: tooltip != "" - } -} diff --git a/qml/widgets/controls/Loader.qml b/qml/widgets/controls/Loader.qml deleted file mode 100644 index 0aa71328..00000000 --- a/qml/widgets/controls/Loader.qml +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** -** -** The MIT License (MIT) -** -** Copyright (c) 2014 Ricardo do Valle Flores de Oliveira -** -** $BEGIN_LICENSE:MIT$ -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and associated documentation files (the "Software"), to deal -** in the Software without restriction, including without limitation the rights -** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -** copies of the Software, and to permit persons to whom the Software is -** furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -** SOFTWARE. -** -** $END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.0 - -FontLoader { - property string resource - property bool loaded: false - - source: resource - onStatusChanged: (status === FontLoader.Ready) ? loaded = true : loaded = false -} diff --git a/qml/widgets/controls/Variables.qml b/qml/widgets/controls/Variables.qml deleted file mode 100644 index c0f51dbd..00000000 --- a/qml/widgets/controls/Variables.qml +++ /dev/null @@ -1,580 +0,0 @@ -/**************************************************************************** -** -** The MIT License (MIT) -** -** Copyright (c) 2014 Ricardo do Valle Flores de Oliveira -** -** $BEGIN_LICENSE:MIT$ -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and associated documentation files (the "Software"), to deal -** in the Software without restriction, including without limitation the rights -** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -** copies of the Software, and to permit persons to whom the Software is -** furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -** SOFTWARE. -** -** $END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.0 - -QtObject { - readonly property string fa_adjust : "\uf042" - readonly property string fa_adn : "\uf170" - readonly property string fa_align_center : "\uf037" - readonly property string fa_align_justify : "\uf039" - readonly property string fa_align_left : "\uf036" - readonly property string fa_align_right : "\uf038" - readonly property string fa_ambulance : "\uf0f9" - readonly property string fa_anchor : "\uf13d" - readonly property string fa_android : "\uf17b" - readonly property string fa_angellist : "\uf209" - readonly property string fa_angle_double_down : "\uf103" - readonly property string fa_angle_double_left : "\uf100" - readonly property string fa_angle_double_right : "\uf101" - readonly property string fa_angle_double_up : "\uf102" - readonly property string fa_angle_down : "\uf107" - readonly property string fa_angle_left : "\uf104" - readonly property string fa_angle_right : "\uf105" - readonly property string fa_angle_up : "\uf106" - readonly property string fa_apple : "\uf179" - readonly property string fa_archive : "\uf187" - readonly property string fa_area_chart : "\uf1fe" - readonly property string fa_arrow_circle_down : "\uf0ab" - readonly property string fa_arrow_circle_left : "\uf0a8" - readonly property string fa_arrow_circle_o_down : "\uf01a" - readonly property string fa_arrow_circle_o_left : "\uf190" - readonly property string fa_arrow_circle_o_right : "\uf18e" - readonly property string fa_arrow_circle_o_up : "\uf01b" - readonly property string fa_arrow_circle_right : "\uf0a9" - readonly property string fa_arrow_circle_up : "\uf0aa" - readonly property string fa_arrow_down : "\uf063" - readonly property string fa_arrow_left : "\uf060" - readonly property string fa_arrow_right : "\uf061" - readonly property string fa_arrow_up : "\uf062" - readonly property string fa_arrows : "\uf047" - readonly property string fa_arrows_alt : "\uf0b2" - readonly property string fa_arrows_h : "\uf07e" - readonly property string fa_arrows_v : "\uf07d" - readonly property string fa_asterisk : "\uf069" - readonly property string fa_at : "\uf1fa" - readonly property string fa_automobile : "\uf1b9" - readonly property string fa_backward : "\uf04a" - readonly property string fa_ban : "\uf05e" - readonly property string fa_bank : "\uf19c" - readonly property string fa_bar_chart_o : "\uf080" - readonly property string fa_barcode : "\uf02a" - readonly property string fa_bars : "\uf0c9" - readonly property string fa_beer : "\uf0fc" - readonly property string fa_behance : "\uf1b4" - readonly property string fa_behance_square : "\uf1b5" - readonly property string fa_bell : "\uf0f3" - readonly property string fa_bell_o : "\uf0a2" - readonly property string fa_bell_slash : "\uf1f6" - readonly property string fa_bell_slash_o : "\uf1f7" - readonly property string fa_bicycle : "\uf206" - readonly property string fa_binoculars : "\uf1e5" - readonly property string fa_birthday_cake : "\uf1fd" - readonly property string fa_bitbucket : "\uf171" - readonly property string fa_bitbucket_square : "\uf172" - readonly property string fa_bitcoin : "\uf15a" - readonly property string fa_bold : "\uf032" - readonly property string fa_bolt : "\uf0e7" - readonly property string fa_bomb : "\uf1e2" - readonly property string fa_book : "\uf02d" - readonly property string fa_bookmark : "\uf02e" - readonly property string fa_bookmark_o : "\uf097" - readonly property string fa_briefcase : "\uf0b1" - readonly property string fa_btc : "\uf15a" - readonly property string fa_bug : "\uf188" - readonly property string fa_building : "\uf1ad" - readonly property string fa_building_o : "\uf0f7" - readonly property string fa_bullhorn : "\uf0a1" - readonly property string fa_bullseye : "\uf140" - readonly property string $fa_bus : "\uf207" - readonly property string fa_cab : "\uf1ba" - readonly property string $fa_calculator : "\uf1ec" - readonly property string fa_calendar : "\uf073" - readonly property string fa_calendar_o : "\uf133" - readonly property string fa_camera : "\uf030" - readonly property string fa_camera_retro : "\uf083" - readonly property string fa_car : "\uf1b9" - readonly property string fa_caret_down : "\uf0d7" - readonly property string fa_caret_left : "\uf0d9" - readonly property string fa_caret_right : "\uf0da" - readonly property string fa_caret_square_o_down : "\uf150" - readonly property string fa_caret_square_o_left : "\uf191" - readonly property string fa_caret_square_o_right : "\uf152" - readonly property string fa_caret_square_o_up : "\uf151" - readonly property string fa_caret_up : "\uf0d8" - readonly property string fa_cc : "\uf20a" - readonly property string fa_cc_amex : "\uf1f3" - readonly property string fa_cc_discover : "\uf1f2" - readonly property string fa_cc_mastercard : "\uf1f1" - readonly property string fa_cc_paypal : "\uf1f4" - readonly property string fa_cc_stripe : "\uf1f5" - readonly property string fa_cc_visa : "\uf1f0" - readonly property string fa_certificate : "\uf0a3" - readonly property string fa_chain : "\uf0c1" - readonly property string fa_chain_broken : "\uf127" - readonly property string fa_check : "\uf00c" - readonly property string fa_check_circle : "\uf058" - readonly property string fa_check_circle_o : "\uf05d" - readonly property string fa_check_square : "\uf14a" - readonly property string fa_check_square_o : "\uf046" - readonly property string fa_chevron_circle_down : "\uf13a" - readonly property string fa_chevron_circle_left : "\uf137" - readonly property string fa_chevron_circle_right : "\uf138" - readonly property string fa_chevron_circle_up : "\uf139" - readonly property string fa_chevron_down : "\uf078" - readonly property string fa_chevron_left : "\uf053" - readonly property string fa_chevron_right : "\uf054" - readonly property string fa_chevron_up : "\uf077" - readonly property string fa_child : "\uf1ae" - readonly property string fa_circle : "\uf111" - readonly property string fa_circle_o : "\uf10c" - readonly property string fa_circle_o_notch : "\uf1ce" - readonly property string fa_circle_thin : "\uf1db" - readonly property string fa_clipboard : "\uf0ea" - readonly property string fa_clock_o : "\uf017" - readonly property string fa_cloud : "\uf0c2" - readonly property string fa_cloud_download : "\uf0ed" - readonly property string fa_cloud_upload : "\uf0ee" - readonly property string fa_cny : "\uf157" - readonly property string fa_code : "\uf121" - readonly property string fa_code_fork : "\uf126" - readonly property string fa_codepen : "\uf1cb" - readonly property string fa_coffee : "\uf0f4" - readonly property string fa_cog : "\uf013" - readonly property string fa_cogs : "\uf085" - readonly property string fa_columns : "\uf0db" - readonly property string fa_comment : "\uf075" - readonly property string fa_comment_o : "\uf0e5" - readonly property string fa_comments : "\uf086" - readonly property string fa_comments_o : "\uf0e6" - readonly property string fa_compass : "\uf14e" - readonly property string fa_compress : "\uf066" - readonly property string fa_copy : "\uf0c5" - readonly property string fa_copyright : "\uf1f9" - readonly property string fa_credit_card : "\uf09d" - readonly property string fa_crop : "\uf125" - readonly property string fa_crosshairs : "\uf05b" - readonly property string fa_css3 : "\uf13c" - readonly property string fa_cube : "\uf1b2" - readonly property string fa_cubes : "\uf1b3" - readonly property string fa_cut : "\uf0c4" - readonly property string fa_cutlery : "\uf0f5" - readonly property string fa_dashboard : "\uf0e4" - readonly property string fa_database : "\uf1c0" - readonly property string fa_dedent : "\uf03b" - readonly property string fa_delicious : "\uf1a5" - readonly property string fa_desktop : "\uf108" - readonly property string fa_deviantart : "\uf1bd" - readonly property string fa_digg : "\uf1a6" - readonly property string fa_dollar : "\uf155" - readonly property string fa_dot_circle_o : "\uf192" - readonly property string fa_download : "\uf019" - readonly property string fa_dribbble : "\uf17d" - readonly property string fa_dropbox : "\uf16b" - readonly property string fa_drupal : "\uf1a9" - readonly property string fa_edit : "\uf044" - readonly property string fa_eject : "\uf052" - readonly property string fa_ellipsis_h : "\uf141" - readonly property string fa_ellipsis_v : "\uf142" - readonly property string fa_empire : "\uf1d1" - readonly property string fa_envelope : "\uf0e0" - readonly property string fa_envelope_o : "\uf003" - readonly property string fa_envelope_square : "\uf199" - readonly property string fa_eraser : "\uf12d" - readonly property string fa_eur : "\uf153" - readonly property string fa_euro : "\uf153" - readonly property string fa_exchange : "\uf0ec" - readonly property string fa_exclamation : "\uf12a" - readonly property string fa_exclamation_circle : "\uf06a" - readonly property string fa_exclamation_triangle : "\uf071" - readonly property string fa_expand : "\uf065" - readonly property string fa_external_link : "\uf08e" - readonly property string fa_external_link_square : "\uf14c" - readonly property string fa_eye : "\uf06e" - readonly property string fa_eye_slash : "\uf070" - readonly property string fa_eyedropper : "\uf1fb" - readonly property string fa_facebook : "\uf09a" - readonly property string fa_facebook_square : "\uf082" - readonly property string fa_fast_backward : "\uf049" - readonly property string fa_fast_forward : "\uf050" - readonly property string fa_fax : "\uf1ac" - readonly property string fa_female : "\uf182" - readonly property string fa_fighter_jet : "\uf0fb" - readonly property string fa_file : "\uf15b" - readonly property string fa_file_archive_o : "\uf1c6" - readonly property string fa_file_audio_o : "\uf1c7" - readonly property string fa_file_code_o : "\uf1c9" - readonly property string fa_file_excel_o : "\uf1c3" - readonly property string fa_file_image_o : "\uf1c5" - readonly property string fa_file_movie_o : "\uf1c8" - readonly property string fa_file_o : "\uf016" - readonly property string fa_file_pdf_o : "\uf1c1" - readonly property string fa_file_photo_o : "\uf1c5" - readonly property string fa_file_picture_o : "\uf1c5" - readonly property string fa_file_powerpoint_o : "\uf1c4" - readonly property string fa_file_sound_o : "\uf1c7" - readonly property string fa_file_text : "\uf15c" - readonly property string fa_file_text_o : "\uf0f6" - readonly property string fa_file_video_o : "\uf1c8" - readonly property string fa_file_word_o : "\uf1c2" - readonly property string fa_file_zip_o : "\uf1c6" - readonly property string fa_files_o : "\uf0c5" - readonly property string fa_film : "\uf008" - readonly property string fa_filter : "\uf0b0" - readonly property string fa_fire : "\uf06d" - readonly property string fa_fire_extinguisher : "\uf134" - readonly property string fa_flag : "\uf024" - readonly property string fa_flag_checkered : "\uf11e" - readonly property string fa_flag_o : "\uf11d" - readonly property string fa_flash : "\uf0e7" - readonly property string fa_flask : "\uf0c3" - readonly property string fa_flickr : "\uf16e" - readonly property string fa_floppy_o : "\uf0c7" - readonly property string fa_folder : "\uf07b" - readonly property string fa_folder_o : "\uf114" - readonly property string fa_folder_open : "\uf07c" - readonly property string fa_folder_open_o : "\uf115" - readonly property string fa_font : "\uf031" - readonly property string fa_forward : "\uf04e" - readonly property string fa_foursquare : "\uf180" - readonly property string fa_frown_o : "\uf119" - readonly property string fa_futbol_o : "\uf1e3" - readonly property string fa_gamepad : "\uf11b" - readonly property string fa_gavel : "\uf0e3" - readonly property string fa_gbp : "\uf154" - readonly property string fa_ge : "\uf1d1" - readonly property string fa_gear : "\uf013" - readonly property string fa_gears : "\uf085" - readonly property string fa_gift : "\uf06b" - readonly property string fa_git : "\uf1d3" - readonly property string fa_git_square : "\uf1d2" - readonly property string fa_github : "\uf09b" - readonly property string fa_github_alt : "\uf113" - readonly property string fa_github_square : "\uf092" - readonly property string fa_gittip : "\uf184" - readonly property string fa_glass : "\uf000" - readonly property string fa_globe : "\uf0ac" - readonly property string fa_google : "\uf1a0" - readonly property string fa_google_plus : "\uf0d5" - readonly property string fa_google_plus_square : "\uf0d4" - readonly property string fa_google_wallet : "\uf1ee" - readonly property string fa_graduation_cap : "\uf19d" - readonly property string fa_group : "\uf0c0" - readonly property string fa_h_square : "\uf0fd" - readonly property string fa_hacker_news : "\uf1d4" - readonly property string fa_hand_o_down : "\uf0a7" - readonly property string fa_hand_o_left : "\uf0a5" - readonly property string fa_hand_o_right : "\uf0a4" - readonly property string fa_hand_o_up : "\uf0a6" - readonly property string fa_hdd_o : "\uf0a0" - readonly property string fa_header : "\uf1dc" - readonly property string fa_headphones : "\uf025" - readonly property string fa_heart : "\uf004" - readonly property string fa_heart_o : "\uf08a" - readonly property string fa_history : "\uf1da" - readonly property string fa_home : "\uf015" - readonly property string fa_hospital_o : "\uf0f8" - readonly property string fa_html5 : "\uf13b" - readonly property string fa_ils : "\uf20b" - readonly property string fa_image : "\uf03e" - readonly property string fa_inbox : "\uf01c" - readonly property string fa_indent : "\uf03c" - readonly property string fa_info : "\uf129" - readonly property string fa_info_circle : "\uf05a" - readonly property string fa_inr : "\uf156" - readonly property string fa_instagram : "\uf16d" - readonly property string fa_institution : "\uf19c" - readonly property string fa_ioxhost : "\uf208" - readonly property string fa_italic : "\uf033" - readonly property string fa_joomla : "\uf1aa" - readonly property string fa_jpy : "\uf157" - readonly property string fa_jsfiddle : "\uf1cc" - readonly property string fa_key : "\uf084" - readonly property string fa_keyboard_o : "\uf11c" - readonly property string fa_krw : "\uf159" - readonly property string fa_language : "\uf1ab" - readonly property string fa_laptop : "\uf109" - readonly property string fa_lastfm : "\uf202" - readonly property string fa_lastfm_square : "\uf203" - readonly property string fa_leaf : "\uf06c" - readonly property string fa_legal : "\uf0e3" - readonly property string fa_lemon_o : "\uf094" - readonly property string fa_level_down : "\uf149" - readonly property string fa_level_up : "\uf148" - readonly property string fa_life_bouy : "\uf1cd" - readonly property string fa_life_buoy : "\uf1cd" - readonly property string fa_life_ring : "\uf1cd" - readonly property string fa_life_saver : "\uf1cd" - readonly property string fa_lightbulb_o : "\uf0eb" - readonly property string fa_line_chart : "\uf201" - readonly property string fa_link : "\uf0c1" - readonly property string fa_linkedin : "\uf0e1" - readonly property string fa_linkedin_square : "\uf08c" - readonly property string fa_linux : "\uf17c" - readonly property string fa_list : "\uf03a" - readonly property string fa_list_alt : "\uf022" - readonly property string fa_list_ol : "\uf0cb" - readonly property string fa_list_ul : "\uf0ca" - readonly property string fa_location_arrow : "\uf124" - readonly property string fa_lock : "\uf023" - readonly property string fa_long_arrow_down : "\uf175" - readonly property string fa_long_arrow_left : "\uf177" - readonly property string fa_long_arrow_right : "\uf178" - readonly property string fa_long_arrow_up : "\uf176" - readonly property string fa_magic : "\uf0d0" - readonly property string fa_magnet : "\uf076" - readonly property string fa_mail_forward : "\uf064" - readonly property string fa_mail_reply : "\uf112" - readonly property string fa_mail_reply_all : "\uf122" - readonly property string fa_male : "\uf183" - readonly property string fa_map_marker : "\uf041" - readonly property string fa_maxcdn : "\uf136" - readonly property string fa_meanpath : "\uf20c" - readonly property string fa_medkit : "\uf0fa" - readonly property string fa_meh_o : "\uf11a" - readonly property string fa_microphone : "\uf130" - readonly property string fa_microphone_slash : "\uf131" - readonly property string fa_minus : "\uf068" - readonly property string fa_minus_circle : "\uf056" - readonly property string fa_minus_square : "\uf146" - readonly property string fa_minus_square_o : "\uf147" - readonly property string fa_mobile : "\uf10b" - readonly property string fa_mobile_phone : "\uf10b" - readonly property string fa_money : "\uf0d6" - readonly property string fa_moon_o : "\uf186" - readonly property string fa_mortar_board : "\uf19d" - readonly property string fa_music : "\uf001" - readonly property string fa_navicon : "\uf0c9" - readonly property string fa_newspaper_o : "\uf1ea" - readonly property string fa_openid : "\uf19b" - readonly property string fa_outdent : "\uf03b" - readonly property string fa_pagelines : "\uf18c" - readonly property string fa_paint_brush : "\uf1fc" - readonly property string fa_paper_plane : "\uf1d8" - readonly property string fa_paper_plane_o : "\uf1d9" - readonly property string fa_paperclip : "\uf0c6" - readonly property string fa_paragraph : "\uf1dd" - readonly property string fa_paste : "\uf0ea" - readonly property string fa_pause : "\uf04c" - readonly property string fa_paw : "\uf1b0" - readonly property string fa_paypal : "\uf1ed" - readonly property string fa_pencil : "\uf040" - readonly property string fa_pencil_square : "\uf14b" - readonly property string fa_pencil_square_o : "\uf044" - readonly property string fa_phone : "\uf095" - readonly property string fa_phone_square : "\uf098" - readonly property string fa_photo : "\uf03e" - readonly property string fa_picture_o : "\uf03e" - readonly property string fa_pie_chart : "\uf200" - readonly property string fa_pied_piper : "\uf1a7" - readonly property string fa_pied_piper_alt : "\uf1a8" - readonly property string fa_pinterest : "\uf0d2" - readonly property string fa_pinterest_square : "\uf0d3" - readonly property string fa_plane : "\uf072" - readonly property string fa_play : "\uf04b" - readonly property string fa_play_circle : "\uf144" - readonly property string fa_play_circle_o : "\uf01d" - readonly property string fa_plug : "\uf1e6" - readonly property string fa_plus : "\uf067" - readonly property string fa_plus_circle : "\uf055" - readonly property string fa_plus_square : "\uf0fe" - readonly property string fa_plus_square_o : "\uf196" - readonly property string fa_power_off : "\uf011" - readonly property string fa_print : "\uf02f" - readonly property string fa_puzzle_piece : "\uf12e" - readonly property string fa_qq : "\uf1d6" - readonly property string fa_qrcode : "\uf029" - readonly property string fa_question : "\uf128" - readonly property string fa_question_circle : "\uf059" - readonly property string fa_quote_left : "\uf10d" - readonly property string fa_quote_right : "\uf10e" - readonly property string fa_ra : "\uf1d0" - readonly property string fa_random : "\uf074" - readonly property string fa_rebel : "\uf1d0" - readonly property string fa_recycle : "\uf1b8" - readonly property string fa_reddit : "\uf1a1" - readonly property string fa_reddit_square : "\uf1a2" - readonly property string fa_refresh : "\uf021" - readonly property string fa_remove : "\uf00d" - readonly property string fa_renren : "\uf18b" - readonly property string fa_reorder : "\uf0c9" - readonly property string fa_repeat : "\uf01e" - readonly property string fa_reply : "\uf112" - readonly property string fa_reply_all : "\uf122" - readonly property string fa_retweet : "\uf079" - readonly property string fa_rmb : "\uf157" - readonly property string fa_road : "\uf018" - readonly property string fa_rocket : "\uf135" - readonly property string fa_rotate_left : "\uf0e2" - readonly property string fa_rotate_right : "\uf01e" - readonly property string fa_rouble : "\uf158" - readonly property string fa_rss : "\uf09e" - readonly property string fa_rss_square : "\uf143" - readonly property string fa_rub : "\uf158" - readonly property string fa_ruble : "\uf158" - readonly property string fa_rupee : "\uf156" - readonly property string fa_save : "\uf0c7" - readonly property string fa_scissors : "\uf0c4" - readonly property string fa_search : "\uf002" - readonly property string fa_search_minus : "\uf010" - readonly property string fa_search_plus : "\uf00e" - readonly property string fa_send : "\uf1d8" - readonly property string fa_send_o : "\uf1d9" - readonly property string fa_share : "\uf064" - readonly property string fa_share_alt : "\uf1e0" - readonly property string fa_share_alt_square : "\uf1e1" - readonly property string fa_share_square : "\uf14d" - readonly property string fa_share_square_o : "\uf045" - readonly property string fa_shekel : "\uf20b" - readonly property string fa_sheqel : "\uf20b" - readonly property string fa_shield : "\uf132" - readonly property string fa_shopping_cart : "\uf07a" - readonly property string fa_sign_in : "\uf090" - readonly property string fa_sign_out : "\uf08b" - readonly property string fa_signal : "\uf012" - readonly property string fa_sitemap : "\uf0e8" - readonly property string fa_skype : "\uf17e" - readonly property string fa_slack : "\uf198" - readonly property string fa_sliders : "\uf1de" - readonly property string fa_slideshare : "\uf1e7" - readonly property string fa_smile_o : "\uf118" - readonly property string fa_soccer_ball_o : "\uf1e3" - readonly property string fa_sort : "\uf0dc" - readonly property string fa_sort_alpha_asc : "\uf15d" - readonly property string fa_sort_alpha_desc : "\uf15e" - readonly property string fa_sort_amount_asc : "\uf160" - readonly property string fa_sort_amount_desc : "\uf161" - readonly property string fa_sort_asc : "\uf0de" - readonly property string fa_sort_desc : "\uf0dd" - readonly property string fa_sort_down : "\uf0dd" - readonly property string fa_sort_numeric_asc : "\uf162" - readonly property string fa_sort_numeric_desc : "\uf163" - readonly property string fa_sort_up : "\uf0de" - readonly property string fa_soundcloud : "\uf1be" - readonly property string fa_space_shuttle : "\uf197" - readonly property string fa_spinner : "\uf110" - readonly property string fa_spoon : "\uf1b1" - readonly property string fa_spotify : "\uf1bc" - readonly property string fa_square : "\uf0c8" - readonly property string fa_square_o : "\uf096" - readonly property string fa_stack_exchange : "\uf18d" - readonly property string fa_stack_overflow : "\uf16c" - readonly property string fa_star : "\uf005" - readonly property string fa_star_half : "\uf089" - readonly property string fa_star_half_empty : "\uf123" - readonly property string fa_star_half_full : "\uf123" - readonly property string fa_star_half_o : "\uf123" - readonly property string fa_star_o : "\uf006" - readonly property string fa_steam : "\uf1b6" - readonly property string fa_steam_square : "\uf1b7" - readonly property string fa_step_backward : "\uf048" - readonly property string fa_step_forward : "\uf051" - readonly property string fa_stethoscope : "\uf0f1" - readonly property string fa_stop : "\uf04d" - readonly property string fa_strikethrough : "\uf0cc" - readonly property string fa_stumbleupon : "\uf1a4" - readonly property string fa_stumbleupon_circle : "\uf1a3" - readonly property string fa_subscript : "\uf12c" - readonly property string fa_suitcase : "\uf0f2" - readonly property string fa_sun_o : "\uf185" - readonly property string fa_superscript : "\uf12b" - readonly property string fa_support : "\uf1cd" - readonly property string fa_table : "\uf0ce" - readonly property string fa_tablet : "\uf10a" - readonly property string fa_tachometer : "\uf0e4" - readonly property string fa_tag : "\uf02b" - readonly property string fa_tags : "\uf02c" - readonly property string fa_tasks : "\uf0ae" - readonly property string fa_taxi : "\uf1ba" - readonly property string fa_tencent_weibo : "\uf1d5" - readonly property string fa_terminal : "\uf120" - readonly property string fa_text_height : "\uf034" - readonly property string fa_text_width : "\uf035" - readonly property string fa_th : "\uf00a" - readonly property string fa_th_large : "\uf009" - readonly property string fa_th_list : "\uf00b" - readonly property string fa_thumb_tack : "\uf08d" - readonly property string fa_thumbs_down : "\uf165" - readonly property string fa_thumbs_o_down : "\uf088" - readonly property string fa_thumbs_o_up : "\uf087" - readonly property string fa_thumbs_up : "\uf164" - readonly property string fa_ticket : "\uf145" - readonly property string fa_times : "\uf00d" - readonly property string fa_times_circle : "\uf057" - readonly property string fa_times_circle_o : "\uf05c" - readonly property string fa_tint : "\uf043" - readonly property string fa_toggle_down : "\uf150" - readonly property string fa_toggle_left : "\uf191" - readonly property string fa_toggle_off : "\uf204" - readonly property string fa_toggle_on : "\uf205" - readonly property string fa_toggle_right : "\uf152" - readonly property string fa_toggle_up : "\uf151" - readonly property string fa_trash : "\uf1f8" - readonly property string fa_trash_o : "\uf014" - readonly property string fa_tree : "\uf1bb" - readonly property string fa_trello : "\uf181" - readonly property string fa_trophy : "\uf091" - readonly property string fa_truck : "\uf0d1" - readonly property string fa_try : "\uf195" - readonly property string fa_tty : "\uf1e4" - readonly property string fa_tumblr : "\uf173" - readonly property string fa_tumblr_square : "\uf174" - readonly property string fa_turkish_lira : "\uf195" - readonly property string fa_twitch : "\uf1e8" - readonly property string fa_twitter : "\uf099" - readonly property string fa_twitter_square : "\uf081" - readonly property string fa_umbrella : "\uf0e9" - readonly property string fa_underline : "\uf0cd" - readonly property string fa_undo : "\uf0e2" - readonly property string fa_university : "\uf19c" - readonly property string fa_unlink : "\uf127" - readonly property string fa_unlock : "\uf09c" - readonly property string fa_unlock_alt : "\uf13e" - readonly property string fa_unsorted : "\uf0dc" - readonly property string fa_upload : "\uf093" - readonly property string fa_usd : "\uf155" - readonly property string fa_user : "\uf007" - readonly property string fa_user_md : "\uf0f0" - readonly property string fa_users : "\uf0c0" - readonly property string fa_video_camera : "\uf03d" - readonly property string fa_vimeo_square : "\uf194" - readonly property string fa_vine : "\uf1ca" - readonly property string fa_vk : "\uf189" - readonly property string fa_volume_down : "\uf027" - readonly property string fa_volume_off : "\uf026" - readonly property string fa_volume_up : "\uf028" - readonly property string fa_warning : "\uf071" - readonly property string fa_wechat : "\uf1d7" - readonly property string fa_weibo : "\uf18a" - readonly property string fa_weixin : "\uf1d7" - readonly property string fa_wheelchair : "\uf193" - readonly property string fa_wifi : "\uf1eb" - readonly property string fa_windows : "\uf17a" - readonly property string fa_won : "\uf159" - readonly property string fa_wordpress : "\uf19a" - readonly property string fa_wrench : "\uf0ad" - readonly property string fa_xing : "\uf168" - readonly property string fa_xing_square : "\uf169" - readonly property string fa_yahoo : "\uf19e" - readonly property string fa_yelp : "\uf1e9" - readonly property string fa_yen : "\uf157" - readonly property string fa_youtube : "\uf167" - readonly property string fa_youtube_play : "\uf16a" - readonly property string fa_youtube_square : "\uf166" -}