diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..6fe414b --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,49 @@ +version: 2 +jobs: + build: + docker: + - image: circleci/python:3.6 + steps: + - checkout + - run: python setup.py install + test27: + docker: + - image: circleci/python:2.7 + steps: + - checkout + - run: python setup.py test + test33: + docker: + - image: circleci/python:3.3 + steps: + - checkout + - run: sudo pip3 install setuptools_scm + - run: python setup.py test + test34: + docker: + - image: circleci/python:3.4 + steps: + - checkout + - run: python setup.py test + test35: + docker: + - image: circleci/python:3.5 + steps: + - checkout + - run: python setup.py test + test36: + docker: + - image: circleci/python:3.6 + steps: + - checkout + - run: python setup.py test + +workflows: + version: 2 + test_all_envs: + jobs: + - test27 + - test33 + - test34 + - test35 + - test36 \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..543fffc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,56 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + + +# dotenv +.env + +# Rope project settings +.ropeproject + +# Vim +Session.vim + +# Pycharm +.idea + +# junk +blocks.json + +# sqlite db for testing +local.db +/tests/fastest-test.sh +/tests/sbds-install.sh +/tests/test.sh +/tests/fast-test.sh +/tests/sync.sh +/tests/failed_blocks/ +/envd +!/sbds.egg-info/ +/tests/envdir-to-envfile.sh +*.db +envfile +/deploy diff --git a/.gitignore b/.gitignore index 901860e..b990971 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ README.rst +.vagrant # Byte-compiled / optimized / DLL files __pycache__/ @@ -113,3 +114,5 @@ tests/failed_blocks/ /tests/envdir-to-envfile.sh /deploy/ /test.py + +.DS_Store diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 92ecc6d..0000000 --- a/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -FROM phusion/baseimage:0.9.19 - -# Standard stuff -ENV LANG en_US.UTF-8 -ENV LC_ALL en_US.UTF-8 - -# Stuff for building steem-python -ARG BUILD_ROOT=/buildroot -ARG BUILD_OUTPUT=${BUILD_ROOT}/build - -# Now we install the essentials -RUN \ - apt-get update && \ - apt-get install -y \ - build-essential \ - git \ - libffi-dev \ - libssl-dev \ - make \ - python3 \ - python3-dev \ - python3-pip \ - libxml2-dev \ - libxslt-dev \ - runit \ - wget \ - pandoc - -# This updates the distro-provided pip and gives us pip3.5 binary -RUN python3.5 -m pip install --upgrade pip - -# We use pipenv to setup stuff -RUN python3.5 -m pip install -U pipenv - -WORKDIR ${BUILD_ROOT} - -# Copy just enough to build python dependencies in pipenv -COPY ./Pipfile ${BUILD_ROOT}/Pipfile - -# Install the dependencies found in the lockfile here -RUN cd ${BUILD_ROOT} && \ - python3.5 -m pipenv lock --three --hashes && \ - python3.5 -m pipenv lock --three -r >requirements.txt && \ - python3.5 -m pip install -r requirements.txt - -# Copy rest of the code into place -COPY . ${BUILD_ROOT}/src - -WORKDIR ${BUILD_ROOT}/src - -# Do build+install -RUN cd ${BUILD_ROOT}/src && \ - make build-without-docker && \ - make install-global && \ - make install-pipenv - -WORKDIR ${BUILD_ROOT}/src - - diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 1cb0cd7..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -include package_meta.py -include Pipfile -include Pipfile.lock diff --git a/Makefile b/Makefile index aa5ff10..2379204 100644 --- a/Makefile +++ b/Makefile @@ -1,64 +1,18 @@ -ROOT_DIR := . -DOCS_DIR := $(ROOT_DIR)/docs -DOCS_BUILD_DIR := $(DOCS_DIR)/_build +PROJECT := $(shell basename $(shell pwd)) +PYTHON_FILES := steem steembase tests setup.py -PROJECT_NAME := steem-python -PROJECT_DOCKER_TAG := steemit/$(PROJECT_NAME) +.PHONY: clean test fmt install +clean: + rm -rf build/ dist/ *.egg-info .eggs/ .tox/ \ + __pycache__/ .cache/ .coverage htmlcov src -default: install-global +test: clean + python setup.py test -.PHONY: docker-image build-without-docker test-without-lint test-pylint test-without-build install-pipenv install-global clean clean-build +fmt: + yapf --recursive --in-place --style pep8 $(PYTHON_FILES) + pycodestyle $(PYTHON_FILES) -docker-image: clean - docker build -t $(PROJECT_DOCKER_TAG) . - -Pipfile.lock: Pipfile - pipenv lock --three --hashes - -requirements.txt: Pipfile.lock - pipenv lock -r >requirements.txt - -build-without-docker: requirements.txt Pipfile.lock - mkdir -p build/wheel - pipenv install --three --dev - pipenv run python3.6 scripts/doc_rst_convert.py - pipenv run python3.6 setup.py build - rm README.rst - -dockerised-test: docker-image - docker run -ti $(PROJECT_DOCKER_TAG) make -C /buildroot/src build-without-docker install-pipenv test-without-build - -test: build-without-docker test-without-build - -test-without-build: test-without-lint test-pylint - -test-without-lint: - pipenv run pytest -v - -test-pylint: - pipenv run pytest -v --pylint - -clean: clean-build clean-pyc - rm -rf requirements.txt - -clean-build: - rm -fr build/ dist/ *.egg-info .eggs/ .tox/ __pycache__/ .cache/ .coverage htmlcov src - -clean-pyc: - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - -install-pipenv: clean - pipenv run pip3.6 install -e . - -install-global: clean - python3.6 scripts/doc_rst_convert.py - pip3.6 install -e . - -pypi: - python3.6 scripts/doc_rst_convert.py - python3.6 setup.py bdist_wheel --universal - python3.6 setup.py sdist bdist_wheel upload - rm README.rst +install: + python setup.py install diff --git a/Pipfile b/Pipfile deleted file mode 100644 index e1ffe1e..0000000 --- a/Pipfile +++ /dev/null @@ -1,40 +0,0 @@ -[[source]] -verify_ssl = true -url = "https://pypi.python.org/simple" - -[requires] -python_version = "3.6" - -[packages] -appdirs = "*" -ecdsa = "*" -pylibscrypt = "*" -scrypt = "*" -pycrypto = "*" -requests = "*" -urllib3 = "*" -certifi = "*" -ujson = "*" -w3lib = "*" -maya = "*" -toolz = "*" -funcy = "*" -langdetect = "*" -diff-match-patch = "*" -voluptuous = "*" -PrettyTable = "*" -pipfile = "*" - -[dev-packages] -pep8 = "*" -pytest = "*" -pytest-pylint = "*" -pypandoc = "*" -recommonmark = "*" -sphinxcontrib-programoutput = "*" -sphinxcontrib-restbuilder = "*" -yapf = "*" -autopep8 = "*" -setuptools = "*" -wheel = "*" -Sphinx = "*" diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index ce80ccb..0000000 --- a/Pipfile.lock +++ /dev/null @@ -1,296 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "ac976db966433db818770e2f7ae10be65b8e28806d9e2e2ce43ec7dadf30d256" - }, - "requires": { - "python_version": "3.6" - }, - "sources": [ - { - "url": "https://pypi.python.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "appdirs": { - "hash": "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e", - "version": "==1.4.3" - }, - "certifi": { - "hash": "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704", - "version": "==2017.7.27.1" - }, - "chardet": { - "hash": "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691", - "version": "==3.0.4" - }, - "dateparser": { - "hash": "sha256:e2629d2f8361722c6047138ca085256c9f2cf5cc657fd66122aa0564afa4dc33", - "version": "==0.6.0" - }, - "diff-match-patch": { - "hash": "sha256:9dba5611fbf27893347349fd51cc1911cb403682a7163373adacc565d11e2e4c", - "version": "==20121119" - }, - "ecdsa": { - "hash": "sha256:40d002cf360d0e035cf2cb985e1308d41aaa087cbfc135b2dc2d844296ea546c", - "version": "==0.13" - }, - "funcy": { - "hash": "sha256:a33ea9ccdc5d81ad68caff20d3b0cc232b15de5574d22c239784facaf567a9bc", - "version": "==1.9.1" - }, - "humanize": { - "hash": "sha256:a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19", - "version": "==0.5.1" - }, - "idna": { - "hash": "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4", - "version": "==2.6" - }, - "langdetect": { - "hash": "sha256:91a170d5f0ade380db809b3ba67f08e95fe6c6c8641f96d67a51ff7e98a9bf30", - "version": "==1.0.7" - }, - "maya": { - "hash": "sha256:b22d22837f921b8cbe884b6a288d9f795c58d9d9165e4a9ff80df102914e2e49", - "version": "==0.3.3" - }, - "pendulum": { - "hash": "sha256:ea71a4a8f667a986aeb7621f6d240c81d16680e87df324a5aed6cb33e16e55ec", - "version": "==1.3.0" - }, - "pipfile": { - "hash": "sha256:f7d9f15de8b660986557eb3cc5391aa1a16207ac41bc378d03f414762d36c984", - "version": "==0.0.2" - }, - "prettytable": { - "hash": "sha256:a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f", - "version": "==0.7.2" - }, - "pycrypto": { - "hash": "sha256:f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c", - "version": "==2.6.1" - }, - "pylibscrypt": { - "hash": "sha256:b389df5760df03fa5fdda3be7738cc66f29e4edaaba695f1f44e5815f9f4b484", - "version": "==1.6.1" - }, - "python-dateutil": { - "hash": "sha256:95511bae634d69bc7329ba55e646499a842bc4ec342ad54a8cdb65645a0aad3c", - "version": "==2.6.1" - }, - "pytz": { - "hash": "sha256:d1d6729c85acea5423671382868627129432fba9a89ecbb248d8d1c7a9f01c67", - "version": "==2017.2" - }, - "pytzdata": { - "hash": "sha256:bd19fd653f89e498f1d4f9390d96456ce26ecd293a5e7405120a5de875d3314c", - "version": "==2017.2.2" - }, - "regex": { - "hash": "sha256:80166c9e21c0171c7b502035f3ba25f43b5122def387ca6ba9706b6892fed7aa", - "version": "==2017.09.23" - }, - "requests": { - "hash": "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", - "version": "==2.18.4" - }, - "ruamel.yaml": { - "hash": "sha256:d92d90c9bc0945223e47223a67808dd97ac9390ed914cc6871479b7ba489e607", - "version": "==0.15.34" - }, - "scrypt": { - "hash": "sha256:d4a5a4f53450b8ef629bbf1ee4be6105c69936e49b3d8bc621ac2287f0c86020", - "version": "==0.8.0" - }, - "six": { - "hash": "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb", - "version": "==1.11.0" - }, - "toml": { - "hash": "sha256:e1e8c220046889234df5ec688d6f97b734fc4a08a6d8edfc176f4e6abf90cfb5", - "version": "==0.9.3.1" - }, - "toolz": { - "hash": "sha256:4a13c90c426001d6299c5568cf5b98e095df9c985df194008a67f84ef4fc6c50", - "version": "==0.8.2" - }, - "tzlocal": { - "hash": "sha256:05a2908f7fb1ba8843f03b2360d6ad314dbf2bce4644feb702ccd38527e13059", - "version": "==1.4" - }, - "ujson": { - "hash": "sha256:f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86", - "version": "==1.35" - }, - "urllib3": { - "hash": "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", - "version": "==1.22" - }, - "voluptuous": { - "hash": "sha256:7a7466f8dc3666a292d186d1d871a47bf2120836ccb900d5ba904674957a2396", - "version": "==0.10.5" - }, - "w3lib": { - "hash": "sha256:7b661935805b7d39afe90bb32dec8e4d20b377e74c66597eb1ddfad10071938e", - "version": "==1.18.0" - } - }, - "develop": { - "alabaster": { - "hash": "sha256:2eef172f44e8d301d25aff8068fddd65f767a3f04b5f15b0f4922f113aa1c732", - "version": "==0.7.10" - }, - "astroid": { - "hash": "sha256:39a21dd2b5d81a6731dc0ac2884fa419532dffd465cdd43ea6c168d36b76efb3", - "version": "==1.5.3" - }, - "autopep8": { - "hash": "sha256:eb1685527355809967a0363572289303dc05f4b05edbeee4c9051762103e0ee6", - "version": "==1.3.2" - }, - "babel": { - "hash": "sha256:f20b2acd44f587988ff185d8949c3e208b4b3d5d20fcab7d91fe481ffa435528", - "version": "==2.5.1" - }, - "certifi": { - "hash": "sha256:54a07c09c586b0e4c619f02a5e94e36619da8e2b053e20f594348c0611803704", - "version": "==2017.7.27.1" - }, - "chardet": { - "hash": "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691", - "version": "==3.0.4" - }, - "commonmark": { - "hash": "sha256:34d73ec8085923c023930dfc0bcd1c4286e28a2a82de094bb72fabcc0281cbe5", - "version": "==0.5.4" - }, - "docutils": { - "hash": "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", - "version": "==0.14" - }, - "idna": { - "hash": "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4", - "version": "==2.6" - }, - "imagesize": { - "hash": "sha256:6ebdc9e0ad188f9d1b2cdd9bc59cbe42bf931875e829e7a595e6b3abdc05cdfb", - "version": "==0.7.1" - }, - "isort": { - "hash": "sha256:cd5d3fc2c16006b567a17193edf4ed9830d9454cbeb5a42ac80b36ea00c23db4", - "version": "==4.2.15" - }, - "jinja2": { - "hash": "sha256:2231bace0dfd8d2bf1e5d7e41239c06c9e0ded46e70cc1094a0aa64b0afeb054", - "version": "==2.9.6" - }, - "lazy-object-proxy": { - "hash": "sha256:7bd527f36a605c914efca5d3d014170b2cb184723e423d26b1fb2fd9108e264d", - "version": "==1.3.1" - }, - "markupsafe": { - "hash": "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665", - "version": "==1.0" - }, - "mccabe": { - "hash": "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "version": "==0.6.1" - }, - "pep8": { - "hash": "sha256:4fc2e478addcf17016657dff30b2d8d611e8341fac19ccf2768802f6635d7b8a", - "version": "==1.7.0" - }, - "pip": { - "hash": "sha256:690b762c0a8460c303c089d5d0be034fb15a5ea2b75bdf565f40421f542fefb0", - "version": "==9.0.1" - }, - "py": { - "hash": "sha256:2ccb79b01769d99115aa600d7eed99f524bf752bba8f041dc1c184853514655a", - "version": "==1.4.34" - }, - "pycodestyle": { - "hash": "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9", - "version": "==2.3.1" - }, - "pygments": { - "hash": "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", - "version": "==2.2.0" - }, - "pylint": { - "hash": "sha256:948679535a28afc54afb9210dabc6973305409042ece8e5768ca1409910c1ed8", - "version": "==1.7.4" - }, - "pypandoc": { - "hash": "sha256:e914e6d5f84a76764887e4d909b09d63308725f0cbb5293872c2c92f07c11a5b", - "version": "==1.4" - }, - "pytest": { - "hash": "sha256:81a25f36a97da3313e1125fce9e7bbbba565bc7fec3c5beb14c262ddab238ac1", - "version": "==3.2.3" - }, - "pytest-pylint": { - "hash": "sha256:ec63f7c4c05331654ab54fda8e68b8a11512009d506a8e35ee9b6d40a359356d", - "version": "==0.7.1" - }, - "pytz": { - "hash": "sha256:d1d6729c85acea5423671382868627129432fba9a89ecbb248d8d1c7a9f01c67", - "version": "==2017.2" - }, - "recommonmark": { - "hash": "sha256:cd8bf902e469dae94d00367a8197fb7b81fcabc9cfb79d520e0d22d0fbeaa8b7", - "version": "==0.4.0" - }, - "requests": { - "hash": "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", - "version": "==2.18.4" - }, - "setuptools": { - "hash": "sha256:ef824aefbd20dc364891836b75a19386dcf2f4235bf7d80531a8517ab29d0602", - "version": "==36.5.0" - }, - "six": { - "hash": "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb", - "version": "==1.11.0" - }, - "snowballstemmer": { - "hash": "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89", - "version": "==1.2.1" - }, - "sphinx": { - "hash": "sha256:3e70eb94f7e81b47e0545ebc26b758193b6c8b222e152ded99b9c972e971c731", - "version": "==1.6.4" - }, - "sphinxcontrib-programoutput": { - "hash": "sha256:bd47ff0e1cddec82e1d4501f6f0fa3f77481765fcc7c58ec685ef05b44386c40", - "version": "==0.11" - }, - "sphinxcontrib-restbuilder": { - "hash": "sha256:8f2d7d73930fdedc3571adab32fbe843b4716829a291dbb27bab56b7c8d1e23d", - "version": "==0.1" - }, - "sphinxcontrib-websupport": { - "hash": "sha256:f4932e95869599b89bf4f80fc3989132d83c9faa5bf633e7b5e0c25dffb75da2", - "version": "==1.0.1" - }, - "urllib3": { - "hash": "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", - "version": "==1.22" - }, - "wheel": { - "hash": "sha256:e721e53864f084f956f40f96124a74da0631ac13fbbd1ba99e8e2b5e9cafdf64", - "version": "==0.30.0" - }, - "wrapt": { - "hash": "sha256:d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6", - "version": "==1.10.11" - }, - "yapf": { - "hash": "sha256:b6a47545511839861ae92108476c119de27a4b137f380f2fd452bcc39bcd6c31", - "version": "==0.18.0" - } - } -} diff --git a/README.md b/README.md index 2ec8776..80a129c 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,63 @@ # Official Python STEEM Library -`steem-python` is the official STEEM library for Python. It comes with a BIP38 encrypted wallet and a practical CLI utility called `steempy`. -## Installation -You can install `steem-python` with `pip`: +`steem-python` is the official Steem library for Python. It comes with a +BIP38 encrypted wallet and a practical CLI utility called `steempy`. + +This library currently works on Python 2.7, 3.5 and 3.6. Python 3.3 and 3.4 support forthcoming. + +# Installation + +With pip: + +``` +pip3 install steem # pip install steem for 2.7 +``` + +From Source: + +``` +git clone https://github.com/steemit/steem-python.git +cd steem-python +pip install build +python -m build +pip install . +``` + +## Homebrew Build Prereqs + +If you're on a mac, you may need to do the following first: ``` -pip install -U steem +brew install openssl +export CFLAGS="-I$(brew --prefix openssl)/include $CFLAGS" +export LDFLAGS="-L$(brew --prefix openssl)/lib $LDFLAGS" ``` -## Documentation +# CLI tools bundled + +The library comes with a few console scripts. + +* `steempy`: + * rudimentary blockchain CLI (needs some TLC and more TLAs) +* `steemtail`: + * useful for e.g. `steemtail -f -j | jq --unbuffered --sort-keys .` + +# Documentation + Documentation is available at **http://steem.readthedocs.io** -## TODO -* more unit-tests -* 100% documentation coverage +# Tests + +Some tests are included. They can be run via: + +* `python setup.py test` + +# TODO + +* more unit tests +* 100% documentation coverage, consistent documentation +* migrate to click CLI library -## Notice -This library is under *active development*. Use at own discretion. +# Notice +This library is *under development*. Beware. diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..ce7513b --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,22 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "ubuntu/xenial64" + + # config.vm.provider "virtualbox" do |vb| + # # Display the VirtualBox GUI when booting the machine + # vb.gui = true + # + # # Customize the amount of memory on the VM: + # vb.memory = "1024" + # end + config.vm.provision "shell", inline: <<-SHELL + apt-get update + apt-get upgrade -y + apt-get install -y libssl-dev + apt-get install -y python3-pip + cd /vagrant && make test + steempy info + SHELL +end diff --git a/bin/piston b/bin/piston deleted file mode 100755 index 920a173..0000000 --- a/bin/piston +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python3.6 - -import steem -import steem.cli - -if __name__=='__main__': - steem.cli.legacy() diff --git a/bin/steempy b/bin/steempy deleted file mode 100755 index 920a173..0000000 --- a/bin/steempy +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python3.6 - -import steem -import steem.cli - -if __name__=='__main__': - steem.cli.legacy() diff --git a/bin/steemtail b/bin/steemtail deleted file mode 100755 index bd92e42..0000000 --- a/bin/steemtail +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3.6 - -import steem -import sys -import argparse -import pprint -import json -from steem.blockchain import Blockchain - -def main(): - parser = argparse.ArgumentParser(description="UNIX tail(1)-like tool for the steem blockchain") - parser.add_argument('-f','--follow',help='Constantly stream output to stdout', action='store_true') - parser.add_argument('-n','--lines', type=int, default=10, help='How many ops to show') - parser.add_argument('-j','--json', help='Output as JSON instead of human-readable pretty-printed format', action='store_true') - args = parser.parse_args(sys.argv[1:]) - - b = Blockchain() - stream = b.reliable_stream() - - op_count = 0 - if args.json: - if not args.follow: sys.stdout.write('[') - for op in stream: - if args.json: - sys.stdout.write('%s' % json.dumps(op)) - else: - pprint.pprint(op) - op_count += 1 - if not args.follow: - if op_count > args.lines: - if args.json: sys.stdout.write(']') - return - else: - if args.json: sys.stdout.write(',') - - -if __name__=='__main__': - main() diff --git a/docs/cli.rst b/docs/cli.rst index 33666c4..c5d3e13 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -17,7 +17,7 @@ You can change the password via `changewalletpassphrase` command. steempy changewalletpassphrase -From this point on, every time an action requires your private keys, you will be prompted ot enter +From this point on, every time an action requires your private keys, you will be prompted to enter this password (from CLI as well as while using `steem` library). To bypass password entry, you can set an environmnet variable ``UNLOCK``. @@ -154,7 +154,7 @@ You can see all available commands with ``steempy -h`` optional arguments: -h, --help show this help message and exit --node NODE URL for public Steem API (default: - "https://steemd.steemit.com") + "https://api.steemit.com") --no-broadcast, -d Do not broadcast anything --no-wallet, -p Do not load the wallet --unsigned, -x Do not try to sign the transaction diff --git a/docs/conf.py b/docs/conf.py index 2bab934..1ccb322 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -21,7 +21,6 @@ # import sys # sys.path.insert(0, os.path.abspath('.')) - # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. @@ -59,17 +58,17 @@ # General information about the project. project = 'steem-python' -copyright = '2017, Steemit Inc' -author = 'furion@steemit.com' +copyright = '2018, Steemit Inc' +author = 'cyonic@steemit.com' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = '0.18' +version = '1.0' # The full version, including alpha/beta/rc tags. -release = '0.18.103' +release = '1.0.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -145,10 +144,8 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'steem-python', 'steem-python Documentation', - [author], 1) -] +man_pages = [(master_doc, 'steem-python', 'steem-python Documentation', + [author], 1)] # -- Options for Texinfo output ------------------------------------------- @@ -156,7 +153,6 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'steem-python', 'steem-python Documentation', - author, 'steem-python', 'One line description of project.', - 'Miscellaneous'), + (master_doc, 'steem-python', 'steem-python Documentation', author, + 'steem-python', 'One line description of project.', 'Miscellaneous'), ] diff --git a/docs/examples.rst b/docs/examples.rst index 29ef1cb..9a3ef09 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -12,7 +12,7 @@ You can run this script as many times as you like, and it will continue from the import json import os - from contextlib import suppress + from steem.blockchain import Blockchain @@ -53,8 +53,10 @@ You can run this script as many times as you like, and it will continue from the if __name__ == '__main__': output_file = '/home/user/Downloads/steem.blockchain.json' - with suppress(KeyboardInterrupt): + try: run(output_file) + except KeyboardInterrupt: + pass To see how many blocks we currently have, we can simply perform a line count. @@ -188,8 +190,6 @@ Make sure to set ``whoami`` to your Steem username before running. :: - from contextlib import suppress - from steem.blockchain import Blockchain from steem.post import Post @@ -213,5 +213,7 @@ Make sure to set ``whoami`` to your Steem username before running. post.upvote(weight=upvote_pct, voter=whoami) if __name__ == '__main__': - with suppress(KeyboardInterrupt): + try: run() + except KeyboardInterrupt: + pass diff --git a/docs/issue_template.md b/docs/issue_template.md new file mode 100644 index 0000000..f87aa51 --- /dev/null +++ b/docs/issue_template.md @@ -0,0 +1,22 @@ +### Version of Python you are running ### + + + +### Version of steem-python you are running ### + + + +### Expected Behavior ### + + + +### Actual Behavior ### + + + +### Steps to reproduce ### + + + +### Stack Trace ### + diff --git a/docs/steem.rst b/docs/steem.rst index bd0a70f..47c91e0 100644 --- a/docs/steem.rst +++ b/docs/steem.rst @@ -147,12 +147,12 @@ and shall contain no whitespaces. | default_vote_weight | 100 | | nodes | https://gtg.steem.house:8090/ | +---------------------+-------------------------------+ - ~ % steempy set nodes https://gtg.steem.house:8090/,https://steemd.steemit.com + ~ % steempy set nodes https://gtg.steem.house:8090/,https://api.steemit.com ~ % steempy config +---------------------+----------------------------------------------------------+ | Key | Value | +---------------------+----------------------------------------------------------+ - | nodes | https://gtg.steem.house:8090/,https://steemd.steemit.com | + | nodes | https://gtg.steem.house:8090/,https://api.steemit.com | | default_vote_weight | 100 | | default_account | furion | +---------------------+----------------------------------------------------------+ @@ -173,7 +173,7 @@ Post, etc) will use this as their default instance. steemd_nodes = [ 'https://gtg.steem.house:8090', - 'https://steemd.steemit.com', + 'https://api.steemit.com', ] set_shared_steemd_instance(Steemd(nodes=steemd_nodes)) @@ -192,11 +192,9 @@ This is useful when you want to contain a modified ``steemd`` instance to an exp steemd_nodes = [ 'https://gtg.steem.house:8090', - 'https://steemd.steemit.com', + 'https://api.steemit.com', ] custom_instance = Steemd(nodes=steemd_nodes) account = Account('furion', steemd_instance=custom_instance) blockchain = Blockchain('head', steemd_instance=custom_instance) - - diff --git a/package_meta.py b/package_meta.py deleted file mode 100644 index 2a548de..0000000 --- a/package_meta.py +++ /dev/null @@ -1,87 +0,0 @@ -""" Some magic to grab requirements and stuff from Pipfile.lock (if it exists) - If not found, grabs from requirements.txt, if not found there grabs from Pipfile - Pipfile is loaded first, then Pipfile.lock or requirements.txt can override - - Sticking it all here means end users don't need to have Pipfile and pipenv installed -""" -import json -import os - -from setuptools.config import read_configuration - -import configparser - -from pip.req import parse_requirements -from pip.download import PipSession - -global required_python_ver -global default_requirements -global dev_requirements -global source_code_path -global pipfile_lock_data -global pipfile_path -global lockfile_path -global requires_file_path -global pipfile_data -global setup_cfg_path -global setup_cfg_data -global package_name -global package_ver - -source_code_path = os.path.dirname(os.path.realpath(__file__)) -pipfile_path = '%s/Pipfile' % source_code_path -lockfile_path = '%s/Pipfile.lock' % source_code_path -requires_file_path = '%s/requirements.txt' % source_code_path -setup_cfg_path = '%s/setup.cfg' % source_code_path - -setup_cfg_data = read_configuration(setup_cfg_path,ignore_option_errors=True) - -pipfile_data = configparser.ConfigParser() - -pipfile_data.read(pipfile_path) - -required_python_ver = pipfile_data['requires'].get('python_version','3.5') -default_requirements = [] -dev_requirements = [] - -for package_name in pipfile_data['packages']: - package_ver = pipfile_data['packages'].get(package_name) - if package_ver=='*': - default_requirements.append(package_name) - else: - default_requirements.append('%s==%s' % (package_name,str(package_ver))) - -for package_name in pipfile_data['dev-packages']: - package_ver = pipfile_data['packages'].get(package_name) - if package_ver==None: - dev_requirements.append(package_name) - else: - dev_requirements.append('%s==%s' % (package_name,str(package_ver))) - -if os.path.exists(lockfile_path): - with open(lockfile_path) as lockfile: - lockfile_data = json.load(lockfile) - - required_python_ver = lockfile_data['_meta']['requires']['python_version'] - default_requirements = [] - for k,v in lockfile_data['default'].items(): - default_requirements.append('%s%s' % (k,v['version'])) -else: - required_python_ver = '3.6' - default_requirements = [str(ir.req) for ir in parse_requirements(requires_file_path,session=PipSession())] - -required_python_major,required_python_minor = [int(x) for x in required_python_ver.split('.')[:2]] - - -package_name = setup_cfg_data['metadata']['name'] -package_ver = setup_cfg_data['metadata']['version'] - - -if __name__=='__main__': - print('Required python version: %s' % required_python_ver) - print('Required default packages:') - for package_name in default_requirements: - print('\t%s' % package_name) - print('Required development packages:') - for package_name in dev_requirements: - print('\t%s' % package_name) diff --git a/pylintrc b/pylintrc deleted file mode 100644 index ab7e73b..0000000 --- a/pylintrc +++ /dev/null @@ -1,450 +0,0 @@ -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS,deploy,setup.py,docs - - -# Pickle collected data for later comparisons. -persistent=yes - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - -# Use multiple processes to speed up Pylint. -jobs=1 - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code -extension-pkg-whitelist= - -# Allow optimization of some AST trees. This will activate a peephole AST -# optimizer, which will apply various small optimizations. For instance, it can -# be used to obtain the result of joining multiple strings with the addition -# operator. Joining a lot of strings can lead to a maximum recursion error in -# Pylint and this flag can prevent that. It has one side effect, the resulting -# AST will be different than the one from reality. -optimize-ast=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED -confidence= - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -#enable= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once).You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use"--disable=all --enable=classes -# --disable=W" -disable= - # disabled by me, - broad-except, - locally-disabled, - missing-docstring, - line-too-long, - pointless-string-statement, - bad-continuation, - cyclic-import, - duplicate-code, - fixme, - # disabled by default, - import-star-module-level, - old-octal-literal, - oct-method, - print-statement, - unpacking-in-except, - parameter-unpacking, - backtick, - old-raise-syntax, - old-ne-operator, - long-suffix, - dict-view-method, - dict-iter-method, - metaclass-assignment, - next-method-called, - raising-string, - indexing-exception, - raw_input-builtin, - long-builtin, - file-builtin, - execfile-builtin, - coerce-builtin, - cmp-builtin, - buffer-builtin, - basestring-builtin, - apply-builtin, - filter-builtin-not-iterating, - using-cmp-argument, - useless-suppression, - range-builtin-not-iterating, - suppressed-message, - no-absolute-import, - old-division, - cmp-method, - reload-builtin, - zip-builtin-not-iterating, - intern-builtin, - unichr-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - input-builtin, - round-builtin, - hex-method, - nonzero-method, - map-builtin-not-iterating, - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html. You can also give a reporter class, eg -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells whether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details -#msg-template= - - -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=100 - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=yes - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma,dict-separator - -# Maximum number of lines in a module -#max-module-lines=1000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - - - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - - -[SPELLING] - -# Spelling dictionary name. Available dictionaries: none. To make it working -# install python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to indicated private dictionary in -# --spelling-private-dict-file option instead of raising a message. -spelling-store-unknown-words=no - - -[LOGGING] - -# Logging modules to check that the string format arguments are in logging -# function parameter format -logging-modules=logging - - -[BASIC] - -# List of builtins function names that should not be used, separated by a comma -bad-functions=input - -# Good variable names which should always be accepted, separated by a comma -good-names=i,e,s,_,fd,fp,db,q,f,tx,to,b,bn, s3, id, op, cp, x, k, v, kv,j - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Include a hint for the correct naming format with invalid-name -include-naming-hint=no - -# Regular expression matching correct function names -# original: -#function-rgx=[a-z_][a-z0-9_]{2,30}$ -function-rgx=[a-zA-Z_][a-zA-Z0-9_]{2,40}$ - -# Naming hint for function names -function-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression matching correct variable names -variable-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Naming hint for variable names -variable-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression matching correct constant names -# original: -#const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ -const-rgx=(([a-zA-Z_][a-zA-Z0-9_]*)|(__.*__))$ - -# Naming hint for constant names -const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression matching correct attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Naming hint for attribute names -attr-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression matching correct argument names -argument-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Naming hint for argument names -argument-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression matching correct class attribute names -# original: -#class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ -class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,40}|(__.*__))$ - -# Naming hint for class attribute names -class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Regular expression matching correct inline iteration names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Naming hint for inline iteration names -inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ - -# Regular expression matching correct class names -# original: -#class-rgx=[A-Z_][a-zA-Z0-9]+$ -class-rgx=[a-zA-Z_][a-zA-Z0-9]+$ - -# Naming hint for class names -class-name-hint=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression matching correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Naming hint for module names -module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression matching correct method names -# original: -#method-rgx=[a-z_][a-z0-9_]{2,30}$ -method-rgx=[a-zA-Z_][a-zA-Z0-9_]{2,40}$ - -# Naming hint for method names -method-name-hint=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - - -[ELIF] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - - -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis. It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). This supports can work -# with qualified names. -ignored-classes= - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching the name of dummy variables (i.e. expectedly -# not used). -dummy-variables-rgx=_$|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_,_cb - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict,_fields,_replace,_source,_make - - -[DESIGN] - -# Maximum number of arguments for function / method -max-args=5 - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.* - -# Maximum number of locals for function / method body -max-locals=15 - -# Maximum number of return / yield for function / method body -max-returns=6 - -# Maximum number of branch for function / method body -max-branches=12 - -# Maximum number of statements in function / method body -max-statements=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of boolean expressions in a if statement -max-bool-expr=5 - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=Exception diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8fe2f47 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 6a1b0de..0000000 --- a/requirements.txt +++ /dev/null @@ -1,62 +0,0 @@ -appdirs==1.4.3 -certifi==2017.7.27.1 -chardet==3.0.4 -dateparser==0.6.0 -diff-match-patch==20121119 -ecdsa==0.13 -funcy==1.9.1 -humanize==0.5.1 -idna==2.6 -langdetect==1.0.7 -maya==0.3.3 -pendulum==1.3.0 -pipfile==0.0.2 -prettytable==0.7.2 -pycrypto==2.6.1 -pylibscrypt==1.6.1 -python-dateutil==2.6.1 -pytz==2017.2 -pytzdata==2017.2.2 -regex==2017.09.23 -requests==2.18.4 -ruamel.yaml==0.15.34 -scrypt==0.8.0 -six==1.11.0 -toml==0.9.3.1 -toolz==0.8.2 -tzlocal==1.4 -ujson==1.35 -urllib3==1.22 -voluptuous==0.10.5 -w3lib==1.18.0 -alabaster==0.7.10 -astroid==1.5.3 -autopep8==1.3.2 -babel==2.5.1 -commonmark==0.5.4 -docutils==0.14 -imagesize==0.7.1 -isort==4.2.15 -jinja2==2.9.6 -lazy-object-proxy==1.3.1 -markupsafe==1.0 -mccabe==0.6.1 -pep8==1.7.0 -pip==9.0.1 -py==1.4.34 -pycodestyle==2.3.1 -pygments==2.2.0 -pylint==1.7.4 -pypandoc==1.4 -pytest==3.2.3 -pytest-pylint==0.7.1 -recommonmark==0.4.0 -setuptools==36.5.0 -snowballstemmer==1.2.1 -sphinx==1.6.4 -sphinxcontrib-programoutput==0.11 -sphinxcontrib-restbuilder==0.1 -sphinxcontrib-websupport==1.0.1 -wheel==0.30.0 -wrapt==1.10.11 -yapf==0.18.0 diff --git a/scripts/doc_rst_convert.py b/scripts/doc_rst_convert.py index c7879bd..566a509 100644 --- a/scripts/doc_rst_convert.py +++ b/scripts/doc_rst_convert.py @@ -1,3 +1,6 @@ import pypandoc -pypandoc.convert(source='README.md', format='markdown_github', to='rst', outputfile='README.rst') - +pypandoc.convert( + source='README.md', + format='markdown_github', + to='rst', + outputfile='README.rst') diff --git a/scripts/steemd_gen.py b/scripts/steemd_gen.py index 680f912..d3e8de6 100644 --- a/scripts/steemd_gen.py +++ b/scripts/steemd_gen.py @@ -39,7 +39,8 @@ { 'api': 'database_api', 'method': 'get_expiring_vesting_delegations', - 'params': [('account', 'str'), ('start', 'PointInTime'), ('limit', 'int')], + 'params': [('account', 'str'), ('start', 'PointInTime'), ('limit', + 'int')], }, { 'api': 'database_api', @@ -214,7 +215,8 @@ { 'api': 'database_api', 'method': 'get_account_history', - 'params': [('account', 'str'), ('index_from', 'int'), ('limit', 'int')], + 'params': [('account', 'str'), ('index_from', 'int'), ('limit', + 'int')], }, { 'api': 'database_api', @@ -279,7 +281,8 @@ { 'api': 'database_api', 'method': 'get_required_signatures', - 'params': [('signed_transaction', 'object'), ('available_keys', 'list')], + 'params': [('signed_transaction', 'object'), ('available_keys', + 'list')], }, { 'api': 'database_api', @@ -317,15 +320,20 @@ 'params': [('author', 'str'), ('permlink', 'str')], }, { - 'api': 'database_api', - 'method': 'get_discussions_by_author_before_date', - 'params': [('author', 'str'), ('start_permlink', 'str'), ('before_date', 'object'), ('limit', 'int')], - + 'api': + 'database_api', + 'method': + 'get_discussions_by_author_before_date', + 'params': [('author', 'str'), ('start_permlink', 'str'), + ('before_date', 'object'), ('limit', 'int')], }, { - 'api': 'database_api', - 'method': 'get_replies_by_last_update', - 'params': [('account', 'str'), ('start_permlink', 'str'), ('limit', 'int')], + 'api': + 'database_api', + 'method': + 'get_replies_by_last_update', + 'params': [('account', 'str'), ('start_permlink', 'str'), ('limit', + 'int')], }, { 'api': 'database_api', @@ -365,7 +373,8 @@ { 'api': 'database_api', 'method': 'get_vesting_delegations', - 'params': [('account', 'str'), ('from_account', 'str'), ('limit', 'int')], + 'params': [('account', 'str'), ('from_account', 'str'), ('limit', + 'int')], }, { 'api': 'login_api', @@ -383,14 +392,20 @@ 'params': [], }, { - 'api': 'follow_api', - 'method': 'get_followers', - 'params': [('account', 'str'), ('start_follower', 'str'), ('follow_type', 'str'), ('limit', 'int')], + 'api': + 'follow_api', + 'method': + 'get_followers', + 'params': [('account', 'str'), ('start_follower', 'str'), + ('follow_type', 'str'), ('limit', 'int')], }, { - 'api': 'follow_api', - 'method': 'get_following', - 'params': [('account', 'str'), ('start_follower', 'str'), ('follow_type', 'str'), ('limit', 'int')], + 'api': + 'follow_api', + 'method': + 'get_following', + 'params': [('account', 'str'), ('start_follower', 'str'), + ('follow_type', 'str'), ('limit', 'int')], }, { 'api': 'follow_api', @@ -473,9 +488,12 @@ 'params': [('limit', 'int')], }, { - 'api': 'market_history_api', - 'method': 'get_trade_history', - 'params': [('start', 'PointInTime'), ('end', 'PointInTime'), ('limit', 'int')], + 'api': + 'market_history_api', + 'method': + 'get_trade_history', + 'params': [('start', 'PointInTime'), ('end', 'PointInTime'), ('limit', + 'int')], }, { 'api': 'market_history_api', @@ -484,9 +502,12 @@ 'returns': 'List[Any]', }, { - 'api': 'market_history_api', - 'method': 'get_market_history', - 'params': [('bucket_seconds', 'int'), ('start', 'PointInTime'), ('end', 'PointInTime')], + 'api': + 'market_history_api', + 'method': + 'get_market_history', + 'params': [('bucket_seconds', 'int'), ('start', 'PointInTime'), + ('end', 'PointInTime')], }, { 'api': 'market_history_api', @@ -527,8 +548,7 @@ def steemd_codegen(): method_arguments=''.join(method_arg_mapper(endpoint['params'])), call_arguments=''.join(call_arg_mapper(endpoint['params'])), return_hints=return_hints, - api=endpoint['api'] - ) + api=endpoint['api']) sys.stdout.write(fn) @@ -548,7 +568,10 @@ def inspect_steemd_implementation(): s = Steem(re_raise=False) for api in _apis: err = s.exec('nonexistentmethodcall', api=api) - [avail_methods.append(x) for x in err['data']['stack'][0]['data']['api'].keys()] + [ + avail_methods.append(x) + for x in err['data']['stack'][0]['data']['api'].keys() + ] avail_methods = set(avail_methods) diff --git a/setup.cfg b/setup.cfg index c328e2c..6c48413 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,64 +1,16 @@ [metadata] -name = steem -version = 0.18.103 -description = Official python steem library -long_description = file: README.rst -keywords = steem, steemit, cryptocurrency, blockchain -license = MIT -classifiers = - Intended Audience :: Developers - License :: OSI Approved :: MIT License - Natural Language :: English - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.5 - Topic :: Software Development :: Libraries - Topic :: Software Development :: Libraries :: Python Modules - Development Status :: 4 - Beta - -[options] -packages = find: -scripts = - bin/steempy - bin/piston - bin/steemtail - -[options.packages.find] -exclude = scripts - -[aliases] -test=pytest - -[build_sphinx] -source-dir = docs/ -build-dir = docs/_build -all_files = 1 - - -[pycodestyle] -# formerly pep8 -ignore = E501 - - -[pep8] -# backwards compat -ignore = E501 - - -[style] -# google yapf config - +description_file=README.md [tool:pytest] -norecursedirs=dist docs build .tox deploy -addopts = - -[bdist_wheel] -universal=1 - - -[coverage:run] -branch = True -source = steem - -[coverage:xml] -output = coverage.xml +norecursedirs=dist docs build deploy +addopts = --pep8 +testpaths = tests + +[yapf] +indent_width = 4 +column_limit = 77 +based_on_style = pep8 +spaces_before_comment = 2 +split_before_logical_operator = true +dedent_closing_brackets = true +i18n_comment = NOQA diff --git a/setup.py b/setup.py index bfc6a5a..88e4a74 100644 --- a/setup.py +++ b/setup.py @@ -1,15 +1,96 @@ -# coding=utf-8 -import os -import sys +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +WARNING: + Direct invocation of setup.py is deprecated. + Please use "pip install ." or "python -m build" (with a proper pyproject.toml) + to build and install this package. +""" -from setuptools import find_packages -from setuptools import setup +import io +import os +import setuptools -import package_meta # this is a simple tool for loading metadata from Pipfile and other places +here = os.path.abspath(os.path.dirname(__file__)) -assert sys.version_info[0] == package_meta.required_python_major and sys.version_info[1] >= package_meta.required_python_minor, "%s requires Python %s or newer" % (package_meta.package_name, package_meta.required_python_ver) +# Read the long description from the README file (if available) +try: + with io.open(os.path.join(here, "README.rst"), encoding="utf-8") as f: + long_description = f.read() +except FileNotFoundError: + long_description = "Official python steem library." -# yapf: disable -setup(setup_requires=package_meta.dev_requirements, - install_requires=package_meta.default_requirements, - tests_require=package_meta.default_requirements+package_meta.dev_requirements) +setuptools.setup( + name="steem", + version="1.0.2", + author="Steemit", + author_email="john@steemit.com", + description="Official python steem library.", + long_description=long_description, + long_description_content_type="text/x-rst", + url="https://github.com/steemit/steem-python", + packages=setuptools.find_packages(exclude=("tests", "scripts")), + classifiers=[ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + ], + python_requires=">=3.5", + install_requires=[ + "appdirs", + "certifi", + "ecdsa>=0.13", + "funcy", + 'futures; python_version < "3.0.0"', + "future", + "langdetect", + "pick>=2.4.0", + "prettytable", + "pycryptodome>=3.20.0", + "pylibscrypt>=1.6.1", + "scrypt>=0.8.0", + "toolz", + "ujson", + "urllib3", + "voluptuous", + "w3lib", + ], + entry_points={ + "console_scripts": [ + "piston=steem.cli:legacyentry", + "steempy=steem.cli:legacyentry", + "steemtail=steem.cli:steemtailentry", + ], + }, + extras_require={ + "dev": [ + "pytest", + "pytest-cov", + "pytest-xdist", + "autopep8", + "yapf", + "twine", + "pypandoc", + "recommonmark", + "wheel", + "setuptools", + "sphinx", + "sphinx_rtd_theme", + ], + "test": [ + "pytest", + "pytest-cov", + "pytest-xdist", + "autopep8", + "yapf", + ], + }, +) diff --git a/steem/__init__.py b/steem/__init__.py index 547100d..09cc22e 100644 --- a/steem/__init__.py +++ b/steem/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- from .steem import Steem -__version__ = '0.18.103' - +__version__ = '1.0.2' diff --git a/steem/account.py b/steem/account.py index c241e12..ea98c0c 100644 --- a/steem/account.py +++ b/steem/account.py @@ -1,7 +1,6 @@ import datetime import math import time -from contextlib import suppress from funcy.colls import walk_values, get_in from funcy.seqs import take @@ -20,7 +19,8 @@ class Account(dict): """ This class allows to easily access Account data :param str account_name: Name of the account - :param Steemd steemd_instance: Steemd() instance to use when accessing a RPC + :param Steemd steemd_instance: Steemd() instance to use when + accessing a RPC """ @@ -56,8 +56,11 @@ def converter(self): @property def profile(self): - with suppress(TypeError): + try: return get_in(self, ['json_metadata', 'profile'], default={}) + except TypeError: + pass + return {} @property @@ -92,9 +95,12 @@ def get_balances(self): } totals = { - 'STEEM': sum([available['STEEM'], savings['STEEM'], rewards['STEEM']]), - 'SBD': sum([available['SBD'], savings['SBD'], rewards['SBD']]), - 'VESTS': sum([available['VESTS'], rewards['VESTS']]), + 'STEEM': + sum([available['STEEM'], savings['STEEM'], rewards['STEEM']]), + 'SBD': + sum([available['SBD'], savings['SBD'], rewards['SBD']]), + 'VESTS': + sum([available['VESTS'], rewards['VESTS']]), } total = walk_values(rpartial(round, 3), totals) @@ -119,18 +125,26 @@ def voting_power(self): return self['voting_power'] / 100 def get_followers(self): - return [x['follower'] for x in self._get_followers(direction="follower")] + return [ + x['follower'] for x in self._get_followers(direction="follower") + ] def get_following(self): - return [x['following'] for x in self._get_followers(direction="following")] + return [ + x['following'] for x in self._get_followers(direction="following") + ] def _get_followers(self, direction="follower", last_user=""): if direction == "follower": - followers = self.steemd.get_followers(self.name, last_user, "blog", 100) + + followers = self.steemd.get_followers(self.name, last_user, "blog", + 100) elif direction == "following": - followers = self.steemd.get_following(self.name, last_user, "blog", 100) + followers = self.steemd.get_following(self.name, last_user, "blog", + 100) if len(followers) >= 100: - followers += self._get_followers(direction=direction, last_user=followers[-1][direction])[1:] + followers += self._get_followers( + direction=direction, last_user=followers[-1][direction])[1:] return followers def has_voted(self, post): @@ -138,13 +152,16 @@ def has_voted(self, post): return self.name in active_votes def curation_stats(self): - trailing_24hr_t = time.time() - datetime.timedelta(hours=24).total_seconds() - trailing_7d_t = time.time() - datetime.timedelta(days=7).total_seconds() + trailing_24hr_t = time.time() - datetime.timedelta( + hours=24).total_seconds() + trailing_7d_t = time.time() - datetime.timedelta( + days=7).total_seconds() reward_24h = 0.0 reward_7d = 0.0 - for reward in take(5000, self.history_reverse(filter_by="curation_reward")): + for reward in take( + 5000, self.history_reverse(filter_by="curation_reward")): timestamp = parse_time(reward['timestamp']).timestamp() if timestamp > trailing_7d_t: @@ -199,9 +216,11 @@ def filter_by_date(items, start_time, end_time=None): return filtered_items def export(self, load_extras=True): - """ This method returns a dictionary that is type-safe to store as JSON or in a database. + """ This method returns a dictionary that is type-safe to store as + JSON or in a database. - :param bool load_extras: Fetch extra information related to the account (this might take a while). + :param bool load_extras: Fetch extra information related to the + account (this might take a while). """ extras = dict() if load_extras: @@ -217,16 +236,27 @@ def export(self, load_extras=True): "conversion_requests": self.get_conversion_requests(), } - return { - **self, - **extras, - "profile": self.profile, - "sp": self.sp, - "rep": self.rep, - "balances": self.get_balances(), - } - - def get_account_history(self, index, limit, start=None, stop=None, order=-1, filter_by=None, raw_output=False): + composedDict = self.copy() + composedDict.update(extras) + composedDict.update( + { + "profile": self.profile, + "sp": self.sp, + "rep": self.rep, + "balances": self.get_balances(), + } + ) + + return composedDict + + def get_account_history(self, + index, + limit, + start=None, + stop=None, + order=-1, + filter_by=None, + raw_output=False): """ A generator over steemd.get_account_history. It offers serialization, filtering and fine grained iteration control. @@ -238,7 +268,8 @@ def get_account_history(self, index, limit, start=None, stop=None, order=-1, fil stop (int): (Optional) stop iteration early at this index order: (1, -1): 1 for chronological, -1 for reverse order filter_by (str, list): filter out all but these operations - raw_output (bool): (Defaults to False). If True, return history in steemd format (unchanged). + raw_output (bool): (Defaults to False). If True, return history in + steemd format (unchanged). """ history = self.steemd.get_account_history(self.name, index, limit) for item in history[::order]: @@ -261,18 +292,18 @@ def construct_op(account_name): # index can change during reindexing in # future hard-forks. Thus we cannot take it for granted. - immutable = { - **op, - **block_props, + immutable = op.copy() + immutable.update(block_props) + immutable.update({ 'account': account_name, 'type': op_type, - } + }) _id = Blockchain.hash_op(immutable) - return { - **immutable, + immutable.update({ '_id': _id, 'index': index, - } + }) + return immutable if filter_by is None: yield construct_op(self.name) @@ -285,7 +316,11 @@ def construct_op(account_name): if op_type == filter_by: yield construct_op(self.name) - def history(self, filter_by=None, start=0, batch_size=1000, raw_output=False): + def history(self, + filter_by=None, + start=0, + batch_size=1000, + raw_output=False): """ Stream account history in chronological order. """ max_index = self.virtual_op_count() @@ -295,18 +330,22 @@ def history(self, filter_by=None, start=0, batch_size=1000, raw_output=False): start_index = start + batch_size i = start_index while i < max_index + batch_size: - yield from self.get_account_history( - index=i, - limit=batch_size, - start=i - batch_size, - stop=max_index, - order=1, - filter_by=filter_by, - raw_output=raw_output, - ) + for account_history in self.get_account_history( + index=i, + limit=batch_size, + start=i - batch_size, + stop=max_index, + order=1, + filter_by=filter_by, + raw_output=raw_output, + ): + yield account_history i += (batch_size + 1) - def history_reverse(self, filter_by=None, batch_size=1000, raw_output=False): + def history_reverse(self, + filter_by=None, + batch_size=1000, + raw_output=False): """ Stream account history in reverse chronological order. """ start_index = self.virtual_op_count() @@ -317,11 +356,12 @@ def history_reverse(self, filter_by=None, batch_size=1000, raw_output=False): while i > 0: if i - batch_size < 0: batch_size = i - yield from self.get_account_history( - index=i, - limit=batch_size, - order=-1, - filter_by=filter_by, - raw_output=raw_output, - ) + for account_history in self.get_account_history( + index=i, + limit=batch_size, + order=-1, + filter_by=filter_by, + raw_output=raw_output, + ): + yield account_history i -= (batch_size + 1) diff --git a/steem/aes.py b/steem/aes.py index e665a46..ca9f9d2 100644 --- a/steem/aes.py +++ b/steem/aes.py @@ -6,9 +6,13 @@ class AESCipher(object): """ - A classical AES Cipher. Can use any size of data and any size of password thanks to padding. - Also ensure the coherence and the type of the data with a unicode to byte converter. + + A classical AES Cipher. Can use any size of data and any size of + password thanks to padding. Also ensure the coherence and the type of + the data with a unicode to byte converter. + """ + def __init__(self, key): self.bs = 32 self.key = hashlib.sha256(AESCipher.str_to_bytes(key)).digest() @@ -21,7 +25,8 @@ def str_to_bytes(data): return data def _pad(self, s): - return s + (self.bs - len(s) % self.bs) * AESCipher.str_to_bytes(chr(self.bs - len(s) % self.bs)) + return s + (self.bs - len(s) % self.bs) * AESCipher.str_to_bytes( + chr(self.bs - len(s) % self.bs)) @staticmethod def _unpad(s): @@ -37,4 +42,5 @@ def decrypt(self, enc): enc = base64.b64decode(enc) iv = enc[:AES.block_size] cipher = AES.new(self.key, AES.MODE_CBC, iv) - return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8') + return self._unpad(cipher.decrypt( + enc[AES.block_size:])).decode('utf-8') diff --git a/steem/amount.py b/steem/amount.py index ff12ca4..34b9ef5 100644 --- a/steem/amount.py +++ b/steem/amount.py @@ -1,16 +1,23 @@ class Amount(dict): - """ This class helps deal and calculate with the different assets on the chain. + """ This class helps deal and calculate with the different assets on the + chain. - :param str amountString: Amount string as used by the backend (e.g. "10 SBD") + :param str amountString: Amount string as used by the backend + (e.g. "10 SBD") """ + def __init__(self, amount_string="0 SBD"): if isinstance(amount_string, Amount): self["amount"] = amount_string["amount"] self["asset"] = amount_string["asset"] elif isinstance(amount_string, str): self["amount"], self["asset"] = amount_string.split(" ") + elif isinstance(amount_string, unicode): + self["amount"], self["asset"] = amount_string.split(" ") else: - raise ValueError("Need an instance of 'Amount' or a string with amount and asset") + raise ValueError( + "Need an instance of 'Amount' or a string with amount " + + "and asset") self["amount"] = float(self["amount"]) @@ -38,7 +45,8 @@ def __str__(self): # default else: prec = 6 - return "{:.{prec}f} {}".format(self["amount"], self["asset"], prec=prec) + return "{:.{prec}f} {}".format( + self["amount"], self["asset"], prec=prec) def __float__(self): return self["amount"] diff --git a/steem/block.py b/steem/block.py index 9751431..ad8e514 100644 --- a/steem/block.py +++ b/steem/block.py @@ -8,7 +8,8 @@ class Block(dict): """ Read a single block from the chain :param int block: block number - :param Steemd steemd_instance: Steemd() instance to use when accessing a RPC + :param Steemd steemd_instance: Steemd() instance to use when + accessing a RPC """ diff --git a/steem/blockchain.py b/steem/blockchain.py index 077a080..0db10f9 100644 --- a/steem/blockchain.py +++ b/steem/blockchain.py @@ -2,14 +2,15 @@ import json import time import warnings -from typing import Union -from .instance import shared_steemd_instance,stm -from .utils import parse_time +from .instance import shared_steemd_instance, stm +from .utils import parse_time, compat_bytes import logging + logger = logging.getLogger(__name__) + class Blockchain(object): """ Access the blockchain and read data from it. @@ -46,26 +47,38 @@ def get_current_block(self): """ return self.steem.get_block(self.get_current_block_num()) - def stream_from(self, start_block=None, end_block=None, batch_operations=False, full_blocks=False, **kwargs): - """ This call yields raw blocks or operations depending on ``full_blocks`` param. - + def stream_from(self, + start_block=None, + end_block=None, + batch_operations=False, + full_blocks=False, + **kwargs): + """ This call yields raw blocks or operations depending on + ``full_blocks`` param. + By default, this generator will yield operations, one by one. - You can choose to yield lists of operations, batched to contain + You can choose to yield lists of operations, batched to contain all operations for each block with ``batch_operations=True``. You can also yield full blocks instead, with ``full_blocks=True``. - - Args: - start_block (int): Block to start with. If not provided, current (head) block is used. - end_block (int): Stop iterating at this block. If not provided, this generator will run forever (streaming mode). - batch_operations (bool): (Defaults to False) Rather than yielding operations one by one, - yield a list of all operations for each block. - full_blocks (bool): (Defaults to False) Rather than yielding operations, return raw, unedited blocks as - provided by steemd. This mode will NOT include virtual operations. - """ + + Args: start_block (int): Block to start with. If not provided, current + (head) block is used. + + end_block (int): Stop iterating at this block. If not provided, this + generator will run forever (streaming mode). + + batch_operations (bool): (Defaults to False) Rather than yielding + operations one by one, yield a list of all operations for each block. + + full_blocks (bool): (Defaults to False) Rather than yielding + operations, return raw, unedited blocks as provided by steemd. This + mode will NOT include virtual operations. + + """ _ = kwargs # we need this # Let's find out how often blocks are generated! - block_interval = self.config().get("STEEMIT_BLOCK_INTERVAL") + block_interval = self.config().get("STEEM_BLOCK_INTERVAL") if not start_block: start_block = self.get_current_block_num() @@ -75,97 +88,140 @@ def stream_from(self, start_block=None, end_block=None, batch_operations=False, for block_num in range(start_block, head_block + 1): if end_block and block_num > end_block: - raise StopIteration("Reached stop block at: #%s" % end_block) + raise StopIteration( + "Reached stop block at: #%s" % end_block) if full_blocks: yield self.steem.get_block(block_num) elif batch_operations: yield self.steem.get_ops_in_block(block_num, False) else: - yield from self.steem.get_ops_in_block(block_num, False) + for ops in self.steem.get_ops_in_block(block_num, False): + yield ops # next round start_block = head_block + 1 time.sleep(block_interval) + def reliable_stream(self, + start_block=None, + block_interval=None, + update_interval=False, + batch_operations=False, + full_blocks=False, + timeout=None, + **kwargs): + """ - def reliable_stream(self, start_block=None, block_interval=None, update_interval=False, batch_operations=False, full_blocks=False, timeout=None, **kwargs): - """ A version of stream_from() intended for use in services that NEED reliable (nonstop) streaming + A version of stream_from() intended for use in services that NEED + reliable (nonstop) streaming - By default, works same as stream_from() but will also keep trying until getting a response from steemd, allowing catching up after server downtime. + By default, works same as stream_from() but will also keep trying + until getting a response from steemd, allowing catching up after + server downtime. - Warnings: - To ensure reliability, this method does some weird none-standard things with the steemd client + Warnings: To ensure reliability, this method does some weird + none-standard things with the steemd client Args: - start_block (int): Block to start with. If not provided, current (head) block is used. - block_interval (int): Time between block generations. If not provided, will attempt to query steemd for this value - batch_operations (bool): (Defaults to False) Rather than yielding operations one by one, - yield a list of all operations for each block. - full_blocks (bool): (Defaults to False) Rather than yielding operations, return raw, unedited blocks as - provided by steemd. This mode will NOT include virtual operations. - timeout (int): Time to wait on response from steemd before assuming timeout and retrying queries. If not provided, this will default to block_interval/4 - for all queries except get_block_interval() - where it will default to 2 seconds for initial setup + + start_block (int): Block to start with. If not provided, current + (head) block is used. + + block_interval (int): Time between block generations. If not + provided, will attempt to query steemd for this value + + batch_operations (bool): (Defaults to False) Rather than yielding + operations one by one, yield a list of all operations for each + block. + + full_blocks (bool): (Defaults to False) Rather than yielding + operations, return raw, unedited blocks as provided by steemd. This + mode will NOT include virtual operations. + + timeout (int): Time to wait on response from steemd before assuming + timeout and retrying queries. If not provided, this will default to + block_interval/4 for all queries except get_block_interval() - + where it will default to 2 seconds for initial setup + """ + def get_reliable_client(_timeout): # we want to fail fast and try the next node quickly - return stm.steemd.Steemd(nodes=self.steem.nodes,retries=1,timeout=_timeout,re_raise=True) - def reliable_query(_client,_method,_api,*_args): + return stm.steemd.Steemd( + nodes=self.steem.nodes, + retries=1, + timeout=_timeout, + re_raise=True) + + def reliable_query(_client, _method, _api, *_args): # this will ALWAYS eventually return, at all costs - retval = None - while retval is None: - try: - retval = _client.exec(_method,*_args,api=_api) - except Exception as e: - logger.info('Failed to get response', extra=dict(exc=e,response=retval,api_name=_api,api_method=_method,api_args=_args)) - retval = None - if retval is None: time.sleep(1) - return retval + while True: + try: + return _client.call(_method, *_args, api=_api) + except Exception as e: + logger.error( + 'Error: %s' % str(s), + extra=dict( + exc=e, + response=retval, + api_name=_api, + api_method=_method, + api_args=_args)) + time.sleep(1) def get_reliable_block_interval(_client): - return reliable_query(_client,'get_config','database_api').get('STEEMIT_BLOCK_INTERVAL') + return reliable_query(_client, 'get_config', + 'database_api').get('STEEM_BLOCK_INTERVAL') def get_reliable_current_block(_client): - return reliable_query(_client,'get_dynamic_global_properties','database_api').get(self.mode) + return reliable_query(_client, 'get_dynamic_global_properties', + 'database_api').get(self.mode) - def get_reliable_blockdata(_client,_block_num): - return reliable_query(_client,'get_block', 'database_api', block_num) + def get_reliable_blockdata(_client, _block_num): + return reliable_query(_client, 'get_block', 'database_api', + block_num) - def get_reliable_ops_in_block(_client,_block_num): - return reliable_query(_client,'get_ops_in_block','database_api',block_num,False) + def get_reliable_ops_in_block(_client, _block_num): + return reliable_query(_client, 'get_ops_in_block', 'database_api', + block_num, False) if timeout is None: - if block_interval is None: - _reliable_client = get_reliable_client(2) - block_interval = get_reliable_block_interval(_reliable_client) - else: - timeout = block_interval/4 - _reliable_client = get_reliable_client(timeout) + if block_interval is None: + _reliable_client = get_reliable_client(2) + block_interval = get_reliable_block_interval(_reliable_client) + else: + timeout = block_interval / 4 + _reliable_client = get_reliable_client(timeout) else: - _reliable_client = get_reliable_client(timeout) + _reliable_client = get_reliable_client(timeout) if block_interval is None: - block_interval = get_reliable_block_interval(_reliable_client) + block_interval = get_reliable_block_interval(_reliable_client) if start_block is None: - start_block = get_reliable_current_block(_reliable_client) + start_block = get_reliable_current_block(_reliable_client) while True: - sleep_interval = block_interval/4 - head_block = get_reliable_current_block(_reliable_client) + sleep_interval = block_interval / 4 + head_block = get_reliable_current_block(_reliable_client) - for block_num in range(start_block,head_block+1): - if full_blocks: - yield get_reliable_current_block(_reliable_client,head_block) - elif batch_operations: - yield get_reliable_ops_in_block(_reliable_client,head_block) - else: - yield from get_reliable_ops_in_block(_reliable_client,head_block) - sleep_interval = sleep_interval/2 + for block_num in range(start_block, head_block + 1): + if full_blocks: + yield get_reliable_current_block(_reliable_client, + head_block) + elif batch_operations: + yield get_reliable_ops_in_block(_reliable_client, + head_block) + else: + for reliable_ops in get_reliable_ops_in_block( + _reliable_client, head_block): + yield reliable_ops - time.sleep(sleep_interval) - start_block = head_block + 1 + sleep_interval = sleep_interval / 2 + time.sleep(sleep_interval) + start_block = head_block + 1 - def stream(self, filter_by: Union[str, list] = list(), *args, **kwargs): + def stream(self, filter_by=list(), *args, **kwargs): """ Yield a stream of operations, starting with current head block. Args: @@ -180,8 +236,10 @@ def stream(self, filter_by: Union[str, list] = list(), *args, **kwargs): events = ops if type(ops) == dict: if 'witness_signature' in ops: - raise ValueError('Blockchain.stream() is for operation level streams. ' - 'For block level streaming, use Blockchain.stream_from()') + raise ValueError( + 'Blockchain.stream() is for operation level streams. ' + 'For block level streaming, use ' + 'Blockchain.stream_from()') events = [ops] for event in events: @@ -191,49 +249,61 @@ def stream(self, filter_by: Union[str, list] = list(), *args, **kwargs): if kwargs.get('raw_output'): yield event else: - yield { - **op, + updated_op = op.copy() + updated_op.update({ "_id": self.hash_op(event), "type": op_type, "timestamp": parse_time(event.get("timestamp")), "block_num": event.get("block"), "trx_id": event.get("trx_id"), - } - - def history(self, filter_by: Union[str, list] = list(), start_block=1, end_block=None, raw_output=False, **kwargs): + }) + yield updated_op + + def history(self, + filter_by=list(), + start_block=1, + end_block=None, + raw_output=False, + **kwargs): """ Yield a stream of historic operations. - - Similar to ``Blockchain.stream()``, but starts at beginning of chain unless ``start_block`` is set. - - Args: - filter_by (str, list): List of operations to filter for - start_block (int): Block to start with. If not provided, start of blockchain is used (block 1). - end_block (int): Stop iterating at this block. If not provided, this generator will run forever. - raw_output (bool): (Defaults to False). If True, return ops in a unmodified steemd structure. - """ + + Similar to ``Blockchain.stream()``, but starts at beginning of chain + unless ``start_block`` is set. + + Args: filter_by (str, list): List of operations to filter for + start_block (int): Block to start with. If not provided, start of + blockchain is used (block 1). + end_block (int): Stop iterating at this + block. If not provided, this generator will run forever. + raw_output (bool): (Defaults to False). If True, return ops in a + unmodified steemd structure. """ + return self.stream( filter_by=filter_by, start_block=start_block, end_block=end_block, raw_output=raw_output, - **kwargs - ) + **kwargs) def ops(self, *args, **kwargs): - raise DeprecationWarning('Blockchain.ops() is deprecated. Please use Blockchain.stream_from() instead.') + raise DeprecationWarning('Blockchain.ops() is deprecated. Please use ' + + 'Blockchain.stream_from() instead.') def replay(self, **kwargs): - warnings.warn('Blockchain.replay() is deprecated. Please use Blockchain.history() instead.') + warnings.warn('Blockchain.replay() is deprecated. ' + + 'Please use Blockchain.history() instead.') return self.history(**kwargs) @staticmethod - def hash_op(event: dict): + def hash_op(event): """ This method generates a hash of blockchain operation. """ data = json.dumps(event, sort_keys=True) - return hashlib.sha1(bytes(data, 'utf-8')).hexdigest() + return hashlib.sha1(compat_bytes(data, 'utf-8')).hexdigest() def get_all_usernames(self, *args, **kwargs): """ Fetch the full list of STEEM usernames. """ _ = args, kwargs - warnings.warn('Blockchain.get_all_usernames() is now at Steemd.get_all_usernames().') + warnings.warn( + 'Blockchain.get_all_usernames() is now Steemd.get_all_usernames().' + ) return self.steem.get_all_usernames() diff --git a/steem/blog.py b/steem/blog.py index c2565b2..7b034ad 100644 --- a/steem/blog.py +++ b/steem/blog.py @@ -13,7 +13,8 @@ class Blog: Args: account_name (str): Name of the account - comments_only (bool): (Default False). Toggle between posts and comments. + comments_only (bool): (Default False). Toggle between posts + and comments. steemd_instance (Steemd): Steemd instance overload Returns: @@ -39,7 +40,10 @@ class Blog: """ - def __init__(self, account_name: str, comments_only=False, steemd_instance=None): + def __init__(self, + account_name, + comments_only=False, + steemd_instance=None): self.steem = steemd_instance or shared_steemd_instance() self.comments_only = comments_only self.account = Account(account_name) @@ -56,11 +60,14 @@ def take(self, limit=5): List of posts/comments in a batch of size up to `limit`. """ # get main posts only - comment_filter = is_comment if self.comments_only else complement(is_comment) + comment_filter = is_comment if self.comments_only else complement( + is_comment) hist = filter(comment_filter, self.history) # filter out reblogs - match_author = lambda x: x['author'] == self.account.name + def match_author(x): + return x['author'] == self.account.name + hist2 = filter(match_author, hist) # post edits will re-appear in history @@ -82,7 +89,8 @@ def all(self): while True: chunk = self.take(10) if chunk: - yield from iter(chunk) + for little_chunk in iter(chunk): + yield little_chunk else: break diff --git a/steem/cli.py b/steem/cli.py index b58a430..e953fbe 100644 --- a/steem/cli.py +++ b/steem/cli.py @@ -2,11 +2,12 @@ import json import logging import os +import pkg_resources +import pprint import re +import steem as stm import sys -import pkg_resources -import steem as stm from prettytable import PrettyTable from steembase.storage import configStorage from steembase.account import PrivateKey @@ -28,7 +29,7 @@ ] -def legacy(): +def legacyentry(): """ Piston like cli application. This will be re-written as a @click app in the future. @@ -37,9 +38,7 @@ def legacy(): parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, - description="Command line tool to interact with the Steem network" - ) - + description="Command line tool to interact with the Steem network") """ Default settings for all tools """ @@ -47,45 +46,38 @@ def legacy(): '--node', type=str, default=configStorage["node"], - help='URL for public Steem API (default: "https://steemd.steemit.com")' + help='URL for public Steem API (default: "https://api.steemit.com")' ) parser.add_argument( - '--no-broadcast', '-d', + '--no-broadcast', + '-d', action='store_true', - help='Do not broadcast anything' - ) + help='Do not broadcast anything') parser.add_argument( - '--no-wallet', '-p', + '--no-wallet', + '-p', action='store_true', - help='Do not load the wallet' - ) + help='Do not load the wallet') parser.add_argument( - '--unsigned', '-x', + '--unsigned', + '-x', action='store_true', - help='Do not try to sign the transaction' - ) + help='Do not try to sign the transaction') parser.add_argument( - '--expires', '-e', + '--expires', + '-e', default=60, - help='Expiration time in seconds (defaults to 30)' - ) + help='Expiration time in seconds (defaults to 30)') parser.add_argument( - '--verbose', '-v', - type=int, - default=3, - help='Verbosity' - ) + '--verbose', '-v', type=int, default=3, help='Verbosity') parser.add_argument( '--version', action='version', version='%(prog)s {version}'.format( - version=pkg_resources.require("steem")[0].version - ) - ) + version=pkg_resources.require("steem")[0].version)) subparsers = parser.add_subparsers(help='sub-command help') - """ Command "set" """ @@ -94,95 +86,87 @@ def legacy(): 'key', type=str, choices=availableConfigurationKeys, - help='Configuration key' - ) - setconfig.add_argument( - 'value', - type=str, - help='Configuration value' - ) + help='Configuration key') + setconfig.add_argument('value', type=str, help='Configuration value') setconfig.set_defaults(command="set") - """ Command "config" """ - configconfig = subparsers.add_parser('config', help='Show local configuration') + configconfig = subparsers.add_parser( + 'config', help='Show local configuration') configconfig.set_defaults(command="config") - """ Command "info" """ - parser_info = subparsers.add_parser('info', help='Show basic STEEM blockchain info') + parser_info = subparsers.add_parser( + 'info', help='Show basic STEEM blockchain info') parser_info.set_defaults(command="info") parser_info.add_argument( 'objects', nargs='*', type=str, - help='General information about the blockchain, a block, an account name, a post, a public key, ...' - ) - + help='General information about the blockchain, a block, an account' + ' name, a post, a public key, ...') """ Command "changewalletpassphrase" """ - changepasswordconfig = subparsers.add_parser('changewalletpassphrase', help='Change wallet password') + changepasswordconfig = subparsers.add_parser( + 'changewalletpassphrase', help='Change wallet password') changepasswordconfig.set_defaults(command="changewalletpassphrase") - """ Command "addkey" """ - addkey = subparsers.add_parser('addkey', help='Add a new key to the wallet') + addkey = subparsers.add_parser( + 'addkey', help='Add a new key to the wallet') addkey.add_argument( '--unsafe-import-key', nargs='*', type=str, - help='private key to import into the wallet (unsafe, unless you delete your bash history)' - ) + help='private key to import into the wallet (unsafe, unless you ' + + 'delete your shell history)') addkey.set_defaults(command="addkey") - parsewif = subparsers.add_parser('parsewif', help='Parse a WIF private key without importing') + parsewif = subparsers.add_parser( + 'parsewif', help='Parse a WIF private key without importing') parsewif.add_argument( - '--unsafe-import-key', - nargs='*', - type=str, - help='WIF key to parse (unsafe, delete your bash history)' - ) + '--unsafe-import-key', + nargs='*', + type=str, + help='WIF key to parse (unsafe, delete your bash history)') parsewif.set_defaults(command='parsewif') - """ Command "delkey" """ - delkey = subparsers.add_parser('delkey', help='Delete keys from the wallet') + delkey = subparsers.add_parser( + 'delkey', help='Delete keys from the wallet') delkey.add_argument( 'pub', nargs='*', type=str, - help='the public key to delete from the wallet' - ) + help='the public key to delete from the wallet') delkey.set_defaults(command="delkey") - """ Command "getkey" """ - getkey = subparsers.add_parser('getkey', help='Dump the privatekey of a pubkey from the wallet') + getkey = subparsers.add_parser( + 'getkey', help='Dump the privatekey of a pubkey from the wallet') getkey.add_argument( 'pub', type=str, - help='the public key for which to show the private key' - ) + help='the public key for which to show the private key') getkey.set_defaults(command="getkey") - """ Command "listkeys" """ - listkeys = subparsers.add_parser('listkeys', help='List available keys in your wallet') + listkeys = subparsers.add_parser( + 'listkeys', help='List available keys in your wallet') listkeys.set_defaults(command="listkeys") - """ Command "listaccounts" """ - listaccounts = subparsers.add_parser('listaccounts', help='List available accounts in your wallet') + listaccounts = subparsers.add_parser( + 'listaccounts', help='List available accounts in your wallet') listaccounts.set_defaults(command="listaccounts") - """ Command "upvote" """ @@ -191,23 +175,20 @@ def legacy(): parser_upvote.add_argument( 'post', type=str, - help='@author/permlink-identifier of the post to upvote to (e.g. @xeroc/python-steem-0-1)' - ) + help='author/permlink-identifier of the post to upvote ' + + 'to (e.g. xeroc/python-steem-0-1)') parser_upvote.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='The voter account name' - ) + help='The voter account name') parser_upvote.add_argument( '--weight', type=float, default=configStorage["default_vote_weight"], required=False, - help='Actual weight (from 0.1 to 100.0)' - ) - + help='Actual weight (from 0.1 to 100.0)') """ Command "downvote" """ @@ -217,673 +198,535 @@ def legacy(): '--account', type=str, default=configStorage["default_account"], - help='The voter account name' - ) + help='The voter account name') parser_downvote.add_argument( 'post', type=str, - help='@author/permlink-identifier of the post to downvote to (e.g. @xeroc/python-steem-0-1)' - ) + help='author/permlink-identifier of the post to downvote ' + + 'to (e.g. xeroc/python-steem-0-1)') parser_downvote.add_argument( '--weight', type=float, default=configStorage["default_vote_weight"], required=False, - help='Actual weight (from 0.1 to 100.0)' - ) - + help='Actual weight (from 0.1 to 100.0)') """ Command "transfer" """ parser_transfer = subparsers.add_parser('transfer', help='Transfer STEEM') parser_transfer.set_defaults(command="transfer") + parser_transfer.add_argument('to', type=str, help='Recipient') parser_transfer.add_argument( - 'to', - type=str, - help='Recipient' - ) - parser_transfer.add_argument( - 'amount', - type=float, - help='Amount to transfer' - ) + 'amount', type=float, help='Amount to transfer') parser_transfer.add_argument( 'asset', type=str, choices=["STEEM", "SBD"], - help='Asset to transfer (i.e. STEEM or SDB)' - ) + help='Asset to transfer (i.e. STEEM or SDB)') parser_transfer.add_argument( - 'memo', - type=str, - nargs="?", - default="", - help='Optional memo' - ) + 'memo', type=str, nargs="?", default="", help='Optional memo') parser_transfer.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Transfer from this account' - ) - + help='Transfer from this account') """ Command "powerup" """ - parser_powerup = subparsers.add_parser('powerup', help='Power up (vest STEEM as STEEM POWER)') + parser_powerup = subparsers.add_parser( + 'powerup', help='Power up (vest STEEM as STEEM POWER)') parser_powerup.set_defaults(command="powerup") parser_powerup.add_argument( - 'amount', - type=str, - help='Amount of VESTS to powerup' - ) + 'amount', type=str, help='Amount of VESTS to powerup') parser_powerup.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Powerup from this account' - ) + help='Powerup from this account') parser_powerup.add_argument( '--to', type=str, required=False, default=None, - help='Powerup this account' - ) - + help='Powerup this account') """ Command "powerdown" """ - parser_powerdown = subparsers.add_parser('powerdown', help='Power down (start withdrawing STEEM from steem POWER)') + parser_powerdown = subparsers.add_parser( + 'powerdown', + help='Power down (start withdrawing STEEM from steem POWER)') parser_powerdown.set_defaults(command="powerdown") parser_powerdown.add_argument( - 'amount', - type=str, - help='Amount of VESTS to powerdown' - ) + 'amount', type=str, help='Amount of VESTS to powerdown') parser_powerdown.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='powerdown from this account' - ) - + help='powerdown from this account') """ Command "powerdownroute" """ - parser_powerdownroute = subparsers.add_parser('powerdownroute', help='Setup a powerdown route') + parser_powerdownroute = subparsers.add_parser( + 'powerdownroute', help='Setup a powerdown route') parser_powerdownroute.set_defaults(command="powerdownroute") parser_powerdownroute.add_argument( 'to', type=str, default=configStorage["default_account"], - help='The account receiving either VESTS/SteemPower or STEEM.' - ) + help='The account receiving either VESTS/SteemPower or STEEM.') parser_powerdownroute.add_argument( '--percentage', type=float, default=100, - help='The percent of the withdraw to go to the "to" account' - ) + help='The percent of the withdraw to go to the "to" account') parser_powerdownroute.add_argument( '--account', type=str, default=configStorage["default_account"], - help='The account which is powering down' - ) + help='The account which is powering down') parser_powerdownroute.add_argument( '--auto_vest', action='store_true', help=('Set to true if the from account should receive the VESTS as' - 'VESTS, or false if it should receive them as STEEM.') - ) - + 'VESTS, or false if it should receive them as STEEM.')) """ Command "convert" """ - parser_convert = subparsers.add_parser('convert', help='Convert STEEMDollars to Steem (takes a week to settle)') + parser_convert = subparsers.add_parser( + 'convert', + help='Convert STEEMDollars to Steem (takes a week to settle)') parser_convert.set_defaults(command="convert") parser_convert.add_argument( - 'amount', - type=float, - help='Amount of SBD to convert' - ) + 'amount', type=float, help='Amount of SBD to convert') parser_convert.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Convert from this account' - ) - + help='Convert from this account') """ Command "balance" """ - parser_balance = subparsers.add_parser('balance', help='Show the balance of one more more accounts') + parser_balance = subparsers.add_parser( + 'balance', help='Show the balance of one more more accounts') parser_balance.set_defaults(command="balance") parser_balance.add_argument( 'account', type=str, nargs="*", default=configStorage["default_account"], - help='balance of these account (multiple accounts allowed)' - ) - + help='balance of these account (multiple accounts allowed)') """ Command "interest" """ - interest = subparsers.add_parser('interest', help='Get information about interest payment') + interest = subparsers.add_parser( + 'interest', help='Get information about interest payment') interest.set_defaults(command="interest") interest.add_argument( 'account', type=str, nargs="*", default=configStorage["default_account"], - help='Inspect these accounts' - ) - + help='Inspect these accounts') """ Command "permissions" """ - parser_permissions = subparsers.add_parser('permissions', help='Show permissions of an account') + parser_permissions = subparsers.add_parser( + 'permissions', help='Show permissions of an account') parser_permissions.set_defaults(command="permissions") parser_permissions.add_argument( 'account', type=str, nargs="?", default=configStorage["default_account"], - help='Account to show permissions for' - ) - + help='Account to show permissions for') """ Command "allow" """ - parser_allow = subparsers.add_parser('allow', help='Allow an account/key to interact with your account') + parser_allow = subparsers.add_parser( + 'allow', help='Allow an account/key to interact with your account') parser_allow.set_defaults(command="allow") parser_allow.add_argument( '--account', type=str, nargs="?", default=configStorage["default_account"], - help='The account to allow action for' - ) + help='The account to allow action for') parser_allow.add_argument( 'foreign_account', type=str, nargs="?", - help='The account or key that will be allowed to interact as your account' - ) + help='The account or key that will be allowed to interact with ' + + 'your account') parser_allow.add_argument( '--permission', type=str, default="posting", choices=["owner", "posting", "active"], - help='The permission to grant (defaults to "posting")' - ) + help='The permission to grant (defaults to "posting")') parser_allow.add_argument( '--weight', type=int, default=None, help=('The weight to use instead of the (full) threshold. ' 'If the weight is smaller than the threshold, ' - 'additional signatures are required') - ) + 'additional signatures are required')) parser_allow.add_argument( '--threshold', type=int, default=None, help=('The permission\'s threshold that needs to be reached ' - 'by signatures to be able to interact') - ) - + 'by signatures to be able to interact')) """ Command "disallow" """ - parser_disallow = subparsers.add_parser('disallow', - help='Remove allowance an account/key to interact with your account') + parser_disallow = subparsers.add_parser( + 'disallow', + help='Remove allowance an account/key to interact with your account') parser_disallow.set_defaults(command="disallow") parser_disallow.add_argument( '--account', type=str, nargs="?", default=configStorage["default_account"], - help='The account to disallow action for' - ) + help='The account to disallow action for') parser_disallow.add_argument( 'foreign_account', type=str, - help='The account or key whose allowance to interact as your account will be removed' - ) + help='The account or key whose allowance to interact as your ' + + 'account will be removed') parser_disallow.add_argument( '--permission', type=str, default="posting", choices=["owner", "posting", "active"], - help='The permission to remove (defaults to "posting")' - ) + help='The permission to remove (defaults to "posting")') parser_disallow.add_argument( '--threshold', type=int, default=None, help=('The permission\'s threshold that needs to be reached ' - 'by signatures to be able to interact') - ) - + 'by signatures to be able to interact')) """ Command "newaccount" """ - parser_newaccount = subparsers.add_parser('newaccount', help='Create a new account') + parser_newaccount = subparsers.add_parser( + 'newaccount', help='Create a new account') parser_newaccount.set_defaults(command="newaccount") parser_newaccount.add_argument( - 'accountname', - type=str, - help='New account name' - ) + 'accountname', type=str, help='New account name') parser_newaccount.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Account that pays the fee' - ) + help='Account that pays the fee') parser_newaccount.add_argument( '--fee', type=str, required=False, default='0 STEEM', - help='Base Fee to pay. Delegate the rest.' - ) - + help='Base Fee to pay. Delegate the rest.') """ Command "importaccount" """ - parser_importaccount = subparsers.add_parser('importaccount', help='Import an account using a passphrase') + parser_importaccount = subparsers.add_parser( + 'importaccount', help='Import an account using a passphrase') parser_importaccount.set_defaults(command="importaccount") - parser_importaccount.add_argument( - 'account', - type=str, - help='Account name' - ) + parser_importaccount.add_argument('account', type=str, help='Account name') parser_importaccount.add_argument( '--roles', type=str, nargs="*", default=["active", "posting", "memo"], # no owner - help='Import specified keys (owner, active, posting, memo)' - ) - + help='Import specified keys (owner, active, posting, memo)') """ Command "updateMemoKey" """ - parser_updateMemoKey = subparsers.add_parser('updatememokey', help='Update an account\'s memo key') + parser_updateMemoKey = subparsers.add_parser( + 'updatememokey', help='Update an account\'s memo key') parser_updateMemoKey.set_defaults(command="updatememokey") parser_updateMemoKey.add_argument( '--account', type=str, nargs="?", default=configStorage["default_account"], - help='The account to updateMemoKey action for' - ) + help='The account to updateMemoKey action for') parser_updateMemoKey.add_argument( - '--key', - type=str, - default=None, - help='The new memo key' - ) - + '--key', type=str, default=None, help='The new memo key') """ Command "approvewitness" """ - parser_approvewitness = subparsers.add_parser('approvewitness', help='Approve a witnesses') + parser_approvewitness = subparsers.add_parser( + 'approvewitness', help='Approve a witnesses') parser_approvewitness.set_defaults(command="approvewitness") parser_approvewitness.add_argument( - 'witness', - type=str, - help='Witness to approve' - ) + 'witness', type=str, help='Witness to approve') parser_approvewitness.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Your account' - ) - + help='Your account') """ Command "disapprovewitness" """ - parser_disapprovewitness = subparsers.add_parser('disapprovewitness', help='Disapprove a witnesses') + parser_disapprovewitness = subparsers.add_parser( + 'disapprovewitness', help='Disapprove a witnesses') parser_disapprovewitness.set_defaults(command="disapprovewitness") parser_disapprovewitness.add_argument( - 'witness', - type=str, - help='Witness to disapprove' - ) + 'witness', type=str, help='Witness to disapprove') parser_disapprovewitness.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Your account' - ) - + help='Your account') """ Command "sign" """ - parser_sign = subparsers.add_parser('sign', help='Sign a provided transaction with available and required keys') + parser_sign = subparsers.add_parser( + 'sign', + help='Sign a provided transaction with available and required keys') parser_sign.set_defaults(command="sign") parser_sign.add_argument( '--file', type=str, required=False, - help='Load transaction from file. If "-", read from stdin (defaults to "-")' - ) - + help='Load transaction from file. If "-", read from ' + + 'stdin (defaults to "-")') """ Command "broadcast" """ - parser_broadcast = subparsers.add_parser('broadcast', help='broadcast a signed transaction') + parser_broadcast = subparsers.add_parser( + 'broadcast', help='broadcast a signed transaction') parser_broadcast.set_defaults(command="broadcast") parser_broadcast.add_argument( '--file', type=str, required=False, - help='Load transaction from file. If "-", read from stdin (defaults to "-")' - ) - + help='Load transaction from file. If "-", read from ' + + 'stdin (defaults to "-")') """ Command "orderbook" """ - orderbook = subparsers.add_parser('orderbook', help='Obtain orderbook of the internal market') + orderbook = subparsers.add_parser( + 'orderbook', help='Obtain orderbook of the internal market') orderbook.set_defaults(command="orderbook") orderbook.add_argument( '--chart', action='store_true', - help="Enable charting (requires matplotlib)" - ) - + help="Enable charting (requires matplotlib)") """ Command "buy" """ - parser_buy = subparsers.add_parser('buy', help='Buy STEEM or SBD from the internal market') + parser_buy = subparsers.add_parser( + 'buy', help='Buy STEEM or SBD from the internal market') parser_buy.set_defaults(command="buy") - parser_buy.add_argument( - 'amount', - type=float, - help='Amount to buy' - ) + parser_buy.add_argument('amount', type=float, help='Amount to buy') parser_buy.add_argument( 'asset', type=str, choices=["STEEM", "SBD"], - help='Asset to buy (i.e. STEEM or SDB)' - ) + help='Asset to buy (i.e. STEEM or SDB)') parser_buy.add_argument( - 'price', - type=float, - help='Limit buy price denoted in (SBD per STEEM)' - ) + 'price', type=float, help='Limit buy price denoted in (SBD per STEEM)') parser_buy.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Buy with this account (defaults to "default_account")' - ) - + help='Buy with this account (defaults to "default_account")') """ Command "sell" """ - parser_sell = subparsers.add_parser('sell', help='Sell STEEM or SBD from the internal market') + parser_sell = subparsers.add_parser( + 'sell', help='Sell STEEM or SBD from the internal market') parser_sell.set_defaults(command="sell") - parser_sell.add_argument( - 'amount', - type=float, - help='Amount to sell' - ) + parser_sell.add_argument('amount', type=float, help='Amount to sell') parser_sell.add_argument( 'asset', type=str, choices=["STEEM", "SBD"], - help='Asset to sell (i.e. STEEM or SDB)' - ) + help='Asset to sell (i.e. STEEM or SDB)') parser_sell.add_argument( 'price', type=float, - help='Limit sell price denoted in (SBD per STEEM)' - ) + help='Limit sell price denoted in (SBD per STEEM)') parser_sell.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Sell from this account (defaults to "default_account")' - ) + help='Sell from this account (defaults to "default_account")') """ Command "cancel" """ - parser_cancel = subparsers.add_parser('cancel', help='Cancel order in the internal market') + parser_cancel = subparsers.add_parser( + 'cancel', help='Cancel order in the internal market') parser_cancel.set_defaults(command="cancel") - parser_cancel.add_argument( - 'orderid', - type=int, - help='Orderid' - ) + parser_cancel.add_argument('orderid', type=int, help='Orderid') parser_cancel.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Cancel from this account (defaults to "default_account")' - ) - + help='Cancel from this account (defaults to "default_account")') """ Command "resteem" """ - parser_resteem = subparsers.add_parser('resteem', help='Resteem an existing post') + parser_resteem = subparsers.add_parser( + 'resteem', help='Resteem an existing post') parser_resteem.set_defaults(command="resteem") parser_resteem.add_argument( 'identifier', type=str, - help='@author/permlink-identifier of the post to resteem' - ) + help='author/permlink-identifier of the post to resteem') parser_resteem.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Resteem as this user (requires to have the key installed in the wallet)' - ) - + help='Resteem as this user (requires to have the ' + + 'key installed in the wallet)') """ Command "follow" """ - parser_follow = subparsers.add_parser('follow', help='Follow another account') + parser_follow = subparsers.add_parser( + 'follow', help='Follow another account') parser_follow.set_defaults(command="follow") - parser_follow.add_argument( - 'follow', - type=str, - help='Account to follow' - ) + parser_follow.add_argument('follow', type=str, help='Account to follow') parser_follow.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Follow from this account' - ) + help='Follow from this account') parser_follow.add_argument( '--what', type=str, required=False, nargs="*", default=["blog"], - help='Follow these objects (defaults to "blog")' - ) - + help='Follow these objects (defaults to "blog")') """ Command "unfollow" """ - parser_unfollow = subparsers.add_parser('unfollow', help='unfollow another account') + parser_unfollow = subparsers.add_parser( + 'unfollow', help='unfollow another account') parser_unfollow.set_defaults(command="unfollow") parser_unfollow.add_argument( - 'unfollow', - type=str, - help='Account to unfollow' - ) + 'unfollow', type=str, help='Account to unfollow') parser_unfollow.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='Unfollow from this account' - ) + help='Unfollow from this account') parser_unfollow.add_argument( '--what', type=str, required=False, nargs="*", default=[], - help='Unfollow these objects (defaults to "blog")' - ) - + help='Unfollow these objects (defaults to "blog")') """ Command "setprofile" """ - parser_setprofile = subparsers.add_parser('setprofile', help='Set a variable in an account\'s profile') + parser_setprofile = subparsers.add_parser( + 'setprofile', help='Set a variable in an account\'s profile') parser_setprofile.set_defaults(command="setprofile") parser_setprofile.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='setprofile as this user (requires to have the key installed in the wallet)' - ) - parser_setprofile_a = parser_setprofile.add_argument_group('Multiple keys at once') + help='setprofile as this user (requires to have the key ' + + 'installed in the wallet)') + parser_setprofile_a = parser_setprofile.add_argument_group( + 'Multiple keys at once') parser_setprofile_a.add_argument( - '--pair', - type=str, - nargs='*', - help='"Key=Value" pairs' - ) - parser_setprofile_b = parser_setprofile.add_argument_group('Just a single key') + '--pair', type=str, nargs='*', help='"Key=Value" pairs') + parser_setprofile_b = parser_setprofile.add_argument_group( + 'Just a single key') parser_setprofile_b.add_argument( - 'variable', - type=str, - nargs='?', - help='Variable to set' - ) + 'variable', type=str, nargs='?', help='Variable to set') parser_setprofile_b.add_argument( - 'value', - type=str, - nargs='?', - help='Value to set' - ) - + 'value', type=str, nargs='?', help='Value to set') """ Command "delprofile" """ - parser_delprofile = subparsers.add_parser('delprofile', help='Set a variable in an account\'s profile') + parser_delprofile = subparsers.add_parser( + 'delprofile', help='Set a variable in an account\'s profile') parser_delprofile.set_defaults(command="delprofile") parser_delprofile.add_argument( '--account', type=str, required=False, default=configStorage["default_account"], - help='delprofile as this user (requires to have the key installed in the wallet)' - ) + help='delprofile as this user (requires to have the ' + + 'key installed in the wallet)') parser_delprofile.add_argument( - 'variable', - type=str, - nargs='*', - help='Variable to set' - ) - + 'variable', type=str, nargs='*', help='Variable to set') """ Command "witnessupdate" """ - parser_witnessprops = subparsers.add_parser('witnessupdate', help='Change witness properties') + parser_witnessprops = subparsers.add_parser( + 'witnessupdate', help='Change witness properties') parser_witnessprops.set_defaults(command="witnessupdate") parser_witnessprops.add_argument( '--witness', type=str, default=configStorage["default_account"], - help='Witness name' - ) + help='Witness name') parser_witnessprops.add_argument( '--maximum_block_size', type=float, required=False, - help='Max block size' - ) + help='Max block size') parser_witnessprops.add_argument( '--account_creation_fee', type=float, required=False, - help='Account creation fee' - ) + help='Account creation fee') parser_witnessprops.add_argument( '--sbd_interest_rate', type=float, required=False, - help='SBD interest rate in percent' - ) + help='SBD interest rate in percent') parser_witnessprops.add_argument( - '--url', - type=str, - required=False, - help='Witness URL' - ) + '--url', type=str, required=False, help='Witness URL') parser_witnessprops.add_argument( - '--signing_key', - type=str, - required=False, - help='Signing Key' - ) - + '--signing_key', type=str, required=False, help='Signing Key') """ Command "witnesscreate" """ - parser_witnesscreate = subparsers.add_parser('witnesscreate', help='Create a witness') + parser_witnesscreate = subparsers.add_parser( + 'witnesscreate', help='Create a witness') parser_witnesscreate.set_defaults(command="witnesscreate") + parser_witnesscreate.add_argument('witness', type=str, help='Witness name') parser_witnesscreate.add_argument( - 'witness', - type=str, - help='Witness name' - ) - parser_witnesscreate.add_argument( - 'signing_key', - type=str, - help='Signing Key' - ) + 'signing_key', type=str, help='Signing Key') parser_witnesscreate.add_argument( '--maximum_block_size', type=float, default="65536", - help='Max block size' - ) + help='Max block size') parser_witnesscreate.add_argument( '--account_creation_fee', type=float, default=30, - help='Account creation fee' - ) + help='Account creation fee') parser_witnesscreate.add_argument( '--sbd_interest_rate', type=float, default=0.0, - help='SBD interest rate in percent' - ) + help='SBD interest rate in percent') parser_witnesscreate.add_argument( - '--url', - type=str, - default="", - help='Witness URL' - ) - + '--url', type=str, default="", help='Witness URL') """ Parse Arguments """ @@ -891,13 +734,11 @@ def legacy(): # Logging log = logging.getLogger(__name__) - verbosity = ["critical", - "error", - "warn", - "info", - "debug"][int(min(args.verbose, 4))] + verbosity = ["critical", "error", "warn", "info", "debug"][int( + min(args.verbose, 4))] log.setLevel(getattr(logging, verbosity.upper())) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + formatter = logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch = logging.StreamHandler() ch.setLevel(getattr(logging, verbosity.upper())) ch.setFormatter(formatter) @@ -905,20 +746,14 @@ def legacy(): # GrapheneAPI logging if args.verbose > 4: - verbosity = ["critical", - "error", - "warn", - "info", - "debug"][int(min((args.verbose - 4), 4))] + verbosity = ["critical", "error", "warn", "info", "debug"][int( + min((args.verbose - 4), 4))] gphlog = logging.getLogger("graphenebase") gphlog.setLevel(getattr(logging, verbosity.upper())) gphlog.addHandler(ch) if args.verbose > 8: - verbosity = ["critical", - "error", - "warn", - "info", - "debug"][int(min((args.verbose - 8), 4))] + verbosity = ["critical", "error", "warn", "info", "debug"][int( + min((args.verbose - 8), 4))] gphlog = logging.getLogger("grapheneapi") gphlog.setLevel(getattr(logging, verbosity.upper())) gphlog.addHandler(ch) @@ -941,8 +776,8 @@ def legacy(): steem = stm.Steem(no_broadcast=args.no_broadcast, **options) if args.command == "set": - if (args.key in ["default_account"] and - args.value[0] == "@"): + # TODO: Evaluate this line with cli refactor. + if (args.key in ["default_account"] and args.value[0] == "@"): args.value = args.value[1:] configStorage[args.key] = args.value @@ -950,7 +785,8 @@ def legacy(): t = PrettyTable(["Key", "Value"]) t.align = "l" for key in configStorage: - if key in availableConfigurationKeys: # hide internal config data + # hide internal config data + if key in availableConfigurationKeys: t.add_row([key, configStorage[key]]) print(t) @@ -962,13 +798,10 @@ def legacy(): info = blockchain.info() median_price = steem.get_current_median_history_price() steem_per_mvest = ( - Amount(info["total_vesting_fund_steem"]).amount / - (Amount(info["total_vesting_shares"]).amount / 1e6) - ) - price = ( - Amount(median_price["base"]).amount / - Amount(median_price["quote"]).amount - ) + Amount(info["total_vesting_fund_steem"]).amount / + (Amount(info["total_vesting_shares"]).amount / 1e6)) + price = (Amount(median_price["base"]).amount / Amount( + median_price["quote"]).amount) for key in info: t.add_row([key, info[key]]) t.add_row(["steem per mvest", steem_per_mvest]) @@ -999,22 +832,14 @@ def legacy(): for key in sorted(account): value = account[key] if key == "json_metadata": - value = json.dumps( - json.loads(value or "{}"), - indent=4 - ) - if key in ["posting", - "witness_votes", - "active", - "owner"]: + value = json.dumps(json.loads(value or "{}"), indent=4) + if key in ["posting", "witness_votes", "active", "owner"]: value = json.dumps(value, indent=4) if key == "reputation" and int(value) > 0: value = int(value) rep = (max(log10(value) - 9, 0) * 9 + 25 if value > 0 else max(log10(-value) - 9, 0) * -9 + 25) - value = "{:.2f} ({:d})".format( - rep, value - ) + value = "{:.2f} ({:d})".format(rep, value) t.add_row([key, value]) print(t) @@ -1025,12 +850,11 @@ def legacy(): t.align = "l" for key in sorted(witness): value = witness[key] - if key in ["props", - "sbd_exchange_rate"]: + if key in ["props", "sbd_exchange_rate"]: value = json.dumps(value, indent=4) t.add_row([key, value]) print(t) - except: + except: # noqa FIXME(sneak) pass # Public Key elif re.match("^STM.{48,55}$", obj): @@ -1050,10 +874,7 @@ def legacy(): t.align = "l" for key in sorted(post): value = post[key] - if (key in ["tags", - "json_metadata", - "active_votes" - ]): + if (key in ["tags", "json_metadata", "active_votes"]): value = json.dumps(value, indent=4) t.add_row([key, value]) print(t) @@ -1063,7 +884,7 @@ def legacy(): print("Couldn't identify object to read") elif args.command == "changewalletpassphrase": - steem.commit.wallet.changePassphrase() + steem.commit.wallet.changeUserPassphrase() elif args.command == "addkey": if args.unsafe_import_key: @@ -1086,7 +907,8 @@ def legacy(): installed_keys = steem.commit.wallet.getPublicKeys() if len(installed_keys) == 1: - name = steem.commit.wallet.getAccountFromPublicKey(installed_keys[0]) + name = steem.commit.wallet.getAccountFromPublicKey( + installed_keys[0]) print("=" * 30) print("Would you like to make %s a default user?" % name) print() @@ -1095,32 +917,30 @@ def legacy(): print("=" * 30) elif args.command == "delkey": - if confirm( - "Are you sure you want to delete keys from your wallet?\n" - "This step is IRREVERSIBLE! If you don't have a backup, " - "You may lose access to your account!" - ): + if confirm("Are you sure you want to delete keys from your wallet?\n" + "This step is IRREVERSIBLE! If you don't have a backup, " + "You may lose access to your account!"): for pub in args.pub: steem.commit.wallet.removePrivateKeyFromPublicKey(pub) elif args.command == "parsewif": if args.unsafe_import_key: - for key in args.unsafe_import_key: - try: - print(PrivateKey(key).pubkey) - except Exception as e: - print(str(e)) + for key in args.unsafe_import_key: + try: + print(PrivateKey(key).pubkey) + except Exception as e: + print(str(e)) else: - import getpass - while True: - wifkey = getpass.getpass('Private Key (wif) [Enter to quit:') - if not wifkey: - break - try: - print(PrivateKey(wifkey).pubkey) - except Exception as e: - print(str(e)) - continue + import getpass + while True: + wifkey = getpass.getpass('Private Key (wif) [Enter to quit:') + if not wifkey: + break + try: + print(PrivateKey(wifkey).pubkey) + except Exception as e: + print(str(e)) + continue elif args.command == "getkey": print(steem.commit.wallet.getPrivateKeyForPublicKey(args.pub)) @@ -1136,8 +956,7 @@ def legacy(): t.align = "l" for account in steem.commit.wallet.getAccounts(): t.add_row([ - account["name"] or "n/a", - account["type"] or "n/a", + account["name"] or "n/a", account["type"] or "n/a", account["pubkey"] ]) print(t) @@ -1154,26 +973,25 @@ def legacy(): print_json(post.vote(weight, voter=args.account)) elif args.command == "transfer": - print_json(steem.commit.transfer( - args.to, - args.amount, - args.asset, - memo=args.memo, - account=args.account - )) + print_json( + steem.commit.transfer( + args.to, + args.amount, + args.asset, + memo=args.memo, + account=args.account)) elif args.command == "powerup": - print_json(steem.commit.transfer_to_vesting( - args.amount, - account=args.account, - to=args.to - )) + print_json( + steem.commit.transfer_to_vesting( + args.amount, account=args.account, to=args.to)) elif args.command == "powerdown": - print_json(steem.commit.withdraw_vesting( - args.amount, - account=args.account, - )) + print_json( + steem.commit.withdraw_vesting( + args.amount, + account=args.account, + )) elif args.command == "convert": print_json(steem.commit.convert( @@ -1182,19 +1000,19 @@ def legacy(): )) elif args.command == "powerdownroute": - print_json(steem.commit.set_withdraw_vesting_route( - args.to, - percentage=args.percentage, - account=args.account, - auto_vest=args.auto_vest - )) + print_json( + steem.commit.set_withdraw_vesting_route( + args.to, + percentage=args.percentage, + account=args.account, + auto_vest=args.auto_vest)) elif args.command == "balance": if args.account and isinstance(args.account, list): for account in args.account: a = Account(account) - print("\n@%s" % a.name) + print("\n%s" % a.name) t = PrettyTable(["Account", "STEEM", "SBD", "VESTS"]) t.align = "r" t.add_row([ @@ -1226,11 +1044,10 @@ def legacy(): print("Please specify an account: steempy balance ") elif args.command == "interest": - t = PrettyTable(["Account", - "Last Interest Payment", - "Next Payment", - "Interest rate", - "Interest"]) + t = PrettyTable([ + "Account", "Last Interest Payment", "Next Payment", + "Interest rate", "Interest" + ]) t.align = "r" if isinstance(args.account, str): args.account = [args.account] @@ -1253,39 +1070,43 @@ def legacy(): elif args.command == "allow": if not args.foreign_account: from steembase.account import PasswordKey - pwd = get_terminal(text="Password for Key Derivation: ", confirm=True) - args.foreign_account = format(PasswordKey(args.account, pwd, args.permission).get_public(), "STM") - print_json(steem.commit.allow( - args.foreign_account, - weight=args.weight, - account=args.account, - permission=args.permission, - threshold=args.threshold - )) + pwd = get_terminal( + text="Password for Key Derivation: ", confirm=True) + args.foreign_account = format( + PasswordKey(args.account, pwd, args.permission).get_public(), + "STM") + print_json( + steem.commit.allow( + args.foreign_account, + weight=args.weight, + account=args.account, + permission=args.permission, + threshold=args.threshold)) elif args.command == "disallow": - print_json(steem.commit.disallow( - args.foreign_account, - account=args.account, - permission=args.permission, - threshold=args.threshold - )) + print_json( + steem.commit.disallow( + args.foreign_account, + account=args.account, + permission=args.permission, + threshold=args.threshold)) elif args.command == "updatememokey": if not args.key: # Loop until both match from steembase.account import PasswordKey - pw = get_terminal(text="Password for Memo Key: ", confirm=True, allowedempty=False) + pw = get_terminal( + text="Password for Memo Key: ", + confirm=True, + allowedempty=False) memo_key = PasswordKey(args.account, pw, "memo") args.key = format(memo_key.get_public_key(), "STM") memo_privkey = memo_key.get_private_key() # Add the key to the wallet if not args.no_broadcast: steem.commit.wallet.addPrivateKey(memo_privkey) - print_json(steem.commit.update_memo_key( - args.key, - account=args.account - )) + print_json( + steem.commit.update_memo_key(args.key, account=args.account)) elif args.command == "newaccount": import getpass @@ -1295,19 +1116,18 @@ def legacy(): print("You cannot chosen an empty password!") continue else: - pwck = getpass.getpass( - "Confirm New Account Passphrase: " - ) + pwck = getpass.getpass("Confirm New Account Passphrase: ") if pw == pwck: break else: print("Given Passphrases do not match!") - print_json(steem.commit.create_account( - args.accountname, - creator=args.account, - password=pw, - delegation_fee_steem=args.fee, - )) + print_json( + steem.commit.create_account( + args.accountname, + creator=args.account, + password=pw, + delegation_fee_steem=args.fee, + )) elif args.command == "importaccount": from steembase.account import PasswordKey @@ -1337,7 +1157,9 @@ def legacy(): if "posting" in args.roles: posting_key = PasswordKey(args.account, password, role="posting") posting_pubkey = format(posting_key.get_public_key(), "STM") - if posting_pubkey in [x[0] for x in account["posting"]["key_auths"]]: + if posting_pubkey in [ + x[0] for x in account["posting"]["key_auths"] + ]: print("Importing posting key!") posting_privkey = posting_key.get_private_key() steem.commit.wallet.addPrivateKey(posting_privkey) @@ -1383,12 +1205,8 @@ def legacy(): else: price = args.price dex = Dex(steem) - print_json(dex.buy( - args.amount, - args.asset, - price, - account=args.account - )) + print_json( + dex.buy(args.amount, args.asset, price, account=args.account)) elif args.command == "sell": if args.asset == "SBD": @@ -1396,50 +1214,34 @@ def legacy(): else: price = args.price dex = Dex(steem) - print_json(dex.sell( - args.amount, - args.asset, - price, - account=args.account - )) + print_json( + dex.sell(args.amount, args.asset, price, account=args.account)) elif args.command == "cancel": dex = Dex(steem) - print_json( - dex.cancel(args.orderid) - ) + print_json(dex.cancel(args.orderid)) elif args.command == "approvewitness": - print_json(steem.commit.approve_witness( - args.witness, - account=args.account - )) + print_json( + steem.commit.approve_witness(args.witness, account=args.account)) elif args.command == "disapprovewitness": - print_json(steem.commit.disapprove_witness( - args.witness, - account=args.account - )) + print_json( + steem.commit.disapprove_witness( + args.witness, account=args.account)) elif args.command == "resteem": - print_json(steem.commit.resteem( - args.identifier, - account=args.account - )) + print_json(steem.commit.resteem(args.identifier, account=args.account)) elif args.command == "follow": - print_json(steem.commit.follow( - args.follow, - what=args.what, - account=args.account - )) + print_json( + steem.commit.follow( + args.follow, what=args.what, account=args.account)) elif args.command == "unfollow": - print_json(steem.commit.unfollow( - args.unfollow, - what=args.what, - account=args.account - )) + print_json( + steem.commit.unfollow( + args.unfollow, what=args.what, account=args.account)) elif args.command == "setprofile": from .profile import Profile @@ -1457,17 +1259,13 @@ def legacy(): profile = Profile(keys, values) account = Account(args.account) - account["json_metadata"] = Profile( - account["json_metadata"] - if account["json_metadata"] - else {} - ) + account["json_metadata"] = Profile(account["json_metadata"] + if account["json_metadata"] else {}) account["json_metadata"].update(profile) - print_json(steem.commit.update_account_profile( - account["json_metadata"], - account=args.account - )) + print_json( + steem.commit.update_account_profile( + account["json_metadata"], account=args.account)) elif args.command == "delprofile": from .profile import Profile @@ -1477,41 +1275,41 @@ def legacy(): for var in args.variable: account["json_metadata"].remove(var) - print_json(steem.commit.update_account_profile( - account["json_metadata"], - account=args.account - )) + print_json( + steem.commit.update_account_profile( + account["json_metadata"], account=args.account)) elif args.command == "witnessupdate": witness = Witness(args.witness) props = witness["props"] if args.account_creation_fee: - props["account_creation_fee"] = str(Amount("%f STEEM" % args.account_creation_fee)) + props["account_creation_fee"] = str( + Amount("%f STEEM" % args.account_creation_fee)) if args.maximum_block_size: props["maximum_block_size"] = args.maximum_block_size if args.sbd_interest_rate: props["sbd_interest_rate"] = int(args.sbd_interest_rate * 100) - print_json(steem.commit.witness_update( - args.signing_key or witness["signing_key"], - args.url or witness["url"], - props, - account=args.witness - )) + print_json( + steem.commit.witness_update( + args.signing_key or witness["signing_key"], + args.url or witness["url"], + props, + account=args.witness)) elif args.command == "witnesscreate": props = { - "account_creation_fee": str(Amount("%f STEEM" % args.account_creation_fee)), - "maximum_block_size": args.maximum_block_size, - "sbd_interest_rate": int(args.sbd_interest_rate * 100) + "account_creation_fee": + str(Amount("%f STEEM" % args.account_creation_fee)), + "maximum_block_size": + args.maximum_block_size, + "sbd_interest_rate": + int(args.sbd_interest_rate * 100) } - print_json(steem.commit.witness_update( - args.signing_key, - args.url, - props, - account=args.witness - )) + print_json( + steem.commit.witness_update( + args.signing_key, args.url, props, account=args.witness)) else: print("No valid command given") @@ -1526,10 +1324,7 @@ def confirm(question, default="yes"): :rtype: bool """ - valid = { - "yes": True, "y": True, "ye": True, - "no": False, "n": False - } + valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} if default is None: prompt = " [y/n] " elif default == "yes": @@ -1540,7 +1335,13 @@ def confirm(question, default="yes"): raise ValueError("invalid default answer: '%s'" % default) while True: sys.stdout.write(question + prompt) - choice = input().lower() + # Python 2.7 `input` attempts to evaluate the input, while in 3+ + # it returns a string. Python 2.7 `raw_input` returns a str as desired. + if sys.version >= '3.0': + choice = input().lower() + else: + choice = raw_input().lower() + if default is not None and choice == '': return valid[default] elif choice in valid: @@ -1560,9 +1361,7 @@ def get_terminal(text="Password", confirm=False, allowedempty=False): else: if not confirm: break - pwck = getpass.getpass( - "Confirm " + text - ) + pwck = getpass.getpass("Confirm " + text) if pw == pwck: break else: @@ -1574,13 +1373,11 @@ def format_operation_details(op, memos=False): if op[0] == "vote": return "%s: %s" % ( op[1]["voter"], - construct_identifier(op[1]["author"], op[1]["permlink"]) - ) + construct_identifier(op[1]["author"], op[1]["permlink"])) elif op[0] == "comment": return "%s: %s" % ( op[1]["author"], - construct_identifier(op[1]["author"], op[1]["permlink"]) - ) + construct_identifier(op[1]["author"], op[1]["permlink"])) elif op[0] == "transfer": str_ = "%s -> %s %s" % ( op[1]["from"], @@ -1597,9 +1394,7 @@ def format_operation_details(op, memos=False): str_ += " (%s)" % memo return str_ elif op[0] == "interest": - return "%s" % ( - op[1]["interest"] - ) + return "%s" % (op[1]["interest"]) else: return json.dumps(op[1], indent=4) @@ -1628,5 +1423,46 @@ def print_json(tx): print(tx) -if __name__ == '__main__': - pass +# this is another console script entrypoint +# also this function sucks and should be taken out back and shot +def steemtailentry(): + parser = argparse.ArgumentParser( + description="UNIX tail(1)-like tool for the steem blockchain") + parser.add_argument( + '-f', + '--follow', + help='Constantly stream output to stdout', + action='store_true') + parser.add_argument( + '-n', '--lines', type=int, default=10, help='How many ops to show') + parser.add_argument( + '-j', + '--json', + help='Output as JSON instead of human-readable pretty-printed format', + action='store_true') + args = parser.parse_args(sys.argv[1:]) + + # FIXME(sneak) this always returns + # '0000000000000000000000000000000000000000' for trx_id :( + + op_count = 0 + if args.json: + if not args.follow: + sys.stdout.write('[') + for op in Blockchain().reliable_stream(): + if args.json: + sys.stdout.write('%s' % json.dumps(op)) + if args.follow: + sys.stdout.write("\n") # for human eyeballs + sys.stdout.flush() # flush after each op if live mode + else: + pprint.pprint(op) + op_count += 1 + if not args.follow: + if op_count > args.lines: + if args.json: + sys.stdout.write(']') + return + else: + if args.json: + sys.stdout.write(',') diff --git a/steem/commit.py b/steem/commit.py index 8ee9516..3b39a51 100644 --- a/steem/commit.py +++ b/steem/commit.py @@ -2,27 +2,27 @@ import logging import random import re -from datetime import datetime, timedelta - import voluptuous as vo +from datetime import datetime, timedelta from funcy.colls import none from funcy.flow import silent from funcy.seqs import first from steembase import memo from steembase import operations from steembase.account import PrivateKey, PublicKey -from steembase.exceptions import ( - AccountExistsException, - MissingKeyError, -) +from steembase.exceptions import AccountExistsException, MissingKeyError from steembase.storage import configStorage - from .account import Account from .amount import Amount from .converter import Converter from .instance import shared_steemd_instance from .transactionbuilder import TransactionBuilder -from .utils import derive_permlink, resolve_identifier, fmt_time_string, keep_in_dict +from .utils import ( + derive_permlink, + fmt_time_string, + keep_in_dict, + resolve_identifier, +) from .wallet import Wallet log = logging.getLogger(__name__) @@ -54,16 +54,19 @@ # enable_content_editing_operation [active] + class Commit(object): """ Commit things to the Steem network. - This class contains helper methods to construct, sign and broadcast common transactions, such as posting, - voting, sending funds, etc. + This class contains helper methods to construct, sign and broadcast + common transactions, such as posting, voting, sending funds, etc. :param Steemd steemd: Steemd node to connect to* :param bool offline: Do **not** broadcast transactions! *(optional)* :param bool debug: Enable Debugging *(optional)* - :param list,dict,string keys: Predefine the wif keys to shortcut the wallet database + + :param list,dict,string keys: Predefine the wif keys to shortcut the + wallet database Three wallet operation modes are possible: @@ -97,7 +100,9 @@ def finalizeOp(self, ops, account, permission): the wallet, finalizes the transaction, signs it and broadacasts it - :param operation ops: The operation (or list of operaions) to broadcast + :param operation ops: The operation (or list of operaions) to + broadcast + :param operation account: The account that authorizes the operation :param string permission: The required permission for @@ -111,11 +116,12 @@ def finalizeOp(self, ops, account, permission): posting permission. Neither can you use different accounts for different operations! """ - tx = TransactionBuilder(None, - steemd_instance=self.steemd, - wallet_instance=self.wallet, - no_broadcast=self.no_broadcast, - expiration=self.expiration) + tx = TransactionBuilder( + None, + steemd_instance=self.steemd, + wallet_instance=self.wallet, + no_broadcast=self.no_broadcast, + expiration=self.expiration) tx.appendOps(ops) if self.unsigned: @@ -128,19 +134,20 @@ def finalizeOp(self, ops, account, permission): return tx.broadcast() def sign(self, unsigned_trx, wifs=[]): - """ Sign a provided transaction witht he provided key(s) + """ Sign a provided transaction with the provided key(s) :param dict unsigned_trx: The transaction to be signed and returned :param string wifs: One or many wif keys to use for signing a transaction. If not present, the keys will be loaded from the wallet as defined in "missing_signatures" key - of the transactizions. + of the transactions. """ - tx = TransactionBuilder(unsigned_trx, - steemd_instance=self.steemd, - wallet_instance=self.wallet, - no_broadcast=self.no_broadcast, - expiration=self.expiration) + tx = TransactionBuilder( + unsigned_trx, + steemd_instance=self.steemd, + wallet_instance=self.wallet, + no_broadcast=self.no_broadcast, + expiration=self.expiration) tx.appendMissingSignatures(wifs) tx.sign() return tx.json() @@ -150,11 +157,12 @@ def broadcast(self, signed_trx): :param tx signed_trx: Signed transaction to broadcast """ - tx = TransactionBuilder(signed_trx, - steemd_instance=self.steemd, - wallet_instance=self.wallet, - no_broadcast=self.no_broadcast, - expiration=self.expiration) + tx = TransactionBuilder( + signed_trx, + steemd_instance=self.steemd, + wallet_instance=self.wallet, + no_broadcast=self.no_broadcast, + expiration=self.expiration) return tx.broadcast() def post(self, @@ -171,54 +179,68 @@ def post(self, self_vote=False): """ Create a new post. - If this post is intended as a reply/comment, `reply_identifier` needs to be set with the identifier of the parent - post/comment (eg. `@author/permlink`). + If this post is intended as a reply/comment, `reply_identifier` needs + to be set with the identifier of the parent post/comment (eg. + `author/permlink`). - Optionally you can also set json_metadata, comment_options and upvote the newly created post as an author. + Optionally you can also set json_metadata, comment_options and upvote + the newly created post as an author. - Setting category, tags or community will override the values provided in json_metadata and/or comment_options - where appropriate. + Setting category, tags or community will override the values provided + in json_metadata and/or comment_options where appropriate. Args: - title (str): Title of the post - body (str): Body of the post/comment - author (str): Account are you posting from - permlink (str): Manually set the permlink (defaults to None). - If left empty, it will be derived from title automatically. - reply_identifier (str): Identifier of the parent post/comment (only if this post is a reply/comment). - json_metadata (str, dict): JSON meta object that can be attached to the post. - comment_options (str, dict): JSON options object that can be attached to the post. - Example:: - - comment_options = { - 'max_accepted_payout': '1000000.000 SBD', - 'percent_steem_dollars': 10000, - 'allow_votes': True, - 'allow_curation_rewards': True, - 'extensions': [[0, { - 'beneficiaries': [ - {'account': 'account1', 'weight': 5000}, - {'account': 'account2', 'weight': 5000}, - ]} - ]] - } - community (str): (Optional) Name of the community we are posting into. This will also override the - community specified in `json_metadata`. - tags (str, list): (Optional) A list of tags (5 max) to go with the post. This will also override the - tags specified in `json_metadata`. The first tag will be used as a 'category'. - If provided as a string, it should be space separated. - beneficiaries (list of dicts): (Optional) A list of beneficiaries for posting reward distribution. - This argument overrides beneficiaries as specified in `comment_options`. + title (str): Title of the post + body (str): Body of the post/comment + author (str): Account are you posting from + permlink (str): Manually set the permlink (defaults to None). + If left empty, it will be derived from title automatically. + reply_identifier (str): Identifier of the parent post/comment (only + if this post is a reply/comment). + json_metadata (str, dict): JSON meta object that can be attached to + the post. + comment_options (str, dict): JSON options object that can be + attached to the post. + + Example:: + comment_options = { + 'max_accepted_payout': '1000000.000 SBD', + 'percent_steem_dollars': 10000, + 'allow_votes': True, + 'allow_curation_rewards': True, + 'extensions': [[0, { + 'beneficiaries': [ + {'account': 'account1', 'weight': 5000}, + {'account': 'account2', 'weight': 5000}, + ]} + ]] + } - For example, if we would like to split rewards between account1 and account2:: + community (str): (Optional) Name of the community we are posting + into. This will also override the community specified in + `json_metadata`. - beneficiaries = [ - {'account': 'account1', 'weight': 5000}, - {'account': 'account2', 'weight': 5000} - ] + tags (str, list): (Optional) A list of tags (5 max) to go with the + post. This will also override the tags specified in + `json_metadata`. The first tag will be used as a 'category'. If + provided as a string, it should be space separated. + + beneficiaries (list of dicts): (Optional) A list of beneficiaries + for posting reward distribution. This argument overrides + beneficiaries as specified in `comment_options`. + + For example, if we would like to split rewards between account1 and + account2:: + + beneficiaries = [ + {'account': 'account1', 'weight': 5000}, + {'account': 'account2', 'weight': 5000} + ] + + self_vote (bool): (Optional) Upvote the post as author, right after + posting. - self_vote (bool): (Optional) Upvote the post as author, right after posting. """ # prepare json_metadata @@ -250,7 +272,8 @@ def post(self, # deal with replies/categories if reply_identifier: - parent_author, parent_permlink = resolve_identifier(reply_identifier) + parent_author, parent_permlink = resolve_identifier( + reply_identifier) if not permlink: permlink = derive_permlink(title, parent_permlink) elif category: @@ -265,79 +288,81 @@ def post(self, permlink = derive_permlink(title) post_op = operations.Comment( - **{"parent_author": parent_author, - "parent_permlink": parent_permlink, - "author": author, - "permlink": permlink, - "title": title, - "body": body, - "json_metadata": json_metadata} - ) + **{ + "parent_author": parent_author, + "parent_permlink": parent_permlink, + "author": author, + "permlink": permlink, + "title": title, + "body": body, + "json_metadata": json_metadata + }) ops = [post_op] # if comment_options are used, add a new op to the transaction if comment_options or beneficiaries: - options = keep_in_dict(comment_options or {}, - ['max_accepted_payout', - 'percent_steem_dollars', - 'allow_votes', - 'allow_curation_rewards', - 'extensions' - ]) + options = keep_in_dict(comment_options or {}, [ + 'max_accepted_payout', 'percent_steem_dollars', 'allow_votes', + 'allow_curation_rewards', 'extensions' + ]) # override beneficiaries extension if beneficiaries: # validate schema # or just simply vo.Schema([{'account': str, 'weight': int}]) - schema = vo.Schema([ - { - vo.Required('account'): vo.All(str, vo.Length(max=16)), - vo.Required('weight', default=10000): vo.All(int, vo.Range(min=1, max=10000)) - } - ]) + schema = vo.Schema([{ + vo.Required('account'): + vo.All(str, vo.Length(max=16)), + vo.Required('weight', default=10000): + vo.All(int, vo.Range(min=1, max=10000)) + }]) schema(beneficiaries) options['beneficiaries'] = beneficiaries default_max_payout = "1000000.000 SBD" comment_op = operations.CommentOptions( - **{"author": author, - "permlink": permlink, - "max_accepted_payout": options.get("max_accepted_payout", default_max_payout), - "percent_steem_dollars": int(options.get("percent_steem_dollars", 10000)), - "allow_votes": options.get("allow_votes", True), - "allow_curation_rewards": options.get("allow_curation_rewards", True), - "extensions": options.get("extensions", []), - "beneficiaries": options.get("beneficiaries"), - } - - ) + **{ + "author": + author, + "permlink": + permlink, + "max_accepted_payout": + options.get("max_accepted_payout", default_max_payout), + "percent_steem_dollars": + int(options.get("percent_steem_dollars", 10000)), + "allow_votes": + options.get("allow_votes", True), + "allow_curation_rewards": + options.get("allow_curation_rewards", True), + "extensions": + options.get("extensions", []), + "beneficiaries": + options.get("beneficiaries"), + }) ops.append(comment_op) if self_vote: vote_op = operations.Vote( - **{'voter': author, - 'author': author, - 'permlink': permlink, - 'weight': 10000, - } - ) + **{ + 'voter': author, + 'author': author, + 'permlink': permlink, + 'weight': 10000, + }) ops.append(vote_op) return self.finalizeOp(ops, author, "posting") - def vote(self, - identifier, - weight, - account=None): + def vote(self, identifier, weight, account=None): """ Vote for a post :param str identifier: Identifier for the post to upvote Takes - the form ``@author/permlink`` + the form ``author/permlink`` :param float weight: Voting weight. Range: -100.0 - +100.0. May not be 0.0 :param str account: Voter to use for voting. (Optional) - If ``voter`` is not defines, the ``default_account`` will be taken or - a ValueError will be raised + If ``voter`` is not defines, the ``default_account`` will be taken + or a ValueError will be raised .. code-block:: python @@ -351,37 +376,39 @@ def vote(self, post_author, post_permlink = resolve_identifier(identifier) op = operations.Vote( - **{"voter": account, - "author": post_author, - "permlink": post_permlink, - "weight": int(weight * STEEMIT_1_PERCENT)} - ) + **{ + "voter": account, + "author": post_author, + "permlink": post_permlink, + "weight": int(weight * STEEMIT_1_PERCENT) + }) return self.finalizeOp(op, account, "posting") - def create_account(self, - account_name, - json_meta=None, - password=None, - owner_key=None, - active_key=None, - posting_key=None, - memo_key=None, - additional_owner_keys=[], - additional_active_keys=[], - additional_posting_keys=[], - additional_owner_accounts=[], - additional_active_accounts=[], - additional_posting_accounts=[], - store_keys=True, - store_owner_key=False, - delegation_fee_steem='0 STEEM', - creator=None, - ): + def create_account( + self, + account_name, + json_meta=None, + password=None, + owner_key=None, + active_key=None, + posting_key=None, + memo_key=None, + additional_owner_keys=[], + additional_active_keys=[], + additional_posting_keys=[], + additional_owner_accounts=[], + additional_active_accounts=[], + additional_posting_accounts=[], + store_keys=True, + store_owner_key=False, + delegation_fee_steem='0 STEEM', + creator=None, + ): """ Create new account in Steem - The brainkey/password can be used to recover all generated keys (see - `steembase.account` for more details. + The brainkey/password can be used to recover all generated keys + (see `steembase.account` for more details. By default, this call will use ``default_account`` to register a new name ``account_name`` with all keys being @@ -390,30 +417,32 @@ def create_account(self, wallet. .. note:: Account creations cost a fee that is defined by - the network. If you create an account, you will - need to pay for that fee! - - **You can partially pay that fee by delegating VESTS.** - - To pay the fee in full in STEEM, leave ``delegation_fee_steem`` set to ``0 STEEM`` (Default). - - To pay the fee partially in STEEM, partially with delegated VESTS, set ``delegation_fee_steem`` - to a value greater than ``1 STEEM``. `Required VESTS will be calculated automatically.` - - To pay the fee with maximum amount of delegation, set ``delegation_fee_steem`` to ``1 STEEM``. - `Required VESTS will be calculated automatically.` + the network. If you create an account, you will + need to pay for that fee! + + **You can partially pay that fee by delegating VESTS.** + + To pay the fee in full in STEEM, leave + ``delegation_fee_steem`` set to ``0 STEEM`` (Default). + + To pay the fee partially in STEEM, partially with delegated + VESTS, set ``delegation_fee_steem`` to a value greater than ``1 + STEEM``. `Required VESTS will be calculated automatically.` + + To pay the fee with maximum amount of delegation, set + ``delegation_fee_steem`` to ``1 STEEM``. `Required VESTS will be + calculated automatically.` .. warning:: Don't call this method unless you know what you are doing! Be sure to understand what this method does and where to find the private keys for your account. - .. note:: Please note that this imports private keys - (if password is present) into the wallet by - default. However, it **does not import the owner - key** unless `store_owner_key` is set to True (default False). - Do NOT expect to be able to recover it from the wallet if you lose - your password! + .. note:: Please note that this imports private keys (if password is + present) into the wallet by default. However, it **does not import + the owner key** unless `store_owner_key` is set to True (default + False). Do NOT expect to be able to recover it from the wallet if + you lose your password! :param str account_name: (**required**) new account name :param str json_meta: Optional meta data for the account @@ -425,23 +454,40 @@ def create_account(self, can provide a password from which the keys will be derived :param list additional_owner_keys: Additional owner public keys + :param list additional_active_keys: Additional active public keys + :param list additional_posting_keys: Additional posting public keys - :param list additional_owner_accounts: Additional owner account names - :param list additional_active_accounts: Additional active account names - :param list additional_posting_accounts: Additional posting account names - :param bool store_keys: Store new keys in the wallet (default: ``True``) - :param bool store_owner_key: Store owner key in the wallet (default: ``False``) - :param str delegation_fee_steem: (Optional) If set, `creator` pay a fee of this amount, - and delegate the rest with VESTS (calculated automatically). - Minimum: 1 STEEM. If left to 0 (Default), full fee is paid - without VESTS delegation. + + :param list additional_owner_accounts: Additional owner account + names + + :param list additional_active_accounts: Additional active account + names + + :param list additional_posting_accounts: Additional posting account + names + + :param bool store_keys: Store new keys in the wallet (default: + ``True``) + + :param bool store_owner_key: Store owner key in the wallet + (default: ``False``) + + :param str delegation_fee_steem: (Optional) If set, `creator` pay a + fee of this amount, and delegate the rest with VESTS (calculated + automatically). Minimum: 1 STEEM. If left to 0 (Default), full fee + is paid without VESTS delegation. + :param str creator: which account should pay the registration fee (defaults to ``default_account``) - :raises AccountExistsException: if the account already exists on the blockchain + + :raises AccountExistsException: if the account already exists on the + blockchain """ - assert len(account_name) <= 16, "Account name must be at most 16 chars long" + assert len( + account_name) <= 16, "Account name must be at most 16 chars long" if not creator: creator = configStorage.get("default_account") @@ -450,14 +496,12 @@ def create_account(self, "Not creator account given. Define it with " + "creator=x, or set the default_account using steempy") if password and (owner_key or posting_key or active_key or memo_key): - raise ValueError( - "You cannot use 'password' AND provide keys!" - ) + raise ValueError("You cannot use 'password' AND provide keys!") # check if account already exists try: Account(account_name, steemd_instance=self.steemd) - except: + except: # noqa FIXME(sneak) pass else: raise AccountExistsException @@ -485,14 +529,17 @@ def create_account(self, self.wallet.addPrivateKey(posting_privkey) self.wallet.addPrivateKey(memo_privkey) elif owner_key and posting_key and active_key and memo_key: - posting_pubkey = PublicKey(posting_key, prefix=self.steemd.chain_params["prefix"]) - active_pubkey = PublicKey(active_key, prefix=self.steemd.chain_params["prefix"]) - owner_pubkey = PublicKey(owner_key, prefix=self.steemd.chain_params["prefix"]) - memo_pubkey = PublicKey(memo_key, prefix=self.steemd.chain_params["prefix"]) + posting_pubkey = PublicKey( + posting_key, prefix=self.steemd.chain_params["prefix"]) + active_pubkey = PublicKey( + active_key, prefix=self.steemd.chain_params["prefix"]) + owner_pubkey = PublicKey( + owner_key, prefix=self.steemd.chain_params["prefix"]) + memo_pubkey = PublicKey( + memo_key, prefix=self.steemd.chain_params["prefix"]) else: raise ValueError( - "Call incomplete! Provide either a password or public keys!" - ) + "Call incomplete! Provide either a password or public keys!") owner = format(owner_pubkey, self.steemd.chain_params["prefix"]) active = format(active_pubkey, self.steemd.chain_params["prefix"]) @@ -527,13 +574,17 @@ def create_account(self, required_fee_vests = 0 delegation_fee_steem = Amount(delegation_fee_steem).amount if delegation_fee_steem: - # creating accounts without delegation requires 30x account_creation_fee - # creating account with delegation allows one to use VESTS to pay the fee - # where the ratio must satisfy 1 STEEM in fee == 5 STEEM in delegated VESTS + # creating accounts without delegation requires 30x + # account_creation_fee creating account with delegation allows one + # to use VESTS to pay the fee where the ratio must satisfy 1 STEEM + # in fee == 5 STEEM in delegated VESTS + delegated_sp_fee_mult = 5 if delegation_fee_steem < 1: - raise ValueError("When creating account with delegation, at least 1 STEEM in fee must be paid.") + raise ValueError( + "When creating account with delegation, at least " + + "1 STEEM in fee must be paid.") # calculate required remaining fee in vests remaining_fee = required_fee_steem - delegation_fee_steem @@ -541,22 +592,30 @@ def create_account(self, required_sp = remaining_fee * delegated_sp_fee_mult required_fee_vests = Converter().sp_to_vests(required_sp) + 1 - s = {'creator': creator, - 'fee': '%s STEEM' % (delegation_fee_steem or required_fee_steem), - 'delegation': '%s VESTS' % required_fee_vests, - 'json_metadata': json_meta or {}, - 'memo_key': memo, - 'new_account_name': account_name, - 'owner': {'account_auths': owner_accounts_authority, - 'key_auths': owner_key_authority, - 'weight_threshold': 1}, - 'active': {'account_auths': active_accounts_authority, - 'key_auths': active_key_authority, - 'weight_threshold': 1}, - 'posting': {'account_auths': posting_accounts_authority, - 'key_auths': posting_key_authority, - 'weight_threshold': 1}, - 'prefix': self.steemd.chain_params["prefix"]} + s = { + 'creator': creator, + 'fee': '%s STEEM' % (delegation_fee_steem or required_fee_steem), + 'delegation': '%s VESTS' % required_fee_vests, + 'json_metadata': json_meta or {}, + 'memo_key': memo, + 'new_account_name': account_name, + 'owner': { + 'account_auths': owner_accounts_authority, + 'key_auths': owner_key_authority, + 'weight_threshold': 1 + }, + 'active': { + 'account_auths': active_accounts_authority, + 'key_auths': active_key_authority, + 'weight_threshold': 1 + }, + 'posting': { + 'account_auths': posting_accounts_authority, + 'key_auths': posting_key_authority, + 'weight_threshold': 1 + }, + 'prefix': self.steemd.chain_params["prefix"] + } op = operations.AccountCreateWithDelegation(**s) @@ -566,10 +625,17 @@ def transfer(self, to, amount, asset, memo="", account=None): """ Transfer SBD or STEEM to another account. :param str to: Recipient + :param float amount: Amount to transfer + :param str asset: Asset to transfer (``SBD`` or ``STEEM``) - :param str memo: (optional) Memo, may begin with `#` for encrypted messaging - :param str account: (optional) the source account for the transfer if not ``default_account`` + + :param str memo: (optional) Memo, may begin with `#` for encrypted + messaging + + :param str account: (optional) the source account for the transfer + if not ``default_account`` + """ if not account: account = configStorage.get("default_account") @@ -587,55 +653,65 @@ def transfer(self, to, amount, asset, memo="", account=None): nonce = random.getrandbits(64) memo = Memo.encode_memo( PrivateKey(memo_wif), - PublicKey(to_account["memo_key"], prefix=self.steemd.chain_params["prefix"]), + PublicKey( + to_account["memo_key"], + prefix=self.steemd.chain_params["prefix"]), nonce, memo, - prefix=self.steemd.chain_params["prefix"] - ) + prefix=self.steemd.chain_params["prefix"]) op = operations.Transfer( - **{"from": account, - "to": to, - "amount": '{:.{prec}f} {asset}'.format( - float(amount), - prec=3, - asset=asset - ), - "memo": memo - } - ) + **{ + "from": + account, + "to": + to, + "amount": + '{:.{prec}f} {asset}'.format( + float(amount), prec=3, asset=asset), + "memo": + memo + }) return self.finalizeOp(op, account, "active") def withdraw_vesting(self, amount, account=None): """ Withdraw VESTS from the vesting account. - :param float amount: number of VESTS to withdraw over a period of 104 weeks - :param str account: (optional) the source account for the transfer if not ``default_account`` - """ + :param float amount: number of VESTS to withdraw over a period of + 104 weeks + + :param str account: (optional) the source account for the transfer + if not ``default_account`` + + """ if not account: account = configStorage.get("default_account") if not account: raise ValueError("You need to provide an account") op = operations.WithdrawVesting( - **{"account": account, - "vesting_shares": '{:.{prec}f} {asset}'.format( - float(amount), - prec=6, - asset="VESTS" - ), - } - ) + **{ + "account": + account, + "vesting_shares": + '{:.{prec}f} {asset}'.format( + float(amount), prec=6, asset="VESTS"), + }) return self.finalizeOp(op, account, "active") def transfer_to_vesting(self, amount, to=None, account=None): """ Vest STEEM - :param float amount: number of STEEM to vest - :param str to: (optional) the source account for the transfer if not ``default_account`` - :param str account: (optional) the source account for the transfer if not ``default_account`` - """ + :param float amount: number of STEEM to vest + + :param str to: (optional) the source account for the transfer if not + ``default_account`` + + :param str account: (optional) the source account for the transfer + if not ``default_account`` + + """ if not account: account = configStorage.get("default_account") if not account: @@ -645,23 +721,29 @@ def transfer_to_vesting(self, amount, to=None, account=None): to = account # powerup on the same account op = operations.TransferToVesting( - **{"from": account, - "to": to, - "amount": '{:.{prec}f} {asset}'.format( - float(amount), - prec=3, - asset='STEEM') - } - ) + **{ + "from": + account, + "to": + to, + "amount": + '{:.{prec}f} {asset}'.format( + float(amount), prec=3, asset='STEEM') + }) return self.finalizeOp(op, account, "active") def convert(self, amount, account=None, request_id=None): """ Convert SteemDollars to Steem (takes one week to settle) - :param float amount: number of VESTS to withdraw over a period of 104 weeks - :param str account: (optional) the source account for the transfer if not ``default_account`` - :param str request_id: (optional) identifier for tracking the conversion` + :param float amount: number of VESTS to withdraw + + :param str account: (optional) the source account for the transfer + if not ``default_account`` + + :param str request_id: (optional) identifier for tracking the + conversion` + """ if not account: account = configStorage.get("default_account") @@ -673,14 +755,15 @@ def convert(self, amount, account=None, request_id=None): else: request_id = random.getrandbits(32) op = operations.Convert( - **{"owner": account, - "requestid": request_id, - "amount": '{:.{prec}f} {asset}'.format( - float(amount), - prec=3, - asset='SBD' - )} - ) + **{ + "owner": + account, + "requestid": + request_id, + "amount": + '{:.{prec}f} {asset}'.format( + float(amount), prec=3, asset='SBD') + }) return self.finalizeOp(op, account, "active") @@ -690,8 +773,10 @@ def transfer_to_savings(self, amount, asset, memo, to=None, account=None): :param float amount: STEEM or SBD amount :param float asset: 'STEEM' or 'SBD' :param str memo: (optional) Memo - :param str to: (optional) the source account for the transfer if not ``default_account`` - :param str account: (optional) the source account for the transfer if not ``default_account`` + :param str to: (optional) the source account for the transfer if + not ``default_account`` + :param str account: (optional) the source account for the transfer + if not ``default_account`` """ assert asset in ['STEEM', 'SBD'] @@ -705,26 +790,36 @@ def transfer_to_savings(self, amount, asset, memo, to=None, account=None): op = operations.TransferToSavings( **{ - "from": account, - "to": to, - "amount": '{:.{prec}f} {asset}'.format( - float(amount), - prec=3, - asset=asset), - "memo": memo, - } - ) + "from": + account, + "to": + to, + "amount": + '{:.{prec}f} {asset}'.format( + float(amount), prec=3, asset=asset), + "memo": + memo, + }) return self.finalizeOp(op, account, "active") - def transfer_from_savings(self, amount, asset, memo, request_id=None, to=None, account=None): + def transfer_from_savings(self, + amount, + asset, + memo, + request_id=None, + to=None, + account=None): """ Withdraw SBD or STEEM from 'savings' account. :param float amount: STEEM or SBD amount :param float asset: 'STEEM' or 'SBD' :param str memo: (optional) Memo - :param str request_id: (optional) identifier for tracking or cancelling the withdrawal - :param str to: (optional) the source account for the transfer if not ``default_account`` - :param str account: (optional) the source account for the transfer if not ``default_account`` + :param str request_id: (optional) identifier for tracking or + cancelling the withdrawal + :param str to: (optional) the source account for the transfer if + not ``default_account`` + :param str account: (optional) the source account for the transfer + if not ``default_account`` """ assert asset in ['STEEM', 'SBD'] @@ -743,35 +838,37 @@ def transfer_from_savings(self, amount, asset, memo, request_id=None, to=None, a op = operations.TransferFromSavings( **{ - "from": account, - "request_id": request_id, - "to": to, - "amount": '{:.{prec}f} {asset}'.format( - float(amount), - prec=3, - asset=asset), - "memo": memo, - } - ) + "from": + account, + "request_id": + request_id, + "to": + to, + "amount": + '{:.{prec}f} {asset}'.format( + float(amount), prec=3, asset=asset), + "memo": + memo, + }) return self.finalizeOp(op, account, "active") def transfer_from_savings_cancel(self, request_id, account=None): """ Cancel a withdrawal from 'savings' account. - :param str request_id: Identifier for tracking or cancelling the withdrawal - :param str account: (optional) the source account for the transfer if not ``default_account`` + :param str request_id: Identifier for tracking or cancelling + the withdrawal + :param str account: (optional) the source account for the transfer + if not ``default_account`` """ if not account: account = configStorage.get("default_account") if not account: raise ValueError("You need to provide an account") - op = operations.CancelTransferFromSavings( - **{ - "from": account, - "request_id": request_id, - } - ) + op = operations.CancelTransferFromSavings(**{ + "from": account, + "request_id": request_id, + }) return self.finalizeOp(op, account, "active") def claim_reward_balance(self, @@ -781,22 +878,27 @@ def claim_reward_balance(self, account=None): """ Claim reward balances. - By default, this will claim ``all`` outstanding balances. To bypass this behaviour, - set desired claim amount by setting any of `reward_steem`, `reward_sbd` or `reward_vests`. + By default, this will claim ``all`` outstanding balances. To bypass + this behaviour, set desired claim amount by setting any of + `reward_steem`, `reward_sbd` or `reward_vests`. Args: reward_steem (string): Amount of STEEM you would like to claim. reward_sbd (string): Amount of SBD you would like to claim. reward_vests (string): Amount of VESTS you would like to claim. - account (string): The source account for the claim if not ``default_account`` is used. + account (string): The source account for the claim if not + ``default_account`` is used. """ if not account: account = configStorage.get("default_account") if not account: raise ValueError("You need to provide an account") - # if no values were set by user, claim all outstanding balances on account - if none(int(first(x.split(' '))) for x in [reward_sbd, reward_steem, reward_vests]): + # if no values were set by user, claim all outstanding balances on + # account + if none( + float(first(x.split(' '))) + for x in [reward_sbd, reward_steem, reward_vests]): a = Account(account) reward_steem = a['reward_steem_balance'] reward_sbd = a['reward_sbd_balance'] @@ -808,17 +910,20 @@ def claim_reward_balance(self, "reward_steem": reward_steem, "reward_sbd": reward_sbd, "reward_vests": reward_vests, - } - ) + }) return self.finalizeOp(op, account, "posting") - def delegate_vesting_shares(self, to_account: str, vesting_shares: str, account=None): + def delegate_vesting_shares(self, to_account, vesting_shares, + account=None): """ Delegate SP to another account. Args: - to_account (string): Account we are delegating shares to (delegatee). - vesting_shares (string): Amount of VESTS to delegate eg. `10000 VESTS`. - account (string): The source account (delegator). If not specified, ``default_account`` is used. + to_account (string): Account we are delegating shares to + (delegatee). + vesting_shares (string): Amount of VESTS to delegate eg. `10000 + VESTS`. + account (string): The source account (delegator). If not specified, + ``default_account`` is used. """ if not account: account = configStorage.get("default_account") @@ -830,16 +935,20 @@ def delegate_vesting_shares(self, to_account: str, vesting_shares: str, account= "delegator": account, "delegatee": to_account, "vesting_shares": str(Amount(vesting_shares)), - } - ) + }) return self.finalizeOp(op, account, "active") - def witness_feed_publish(self, steem_usd_price, quote="1.000", account=None): + def witness_feed_publish(self, + steem_usd_price, + quote="1.000", + account=None): """ Publish a feed price as a witness. :param float steem_usd_price: Price of STEEM in USD (implied price) - :param float quote: (optional) Quote Price. Should be 1.000, unless we are adjusting the feed to support the peg. - :param str account: (optional) the source account for the transfer if not ``default_account`` + :param float quote: (optional) Quote Price. Should be 1.000, unless + we are adjusting the feed to support the peg. + :param str account: (optional) the source account for the transfer + if not ``default_account`` """ if not account: account = configStorage.get("default_account") @@ -853,8 +962,7 @@ def witness_feed_publish(self, steem_usd_price, quote="1.000", account=None): "base": "%s SBD" % steem_usd_price, "quote": "%s STEEM" % quote, } - } - ) + }) return self.finalizeOp(op, account, "active") def witness_update(self, signing_key, url, props, account=None): @@ -892,14 +1000,48 @@ def witness_update(self, signing_key, url, props, account=None): "props": props, "fee": "0.000 STEEM", "prefix": self.steemd.chain_params["prefix"] - } - ) + }) + return self.finalizeOp(op, account, "active") + + def witness_set_properties(self, signing_key, props, account=None): + """ Update witness + + :param pubkey signing_key: Signing key + :param dict props: Properties + :param str account: (optional) witness account name + + Properties::: + + [ + ["account_creation_fee": x] + ["maximum_block_size": x] + ["sbd_interest_rate": x] + ] + + """ + if not account: + account = configStorage.get("default_account") + if not account: + raise ValueError("You need to provide an account") + + try: + PublicKey(signing_key) + except Exception as e: + raise e + + op = operations.WitnessSetProperties( + **{ + "owner": account, + "props": props, + "extensions": [] + }) return self.finalizeOp(op, account, "active") def decode_memo(self, enc_memo): """ Try to decode an encrypted memo """ - assert enc_memo[0] == "#", "decode memo requires memos to start with '#'" + assert enc_memo[ + 0] == "#", "decode memo requires memos to start with '#'" keys = memo.involved_keys(enc_memo) wif = None for key in keys: @@ -918,10 +1060,10 @@ def interest(self, account): account = Account(account, steemd_instance=self.steemd) last_payment = fmt_time_string(account["sbd_last_interest_payment"]) next_payment = last_payment + timedelta(days=30) - interest_rate = self.steemd.get_dynamic_global_properties()["sbd_interest_rate"] / 100 # percent + interest_rate = self.steemd.get_dynamic_global_properties()[ + "sbd_interest_rate"] / 100 # percent interest_amount = (interest_rate / 100) * int( - int(account["sbd_seconds"]) / (60 * 60 * 24 * 356) - ) * 10 ** -3 + int(account["sbd_seconds"]) / (60 * 60 * 24 * 356)) * 10 ** -3 return { "interest": interest_amount, @@ -931,8 +1073,11 @@ def interest(self, account): "interest_rate": interest_rate, } - def set_withdraw_vesting_route(self, to, percentage=100, - account=None, auto_vest=False): + def set_withdraw_vesting_route(self, + to, + percentage=100, + account=None, + auto_vest=False): """ Set up a vesting withdraw route. When vesting shares are withdrawn, they will be routed to these accounts based on the specified weights. @@ -951,12 +1096,12 @@ def set_withdraw_vesting_route(self, to, percentage=100, raise ValueError("You need to provide an account") op = operations.SetWithdrawVestingRoute( - **{"from_account": account, - "to_account": to, - "percent": int(percentage * STEEMIT_1_PERCENT), - "auto_vest": auto_vest - } - ) + **{ + "from_account": account, + "to_account": to, + "percent": int(percentage * STEEMIT_1_PERCENT), + "auto_vest": auto_vest + }) return self.finalizeOp(op, account, "active") @@ -970,8 +1115,12 @@ def _test_weights_treshold(authority): if authority["weight_threshold"] > weights: raise ValueError("Threshold too restrictive!") - def allow(self, foreign, weight=None, permission="posting", - account=None, threshold=None): + def allow(self, + foreign, + weight=None, + permission="posting", + account=None, + threshold=None): """ Give additional access to an account by some other public key or account. @@ -994,8 +1143,7 @@ def allow(self, foreign, weight=None, permission="posting", if permission not in ["owner", "posting", "active"]: raise ValueError( - "Permission needs to be either 'owner', 'posting', or 'active" - ) + "Permission needs to be either 'owner', 'posting', or 'active") account = Account(account, steemd_instance=self.steemd) if not weight: weight = account[permission]["weight_threshold"] @@ -1003,39 +1151,37 @@ def allow(self, foreign, weight=None, permission="posting", authority = account[permission] try: pubkey = PublicKey(foreign) - authority["key_auths"].append([ - str(pubkey), - weight - ]) - except: + authority["key_auths"].append([str(pubkey), weight]) + except: # noqa FIXME(sneak) try: foreign_account = Account(foreign, steemd_instance=self.steemd) - authority["account_auths"].append([ - foreign_account["name"], - weight - ]) - except: + authority["account_auths"].append( + [foreign_account["name"], weight]) + except: # noqa FIXME(sneak) raise ValueError( - "Unknown foreign account or unvalid public key" - ) + "Unknown foreign account or unvalid public key") if threshold: authority["weight_threshold"] = threshold self._test_weights_treshold(authority) op = operations.AccountUpdate( - **{"account": account["name"], - permission: authority, - "memo_key": account["memo_key"], - "json_metadata": account["json_metadata"], - 'prefix': self.steemd.chain_params["prefix"]} - ) + **{ + "account": account["name"], + permission: authority, + "memo_key": account["memo_key"], + "json_metadata": account["json_metadata"], + 'prefix': self.steemd.chain_params["prefix"] + }) if permission == "owner": return self.finalizeOp(op, account["name"], "owner") else: return self.finalizeOp(op, account["name"], "active") - def disallow(self, foreign, permission="posting", - account=None, threshold=None): + def disallow(self, + foreign, + permission="posting", + account=None, + threshold=None): """ Remove additional access to an account by some other public key or account. @@ -1054,34 +1200,29 @@ def disallow(self, foreign, permission="posting", if permission not in ["owner", "posting", "active"]: raise ValueError( - "Permission needs to be either 'owner', 'posting', or 'active" - ) + "Permission needs to be either 'owner', 'posting', or 'active") account = Account(account, steemd_instance=self.steemd) authority = account[permission] try: - pubkey = PublicKey(foreign, prefix=self.steemd.chain_params["prefix"]) + pubkey = PublicKey( + foreign, prefix=self.steemd.chain_params["prefix"]) affected_items = list( - filter(lambda x: x[0] == str(pubkey), - authority["key_auths"])) - authority["key_auths"] = list(filter( - lambda x: x[0] != str(pubkey), - authority["key_auths"] - )) - except: + filter(lambda x: x[0] == str(pubkey), authority["key_auths"])) + authority["key_auths"] = list( + filter(lambda x: x[0] != str(pubkey), authority["key_auths"])) + except: # noqa FIXME(sneak) try: foreign_account = Account(foreign, steemd_instance=self.steemd) affected_items = list( filter(lambda x: x[0] == foreign_account["name"], authority["account_auths"])) - authority["account_auths"] = list(filter( - lambda x: x[0] != foreign_account["name"], - authority["account_auths"] - )) - except: + authority["account_auths"] = list( + filter(lambda x: x[0] != foreign_account["name"], + authority["account_auths"])) + except: # noqa FIXME(sneak) raise ValueError( - "Unknown foreign account or unvalid public key" - ) + "Unknown foreign account or unvalid public key") removed_weight = affected_items[0][1] @@ -1093,20 +1234,19 @@ def disallow(self, foreign, permission="posting", # authority) try: self._test_weights_treshold(authority) - except: - log.critical( - "The account's threshold will be reduced by %d" - % removed_weight - ) + except: # noqa FIXME(sneak) + log.critical("The account's threshold will be reduced by %d" % + removed_weight) authority["weight_threshold"] -= removed_weight self._test_weights_treshold(authority) op = operations.AccountUpdate( - **{"account": account["name"], - permission: authority, - "memo_key": account["memo_key"], - "json_metadata": account["json_metadata"]} - ) + **{ + "account": account["name"], + permission: authority, + "memo_key": account["memo_key"], + "json_metadata": account["json_metadata"] + }) if permission == "owner": return self.finalizeOp(op, account["name"], "owner") else: @@ -1130,10 +1270,11 @@ def update_memo_key(self, key, account=None): PublicKey(key) # raises exception if invalid account = Account(account, steemd_instance=self.steemd) op = operations.AccountUpdate( - **{"account": account["name"], - "memo_key": key, - "json_metadata": account["json_metadata"]} - ) + **{ + "account": account["name"], + "memo_key": key, + "json_metadata": account["json_metadata"] + }) return self.finalizeOp(op, account["name"], "active") def approve_witness(self, witness, account=None, approve=True): @@ -1150,11 +1291,11 @@ def approve_witness(self, witness, account=None, approve=True): if not account: raise ValueError("You need to provide an account") account = Account(account, steemd_instance=self.steemd) - op = operations.AccountWitnessVote( - **{"account": account["name"], - "witness": witness, - "approve": approve, - }) + op = operations.AccountWitnessVote(**{ + "account": account["name"], + "witness": witness, + "approve": approve, + }) return self.finalizeOp(op, account["name"], "active") def disapprove_witness(self, witness, account=None): @@ -1166,13 +1307,19 @@ def disapprove_witness(self, witness, account=None): :param str account: (optional) the account to allow access to (defaults to ``default_account``) """ - return self.approve_witness(witness=witness, account=account, approve=False) - - def custom_json(self, id, json, required_auths=[], required_posting_auths=[]): + return self.approve_witness( + witness=witness, account=account, approve=False) + + def custom_json(self, + id, + json, + required_auths=[], + required_posting_auths=[]): """ Create a custom json operation :param str id: identifier for the custom json (max length 32 bytes) - :param json json: the json data to put into the custom_json operation + :param json json: the json data to put into the custom_json + operation :param list required_auths: (optional) required auths :param list required_posting_auths: (optional) posting auths """ @@ -1184,16 +1331,18 @@ def custom_json(self, id, json, required_auths=[], required_posting_auths=[]): else: raise Exception("At least one account needs to be specified") op = operations.CustomJson( - **{"json": json, - "required_auths": required_auths, - "required_posting_auths": required_posting_auths, - "id": id}) + **{ + "json": json, + "required_auths": required_auths, + "required_posting_auths": required_posting_auths, + "id": id + }) return self.finalizeOp(op, account, "posting") def resteem(self, identifier, account=None): """ Resteem a post - :param str identifier: post identifier (@/) + :param str identifier: post identifier (/) :param str account: (optional) the account to allow access to (defaults to ``default_account``) """ @@ -1202,20 +1351,22 @@ def resteem(self, identifier, account=None): if not account: raise ValueError("You need to provide an account") author, permlink = resolve_identifier(identifier) - json_body = ["reblog", {"account": account, - "author": author, - "permlink": permlink}] + json_body = [ + "reblog", { + "account": account, + "author": author, + "permlink": permlink + } + ] return self.custom_json( - id="follow", - json=json_body, - required_posting_auths=[account] - ) + id="follow", json=json_body, required_posting_auths=[account]) def unfollow(self, unfollow, what=["blog"], account=None): """ Unfollow another account's blog :param str unfollow: Follow this account - :param list what: List of states to follow (defaults to ``['blog']``) + :param list what: List of states to follow + (defaults to ``['blog']``) :param str account: (optional) the account to allow access to (defaults to ``default_account``) """ @@ -1227,7 +1378,8 @@ def follow(self, follow, what=["blog"], account=None): """ Follow another account's blog :param str follow: Follow this account - :param list what: List of states to follow (defaults to ``['blog']``) + :param list what: List of states to follow + (defaults to ``['blog']``) :param str account: (optional) the account to allow access to (defaults to ``default_account``) """ @@ -1236,19 +1388,21 @@ def follow(self, follow, what=["blog"], account=None): if not account: raise ValueError("You need to provide an account") - json_body = ['follow', {'follower': account, - 'following': follow, - 'what': what}] + json_body = [ + 'follow', { + 'follower': account, + 'following': follow, + 'what': what + } + ] return self.custom_json( - id="follow", - json=json_body, - required_posting_auths=[account] - ) + id="follow", json=json_body, required_posting_auths=[account]) def update_account_profile(self, profile, account=None): """ Update an account's meta data (json_meta) - :param dict json: The meta data to use (i.e. use Profile() from account.py) + :param dict json: The meta data to use (i.e. use Profile() from + account.py) :param str account: (optional) the account to allow access to (defaults to ``default_account``) """ @@ -1258,10 +1412,11 @@ def update_account_profile(self, profile, account=None): raise ValueError("You need to provide an account") account = Account(account, steemd_instance=self.steemd) op = operations.AccountUpdate( - **{"account": account["name"], - "memo_key": account["memo_key"], - "json_metadata": profile} - ) + **{ + "account": account["name"], + "memo_key": account["memo_key"], + "json_metadata": profile + }) return self.finalizeOp(op, account["name"], "active") def comment_options(self, identifier, options, account=None): @@ -1293,14 +1448,19 @@ def comment_options(self, identifier, options, account=None): default_max_payout = "1000000.000 SBD" op = operations.CommentOptions( **{ - "author": author, - "permlink": permlink, - "max_accepted_payout": options.get("max_accepted_payout", default_max_payout), - "percent_steem_dollars": options.get("percent_steem_dollars", 100) * STEEMIT_1_PERCENT, - "allow_votes": options.get("allow_votes", True), - "allow_curation_rewards": options.get("allow_curation_rewards", True), - } - ) + "author": + author, + "permlink": + permlink, + "max_accepted_payout": + options.get("max_accepted_payout", default_max_payout), + "percent_steem_dollars": + options.get("percent_steem_dollars", 100) * STEEMIT_1_PERCENT, + "allow_votes": + options.get("allow_votes", True), + "allow_curation_rewards": + options.get("allow_curation_rewards", True), + }) return self.finalizeOp(op, account["name"], "posting") diff --git a/steem/converter.py b/steem/converter.py index f0eb8c5..4675b19 100644 --- a/steem/converter.py +++ b/steem/converter.py @@ -8,7 +8,8 @@ class Converter(object): """ Converter simplifies the handling of different metrics of the blockchain - :param Steemd steemd_instance: Steemd() instance to use when accessing a RPC + :param Steemd steemd_instance: Steemd() instance to + use when accessing a RPC """ @@ -21,19 +22,16 @@ def sbd_median_price(self): """ Obtain the sbd price as derived from the median over all witness feeds. Return value will be SBD """ - return ( - Amount(self.steemd.get_feed_history()['current_median_history']['base']).amount / - Amount(self.steemd.get_feed_history()['current_median_history']['quote']).amount - ) + return (Amount(self.steemd.get_feed_history()['current_median_history'] + ['base']).amount / Amount(self.steemd.get_feed_history( + )['current_median_history']['quote']).amount) def steem_per_mvests(self): """ Obtain STEEM/MVESTS ratio """ info = self.steemd.get_dynamic_global_properties() - return ( - Amount(info["total_vesting_fund_steem"]).amount / - (Amount(info["total_vesting_shares"]).amount / 1e6) - ) + return (Amount(info["total_vesting_fund_steem"]).amount / + (Amount(info["total_vesting_shares"]).amount / 1e6)) def vests_to_sp(self, vests): """ Obtain SP from VESTS (not MVESTS!) @@ -59,9 +57,16 @@ def sp_to_rshares(self, sp, voting_power=10000, vote_pct=10000): # calculate our account voting shares (from vests), mine is 6.08b vesting_shares = int(self.sp_to_vests(sp) * 1e6) + # get props + props = self.steemd.get_dynamic_global_properties() + + # determine voting power used + used_power = int((voting_power * vote_pct) / 10000); + max_vote_denom = props['vote_power_reserve_rate'] * (5 * 60 * 60 * 24) / (60 * 60 * 24); + used_power = int((used_power + max_vote_denom - 1) / max_vote_denom) + # calculate vote rshares - power = (((voting_power * vote_pct) / 10000) / 200) + 1 - rshares = (power * vesting_shares) / 10000 + rshares = ((vesting_shares * used_power) / 10000) return rshares @@ -88,14 +93,11 @@ def sbd_to_rshares(self, sbd_payout): """ steem_payout = self.sbd_to_steem(sbd_payout) - props = self.steemd.get_dynamic_global_properties() - total_reward_fund_steem = Amount(props['total_reward_fund_steem']) - total_reward_shares2 = int(props['total_reward_shares2']) - - post_rshares2 = (steem_payout / total_reward_fund_steem) * total_reward_shares2 + reward_fund = self.steemd.get_reward_fund() + reward_balance = Amount(reward_fund['reward_balance']).amount + recent_claims = int(reward_fund['recent_claims']) - rshares = math.sqrt(self.CONTENT_CONSTANT ** 2 + post_rshares2) - self.CONTENT_CONSTANT - return rshares + return int(recent_claims * steem_payout / (reward_balance - steem_payout)) def rshares_2_weight(self, rshares): """ Obtain weight from rshares diff --git a/steem/dex.py b/steem/dex.py index e94a6ae..ccf7803 100644 --- a/steem/dex.py +++ b/steem/dex.py @@ -11,7 +11,8 @@ class Dex(object): """ This class allows to access calls specific for the internal exchange of STEEM. - :param Steemd steemd_instance: Steemd() instance to use when accessing a RPC + :param Steemd steemd_instance: Steemd() instance to use when + accessing a RPC """ assets = ["STEEM", "SBD"] @@ -23,20 +24,16 @@ def _get_asset(self, symbol): """ Return the properties of the assets tradeable on the network. - :param str symbol: Symbol to get the data for (i.e. STEEM, SBD, VESTS) + :param str symbol: Symbol to get the data for (i.e. STEEM, SBD, + VESTS) + """ if symbol == "STEEM": - return {"symbol": "STEEM", - "precision": 3 - } + return {"symbol": "STEEM", "precision": 3} elif symbol == "SBD": - return {"symbol": "SBD", - "precision": 3 - } + return {"symbol": "SBD", "precision": 3} elif symbol == "VESTS": - return {"symbol": "VESTS", - "precision": 6 - } + return {"symbol": "VESTS", "precision": 6} else: return None @@ -79,12 +76,14 @@ def get_ticker(self): """ t = self.steemd.get_ticker() - return {'highest_bid': float(t['highest_bid']), - 'latest': float(t["latest"]), - 'lowest_ask': float(t["lowest_ask"]), - 'percent_change': float(t["percent_change"]), - 'sbd_volume': Amount(t["sbd_volume"]), - 'steem_volume': Amount(t["steem_volume"])} + return { + 'highest_bid': float(t['highest_bid']), + 'latest': float(t["latest"]), + 'lowest_ask': float(t["lowest_ask"]), + 'percent_change': float(t["percent_change"]), + 'sbd_volume': Amount(t["sbd_volume"]), + 'steem_volume': Amount(t["steem_volume"]) + } def trade_history(self, time=1 * 60 * 60, limit=100): """ Returns the trade history for the internal market @@ -110,9 +109,14 @@ def market_history( ): """ Return the market history (filled orders). - :param int bucket_seconds: Bucket size in seconds (see `returnMarketHistoryBuckets()`) - :param int start_age: Age (in seconds) of the start of the window (default: 1h/3600) - :param int end_age: Age (in seconds) of the end of the window (default: now/0) + :param int bucket_seconds: Bucket size in seconds (see + `returnMarketHistoryBuckets()`) + + :param int start_age: Age (in seconds) of the start of the + window (default: 1h/3600) + + :param int end_age: Age (in seconds) of the end of the window + (default: now/0) Example: @@ -151,12 +155,22 @@ def buy(self, method will return the order creating (signed) transaction. :param number amount: Amount of ``quote`` to buy + :param str quote_symbol: STEEM, or SBD + :param float price: price denoted in ``base``/``quote`` - :param number expiration: (optional) expiration time of the order in seconds (defaults to 7 days) - :param bool killfill: flag that indicates if the order shall be killed if it is not filled (defaults to False) - :param str account: (optional) the source account for the transfer if not ``default_account`` - :param int order_id: (optional) a 32bit orderid for tracking of the created order (random by default) + + :param number expiration: (optional) expiration time of the + order in seconds (defaults to 7 days) + + :param bool killfill: flag that indicates if the order shall be + killed if it is not filled (defaults to False) + + :param str account: (optional) the source account for the + transfer if not ``default_account`` + + :param int order_id: (optional) a 32bit orderid for tracking of + the created order (random by default) Prices/Rates are denoted in 'base', i.e. the STEEM:SBD market is priced in SBD per STEEM. @@ -169,20 +183,25 @@ def buy(self, # We buy quote and pay with base quote, base = self._get_assets(quote=quote_symbol) - op = operations.LimitOrderCreate(**{ - "owner": account, - "orderid": order_id or random.getrandbits(32), - "amount_to_sell": '{:.{prec}f} {asset}'.format( - amount * rate, - prec=base["precision"], - asset=base["symbol"]), - "min_to_receive": '{:.{prec}f} {asset}'.format( - amount, - prec=quote["precision"], - asset=quote["symbol"]), - "fill_or_kill": killfill, - "expiration": transactions.fmt_time_from_now(expiration) - }) + op = operations.LimitOrderCreate( + **{ + "owner": + account, + "orderid": + order_id or random.getrandbits(32), + "amount_to_sell": + '{:.{prec}f} {asset}'.format( + amount * rate, + prec=base["precision"], + asset=base["symbol"]), + "min_to_receive": + '{:.{prec}f} {asset}'.format( + amount, prec=quote["precision"], asset=quote["symbol"]), + "fill_or_kill": + killfill, + "expiration": + transactions.fmt_time_from_now(expiration) + }) return self.steemd.commit.finalizeOp(op, account, "active") def sell(self, @@ -198,12 +217,22 @@ def sell(self, method will return the order creating (signed) transaction. :param number amount: Amount of ``quote`` to sell + :param str quote_symbol: STEEM, or SBD + :param float price: price denoted in ``base``/``quote`` - :param number expiration: (optional) expiration time of the order in seconds (defaults to 7 days) - :param bool killfill: flag that indicates if the order shall be killed if it is not filled (defaults to False) - :param str account: (optional) the source account for the transfer if not ``default_account`` - :param int orderid: (optional) a 32bit orderid for tracking of the created order (random by default) + + :param number expiration: (optional) expiration time of the + order in seconds (defaults to 7 days) + + :param bool killfill: flag that indicates if the order shall be + killed if it is not filled (defaults to False) + + :param str account: (optional) the source account for the + transfer if not ``default_account`` + + :param int orderid: (optional) a 32bit orderid for tracking of + the created order (random by default) Prices/Rates are denoted in 'base', i.e. the STEEM:SBD market is priced in SBD per STEEM. @@ -215,27 +244,35 @@ def sell(self, raise ValueError("You need to provide an account") # We buy quote and pay with base quote, base = self._get_assets(quote=quote_symbol) - op = operations.LimitOrderCreate(**{ - "owner": account, - "orderid": orderid or random.getrandbits(32), - "amount_to_sell": '{:.{prec}f} {asset}'.format( - amount, - prec=quote["precision"], - asset=quote["symbol"]), - "min_to_receive": '{:.{prec}f} {asset}'.format( - amount * rate, - prec=base["precision"], - asset=base["symbol"]), - "fill_or_kill": killfill, - "expiration": transactions.fmt_time_from_now(expiration) - }) + op = operations.LimitOrderCreate( + **{ + "owner": + account, + "orderid": + orderid or random.getrandbits(32), + "amount_to_sell": + '{:.{prec}f} {asset}'.format( + amount, prec=quote["precision"], asset=quote["symbol"]), + "min_to_receive": + '{:.{prec}f} {asset}'.format( + amount * rate, + prec=base["precision"], + asset=base["symbol"]), + "fill_or_kill": + killfill, + "expiration": + transactions.fmt_time_from_now(expiration) + }) return self.steemd.commit.finalizeOp(op, account, "active") def cancel(self, orderid, account=None): """ Cancels an order you have placed in a given market. :param int orderid: the 32bit orderid - :param str account: (optional) the source account for the transfer if not ``default_account`` + + :param str account: (optional) the source account for the + transfer if not ``default_account`` + """ if not account: if "default_account" in config: diff --git a/steem/instance.py b/steem/instance.py index 6b81905..7935aed 100644 --- a/steem/instance.py +++ b/steem/instance.py @@ -1,4 +1,5 @@ import steem as stm +import sys _shared_steemd_instance = None @@ -12,17 +13,23 @@ def get_config_node_list(): def shared_steemd_instance(): """ This method will initialize _shared_steemd_instance and return it. - The purpose of this method is to have offer single default Steem instance that can be reused by multiple classes. - """ + The purpose of this method is to have offer single default Steem + instance that can be reused by multiple classes. """ + global _shared_steemd_instance if not _shared_steemd_instance: - _shared_steemd_instance = stm.steemd.Steemd(nodes=get_config_node_list()) + if sys.version >= '3.0': + _shared_steemd_instance = stm.steemd.Steemd( + nodes=get_config_node_list()) + else: + _shared_steemd_instance = stm.Steemd( + nodes=get_config_node_list()) return _shared_steemd_instance def set_shared_steemd_instance(steemd_instance): - """ This method allows us to override default steem instance for all users of - _shared_steemd_instance. - """ + """ This method allows us to override default steem instance for all + users of _shared_steemd_instance. """ + global _shared_steemd_instance _shared_steemd_instance = steemd_instance diff --git a/steem/post.py b/steem/post.py index 0392838..0925968 100644 --- a/steem/post.py +++ b/steem/post.py @@ -26,8 +26,12 @@ class Post(dict): abstraction layer for Comments in Steem Args: - post (str or dict): ``@author/permlink`` or raw ``comment`` as dictionary. + + post (str or dict): ``author/permlink`` or raw ``comment`` as + dictionary. + steemd_instance (Steemd): Steemd node to connect to + """ def __init__(self, post, steemd_instance=None): @@ -41,9 +45,11 @@ def __init__(self, post, steemd_instance=None): if isinstance(post, str): # From identifier self.identifier = self.parse_identifier(post) - elif isinstance(post, dict) and "author" in post and "permlink" in post: - post["author"] = post["author"].replace('@', '') - self.identifier = construct_identifier(post["author"], post["permlink"]) + elif isinstance(post, + dict) and "author" in post and "permlink" in post: + + self.identifier = construct_identifier(post["author"], + post["permlink"]) else: raise ValueError("Post expects an identifier or a dict " "with author and permlink!") @@ -52,8 +58,8 @@ def __init__(self, post, steemd_instance=None): @staticmethod def parse_identifier(uri): - """ Extract post identifier from post URL. """ - return '@%s' % uri.split('@')[-1] + """ Extract canonical post id/url (i.e. strip any leading `@`). """ + return uri.split('@')[-1] def refresh(self): post_author, post_permlink = resolve_identifier(self.identifier) @@ -66,12 +72,10 @@ def refresh(self): self.patched = True # Parse Times - parse_times = ["active", - "cashout_time", - "created", - "last_payout", - "last_update", - "max_cashout_time"] + parse_times = [ + "active", "cashout_time", "created", "last_payout", "last_update", + "max_cashout_time" + ] for p in parse_times: post[p] = parse_time(post.get(p, "1970-01-01T00:00:00")) @@ -95,12 +99,12 @@ def refresh(self): post['community'] = '' if isinstance(post['json_metadata'], dict): if post["depth"] == 0: - post["tags"] = ( - post["parent_permlink"], - *get_in(post, ['json_metadata', 'tags'], default=[]) - ) + tags = [post["parent_permlink"]] + tags += get_in(post, ['json_metadata', 'tags'], default=[]) + post["tags"] = set(tags) - post['community'] = get_in(post, ['json_metadata', 'community'], default='') + post['community'] = get_in( + post, ['json_metadata', 'community'], default='') # If this post is a comment, retrieve the root comment self.root_identifier, self.category = self._get_root_identifier(post) @@ -133,17 +137,14 @@ def __repr__(self): def _get_root_identifier(self, post=None): if not post: post = self - m = re.match("/([^/]*)/@([^/]*)/([^#]*).*", - post.get("url", "")) + m = re.match("/([^/]*)/@([^/]*)/([^#]*).*", post.get("url", "")) if not m: return "", "" else: category = m.group(1) author = m.group(2) permlink = m.group(3) - return construct_identifier( - author, permlink - ), category + return construct_identifier(author, permlink), category def get_replies(self): """ Return **first-level** comments of the post. @@ -156,7 +157,7 @@ def get_replies(self): def get_all_replies(root_post=None, comments=list(), all_comments=list()): """ Recursively fetch all the child comments, and return them as a list. - Usage: all_comments = Post.get_all_replies(Post('@foo/bar')) + Usage: all_comments = Post.get_all_replies(Post('foo/bar')) """ # see if our root post has any comments if root_post: @@ -168,7 +169,8 @@ def get_all_replies(root_post=None, comments=list(), all_comments=list()): children = list(flatten([list(x.get_replies()) for x in comments])) if not children: return all_comments or comments - return Post.get_all_replies(comments=children, all_comments=comments + children) + return Post.get_all_replies( + comments=children, all_comments=comments + children) @property def reward(self): @@ -193,16 +195,16 @@ def is_comment(self): return self['depth'] > 0 def curation_reward_pct(self): - """ If post is less than 30 minutes old, it will incur a curation reward penalty. - """ - reward = (self.time_elapsed().seconds / 1800) * 100 + """ If post is less than 15 minutes old, it will incur a curation + reward penalty. """ + reward = (self.time_elapsed().seconds / 900) * 100 if reward > 100: reward = 100 return reward def export(self): - """ This method returns a dictionary that is type-safe to store as JSON or in a database. - """ + """ This method returns a dictionary that is type-safe to store as + JSON or in a database. """ self.refresh() # Remove Steem instance object @@ -222,7 +224,8 @@ def decompose_amounts(item): def upvote(self, weight=+100, voter=None): """ Upvote the post - :param float weight: (optional) Weight for posting (-100.0 - +100.0) defaults to +100.0 + :param float weight: (optional) Weight for posting (-100.0 - + +100.0) defaults to +100.0 :param str voter: (optional) Voting account """ return self.vote(weight, voter=voter) @@ -230,7 +233,8 @@ def upvote(self, weight=+100, voter=None): def downvote(self, weight=-100, voter=None): """ Downvote the post - :param float weight: (optional) Weight for posting (-100.0 - +100.0) defaults to -100.0 + :param float weight: (optional) Weight for posting (-100.0 - + +100.0) defaults to -100.0 :param str voter: (optional) Voting account """ return self.vote(weight, voter=voter) @@ -243,7 +247,7 @@ def vote(self, weight, voter=None): """ # Test if post is archived, if so, voting is worthless but just # pollutes the blockchain and account history - if not self.get('net_rshares'): + if self.get('net_rshares', None) == None: raise VotingInvalidOnArchivedPost return self.commit.vote(self.identifier, weight, account=voter) @@ -273,9 +277,7 @@ def edit(self, body, meta=None, replace=False): return reply_identifier = construct_identifier( - original_post["parent_author"], - original_post["parent_permlink"] - ) + original_post["parent_author"], original_post["parent_permlink"]) new_meta = {} if meta: @@ -305,27 +307,31 @@ def reply(self, body, title="", author="", meta=None): :param json meta: JSON meta object that can be attached to the post. (optional) """ - return self.commit.post(title, - body, - json_metadata=meta, - author=author, - reply_identifier=self.identifier) + return self.commit.post( + title, + body, + json_metadata=meta, + author=author, + reply_identifier=self.identifier) def set_comment_options(self, options): op = CommentOptions( **{ - "author": self["author"], - "permlink": self["permlink"], + "author": + self["author"], + "permlink": + self["permlink"], "max_accepted_payout": - options.get("max_accepted_payout", str(self["max_accepted_payout"])), - "percent_steem_dollars": int( - options.get("percent_steem_dollars", - self["percent_steem_dollars"] / 100 - ) * 100), + options.get("max_accepted_payout", + str(self["max_accepted_payout"])), + "percent_steem_dollars": + int( + options.get("percent_steem_dollars", + self["percent_steem_dollars"] / 100) * 100), "allow_votes": options.get("allow_votes", self["allow_votes"]), "allow_curation_rewards": - options.get("allow_curation_rewards", self["allow_curation_rewards"]), - } - ) + options.get("allow_curation_rewards", self[ + "allow_curation_rewards"]), + }) return self.commit.finalizeOp(op, self["author"], "posting") diff --git a/steem/profile.py b/steem/profile.py index fd73475..cf27b6a 100644 --- a/steem/profile.py +++ b/steem/profile.py @@ -3,7 +3,6 @@ class DotDict(dict): - def __init__(self, *args): """ This class simplifies the use of "."-separated keys when defining a nested dictionary::: diff --git a/steem/steem.py b/steem/steem.py index ccdc867..ddea7ad 100644 --- a/steem/steem.py +++ b/steem/steem.py @@ -6,28 +6,41 @@ class Steem: """ Connect to the Steem network. Args: - nodes (list): A list of Steem HTTP RPC nodes to connect to. If not provided, official Steemit nodes will be used. - debug (bool): Elevate logging level to `logging.DEBUG`. Defaults to `logging.INFO`. - no_broadcast (bool): If set to ``True``, committal actions like sending funds will have no effect (simulation only). + nodes (list): A list of Steem HTTP RPC nodes to connect to. If + not provided, official Steemit nodes will be used. + + debug (bool): Elevate logging level to `logging.DEBUG`. + Defaults to `logging.INFO`. + + no_broadcast (bool): If set to ``True``, committal actions like + sending funds will have no effect (simulation only). Optional Arguments (kwargs): Args: - keys (list): A list of wif keys. If provided, the Wallet will use these keys rather than the - ones found in BIP38 encrypted wallet. + + keys (list): A list of wif keys. If provided, the Wallet will + use these keys rather than the ones found in BIP38 encrypted + wallet. + unsigned (bool): (Defaults to False) Use this for offline signing. - expiration (int): (Defualts to 60) Size of window in seconds that the transaction - needs to be broadcasted in, before it expires. + expiration (int): (Defualts to 60) Size of window in seconds + that the transaction needs to be broadcasted in, before it + expires. Returns: - Steemd class instance. It can be used to execute commands against steem node. + + Steemd class instance. It can be used to execute commands + against steem node. Example: - If you would like to override the official Steemit nodes (default), you can pass your own. - When currently used node goes offline, ``Steemd`` will automatically fail-over to the next available node. + If you would like to override the official Steemit nodes + (default), you can pass your own. When currently used node goes + offline, ``Steemd`` will automatically fail-over to the next + available node. .. code-block:: python @@ -41,15 +54,9 @@ class Steem: """ def __init__(self, nodes=None, no_broadcast=False, **kwargs): - self.steemd = Steemd( - nodes=nodes, - **kwargs - ) + self.steemd = Steemd(nodes=nodes, **kwargs) self.commit = Commit( - steemd_instance=self.steemd, - no_broadcast=no_broadcast, - **kwargs - ) + steemd_instance=self.steemd, no_broadcast=no_broadcast, **kwargs) def __getattr__(self, item): """ Bind .commit, .steemd methods here as a convenience. """ @@ -57,9 +64,38 @@ def __getattr__(self, item): return getattr(self.steemd, item) if hasattr(self.commit, item): return getattr(self.commit, item) + if item.endswith("_api"): + return Steem.Api(api_name=item, exec_method=self.steemd.call) raise AttributeError('Steem has no attribute "%s"' % item) + class Api(object): + def __init__(self, api_name="", exec_method=None): + self.api_name = api_name + self.exec_method = exec_method + return + + def __getattr__(self, method_name): + return Steem.Method( + api_name=self.api_name, + method_name=method_name, + exec_method=self.exec_method, + ) + + class Method(object): + def __init__(self, api_name="", method_name="", exec_method=None): + self.api_name = api_name + self.method_name = method_name + self.exec_method = exec_method + return + + def __call__(self, *args, **kwargs): + assert not (args and kwargs), "specified both args and kwargs" + if len(kwargs) > 0: + return self.exec_method( + self.method_name, kwargs=kwargs, api=self.api_name) + return self.exec_method(self.method_name, *args, api=self.api_name) + if __name__ == '__main__': s = Steem() diff --git a/steem/steemd.py b/steem/steemd.py index 880803b..6ae89bc 100644 --- a/steem/steemd.py +++ b/steem/steemd.py @@ -1,6 +1,5 @@ # coding=utf-8 import logging -from typing import List, Any, Union, Set from funcy.seqs import first from steembase.chains import known_chains @@ -13,29 +12,32 @@ from .blockchain import Blockchain from .post import Post from .utils import resolve_identifier +from .utils import compat_compose_dictionary +from .instance import get_config_node_list logger = logging.getLogger(__name__) -def get_config_node_list(): - nodes = configStorage.get('nodes', None) - if nodes: - return nodes.split(',') - class Steemd(HttpClient): """ Connect to the Steem network. Args: - nodes (list): A list of Steem HTTP RPC nodes to connect to. If not provided, official Steemit nodes will be used. + + nodes (list): A list of Steem HTTP RPC nodes to connect to. If + not provided, official Steemit nodes will be used. Returns: - Steemd class instance. It can be used to execute commands against steem node. + + Steemd class instance. It can be used to execute commands + against steem node. Example: - If you would like to override the official Steemit nodes (default), you can pass your own. - When currently used node goes offline, ``Steemd`` will automatically fail-over to the next available node. + If you would like to override the official Steemit nodes + (default), you can pass your own. When currently used node goes + offline, ``Steemd`` will automatically fail-over to the next + available node. .. code-block:: python @@ -50,8 +52,8 @@ class Steemd(HttpClient): def __init__(self, nodes=None, **kwargs): if not nodes: - nodes = get_config_node_list() or ['https://steemd.steemit.com'] - + nodes = get_config_node_list() or ['https://api.steemit.com'] + super(Steemd, self).__init__(nodes, **kwargs) @property @@ -62,7 +64,9 @@ def chain_params(self): """ props = self.get_dynamic_global_properties() chain = props["current_supply"].split(" ")[1] - assert chain in known_chains, "The chain you are connecting to is not supported" + + assert chain in known_chains, "The chain you are connecting " + \ + "to is not supported" return known_chains.get(chain) def get_replies(self, author, skip_own=True): @@ -100,19 +104,22 @@ def get_posts(self, limit=10, sort="hot", category=None, start=None): :param str sort: Sort the list by "recent" or "payout" :param str category: Only show posts in this category :param str start: Show posts after this post. Takes an - identifier of the form ``@author/permlink`` + identifier of the form ``author/permlink`` """ - discussion_query = {"tag": category, - "limit": limit, - } + discussion_query = { + "tag": category, + "limit": limit, + } if start: author, permlink = resolve_identifier(start) discussion_query["start_author"] = author discussion_query["start_permlink"] = permlink - if sort not in ["trending", "created", "active", "cashout", - "payout", "votes", "children", "hot"]: + if sort not in [ + "trending", "created", "active", "cashout", "payout", "votes", + "children", "hot" + ]: raise Exception("Invalid choice of '--sort'!") func = getattr(self, "get_discussions_by_%s" % sort) @@ -141,11 +148,11 @@ def last_irreversible_block_num(self): @property def head_block_number(self): """ Newest block number. """ - return self.get_dynamic_global_properties()[ - 'head_block_number'] + return self.get_dynamic_global_properties()['head_block_number'] - def get_account(self, account: str): - """ Lookup account information such as user profile, public keys, balances, etc. + def get_account(self, account): + """ Lookup account information such as user profile, public keys, + balances, etc. Args: account (str): STEEM username that we are looking up. @@ -154,7 +161,7 @@ def get_account(self, account: str): dict: Account information. """ - return first(self.exec('get_accounts', [account])) + return first(self.call('get_accounts', [account])) def get_all_usernames(self, last_user=''): """ Fetch the full list of STEEM usernames. """ @@ -166,12 +173,12 @@ def get_all_usernames(self, last_user=''): return usernames - def _get_blocks(self, blocks: Union[List[int], Set[int]]): + def _get_blocks(self, blocks): """ Fetch multiple blocks from steemd at once. - Warning: - This method does not ensure that all blocks are returned, or that the results are ordered. - You will probably want to use `steemd.get_blocks()` instead. + Warning: This method does not ensure that all blocks are returned, + or that the results are ordered. You will probably want to use + `steemd.get_blocks()` instead. Args: blocks (list): A list, or a set of block numbers. @@ -180,17 +187,23 @@ def _get_blocks(self, blocks: Union[List[int], Set[int]]): A generator with results. """ - results = self.exec_multi_with_futures('get_block', blocks, max_workers=10) - return ({**x, 'block_num': int(x['block_id'][:8], base=16)} for x in results if x) + results = self.call_multi_with_futures( + 'get_block', blocks, max_workers=10) + return (compat_compose_dictionary(x, block_num=int(x['block_id'][:8], base=16)) + for x in results if x) - def get_blocks(self, block_nums: List[int]): + def get_blocks(self, block_nums): """ Fetch multiple blocks from steemd at once, given a range. Args: - block_nums (list): A list of all block numbers we would like to tech. + + block_nums (list): A list of all block numbers we would like to + tech. Returns: + dict: An ensured and ordered list of all `get_block` results. + """ required = set(block_nums) available = set() @@ -206,12 +219,15 @@ def get_blocks(self, block_nums: List[int]): return [blocks[x] for x in block_nums] - def get_blocks_range(self, start: int, end: int): + def get_blocks_range(self, start, end): """ Fetch multiple blocks from steemd at once, given a range. Args: + start (int): The number of the block to start with - end (int): The number of the block at the end of the range. Not included in results. + + end (int): The number of the block at the end of the range. Not + included in results. Returns: dict: An ensured and ordered list of all `get_block` results. @@ -219,22 +235,7 @@ def get_blocks_range(self, start: int, end: int): """ return self.get_blocks(list(range(start, end))) - ################################ - # steemd api generated methods # - ################################ - # def set_subscribe_callback(self, callback: object, clear_filter: object): - # return self.exec('set_subscribe_callback', callback, clear_filter, api='database_api') - # - # def set_pending_transaction_callback(self, callback: object): - # return self.exec('set_pending_transaction_callback', callback, api='database_api') - # - # def set_block_applied_callback(self, callback: object): - # return self.exec('set_block_applied_callback', callback, api='database_api') - # - # def cancel_all_subscriptions(self): - # return self.exec('cancel_all_subscriptions', api='database_api') - - def get_reward_fund(self, fund_name: str = 'post'): + def get_reward_fund(self, fund_name='post'): """ Get details for a reward fund. Right now the only pool available is 'post'. @@ -257,84 +258,118 @@ def get_reward_fund(self, fund_name: str = 'post'): 'reward_balance': '555660.895 STEEM'} """ - return self.exec('get_reward_fund', fund_name, api='database_api') + return self.call('get_reward_fund', fund_name, api='database_api') - def get_expiring_vesting_delegations(self, account: str, start: PointInTime, limit: int): + def get_expiring_vesting_delegations(self, account, + start, limit): """ get_expiring_vesting_delegations """ - return self.exec('get_expiring_vesting_delegations', account, start, limit, api='database_api') - - def get_trending_tags(self, after_tag: str, limit: int): + return self.call( + 'get_expiring_vesting_delegations', + account, + start, + limit, + api='database_api') + + def get_trending_tags(self, after_tag, limit): """ get_trending_tags """ - return self.exec('get_trending_tags', after_tag, limit, api='database_api') + return self.call( + 'get_trending_tags', after_tag, limit, api='database_api') - def get_tags_used_by_author(self, account: str): + def get_tags_used_by_author(self, account): """ get_tags_used_by_author """ - return self.exec('get_tags_used_by_author', account, api='database_api') + return self.call( + 'get_tags_used_by_author', account, api='database_api') - def get_discussions_by_trending(self, discussion_query: dict): + def get_discussions_by_trending(self, discussion_query): """ get_discussions_by_trending """ - return self.exec('get_discussions_by_trending', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_trending', + discussion_query, + api='database_api') - def get_comment_discussions_by_payout(self, discussion_query: dict): + def get_comment_discussions_by_payout(self, discussion_query): """ get_comment_discussions_by_payout """ - return self.exec('get_comment_discussions_by_payout', discussion_query, api='database_api') + return self.call( + 'get_comment_discussions_by_payout', + discussion_query, + api='database_api') - def get_post_discussions_by_payout(self, discussion_query: dict): + def get_post_discussions_by_payout(self, discussion_query): """ get_post_discussions_by_payout """ - return self.exec('get_post_discussions_by_payout', discussion_query, api='database_api') + return self.call( + 'get_post_discussions_by_payout', + discussion_query, + api='database_api') - def get_discussions_by_created(self, discussion_query: dict): + def get_discussions_by_created(self, discussion_query): """ get_discussions_by_created """ - return self.exec('get_discussions_by_created', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_created', discussion_query, api='database_api') - def get_discussions_by_active(self, discussion_query: dict): + def get_discussions_by_active(self, discussion_query): """ get_discussions_by_active """ - return self.exec('get_discussions_by_active', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_active', discussion_query, api='database_api') - def get_discussions_by_cashout(self, discussion_query: dict): + def get_discussions_by_cashout(self, discussion_query): """ get_discussions_by_cashout """ - return self.exec('get_discussions_by_cashout', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_cashout', discussion_query, api='database_api') - def get_discussions_by_payout(self, discussion_query: dict): + def get_discussions_by_payout(self, discussion_query): """ get_discussions_by_payout """ - return self.exec('get_discussions_by_payout', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_payout', discussion_query, api='database_api') - def get_discussions_by_votes(self, discussion_query: dict): + def get_discussions_by_votes(self, discussion_query): """ get_discussions_by_votes """ - return self.exec('get_discussions_by_votes', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_votes', discussion_query, api='database_api') - def get_discussions_by_children(self, discussion_query: dict): + def get_discussions_by_children(self, discussion_query): """ get_discussions_by_children """ - return self.exec('get_discussions_by_children', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_children', + discussion_query, + api='database_api') - def get_discussions_by_hot(self, discussion_query: dict): + def get_discussions_by_hot(self, discussion_query): """ get_discussions_by_hot """ - return self.exec('get_discussions_by_hot', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_hot', discussion_query, api='database_api') - def get_discussions_by_feed(self, discussion_query: dict): + def get_discussions_by_feed(self, discussion_query): """ get_discussions_by_feed """ - return self.exec('get_discussions_by_feed', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_feed', discussion_query, api='database_api') - def get_discussions_by_blog(self, discussion_query: dict): + def get_discussions_by_blog(self, discussion_query): """ get_discussions_by_blog """ - return self.exec('get_discussions_by_blog', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_blog', discussion_query, api='database_api') - def get_discussions_by_comments(self, discussion_query: dict): + def get_discussions_by_comments(self, discussion_query): """ get_discussions_by_comments """ - return self.exec('get_discussions_by_comments', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_comments', + discussion_query, + api='database_api') - def get_discussions_by_promoted(self, discussion_query: dict): + def get_discussions_by_promoted(self, discussion_query): """ get_discussions_by_promoted """ - return self.exec('get_discussions_by_promoted', discussion_query, api='database_api') + return self.call( + 'get_discussions_by_promoted', + discussion_query, + api='database_api') - def get_block_header(self, block_num: int): + def get_block_header(self, block_num): """ Get block headers, given a block number. Args: - block_num (int): Block number. + block_num (int) number. Returns: - dict: Block headers in a JSON compatible format. + dict headers in a JSON compatible format. Example: @@ -347,67 +382,41 @@ def get_block_header(self, block_num: int): {'extensions': [], 'previous': '0087a2372163ff5c5838b09589ce281d5a564f66', 'timestamp': '2017-01-29T02:47:33', - 'transaction_merkle_root': '4ddc419e531cccee6da660057d606d11aab9f3a5', + + 'transaction_merkle_root': + '4ddc419e531cccee6da660057d606d11aab9f3a5', 'witness': 'chainsquad.com'} """ - return self.exec('get_block_header', block_num, api='database_api') + return self.call('get_block_header', block_num, api='database_api') - def get_block(self, block_num: int): + def get_block(self, block_num): """ Get the full block, transactions and all, given a block number. Args: - block_num (int): Block number. + block_num (int) number. Returns: - dict: Block in a JSON compatible format. - - Example: - - .. code-block:: python - - s.get_block(8888888) - - :: - - {'extensions': [], - 'previous': '0087a2372163ff5c5838b09589ce281d5a564f66', - 'timestamp': '2017-01-29T02:47:33', - 'transaction_merkle_root': '4ddc419e531cccee6da660057d606d11aab9f3a5', - 'transactions': [{'expiration': '2017-01-29T02:47:42', - 'extensions': [], - 'operations': [['comment', - {'author': 'hilarski', - 'body': 'https://media.giphy.com/media/RAx4Xwh1OPHji/giphy.gif', - 'json_metadata': '{"tags":["motocross"],"image":["https://media.giphy.com/media/RAx4Xwh1OPHji/giphy.gif"],"app":"steemit/0.1"}', - 'parent_author': 'b0y2k', - 'parent_permlink': 'ama-supercross-round-4-phoenix-2017', - 'permlink': 're-b0y2k-ama-supercross-round-4-phoenix-2017-20170129t024725575z', - 'title': ''}]], - 'ref_block_num': 41495, - 'ref_block_prefix': 2639073901, - 'signatures': ['2058b69f4c15f704a67a7b5a7996a9c9bbfd39c639f9db19b99ecad8328c4ce3610643f8d1b6424c352df120614cd535cd8f2772fce68814eeea50049684c37d69']}], - 'witness': 'chainsquad.com', - 'witness_signature': '1f115745e3f6fee95124164f4b57196c0eda2a700064faa97d0e037d3554ee2d5b618e6bfd457473783e8b8333724ba0bf93f0a4a7026e7925c8c4d2ba724152d4'} - + dict in a JSON compatible format. """ - return self.exec('get_block', block_num, api='database_api') + return self.call('get_block', block_num, api='database_api') - def get_ops_in_block(self, block_num: int, virtual_only: bool): + def get_ops_in_block(self, block_num, virtual_only): """ get_ops_in_block """ - return self.exec('get_ops_in_block', block_num, virtual_only, api='database_api') + return self.call( + 'get_ops_in_block', block_num, virtual_only, api='database_api') - def get_state(self, path: str): + def get_state(self, path): """ get_state """ - return self.exec('get_state', path, api='database_api') + return self.call('get_state', path, api='database_api') def get_config(self): """ Get internal chain configuration. """ - return self.exec('get_config', api='database_api') + return self.call('get_config', api='database_api') def get_dynamic_global_properties(self): """ get_dynamic_global_properties """ - return self.exec('get_dynamic_global_properties', api='database_api') + return self.call('get_dynamic_global_properties', api='database_api') def get_chain_properties(self): """ Get witness elected chain properties. @@ -419,14 +428,15 @@ def get_chain_properties(self): 'sbd_interest_rate': 250} """ - return self.exec('get_chain_properties', api='database_api') + return self.call('get_chain_properties', api='database_api') def get_feed_history(self): """ Get the hourly averages of witness reported STEEM/SBD prices. :: - {'current_median_history': {'base': '0.093 SBD', 'quote': '1.010 STEEM'}, + {'current_median_history': + {'base': '0.093 SBD', 'quote': '1.010 STEEM'}, 'id': 0, 'price_history': [{'base': '0.092 SBD', 'quote': '1.010 STEEM'}, {'base': '0.093 SBD', 'quote': '1.020 STEEM'}, @@ -435,7 +445,7 @@ def get_feed_history(self): {'base': '0.093 SBD', 'quote': '1.010 STEEM'}, """ - return self.exec('get_feed_history', api='database_api') + return self.call('get_feed_history', api='database_api') def get_current_median_history_price(self): """ Get the average STEEM/SBD price. @@ -447,11 +457,12 @@ def get_current_median_history_price(self): {'base': '0.093 SBD', 'quote': '1.010 STEEM'} """ - return self.exec('get_current_median_history_price', api='database_api') + return self.call( + 'get_current_median_history_price', api='database_api') def get_witness_schedule(self): """ get_witness_schedule """ - return self.exec('get_witness_schedule', api='database_api') + return self.call('get_witness_schedule', api='database_api') def get_hardfork_version(self): """ Get the current version of the chain. @@ -460,62 +471,78 @@ def get_hardfork_version(self): This is not the same as latest minor version. """ - return self.exec('get_hardfork_version', api='database_api') + return self.call('get_hardfork_version', api='database_api') def get_next_scheduled_hardfork(self): """ get_next_scheduled_hardfork """ - return self.exec('get_next_scheduled_hardfork', api='database_api') + return self.call('get_next_scheduled_hardfork', api='database_api') - def get_accounts(self, account_names: list): - """ Lookup account information such as user profile, public keys, balances, etc. + def get_accounts(self, account_names): + """ Lookup account information such as user profile, public keys, + balances, etc. + + This method is same as ``get_account``, but supports querying for + multiple accounts at the time. - This method is same as ``get_account``, but supports querying for multiple accounts at the time. """ - return self.exec('get_accounts', account_names, api='database_api') + return self.call('get_accounts', account_names, api='database_api') - def get_account_references(self, account_id: int): + def get_account_references(self, account_id): """ get_account_references """ - return self.exec('get_account_references', account_id, api='database_api') + return self.call( + 'get_account_references', account_id, api='database_api') - def lookup_account_names(self, account_names: list): + def lookup_account_names(self, account_names): """ lookup_account_names """ - return self.exec('lookup_account_names', account_names, api='database_api') + return self.call( + 'lookup_account_names', account_names, api='database_api') - def lookup_accounts(self, after: Union[str, int], limit: int) -> List[str]: + def lookup_accounts(self, after, limit): """Get a list of usernames from all registered accounts. Args: - after (str, int): Username to start with. If '', 0 or -1, it will start at beginning. + + after (str, int): Username to start with. If '', 0 or -1, it + will start at beginning. + limit (int): How many results to return. Returns: list: List of usernames in requested chunk. """ - return self.exec('lookup_accounts', after, limit, api='database_api') + return self.call('lookup_accounts', after, limit, api='database_api') def get_account_count(self): """ How many accounts are currently registered on STEEM? """ - return self.exec('get_account_count', api='database_api') + return self.call('get_account_count', api='database_api') - def get_conversion_requests(self, account: str): + def get_conversion_requests(self, account): """ get_conversion_requests """ - return self.exec('get_conversion_requests', account, api='database_api') + return self.call( + 'get_conversion_requests', account, api='database_api') - def get_account_history(self, account: str, index_from: int, limit: int): + def get_account_history(self, account, index_from, limit): """ History of all operations for a given account. Args: + account (str): STEEM username that we are looking up. - index_from (int): The highest database index we take as a starting point. + + index_from (int): The highest database index we take as a + starting point. + limit (int): How many items are we interested in. Returns: + list: List of operations. Example: - To get the latest (newest) operations from a given user ``furion``, we should set the ``index_from`` to -1. - This is the same as saying `give me the highest index there is`. + + To get the latest (newest) operations from a given user + ``furion``, we should set the ``index_from`` to -1. This is the + same as saying `give me the highest index there is`. .. code-block :: python @@ -529,7 +556,7 @@ def get_account_history(self, account: str, index_from: int, limit: int): {'block': 9941972, 'op': ['vote', {'author': 'breezin', - 'permlink': 'raising-children-is-not-childsplay-pro-s-and-con-s-of-being-a-young-parent', + 'permlink': 'raising-childr....', 'voter': 'furion', 'weight': 900}], 'op_in_trx': 0, @@ -562,10 +589,13 @@ def get_account_history(self, account: str, index_from: int, limit: int): 'trx_in_block': 7, 'virtual_op': 0}]] - If we want to query for a particular range of indexes, we need to consider both `index_from` and `limit` fields. - Remember, `index_from` works backwards, so if we set it to 100, we will get items `100, 99, 98, 97...`. + If we want to query for a particular range of indexes, we need + to consider both `index_from` and `limit` fields. Remember, + `index_from` works backwards, so if we set it to 100, we will + get items `100, 99, 98, 97...`. - For example, if we'd like to get the first 100 operations the user did, we would write: + For example, if we'd like to get the first 100 operations the + user did, we would write: .. code-block:: python @@ -579,37 +609,53 @@ def get_account_history(self, account: str, index_from: int, limit: int): """ - return self.exec('get_account_history', account, index_from, limit, api='database_api') - - def get_owner_history(self, account: str): + return self.call( + 'get_account_history', + account, + index_from, + limit, + api='database_api') + + def get_owner_history(self, account): """ get_owner_history """ - return self.exec('get_owner_history', account, api='database_api') + return self.call('get_owner_history', account, api='database_api') - def get_recovery_request(self, account: str): + def get_recovery_request(self, account): """ get_recovery_request """ - return self.exec('get_recovery_request', account, api='database_api') + return self.call('get_recovery_request', account, api='database_api') - def get_escrow(self, from_account: str, escrow_id: int): + def get_escrow(self, from_account, escrow_id): """ get_escrow """ - return self.exec('get_escrow', from_account, escrow_id, api='database_api') + return self.call( + 'get_escrow', from_account, escrow_id, api='database_api') - def get_withdraw_routes(self, account: str, withdraw_route_type: str): + def get_withdraw_routes(self, account, withdraw_route_type): """ get_withdraw_routes """ - return self.exec('get_withdraw_routes', account, withdraw_route_type, api='database_api') + return self.call( + 'get_withdraw_routes', + account, + withdraw_route_type, + api='database_api') - def get_account_bandwidth(self, account: str, bandwidth_type: object): + def get_account_bandwidth(self, account, bandwidth_type): """ get_account_bandwidth """ - return self.exec('get_account_bandwidth', account, bandwidth_type, api='database_api') + return self.call( + 'get_account_bandwidth', + account, + bandwidth_type, + api='database_api') - def get_savings_withdraw_from(self, account: str): + def get_savings_withdraw_from(self, account): """ get_savings_withdraw_from """ - return self.exec('get_savings_withdraw_from', account, api='database_api') + return self.call( + 'get_savings_withdraw_from', account, api='database_api') - def get_savings_withdraw_to(self, account: str): + def get_savings_withdraw_to(self, account): """ get_savings_withdraw_to """ - return self.exec('get_savings_withdraw_to', account, api='database_api') + return self.call( + 'get_savings_withdraw_to', account, api='database_api') - def get_order_book(self, limit: int): + def get_order_book(self, limit): """ Get the internal market order book. This method will return both bids and asks. @@ -631,73 +677,91 @@ def get_order_book(self, limit: int): :: {'asks': [{'created': '2017-03-06T21:29:54', - 'order_price': {'base': '513.571 STEEM', 'quote': '50.000 SBD'}, + 'order_price': + {'base': '513.571 STEEM', 'quote': '50.000 SBD'}, 'real_price': '0.09735752213423265', 'sbd': 50000, 'steem': 513571}, {'created': '2017-03-06T21:01:39', - 'order_price': {'base': '63.288 STEEM', 'quote': '6.204 SBD'}, + 'order_price': + {'base': '63.288 STEEM', 'quote': '6.204 SBD'}, 'real_price': '0.09802806219188472', 'sbd': 6204, 'steem': 63288}], 'bids': [{'created': '2017-03-06T21:29:51', - 'order_price': {'base': '50.000 SBD', 'quote': '516.503 STEEM'}, + 'order_price': + {'base': '50.000 SBD', 'quote': '516.503 STEEM'}, 'real_price': '0.09680485882947436', 'sbd': 50000, 'steem': 516503}, {'created': '2017-03-06T17:30:24', - 'order_price': {'base': '36.385 SBD', 'quote': '379.608 STEEM'}, + 'order_price': + {'base': '36.385 SBD', 'quote': '379.608 STEEM'}, 'real_price': '0.09584887568228277', 'sbd': 36385, 'steem': 379608}]} """ - return self.exec('get_order_book', limit, api='database_api') + return self.call('get_order_book', limit, api='database_api') - def get_open_orders(self, account: str): + def get_open_orders(self, account): """ get_open_orders """ - return self.exec('get_open_orders', account, api='database_api') + return self.call('get_open_orders', account, api='database_api') - def get_liquidity_queue(self, start_account: str, limit: int): + def get_liquidity_queue(self, start_account, limit): """ Get the liquidity queue. Warning: - This feature is currently not in use, and might be deprecated in the future. + + This feature is currently not in use, and might be deprecated + in the future. """ - return self.exec('get_liquidity_queue', start_account, limit, api='database_api') + return self.call( + 'get_liquidity_queue', start_account, limit, api='database_api') - def get_transaction_hex(self, signed_transaction: SignedTransaction): + def get_transaction_hex(self, signed_transaction): """ get_transaction_hex """ - return self.exec('get_transaction_hex', signed_transaction, api='database_api') + return self.call( + 'get_transaction_hex', signed_transaction, api='database_api') - def get_transaction(self, transaction_id: str): + def get_transaction(self, transaction_id): """ get_transaction """ - return self.exec('get_transaction', transaction_id, api='database_api') + return self.call('get_transaction', transaction_id, api='database_api') - def get_required_signatures(self, signed_transaction: SignedTransaction, available_keys: list): + def get_required_signatures(self, signed_transaction, + available_keys): """ get_required_signatures """ - return self.exec('get_required_signatures', signed_transaction, available_keys, api='database_api') + return self.call( + 'get_required_signatures', + signed_transaction, + available_keys, + api='database_api') - def get_potential_signatures(self, signed_transaction: SignedTransaction): + def get_potential_signatures(self, signed_transaction): """ get_potential_signatures """ - return self.exec('get_potential_signatures', signed_transaction, api='database_api') + return self.call( + 'get_potential_signatures', signed_transaction, api='database_api') - def verify_authority(self, signed_transaction: SignedTransaction): + def verify_authority(self, signed_transaction): """ verify_authority """ - return self.exec('verify_authority', signed_transaction, api='database_api') + return self.call( + 'verify_authority', signed_transaction, api='database_api') - def verify_account_authority(self, account: str, keys: list): + def verify_account_authority(self, account, keys): """ verify_account_authority """ - return self.exec('verify_account_authority', account, keys, api='database_api') + return self.call( + 'verify_account_authority', account, keys, api='database_api') - def get_active_votes(self, author: str, permlink: str): + def get_active_votes(self, author, permlink): """ Get all votes for the given post. Args: author (str): OP's STEEM username. - permlink (str): Post identifier following the username. It looks like slug-ified title. + + permlink (str): Post identifier following the username. It + looks like slug-ified title. Returns: list: List of votes. @@ -705,7 +769,8 @@ def get_active_votes(self, author: str, permlink: str): Example: .. code-block:: python - s.get_active_votes('mynameisbrian', 'steemifying-idioms-there-s-no-use-crying-over-spilt-milk') + s.get_active_votes('mynameisbrian', + 'steemifying-idioms-there-s-no-use-crying-over-spilt-milk') Output: @@ -725,19 +790,19 @@ def get_active_votes(self, author: str, permlink: str): 'voter': 'flourish', 'weight': '2334690471157'}] """ - return self.exec('get_active_votes', author, permlink, api='database_api') + return self.call( + 'get_active_votes', author, permlink, api='database_api') - def get_account_votes(self, account: str): + def get_account_votes(self, account): """ All votes the given account ever made. Returned votes are in the following format: :: - {'authorperm': 'alwaysfelicia/time-line-of-best-times-to-post-on-steemit-mystery-explained', - 'percent': 100, - 'rshares': 709227399, - 'time': '2016-08-07T16:06:24', - 'weight': '3241351576115042'}, + {'authorperm': + 'alwaysfelicia/time-line-of-best-time...', + 'percent': 100, 'rshares': 709227399, 'time': + '2016-08-07T16:06:24', 'weight': '3241351576115042'}, Args: @@ -748,162 +813,212 @@ def get_account_votes(self, account: str): """ - return self.exec('get_account_votes', account, api='database_api') + return self.call('get_account_votes', account, api='database_api') - def get_content(self, author: str, permlink: str): + def get_content(self, author, permlink): """ get_content """ - return self.exec('get_content', author, permlink, api='database_api') + return self.call('get_content', author, permlink, api='database_api') - def get_content_replies(self, author: str, permlink: str): + def get_content_replies(self, author, permlink): """ get_content_replies """ - return self.exec('get_content_replies', author, permlink, api='database_api') + return self.call( + 'get_content_replies', author, permlink, api='database_api') - def get_discussions_by_author_before_date(self, - author: str, - start_permlink: str, - before_date: PointInTime, - limit: int): + def get_discussions_by_author_before_date( + self, author, start_permlink, before_date, + limit): """ get_discussions_by_author_before_date """ - return self.exec('get_discussions_by_author_before_date', - author, start_permlink, before_date, limit, - api='database_api') - - def get_replies_by_last_update(self, account: str, start_permlink: str, limit: int): + return self.call( + 'get_discussions_by_author_before_date', + author, + start_permlink, + before_date, + limit, + api='database_api') + + def get_replies_by_last_update(self, account, start_permlink, + limit): """ get_replies_by_last_update """ - return self.exec('get_replies_by_last_update', account, start_permlink, limit, api='database_api') - - def get_witnesses(self, witness_ids: list): + return self.call( + 'get_replies_by_last_update', + account, + start_permlink, + limit, + api='database_api') + + def get_witnesses(self, witness_ids): """ get_witnesses """ - return self.exec('get_witnesses', witness_ids, api='database_api') + return self.call('get_witnesses', witness_ids, api='database_api') - def get_witness_by_account(self, account: str): + def get_witness_by_account(self, account): """ get_witness_by_account """ - return self.exec('get_witness_by_account', account, api='database_api') + return self.call('get_witness_by_account', account, api='database_api') - def get_witnesses_by_vote(self, from_account: str, limit: int): + def get_witnesses_by_vote(self, from_account, limit): """ get_witnesses_by_vote """ - return self.exec('get_witnesses_by_vote', from_account, limit, api='database_api') + return self.call( + 'get_witnesses_by_vote', from_account, limit, api='database_api') - def lookup_witness_accounts(self, from_account: str, limit: int): + def lookup_witness_accounts(self, from_account, limit): """ lookup_witness_accounts """ - return self.exec('lookup_witness_accounts', from_account, limit, api='database_api') + return self.call( + 'lookup_witness_accounts', from_account, limit, api='database_api') def get_witness_count(self): """ get_witness_count """ - return self.exec('get_witness_count', api='database_api') + return self.call('get_witness_count', api='database_api') def get_active_witnesses(self): """ Get a list of currently active witnesses. """ - return self.exec('get_active_witnesses', api='database_api') + return self.call('get_active_witnesses', api='database_api') - def get_vesting_delegations(self, account: str, from_account: str, limit: int): + def get_vesting_delegations(self, account, from_account, + limit): """ get_vesting_delegations """ - return self.exec('get_vesting_delegations', account, from_account, limit, api='database_api') - - def login(self, username: str, password: str): + return self.call( + 'get_vesting_delegations', + account, + from_account, + limit, + api='database_api') + + def login(self, username, password): """ login """ - return self.exec('login', username, password, api='login_api') + return self.call('login', username, password, api='login_api') - def get_api_by_name(self, api_name: str): + def get_api_by_name(self, api_name): """ get_api_by_name """ - return self.exec('get_api_by_name', api_name, api='login_api') + return self.call('get_api_by_name', api_name, api='login_api') def get_version(self): """ Get steemd version of the node currently connected to. """ - return self.exec('get_version', api='login_api') + return self.call('get_version', api='login_api') - def get_followers(self, account: str, start_follower: str, follow_type: str, limit: int): + def get_followers(self, account, start_follower, + follow_type, limit): """ get_followers """ - return self.exec('get_followers', account, start_follower, follow_type, limit, api='follow_api') - - def get_following(self, account: str, start_follower: str, follow_type: str, limit: int): + return self.call( + 'get_followers', + account, + start_follower, + follow_type, + limit, + api='follow_api') + + def get_following(self, account, start_follower, + follow_type, limit): """ get_following """ - return self.exec('get_following', account, start_follower, follow_type, limit, api='follow_api') - - def get_follow_count(self, account: str): + return self.call( + 'get_following', + account, + start_follower, + follow_type, + limit, + api='follow_api') + + def get_follow_count(self, account): """ get_follow_count """ - return self.exec('get_follow_count', account, api='follow_api') + return self.call('get_follow_count', account, api='follow_api') - def get_feed_entries(self, account: str, entry_id: int, limit: int): + def get_feed_entries(self, account, entry_id, limit): """ get_feed_entries """ - return self.exec('get_feed_entries', account, entry_id, limit, api='follow_api') + return self.call( + 'get_feed_entries', account, entry_id, limit, api='follow_api') - def get_feed(self, account: str, entry_id: int, limit: int): + def get_feed(self, account, entry_id, limit): """ get_feed """ - return self.exec('get_feed', account, entry_id, limit, api='follow_api') + return self.call( + 'get_feed', account, entry_id, limit, api='follow_api') - def get_blog_entries(self, account: str, entry_id: int, limit: int): + def get_blog_entries(self, account, entry_id, limit): """ get_blog_entries """ - return self.exec('get_blog_entries', account, entry_id, limit, api='follow_api') + return self.call( + 'get_blog_entries', account, entry_id, limit, api='follow_api') - def get_blog(self, account: str, entry_id: int, limit: int): + def get_blog(self, account, entry_id, limit): """ get_blog """ - return self.exec('get_blog', account, entry_id, limit, api='follow_api') + return self.call( + 'get_blog', account, entry_id, limit, api='follow_api') - def get_account_reputations(self, account: str, limit: int): + def get_account_reputations(self, account, limit): """ get_account_reputations """ - return self.exec('get_account_reputations', account, limit, api='follow_api') + return self.call( + 'get_account_reputations', account, limit, api='follow_api') - def get_reblogged_by(self, author: str, permlink: str): + def get_reblogged_by(self, author, permlink): """ get_reblogged_by """ - return self.exec('get_reblogged_by', author, permlink, api='follow_api') + return self.call( + 'get_reblogged_by', author, permlink, api='follow_api') - def get_blog_authors(self, blog_account: str): + def get_blog_authors(self, blog_account): """ get_blog_authors """ - return self.exec('get_blog_authors', blog_account, api='follow_api') + return self.call('get_blog_authors', blog_account, api='follow_api') - def broadcast_transaction(self, signed_transaction: SignedTransaction): + def broadcast_transaction(self, signed_transaction): """ broadcast_transaction """ - return self.exec('broadcast_transaction', signed_transaction, api='network_broadcast_api') - - # def broadcast_transaction_with_callback(self, callback: object, signed_transaction: SignedTransaction): - # return self.exec('broadcast_transaction_with_callback', callback, signed_transaction, - # api='network_broadcast_api') + return self.call( + 'broadcast_transaction', + signed_transaction, + api='network_broadcast_api') - def broadcast_transaction_synchronous(self, signed_transaction: SignedTransaction): + def broadcast_transaction_synchronous( + self, signed_transaction): """ broadcast_transaction_synchronous """ - return self.exec('broadcast_transaction_synchronous', signed_transaction, api='network_broadcast_api') + return self.call( + 'broadcast_transaction_synchronous', + signed_transaction, + api='network_broadcast_api') - def broadcast_block(self, block: Block): + def broadcast_block(self, block): """ broadcast_block """ - return self.exec('broadcast_block', block, api='network_broadcast_api') + return self.call('broadcast_block', block, api='network_broadcast_api') - def set_max_block_age(self, max_block_age: int): + def set_max_block_age(self, max_block_age): """ set_max_block_age """ - return self.exec('set_max_block_age', max_block_age, api='network_broadcast_api') + return self.call( + 'set_max_block_age', max_block_age, api='network_broadcast_api') def get_ticker(self): """ Returns the market ticker for the internal SBD:STEEM market. """ - return self.exec('get_ticker', api='market_history_api') + return self.call('get_ticker', api='market_history_api') def get_volume(self): """ Returns the market volume for the past 24 hours. """ - return self.exec('get_volume', api='market_history_api') + return self.call('get_volume', api='market_history_api') - # def get_order_book(self, limit: int): - # return self.exec('get_order_book', limit, api='market_history_api') - - def get_trade_history(self, start: PointInTime, end: PointInTime, limit: int): + def get_trade_history(self, start, end, + limit): """ Returns the trade history for the internal SBD:STEEM market. """ - return self.exec('get_trade_history', start, end, limit, api='market_history_api') + return self.call( + 'get_trade_history', start, end, limit, api='market_history_api') + + def get_recent_trades(self, limit): + """ Returns the N most recent trades for the internal SBD:STEEM + market. """ - def get_recent_trades(self, limit: int) -> List[Any]: - """ Returns the N most recent trades for the internal SBD:STEEM market. """ - return self.exec('get_recent_trades', limit, api='market_history_api') + return self.call('get_recent_trades', limit, api='market_history_api') - def get_market_history(self, bucket_seconds: int, start: PointInTime, end: PointInTime): + def get_market_history(self, bucket_seconds, start, + end): """ Returns the market history for the internal SBD:STEEM market. """ - return self.exec('get_market_history', bucket_seconds, start, end, api='market_history_api') + return self.call( + 'get_market_history', + bucket_seconds, + start, + end, + api='market_history_api') def get_market_history_buckets(self): """ Returns the bucket seconds being tracked by the plugin. """ - return self.exec('get_market_history_buckets', api='market_history_api') + return self.call( + 'get_market_history_buckets', api='market_history_api') - def get_key_references(self, public_keys: List[str]): + def get_key_references(self, public_keys): """ get_key_references """ if type(public_keys) == str: public_keys = [public_keys] - return self.exec('get_key_references', public_keys, api='account_by_key_api') + return self.call( + 'get_key_references', public_keys, api='account_by_key_api') if __name__ == '__main__': diff --git a/steem/transactionbuilder.py b/steem/transactionbuilder.py index 8b3f9ed..fe6493f 100644 --- a/steem/transactionbuilder.py +++ b/steem/transactionbuilder.py @@ -1,14 +1,13 @@ import logging -from steem.wallet import Wallet +from .wallet import Wallet from steembase.account import PrivateKey -from steembase.exceptions import ( - InsufficientAuthorityError, - MissingKeyError, - InvalidKeyFormat -) +from steembase.exceptions import (InsufficientAuthorityError, MissingKeyError, + InvalidKeyFormat) +from steembase import operations from steembase.operations import Operation -from steembase.transactions import SignedTransaction, fmt_time_from_now, get_block_params +from steembase.transactions import SignedTransaction, fmt_time_from_now, \ + get_block_params from .account import Account from .instance import shared_steemd_instance @@ -21,7 +20,12 @@ class TransactionBuilder(dict): operations and signers. """ - def __init__(self, tx=None, steemd_instance=None, wallet_instance=None, no_broadcast=False, expiration=60): + def __init__(self, + tx=None, + steemd_instance=None, + wallet_instance=None, + no_broadcast=False, + expiration=60): self.steemd = steemd_instance or shared_steemd_instance() self.no_broadcast = no_broadcast self.expiration = expiration @@ -42,7 +46,8 @@ def appendOps(self, ops): self.constructTx() def appendSigner(self, account, permission): - assert permission in ["active", "owner", "posting"], "Invalid permission" + assert permission in ["active", "owner", + "posting"], "Invalid permission" account = Account(account, steemd_instance=self.steemd) required_treshold = account[permission]["weight_threshold"] @@ -59,7 +64,8 @@ def fetchkeys(account, level=0): if sum([x[1] for x in r]) < required_treshold: # go one level deeper for authority in account[permission]["account_auths"]: - auth_account = Account(authority[0], steemd_instance=self.steemd) + auth_account = Account( + authority[0], steemd_instance=self.steemd) r.extend(fetchkeys(auth_account, level + 1)) return r @@ -72,7 +78,7 @@ def appendWif(self, wif): try: PrivateKey(wif) self.wifs.append(wif) - except: + except: # noqa FIXME(sneak) raise InvalidKeyFormat def constructTx(self): @@ -86,8 +92,7 @@ def constructTx(self): ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) super(TransactionBuilder, self).__init__(tx.json()) def sign(self): @@ -99,10 +104,18 @@ def sign(self): from the wallet as defined in "missing_signatures" key of the transactions. """ + + # We need to set the default prefix, otherwise pubkeys are + # presented wrongly! + if self.steemd: + operations.default_prefix = self.steemd.chain_params["prefix"] + elif "blockchain" in self: + operations.default_prefix = self["blockchain"]["prefix"] + try: signedtx = SignedTransaction(**self.json()) - except: - raise ValueError("Invalid TransactionBuilder Format") + except Exception as e: # noqa FIXME(sneak) + raise e if not any(self.wifs): raise MissingKeyError @@ -123,7 +136,13 @@ def broadcast(self): if not self.steemd.verify_authority(self.json()): raise InsufficientAuthorityError except Exception as e: - raise e + # There is an issue with some appbase builds which makes + # `verify_authority` unusable. TODO: remove this case #212 + if 'Bad Cast:Invalid cast from string_type to Array' in str(e): + log.error("Ignoring verify_authority failure. See #212.") + else: + print("failing on {}".format(e)) + raise e try: self.steemd.broadcast_transaction(self.json()) @@ -142,25 +161,23 @@ def addSigningInformation(self, account, permission): # We add a required_authorities to be able to identify # how to sign later. This is an array, because we # may later want to allow multiple operations per tx - self.update({"required_authorities": { - account: authority - }}) + self.update({"required_authorities": {account: authority}}) for account_auth in authority["account_auths"]: - account_auth_account = Account(account_auth[0], steemd_instance=self.steemd) + account_auth_account = Account( + account_auth[0], steemd_instance=self.steemd) self["required_authorities"].update({ - account_auth[0]: account_auth_account.get(permission) + account_auth[0]: + account_auth_account.get(permission) }) # Try to resolve required signatures for offline signing - self["missing_signatures"] = [ - x[0] for x in authority["key_auths"] - ] + self["missing_signatures"] = [x[0] for x in authority["key_auths"]] # Add one recursion of keys from account_auths: for account_auth in authority["account_auths"]: - account_auth_account = Account(account_auth[0], steemd_instance=self.steemd) + account_auth_account = Account( + account_auth[0], steemd_instance=self.steemd) self["missing_signatures"].extend( - [x[0] for x in account_auth_account[permission]["key_auths"]] - ) + [x[0] for x in account_auth_account[permission]["key_auths"]]) self["blockchain"] = self.steemd.chain_params def json(self): diff --git a/steem/utils.py b/steem/utils.py index a086e73..4943ab3 100755 --- a/steem/utils.py +++ b/steem/utils.py @@ -4,29 +4,34 @@ import os import re import time +import sys from datetime import datetime -from json import JSONDecodeError -from urllib.parse import urlparse + +import future +from builtins import bytes import w3lib.url from langdetect import DetectorFactory, detect from langdetect.lang_detect_exception import LangDetectException from toolz import update_in, assoc +if sys.version >= "3.0": + from urllib.parse import urlparse +else: + from urlparse import urlparse + logger = logging.getLogger(__name__) # https://github.com/matiasb/python-unidiff/blob/master/unidiff/constants.py#L37 # @@ (source offset, length) (target offset, length) @@ (section header) -RE_HUNK_HEADER = re.compile( - r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))?\ @@[ ]?(.*)$", - flags=re.MULTILINE) +RE_HUNK_HEADER = re.compile(r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))?\ @@[ ]?(.*)$", flags=re.MULTILINE) # ensure deterministec language detection DetectorFactory.seed = 0 MIN_TEXT_LENGTH_FOR_DETECTION = 20 -def block_num_from_hash(block_hash: str) -> int: +def block_num_from_hash(block_hash): """ return the first 4 bytes (8 hex digits) of the block ID (the block_num) Args: @@ -38,7 +43,7 @@ def block_num_from_hash(block_hash: str) -> int: return int(str(block_hash)[:8], base=16) -def block_num_from_previous(previous_block_hash: str) -> int: +def block_num_from_previous(previous_block_hash): """ Args: @@ -75,34 +80,29 @@ def chunkify(iterable, chunksize=10000): def ensure_decoded(thing): if not thing: - logger.debug('ensure_decoded thing is logically False') + logger.debug("ensure_decoded thing is logically False") return None if isinstance(thing, (list, dict)): - logger.debug('ensure_decoded thing is already decoded') + logger.debug("ensure_decoded thing is already decoded") return thing single_encoded_dict = double_encoded_dict = None try: single_encoded_dict = json.loads(thing) if isinstance(single_encoded_dict, dict): - logger.debug('ensure_decoded thing is single encoded dict') + logger.debug("ensure_decoded thing is single encoded dict") return single_encoded_dict elif isinstance(single_encoded_dict, str): - logger.debug('ensure_decoded thing is single encoded str') + logger.debug("ensure_decoded thing is single encoded str") if single_encoded_dict == "": - logger.debug( - 'ensure_decoded thing is single encoded str == ""') + logger.debug('ensure_decoded thing is single encoded str == ""') return None else: double_encoded_dict = json.loads(single_encoded_dict) - logger.debug('ensure_decoded thing is double encoded') + logger.debug("ensure_decoded thing is double encoded") return double_encoded_dict except Exception as e: - extra = dict( - thing=thing, - single_encoded_dict=single_encoded_dict, - double_encoded_dict=double_encoded_dict, - error=e) - logger.error('ensure_decoded error', extra=extra) + extra = dict(thing=thing, single_encoded_dict=single_encoded_dict, double_encoded_dict=double_encoded_dict, error=e) + logger.error("ensure_decoded error", extra=extra) return None @@ -130,31 +130,30 @@ def extract_keys_from_meta(meta, keys): elif isinstance(item, (list, tuple)): extracted.extend(item) else: - logger.warning('unusual item in meta: %s', item) + logger.warning("unusual item in meta: %s", item) return extracted def build_comment_url(parent_permlink=None, author=None, permlink=None): - return '/'.join([parent_permlink, author, permlink]) + return "/".join([parent_permlink, author, permlink]) def canonicalize_url(url, **kwargs): try: canonical_url = w3lib.url.canonicalize_url(url, **kwargs) except Exception as e: - logger.warning('url preparation error', extra=dict(url=url, error=e)) + logger.warning("url preparation error", extra=dict(url=url, error=e)) return None if canonical_url != url: - logger.debug('canonical_url changed %s to %s', url, canonical_url) + logger.debug("canonical_url changed %s to %s", url, canonical_url) try: parsed_url = urlparse(canonical_url) if not parsed_url.scheme and not parsed_url.netloc: - _log = dict( - url=url, canonical_url=canonical_url, parsed_url=parsed_url) - logger.warning('bad url encountered', extra=_log) + _log = dict(url=url, canonical_url=canonical_url, parsed_url=parsed_url) + logger.warning("bad url encountered", extra=_log) return None except Exception as e: - logger.warning('url parse error', extra=dict(url=url, error=e)) + logger.warning("url parse error", extra=dict(url=url, error=e)) return None return canonical_url @@ -165,7 +164,7 @@ def findall_patch_hunks(body=None): def detect_language(text): if not text or len(text) < MIN_TEXT_LENGTH_FOR_DETECTION: - logger.debug('not enough text to perform langdetect') + logger.debug("not enough text to perform langdetect") return None try: return detect(text) @@ -176,13 +175,15 @@ def detect_language(text): def is_comment(item): """Quick check whether an item is a comment (reply) to another post. - The item can be a Post object or just a raw comment object from the blockchain. + The item can be a Post object or just a raw comment object from the + blockchain. """ - return item['permlink'][:3] == "re-" and item['parent_author'] + return item["parent_author"] != "" def time_elapsed(posting_time): - """Takes a string time from a post or blockchain event, and returns a time delta from now. + """Takes a string time from a post or blockchain event, and returns a + time delta from now. """ if type(posting_time) == str: posting_time = parse_time(posting_time) @@ -190,9 +191,10 @@ def time_elapsed(posting_time): def parse_time(block_time): - """Take a string representation of time from the blockchain, and parse it into datetime object. + """Take a string representation of time from the blockchain, and parse + it into datetime object. """ - return datetime.strptime(block_time, '%Y-%m-%dT%H:%M:%S') + return datetime.strptime(block_time, "%Y-%m-%dT%H:%M:%S") def time_diff(time1, time2): @@ -200,8 +202,7 @@ def time_diff(time1, time2): def keep_in_dict(obj, allowed_keys=list()): - """ Prune a class or dictionary of all but allowed keys. - """ + """Prune a class or dictionary of all but allowed keys.""" if type(obj) == dict: items = obj.items() else: @@ -211,8 +212,7 @@ def keep_in_dict(obj, allowed_keys=list()): def remove_from_dict(obj, remove_keys=list()): - """ Prune a class or dictionary of specified keys. - """ + """Prune a class or dictionary of specified keys.""" if type(obj) == dict: items = obj.items() else: @@ -221,30 +221,33 @@ def remove_from_dict(obj, remove_keys=list()): return {k: v for k, v in items if k not in remove_keys} -def construct_identifier(*args, username_prefix='@'): - """ Create a post identifier from comment/post object or arguments. - +def construct_identifier(*args): + """Create a post identifier from comment/post object or arguments. + Examples: - - :: - + + :: construct_identifier('username', 'permlink') - construct_identifier({'author': 'username', 'permlink': 'permlink'}) + construct_identifier({'author': 'username', + 'permlink': 'permlink'}) """ + if len(args) == 1: op = args[0] - author, permlink = op['author'], op['permlink'] + author, permlink = op["author"], op["permlink"] elif len(args) == 2: author, permlink = args else: - raise ValueError('construct_identifier() received unparsable arguments') + raise ValueError("construct_identifier() received unparsable arguments") - fields = dict(prefix=username_prefix, author=author, permlink=permlink) - return "{prefix}{author}/{permlink}".format(**fields) + # remove the @ sign in case it was passed in by the user. + author = author.replace("@", "") + fields = dict(author=author, permlink=permlink) + return "{author}/{permlink}".format(**fields) -def json_expand(json_op, key_name='json'): - """ Convert a string json object to Python dict in an op. """ +def json_expand(json_op, key_name="json"): + """Convert a string json object to Python dict in an op.""" if type(json_op) == dict and key_name in json_op and json_op[key_name]: try: return update_in(json_op, [key_name], json.loads) @@ -256,9 +259,9 @@ def json_expand(json_op, key_name='json'): def sanitize_permlink(permlink): permlink = permlink.strip() - permlink = re.sub("_|\s|\.", "-", permlink) - permlink = re.sub("[^\w-]", "", permlink) - permlink = re.sub("[^a-zA-Z0-9-]", "", permlink) + permlink = re.sub(r"_|\s|\.", "-", permlink) + permlink = re.sub(r"[^\w-]", "", permlink) + permlink = re.sub(r"[^a-zA-Z0-9-]", "", permlink) permlink = permlink.lower() return permlink @@ -276,50 +279,51 @@ def derive_permlink(title, parent_permlink=None): def resolve_identifier(identifier): - match = re.match("@?([\w\-\.]*)/([\w\-]*)", identifier) + + # in case the user supplied the @ sign. + identifier = identifier.replace("@", "") + + match = re.match(r"([\w\-\.]*)/([\w\-]*)", identifier) if not hasattr(match, "group"): raise ValueError("Invalid identifier") return match.group(1), match.group(2) def fmt_time(t): - """ Properly Format Time for permlinks - """ + """Properly Format Time for permlinks""" return datetime.utcfromtimestamp(t).strftime("%Y%m%dt%H%M%S%Z") def fmt_time_string(t): - """ Properly Format Time for permlinks - """ - return datetime.strptime(t, '%Y-%m-%dT%H:%M:%S') + """Properly Format Time for permlinks""" + return datetime.strptime(t, "%Y-%m-%dT%H:%M:%S") def fmt_time_from_now(secs=0): - """ Properly Format Time that is `x` seconds in the future + """Properly Format Time that is `x` seconds in the future - :param int secs: Seconds to go in the future (`x>0`) or the - past (`x<0`) - :return: Properly formated time for Graphene (`%Y-%m-%dT%H:%M:%S`) - :rtype: str + :param int secs: Seconds to go in the future (`x>0`) or the + past (`x<0`) + :return: Properly formated time for Graphene (`%Y-%m-%dT%H:%M:%S`) + :rtype: str """ - return datetime.utcfromtimestamp(time.time() + int(secs)).strftime('%Y-%m-%dT%H:%M:%S') + return datetime.utcfromtimestamp(time.time() + int(secs)).strftime("%Y-%m-%dT%H:%M:%S") def env_unlocked(): - """ Check if wallet password is provided as ENV variable. """ - return os.getenv('UNLOCK', False) + """Check if wallet passphrase is provided as ENV variable.""" + return os.getenv("UNLOCK", False) # todo remove these def strfage(time, fmt=None): - """ Format time/age - """ + """Format time/age""" if not hasattr(time, "days"): # dirty hack now = datetime.utcnow() if isinstance(time, str): - time = datetime.strptime(time, '%Y-%m-%dT%H:%M:%S') - time = (now - time) + time = datetime.strptime(time, "%Y-%m-%dT%H:%M:%S") + time = now - time d = {"days": time.days} d["hours"], rem = divmod(time.seconds, 3600) @@ -336,8 +340,7 @@ def strfage(time, fmt=None): def strfdelta(tdelta, fmt): - """ Format time/age - """ + """Format time/age""" if not tdelta or not hasattr(tdelta, "days"): # dirty hack return None @@ -348,4 +351,99 @@ def strfdelta(tdelta, fmt): def is_valid_account_name(name): - return re.match('^[a-z][a-z0-9\-.]{2,15}$', name) \ No newline at end of file + return re.match(r"^[a-z][a-z0-9\-.]{2,15}$", name) + + +def compat_compose_dictionary(dictionary, **kwargs): + """ + This method allows us the one line dictionary composition that is offered by the ** dictionary unpacking + available in 3.6. + + :param dictionary: the dictionary to add the kwargs elements to. + :param kwargs: a set of key/value pairs to add to `dictionary`. + :return: the composed dictionary. + """ + composed_dict = dictionary.copy() + composed_dict.update(kwargs) + + return composed_dict + + +def compat_json(data, ignore_dicts=False): + """ + + :param data: Json Data we want to ensure compatibility on. + :param ignore_dicts: should only be set to true when first called. + :return: Python compatible 2.7 byte-strings when encountering unicode. + """ + # if this is a unicode string, return its string representation + if isinstance(data, unicode): + return data.encode("utf-8") + # if this is a list of values, return list of byte-string values + if isinstance(data, list): + return [compat_json(item, ignore_dicts=True) for item in data] + # if this is a dictionary, return dictionary of byte-string keys and values + # but only if we haven't already byte-string it + if isinstance(data, dict) and not ignore_dicts: + return {compat_json(key, ignore_dicts=True): compat_json(value, ignore_dicts=True) for key, value in data.iteritems()} + # if it's anything else, return it in its original form + return data + + +def compat_bytes(item, encoding=None): + """ + This method is required because Python 2.7 `bytes` is simply an alias for `str`. Without this method, + code execution would look something like: + + class clazz(object): + + def __bytes__(self): + return bytes(5) + + + Python 2.7: + + c = clazz() + bytes(c) + >>'<__main__.clazz object at 0x105171a90>' + + In this example, when `bytes(c)` is invoked, the interpreter then calls `str(c)`, and prints the above string. + the method `__bytes__` is never invoked. + + Python 3.6: + c = clazz() + bytes(c) + >>b'\x00\x00\x00\x00\x00' + + This is the expected and necessary behavior across both platforms. + + w/ compat_bytes method, we will ensure that the correct bytes method is always invoked, avoiding the `str` alias in + 2.7. + + :param item: this is the object who's bytes method needs to be invoked + :param encoding: optional encoding parameter to handle the Python 3.6 two argument 'bytes' method. + :return: a bytes object that functions the same across 3.6 and 2.7 + """ + if hasattr(item, "__bytes__"): + return item.__bytes__() + else: + if encoding: + return bytes(item, encoding) + else: + return bytes(item) + + +def compat_chr(item): + """ + This is necessary to maintain compatibility across Python 2.7 and 3.6. + In 3.6, 'chr' handles any unicode character, whereas in 2.7, `chr` only handles + ASCII characters. Thankfully, the Python 2.7 method `unichr` provides the same + functionality as 3.6 `chr`. + + :param item: a length 1 string who's `chr` method needs to be invoked + :return: the unichr code point of the single character string, item + """ + if sys.version >= "3.0": + return chr(item) + else: + return unichr(item) diff --git a/steem/wallet.py b/steem/wallet.py index e0675be..db19fdc 100644 --- a/steem/wallet.py +++ b/steem/wallet.py @@ -1,13 +1,10 @@ import logging import os -from steem.instance import shared_steemd_instance +from .instance import shared_steemd_instance from steembase import bip38 from steembase.account import PrivateKey -from steembase.exceptions import ( - InvalidWifError, - WalletExists -) +from steembase.exceptions import (InvalidWifError, WalletExists) from .account import Account @@ -20,7 +17,9 @@ class Wallet: or uses a SQLite database managed by storage.py. :param Steem rpc: RPC connection to a Steem node - :param array,dict,string keys: Predefine the wif keys to shortcut the wallet database + + :param array,dict,string keys: Predefine the wif keys to shortcut + the wallet database Three wallet operation modes are possible: @@ -39,11 +38,11 @@ class Wallet: any account. This mode is only used for *foreign* signatures! """ - masterpassword = None + decryptedKEK = None # Keys from database configStorage = None - MasterPassword = None + keyEncryptionKey = None keyStorage = None # Manually provided keys @@ -56,7 +55,13 @@ def __init__(self, steemd_instance=None, **kwargs): # RPC self.steemd = steemd_instance or shared_steemd_instance() - self.prefix = "STM" + + # Prefix + if self.steemd: + self.prefix = self.steemd.chain_params["prefix"] + else: + # If not connected, load prefix from config + self.prefix = self.configStorage["prefix"] if "keys" in kwargs: self.setKeys(kwargs["keys"]) @@ -64,16 +69,16 @@ def __init__(self, steemd_instance=None, **kwargs): """ If no keys are provided manually we load the SQLite keyStorage """ - from steembase.storage import (keyStorage, - MasterPassword) - self.MasterPassword = MasterPassword + from steembase.storage import (keyStorage, KeyEncryptionKey) + self.keyEncryptionKey = KeyEncryptionKey self.keyStorage = keyStorage def setKeys(self, loadkeys): """ This method is strictly only for in memory keys that are passed to Wallet/Steem with the ``keys`` argument """ - log.debug("Force setting of private keys. Not using the wallet database!") + log.debug( + "Force setting of private keys. Not using the wallet database!") if isinstance(loadkeys, dict): Wallet.keyMap = loadkeys loadkeys = list(loadkeys.values()) @@ -83,45 +88,45 @@ def setKeys(self, loadkeys): for wif in loadkeys: try: key = PrivateKey(wif) - except: + except: # noqa FIXME(sneak) raise InvalidWifError Wallet.keys[format(key.pubkey, self.prefix)] = str(key) - def unlock(self, pwd=None): + def unlock(self, user_passphrase=None): """ Unlock the wallet database """ if not self.created(): self.newWallet() - if (self.masterpassword is None and - self.configStorage[self.MasterPassword.config_key]): - if pwd is None: - pwd = self.getPassword() - masterpwd = self.MasterPassword(pwd) - self.masterpassword = masterpwd.decrypted_master + if (self.decryptedKEK is None + and self.configStorage[self.keyEncryptionKey.config_key]): + if user_passphrase is None: + user_passphrase = self.getUserPassphrase() + kek = self.keyEncryptionKey(user_passphrase) + self.decryptedKEK = kek.decrypted_KEK def lock(self): """ Lock the wallet database """ - self.masterpassword = None + self.decryptedKEK = None def locked(self): """ Is the wallet database locked? """ - return False if self.masterpassword else True + return False if self.decryptedKEK else True - def changePassphrase(self): - """ Change the passphrase for the wallet database + def changeUserPassphrase(self): + """ Change the user entered password for the wallet database """ # Open Existing Wallet - pwd = self.getPassword() - masterpwd = self.MasterPassword(pwd) - self.masterpassword = masterpwd.decrypted_master + pwd = self.getUserPassphrase() + kek = self.keyEncryptionKey(pwd) + self.decryptedKEK = kek.decrypted_KEK # Provide new passphrase - print("Please provide the new password") - newpwd = self.getPassword(confirm=True) + print("Please provide the new passphrase") + newpwd = self.getUserPassphrase(confirm=True) # Change passphrase - masterpwd.changePassword(newpwd) + kek.changePassphrase(newpwd) def created(self): """ Do we have a wallet database already? @@ -129,8 +134,8 @@ def created(self): if len(self.getPublicKeys()): # Already keys installed return True - elif self.MasterPassword.config_key in self.configStorage: - # no keys but a master password + elif self.keyEncryptionKey.config_key in self.configStorage: + # no keys but a KeyEncryptionKey return True else: return False @@ -140,16 +145,17 @@ def newWallet(self): """ if self.created(): raise WalletExists("You already have created a wallet!") - print("Please provide a password for the new wallet") - pwd = self.getPassword(confirm=True) - masterpwd = self.MasterPassword(pwd) - self.masterpassword = masterpwd.decrypted_master + print("Please provide a passphrase for the new wallet") + pwd = self.getUserPassphrase(confirm=True) + kek = self.keyEncryptionKey(pwd) + self.decryptedKEK = kek.decrypted_KEK def encrypt_wif(self, wif): """ Encrypt a wif key """ self.unlock() - return format(bip38.encrypt(PrivateKey(wif), self.masterpassword), "encwif") + return format( + bip38.encrypt(PrivateKey(wif), self.decryptedKEK), "encwif") def decrypt_wif(self, encwif): """ decrypt a wif key @@ -158,34 +164,30 @@ def decrypt_wif(self, encwif): # Try to decode as wif PrivateKey(encwif) return encwif - except: + except: # noqa FIXME(sneak) pass self.unlock() - return format(bip38.decrypt(encwif, self.masterpassword), "wif") + return format(bip38.decrypt(encwif, self.decryptedKEK), "wif") - def getPassword(self, confirm=False, text='Passphrase: '): - """ Obtain a password from the user + def getUserPassphrase(self, confirm=False, text='Passphrase: '): + """ Obtain a passphrase from the user """ import getpass if "UNLOCK" in os.environ: - # overwrite password from environmental variable + # overwrite passphrase from environmental variable return os.environ.get("UNLOCK") if confirm: # Loop until both match while True: - pw = self.getPassword(confirm=False) + pw = self.getUserPassphrase(confirm=False) if not pw: - print( - "You cannot chosen an empty password! " + - "If you want to automate the use of the libs, " + - "please use the `UNLOCK` environmental variable!" - ) + print("You cannot choose an empty password! " + + "If you want to automate the use of the library, " + + "please use the `UNLOCK` environmental variable!") continue else: - pwck = self.getPassword( - confirm=False, - text="Confirm Passphrase: " - ) + pwck = self.getUserPassphrase( + confirm=False, text="Confirm Passphrase: ") if pw == pwck: return pw else: @@ -197,13 +199,17 @@ def getPassword(self, confirm=False, text='Passphrase: '): def addPrivateKey(self, wif): """ Add a private key to the wallet database """ - # it could be either graphenebase or pistonbase so we can't check the type directly + + # it could be either graphenebase or pistonbase so we can't check + # the type directly + if isinstance(wif, PrivateKey) or isinstance(wif, PrivateKey): wif = str(wif) try: pub = format(PrivateKey(wif).pubkey, self.prefix) - except: - raise InvalidWifError("Invalid Private Key Format. Please use WIF!") + except: # noqa FIXME(sneak) + raise InvalidWifError( + "Invalid Private Key Format. Please use WIF!") if self.keyStorage: # Test if wallet exists @@ -229,7 +235,8 @@ def getPrivateKeyForPublicKey(self, pub): if not self.created(): self.newWallet() - return self.decrypt_wif(self.keyStorage.getPrivateKeyForPublicKey(pub)) + return self.decrypt_wif( + self.keyStorage.getPrivateKeyForPublicKey(pub)) def removePrivateKeyFromPublicKey(self, pub): """ Remove a key from the wallet database @@ -319,7 +326,8 @@ def getAccountFromPublicKey(self, pub): # FIXME, this only returns the first associated key. # If the key is used by multiple accounts, this # will surely lead to undesired behavior - names = self.steemd.exec('get_key_references', [pub], api="account_by_key_api")[0] + names = self.steemd.call( + 'get_key_references', [pub], api="account_by_key_api")[0] if not names: return None else: @@ -330,21 +338,19 @@ def getAccount(self, pub): """ name = self.getAccountFromPublicKey(pub) if not name: - return {"name": None, - "type": None, - "pubkey": pub - } + return {"name": None, "type": None, "pubkey": pub} else: try: account = Account(name) - except: + except: # noqa FIXME(sneak) return keyType = self.getKeyType(account, pub) - return {"name": name, - "account": account, - "type": keyType, - "pubkey": pub - } + return { + "name": name, + "account": account, + "type": keyType, + "pubkey": pub + } def getKeyType(self, account, pub): """ Get key type @@ -380,10 +386,12 @@ def getAccountsWithPermissions(self): continue type = account["type"] if name not in r: - r[name] = {"posting": False, - "owner": False, - "active": False, - "memo": False} + r[name] = { + "posting": False, + "owner": False, + "active": False, + "memo": False + } r[name][type] = True return r diff --git a/steem/witness.py b/steem/witness.py index 0e8a11c..ad8f932 100644 --- a/steem/witness.py +++ b/steem/witness.py @@ -7,9 +7,11 @@ class Witness(dict): """ Read data about a witness in the chain :param str witness: Name of the witness - :param Steemd steemd_instance: Steemd() instance to use when accessing a RPC + :param Steemd steemd_instance: Steemd() instance to use when + accessing a RPC """ + def __init__(self, witness, steemd_instance=None): self.steemd = steemd_instance or shared_steemd_instance() self.witness_name = witness diff --git a/steembase/account.py b/steembase/account.py index a7b9a2e..0144fdb 100644 --- a/steembase/account.py +++ b/steembase/account.py @@ -2,6 +2,7 @@ import os import re from binascii import hexlify, unhexlify +from steem.utils import compat_bytes, compat_chr import ecdsa @@ -25,9 +26,7 @@ def get_private(self): """ Derive private key from the brain key and the current sequence number """ - a = bytes(self.account + - self.role + - self.password, 'utf8') + a = compat_bytes(self.account + self.role + self.password, 'utf8') s = hashlib.sha256(a).digest() return PrivateKey(hexlify(s).decode('ascii')) @@ -80,7 +79,8 @@ def next_sequence(self): return self def normalize(self, brainkey): - """ Correct formating with single whitespace syntax and no trailing space """ + """ Correct formating with single whitespace syntax and no trailing + space """ return " ".join(re.compile("[\t\n\v\f\r ]+").split(brainkey)) def get_brainkey(self): @@ -92,7 +92,8 @@ def get_private(self): number """ encoded = "%s %d" % (self.brainkey, self.sequence) - a = bytes(encoded, 'ascii') + a = compat_bytes(encoded, 'ascii') + s = hashlib.sha256(hashlib.sha512(a).digest()).digest() return PrivateKey(hexlify(s).decode('ascii')) @@ -187,9 +188,9 @@ def __format__(self, _format): def __bytes__(self): """ Returns the raw content of the ``Base58CheckEncoded`` address """ if self._address is None: - return bytes(self.derivesha512address()) + return compat_bytes(self.derivesha512address()) else: - return bytes(self._address) + return compat_bytes(self._address) class PublicKey(object): @@ -231,10 +232,12 @@ def _derive_y_from_x(self, x, is_even): def compressed(self): """ Derive compressed public key """ order = ecdsa.SECP256k1.generator.order() - p = ecdsa.VerifyingKey.from_string(bytes(self), curve=ecdsa.SECP256k1).pubkey.point + p = ecdsa.VerifyingKey.from_string( + compat_bytes(self), curve=ecdsa.SECP256k1).pubkey.point x_str = ecdsa.util.number_to_string(p.x(), order) # y_str = ecdsa.util.number_to_string(p.y(), order) - compressed = hexlify(bytes(chr(2 + (p.y() & 1)), 'ascii') + x_str).decode('ascii') + compressed = hexlify( + compat_bytes(compat_chr(2 + (p.y() & 1)), 'ascii') + x_str).decode('ascii') return (compressed) def unCompressed(self): @@ -252,7 +255,8 @@ def unCompressed(self): def point(self): """ Return the point for the public key """ string = unhexlify(self.unCompressed()) - return ecdsa.VerifyingKey.from_string(string[1:], curve=ecdsa.SECP256k1).pubkey.point + return ecdsa.VerifyingKey.from_string( + string[1:], curve=ecdsa.SECP256k1).pubkey.point def __repr__(self): """ Gives the hex representation of the Graphene public key. """ @@ -265,12 +269,13 @@ def __str__(self): return format(self._pk, self.prefix) def __format__(self, _format): - """ Formats the instance of:doc:`Base58 ` according to ``_format`` """ + """ Formats the instance of:doc:`Base58 ` according + to ``_format`` """ return format(self._pk, _format) def __bytes__(self): """ Returns the raw public key (has length 33)""" - return bytes(self._pk) + return compat_bytes(self._pk) class PrivateKey(object): @@ -308,19 +313,25 @@ def __init__(self, wif=None, prefix="STM"): # compress pubkeys only self._pubkeyhex, self._pubkeyuncompressedhex = self.compressedpubkey() self.pubkey = PublicKey(self._pubkeyhex, prefix=prefix) - self.uncompressed = PublicKey(self._pubkeyuncompressedhex, prefix=prefix) - self.uncompressed.address = Address(pubkey=self._pubkeyuncompressedhex, prefix=prefix) + self.uncompressed = PublicKey( + self._pubkeyuncompressedhex, prefix=prefix) + self.uncompressed.address = Address( + pubkey=self._pubkeyuncompressedhex, prefix=prefix) self.address = Address(pubkey=self._pubkeyhex, prefix=prefix) def compressedpubkey(self): """ Derive uncompressed public key """ secret = unhexlify(repr(self._wif)) - order = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1).curve.generator.order() - p = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1).verifying_key.pubkey.point + order = ecdsa.SigningKey.from_string( + secret, curve=ecdsa.SECP256k1).curve.generator.order() + p = ecdsa.SigningKey.from_string( + secret, curve=ecdsa.SECP256k1).verifying_key.pubkey.point x_str = ecdsa.util.number_to_string(p.x(), order) y_str = ecdsa.util.number_to_string(p.y(), order) - compressed = hexlify(bytes(chr(2 + (p.y() & 1)), 'ascii') + x_str).decode('ascii') - uncompressed = hexlify(bytes(chr(4), 'ascii') + x_str + y_str).decode('ascii') + compressed = hexlify( + compat_chr(2 + (p.y() & 1)).encode('ascii') + x_str).decode('ascii') + uncompressed = hexlify(compat_chr(4).encode('ascii') + x_str + y_str).decode( + 'ascii') return [compressed, uncompressed] def __format__(self, _format): @@ -341,4 +352,4 @@ def __str__(self): def __bytes__(self): """ Returns the raw private key """ - return bytes(self._wif) + return compat_bytes(self._wif) diff --git a/steembase/base58.py b/steembase/base58.py index 979b7ef..f898a4d 100644 --- a/steembase/base58.py +++ b/steembase/base58.py @@ -3,17 +3,17 @@ import sys import string import logging -log = logging.getLogger(__name__) +from steem.utils import compat_bytes -""" This class and the methods require python3 """ -assert sys.version_info[0] == 3, "graphenelib requires python3" +log = logging.getLogger(__name__) """ Default Prefix """ PREFIX = "STM" known_prefixes = [ PREFIX, - "TEST", + "GLS", + "TST", ] @@ -21,26 +21,37 @@ class Base58(object): """Base58 base class This class serves as an abstraction layer to deal with base58 encoded - strings and their corresponding hex and binary representation throughout the - library. + strings and their corresponding hex and binary representation + throughout the library. + + :param data: Data to initialize object, e.g. pubkey data, address data, + ... - :param data: Data to initialize object, e.g. pubkey data, address data, ... :type data: hex, wif, bip38 encrypted wif, base58 string - :param str prefix: Prefix to use for Address/PubKey strings (defaults to ``GPH``) + + :param str prefix: Prefix to use for Address/PubKey strings (defaults + to ``GPH``) + :return: Base58 object initialized with ``data`` + :rtype: Base58 + :raises ValueError: if data cannot be decoded * ``bytes(Base58)``: Returns the raw data * ``str(Base58)``: Returns the readable ``Base58CheckEncoded`` data. * ``repr(Base58)``: Gives the hex representation of the data. - * ``format(Base58,_format)`` Formats the instance according to ``_format``: + + * ``format(Base58,_format)`` Formats the instance according to + ``_format``: + * ``"btc"``: prefixed with ``0x80``. Yields a valid btc address * ``"wif"``: prefixed with ``0x00``. Yields a valid wif key * ``"bts"``: prefixed with ``BTS`` * etc. """ + def __init__(self, data, prefix=PREFIX): self._prefix = prefix if all(c in string.hexdigits for c in data): @@ -105,7 +116,7 @@ def __bytes__(self): def base58decode(base58_str): - base58_text = bytes(base58_str, "ascii") + base58_text = base58_str.encode('ascii') n = 0 leading_zeroes_count = 0 for b in base58_text: @@ -123,7 +134,10 @@ def base58decode(base58_str): def base58encode(hexstring): - byteseq = bytes(unhexlify(bytes(hexstring, 'ascii'))) + byteseq = compat_bytes(hexstring, 'ascii') + byteseq = unhexlify(byteseq) + byteseq = compat_bytes(byteseq) + n = 0 leading_zeroes_count = 0 for c in byteseq: @@ -137,6 +151,7 @@ def base58encode(hexstring): n = div else: res.insert(0, BASE58_ALPHABET[n]) + return (BASE58_ALPHABET[0:1] * leading_zeroes_count + res).decode('ascii') @@ -169,7 +184,7 @@ def base58CheckDecode(s): s = unhexlify(base58decode(s)) dec = hexlify(s[:-4]).decode('ascii') checksum = doublesha256(dec)[:4] - assert(s[-4:] == checksum) + assert (s[-4:] == checksum) return dec[2:] @@ -183,5 +198,5 @@ def gphBase58CheckDecode(s): s = unhexlify(base58decode(s)) dec = hexlify(s[:-4]).decode('ascii') checksum = ripemd160(dec)[:4] - assert(s[-4:] == checksum) + assert (s[-4:] == checksum) return dec diff --git a/steembase/bip38.py b/steembase/bip38.py index 050d826..29bb9c7 100644 --- a/steembase/bip38.py +++ b/steembase/bip38.py @@ -1,18 +1,21 @@ import hashlib import logging +import os +import sys from binascii import hexlify, unhexlify from .account import PrivateKey from .base58 import Base58, base58decode +from steem.utils import compat_bytes log = logging.getLogger(__name__) try: from Crypto.Cipher import AES except ImportError: - raise ImportError("Missing dependency: pycrypto") + raise ImportError("Missing dependency: pycryptodome") -SCRYPT_MODULE = None +SCRYPT_MODULE = os.environ.get('SCRYPT_MODULE', None) if not SCRYPT_MODULE: try: import scrypt @@ -24,9 +27,18 @@ SCRYPT_MODULE = "pylibscrypt" except ImportError: - raise ImportError( - "Missing dependency: scrypt or pylibscrypt" - ) + raise ImportError("Missing dependency: scrypt or pylibscrypt") +elif 'pylibscrypt' in SCRYPT_MODULE: + try: + import pylibscrypt as scrypt + except ImportError: + raise ImportError("Missing dependency: pylibscrypt explicitly set but missing") +elif 'scrypt' in SCRYPT_MODULE: + try: + import scrypt + except ImportError: + raise ImportError("Missing dependency: scrypt explicitly set but missing") + log.debug("Using scrypt module: %s" % SCRYPT_MODULE) @@ -53,25 +65,28 @@ def encrypt(privkey, passphrase): """ privkeyhex = repr(privkey) # hex addr = format(privkey.uncompressed.address, "BTC") - a = bytes(addr, 'ascii') + a = compat_bytes(addr, 'ascii') salt = hashlib.sha256(hashlib.sha256(a).digest()).digest()[0:4] if SCRYPT_MODULE == "scrypt": - key = scrypt.hash(passphrase, salt, 16384, 8, 8) + if sys.version >= '3.0.0': + key = scrypt.hash(passphrase, salt, 16384, 8, 8) + else: + key = scrypt.hash(str(passphrase), str(salt), 16384, 8, 8) elif SCRYPT_MODULE == "pylibscrypt": - key = scrypt.scrypt(bytes(passphrase, "utf-8"), salt, 16384, 8, 8) + key = scrypt.scrypt(compat_bytes(passphrase, "utf-8"), salt, 16384, 8, 8) else: raise ValueError("No scrypt module loaded") (derived_half1, derived_half2) = (key[:32], key[32:]) - aes = AES.new(derived_half2) + aes = AES.new(derived_half2, AES.MODE_ECB) encrypted_half1 = _encrypt_xor(privkeyhex[:32], derived_half1[:16], aes) encrypted_half2 = _encrypt_xor(privkeyhex[32:], derived_half1[16:], aes) " flag byte is forced 0xc0 because Graphene only uses compressed keys " - payload = (b'\x01' + b'\x42' + b'\xc0' + - salt + encrypted_half1 + encrypted_half2) + payload = ( + b'\x01' + b'\x42' + b'\xc0' + salt + encrypted_half1 + encrypted_half2) " Checksum " checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4] - privatkey = hexlify(payload + checksum).decode('ascii') - return Base58(privatkey) + privatekey = hexlify(payload + checksum).decode('ascii') + return Base58(privatekey) def decrypt(encrypted_privkey, passphrase): @@ -81,7 +96,8 @@ def decrypt(encrypted_privkey, passphrase): :param str passphrase: UTF-8 encoded passphrase for decryption :return: BIP0038 non-ec-multiply decrypted key :rtype: Base58 - :raises SaltException: if checksum verification failed (e.g. wrong password) + :raises SaltException: if checksum verification failed (e.g. wrong + password) """ @@ -93,27 +109,31 @@ def decrypt(encrypted_privkey, passphrase): salt = d[0:4] d = d[4:-4] if SCRYPT_MODULE == "scrypt": - key = scrypt.hash(passphrase, salt, 16384, 8, 8) + if sys.version >= '3.0.0': + key = scrypt.hash(passphrase, salt, 16384, 8, 8) + else: + key = scrypt.hash(str(passphrase), str(salt), 16384, 8, 8) elif SCRYPT_MODULE == "pylibscrypt": - key = scrypt.scrypt(bytes(passphrase, "utf-8"), salt, 16384, 8, 8) + key = scrypt.scrypt(compat_bytes(passphrase, "utf-8"), salt, 16384, 8, 8) else: raise ValueError("No scrypt module loaded") derivedhalf1 = key[0:32] derivedhalf2 = key[32:64] encryptedhalf1 = d[0:16] encryptedhalf2 = d[16:32] - aes = AES.new(derivedhalf2) + aes = AES.new(derivedhalf2, AES.MODE_ECB) decryptedhalf2 = aes.decrypt(encryptedhalf2) decryptedhalf1 = aes.decrypt(encryptedhalf1) privraw = decryptedhalf1 + decryptedhalf2 - privraw = ('%064x' % (int(hexlify(privraw), 16) ^ - int(hexlify(derivedhalf1), 16))) + privraw = ('%064x' % + (int(hexlify(privraw), 16) ^ int(hexlify(derivedhalf1), 16))) wif = Base58(privraw) """ Verify Salt """ privkey = PrivateKey(format(wif, "wif")) addr = format(privkey.uncompressed.address, "BTC") - a = bytes(addr, 'ascii') + a = compat_bytes(addr, 'ascii') saltverify = hashlib.sha256(hashlib.sha256(a).digest()).digest()[0:4] if saltverify != salt: - raise SaltException('checksum verification failed! Password may be incorrect.') + raise SaltException( + 'checksum verification failed! Password may be incorrect.') return wif diff --git a/steembase/chains.py b/steembase/chains.py index b3d4bd7..93851aa 100644 --- a/steembase/chains.py +++ b/steembase/chains.py @@ -8,11 +8,23 @@ "sbd_symbol": "SBD", "vests_symbol": "VESTS", }, - "TEST": { - "chain_id": "9afbce9f2416520733bacb370315d32b6b2c43d6097576df1c1222859d91eecc", - "prefix": "TST", - "steem_symbol": "TESTS", - "sbd_symbol": "TBD", - "vests_symbol": "VESTS", + "GOLOS": { + "chain_id": "782a3039b478c839e4cb0c941ff4eaeb7df40bdd68bd441afd444b9da763de12", + "prefix": "GLS", + "steem_symbol": "GOLOS", + "sbd_symbol": "GBG", + "vests_symbol": "GESTS", + }, + "TESTS": { + "chain_id": + "46d82ab7d8db682eb1959aed0ada039a6d49afa1602491f93dde9cac3e8e6c32", + "prefix": + "TST", + "steem_symbol": + "TESTS", + "sbd_symbol": + "TBD", + "vests_symbol": + "VESTS", }, } diff --git a/steembase/dictionary.py b/steembase/dictionary.py index 11d9b5c..69bcddf 100644 --- a/steembase/dictionary.py +++ b/steembase/dictionary.py @@ -1 +1,49744 @@ -words = "a,aa,aal,aalii,aam,aba,abac,abaca,abacate,abacay,abacist,aback,abactor,abacus,abaff,abaft,abaiser,abalone,abandon,abas,abase,abased,abaser,abash,abashed,abasia,abasic,abask,abate,abater,abatis,abaton,abator,abature,abave,abaxial,abaxile,abaze,abb,abbacy,abbas,abbasi,abbassi,abbess,abbey,abbot,abbotcy,abdal,abdat,abdest,abdomen,abduce,abduct,abeam,abear,abed,abeigh,abele,abelite,abet,abettal,abettor,abey,abeyant,abfarad,abhenry,abhor,abidal,abide,abider,abidi,abiding,abietic,abietin,abigail,abigeat,abigeus,abilao,ability,abilla,abilo,abiosis,abiotic,abir,abiston,abiuret,abject,abjoint,abjudge,abjure,abjurer,abkar,abkari,ablach,ablare,ablate,ablator,ablaut,ablaze,able,ableeze,abler,ablest,ablins,abloom,ablow,ablude,abluent,ablush,ably,abmho,abnet,aboard,abode,abody,abohm,aboil,abolish,abolla,aboma,abomine,aboon,aborad,aboral,abord,abort,aborted,abortin,abortus,abound,about,abouts,above,abox,abrade,abrader,abraid,abrasax,abrase,abrash,abraum,abraxas,abreact,abreast,abret,abrico,abridge,abrim,abrin,abroach,abroad,abrook,abrupt,abscess,abscind,abscise,absciss,abscond,absence,absent,absit,absmho,absohm,absolve,absorb,absorpt,abstain,absume,absurd,absvolt,abthain,abu,abucco,abulia,abulic,abuna,abura,aburban,aburst,aburton,abuse,abusee,abuser,abusion,abusive,abut,abuttal,abutter,abuzz,abvolt,abwab,aby,abysm,abysmal,abyss,abyssal,acaciin,acacin,academe,academy,acajou,acaleph,acana,acanth,acantha,acapnia,acapu,acara,acardia,acari,acarian,acarid,acarine,acaroid,acarol,acate,acatery,acaudal,acca,accede,acceder,accend,accent,accept,accerse,access,accidia,accidie,accinge,accite,acclaim,accloy,accoast,accoil,accolle,accompt,accord,accost,account,accoy,accrete,accrual,accrue,accruer,accurse,accusal,accuse,accused,accuser,ace,acedia,acedy,acephal,acerate,acerb,acerbic,acerdol,acerin,acerose,acerous,acerra,aceship,acetal,acetate,acetic,acetify,acetin,acetize,acetoin,acetol,acetone,acetose,acetous,acetum,acetyl,ach,achage,achar,achate,ache,achene,acher,achete,achieve,achigan,achill,achime,aching,achira,acholia,acholic,achor,achree,achroma,achtel,achy,achylia,achymia,acicula,acid,acider,acidic,acidify,acidite,acidity,acidize,acidly,acidoid,acidyl,acier,aciform,acinar,acinary,acinic,acinose,acinous,acinus,aciurgy,acker,ackey,ackman,acknow,acle,aclinal,aclinic,acloud,aclys,acmatic,acme,acmic,acmite,acne,acnemia,acnodal,acnode,acock,acocotl,acoin,acoine,acold,acology,acolous,acolyte,acoma,acomia,acomous,acone,aconic,aconin,aconine,aconite,acopic,acopon,acor,acorea,acoria,acorn,acorned,acosmic,acouasm,acouchi,acouchy,acoupa,acquest,acquire,acquist,acquit,acracy,acraein,acrasia,acratia,acrawl,acraze,acre,acreage,acreak,acream,acred,acreman,acrid,acridan,acridic,acridly,acridyl,acrinyl,acrisia,acritan,acrite,acritol,acroama,acrobat,acrogen,acron,acronyc,acronym,acronyx,acrook,acrose,across,acrotic,acryl,acrylic,acrylyl,act,acta,actable,actify,actin,actinal,actine,acting,actinic,actinon,action,active,activin,actless,acton,actor,actress,actu,actual,actuary,acture,acuate,acuity,aculea,aculeus,acumen,acushla,acutate,acute,acutely,acutish,acyclic,acyesis,acyetic,acyl,acylate,acyloin,acyloxy,acystia,ad,adactyl,adad,adage,adagial,adagio,adamant,adamas,adamine,adamite,adance,adangle,adapid,adapt,adapter,adaptor,adarme,adat,adati,adatom,adaunt,adaw,adawe,adawlut,adawn,adaxial,aday,adays,adazzle,adcraft,add,adda,addable,addax,added,addedly,addend,addenda,adder,addible,addict,addle,addlins,address,addrest,adduce,adducer,adduct,ade,adead,adeem,adeep,adeling,adelite,adenase,adenia,adenine,adenoid,adenoma,adenose,adenyl,adept,adermia,adermin,adet,adevism,adfix,adhaka,adharma,adhere,adherer,adhibit,adiate,adicity,adieu,adieux,adinole,adion,adipate,adipic,adipoid,adipoma,adipose,adipous,adipsia,adipsic,adipsy,adipyl,adit,adital,aditus,adjag,adject,adjiger,adjoin,adjoint,adjourn,adjudge,adjunct,adjure,adjurer,adjust,adlay,adless,adlet,adman,admi,admiral,admire,admired,admirer,admit,admix,adnate,adnex,adnexal,adnexed,adnoun,ado,adobe,adonin,adonite,adonize,adopt,adopted,adoptee,adopter,adoral,adorant,adore,adorer,adorn,adorner,adossed,adoulie,adown,adoxy,adoze,adpao,adpress,adread,adream,adreamt,adrenal,adrenin,adrift,adrip,adroit,adroop,adrop,adrowse,adrue,adry,adsbud,adsmith,adsorb,adtevac,adular,adulate,adult,adulter,adunc,adusk,adust,advance,advene,adverb,adverse,advert,advice,advisal,advise,advised,advisee,adviser,advisor,advowee,ady,adynamy,adyta,adyton,adytum,adz,adze,adzer,adzooks,ae,aecial,aecium,aedile,aedilic,aefald,aefaldy,aefauld,aegis,aenach,aenean,aeneous,aeolid,aeolina,aeoline,aeon,aeonial,aeonian,aeonist,aer,aerage,aerate,aerator,aerial,aeric,aerical,aerie,aeried,aerify,aero,aerobe,aerobic,aerobus,aerogel,aerogen,aerogun,aeronat,aeronef,aerose,aerosol,aerugo,aery,aes,aevia,aface,afaint,afar,afara,afear,afeard,afeared,afernan,afetal,affa,affable,affably,affair,affaite,affect,affeer,affeir,affiant,affinal,affine,affined,affirm,affix,affixal,affixer,afflict,afflux,afforce,afford,affray,affront,affuse,affy,afghani,afield,afire,aflame,aflare,aflat,aflaunt,aflight,afloat,aflow,aflower,aflush,afoam,afoot,afore,afoul,afraid,afreet,afresh,afret,afront,afrown,aft,aftaba,after,aftergo,aftmost,aftosa,aftward,aga,again,against,agal,agalaxy,agalite,agallop,agalma,agama,agamete,agami,agamian,agamic,agamid,agamoid,agamont,agamous,agamy,agape,agapeti,agar,agaric,agarita,agarwal,agasp,agate,agathin,agatine,agatize,agatoid,agaty,agavose,agaze,agazed,age,aged,agedly,agee,ageless,agelong,agen,agency,agenda,agendum,agent,agentry,ager,ageusia,ageusic,agger,aggrade,aggrate,aggress,aggroup,aggry,aggur,agha,aghanee,aghast,agile,agilely,agility,aging,agio,agist,agistor,agitant,agitate,agla,aglance,aglare,agleaf,agleam,aglet,agley,aglint,aglow,aglucon,agnail,agname,agnamed,agnate,agnatic,agnel,agnize,agnomen,agnosia,agnosis,agnosy,agnus,ago,agog,agoge,agogic,agogics,agoho,agoing,agon,agonal,agone,agonic,agonied,agonist,agonium,agonize,agony,agora,agouara,agouta,agouti,agpaite,agrah,agral,agre,agree,agreed,agreer,agrege,agria,agrin,agrise,agrito,agroan,agrom,agroof,agrope,aground,agrufe,agruif,agsam,agua,ague,aguey,aguish,agunah,agush,agust,agy,agynary,agynous,agyrate,agyria,ah,aha,ahaaina,ahaunch,ahead,aheap,ahem,ahey,ahimsa,ahind,ahint,ahmadi,aho,ahong,ahorse,ahoy,ahsan,ahu,ahuatle,ahull,ahum,ahungry,ahunt,ahura,ahush,ahwal,ahypnia,ai,aid,aidable,aidance,aidant,aide,aider,aidful,aidless,aiel,aiglet,ail,ailanto,aile,aileron,ailette,ailing,aillt,ailment,ailsyte,ailuro,ailweed,aim,aimara,aimer,aimful,aiming,aimless,ainaleh,ainhum,ainoi,ainsell,aint,aion,aionial,air,airable,airampo,airan,aircrew,airdock,airdrop,aire,airer,airfoil,airhead,airily,airing,airish,airless,airlift,airlike,airmail,airman,airmark,airpark,airport,airship,airsick,airt,airward,airway,airy,aisle,aisled,aisling,ait,aitch,aitesis,aition,aiwan,aizle,ajaja,ajangle,ajar,ajari,ajava,ajhar,ajivika,ajog,ajoint,ajowan,ak,aka,akala,akaroa,akasa,akazga,akcheh,ake,akeake,akebi,akee,akeki,akeley,akepiro,akerite,akey,akhoond,akhrot,akhyana,akia,akimbo,akin,akindle,akinete,akmudar,aknee,ako,akoasm,akoasma,akonge,akov,akpek,akra,aku,akule,akund,al,ala,alacha,alack,alada,alaihi,alaite,alala,alalite,alalus,alameda,alamo,alamoth,alan,aland,alangin,alani,alanine,alannah,alantic,alantin,alantol,alanyl,alar,alares,alarm,alarmed,alarum,alary,alas,alate,alated,alatern,alation,alb,alba,alban,albarco,albata,albe,albedo,albee,albeit,albetad,albify,albinal,albinic,albino,albite,albitic,albugo,album,albumen,albumin,alburn,albus,alcaide,alcalde,alcanna,alcazar,alchemy,alchera,alchimy,alchymy,alcine,alclad,alco,alcoate,alcogel,alcohol,alcosol,alcove,alcyon,aldane,aldazin,aldehol,alder,aldern,aldim,aldime,aldine,aldol,aldose,ale,aleak,alec,alecize,alecost,alecup,alee,alef,aleft,alegar,alehoof,alem,alemana,alembic,alemite,alemmal,alen,aleph,alephs,alepole,alepot,alerce,alerse,alert,alertly,alesan,aletap,alette,alevin,alewife,alexia,alexic,alexin,aleyard,alf,alfa,alfaje,alfalfa,alfaqui,alfet,alfiona,alfonso,alforja,alga,algae,algal,algalia,algate,algebra,algedo,algesia,algesic,algesis,algetic,algic,algid,algific,algin,algine,alginic,algist,algoid,algor,algosis,algous,algum,alhenna,alias,alibi,alible,alichel,alidade,alien,aliency,alienee,aliener,alienor,alif,aliform,alight,align,aligner,aliipoe,alike,alima,aliment,alimony,alin,aliofar,alipata,aliped,aliptes,aliptic,aliquot,alish,alisier,alismad,alismal,aliso,alison,alisp,alist,alit,alite,aliunde,alive,aliyah,alizari,aljoba,alk,alkali,alkalic,alkamin,alkane,alkanet,alkene,alkenna,alkenyl,alkide,alkine,alkool,alkoxy,alkoxyl,alky,alkyd,alkyl,alkylic,alkyne,all,allan,allay,allayer,allbone,allege,alleger,allegro,allele,allelic,allene,aller,allergy,alley,alleyed,allgood,allheal,allice,allied,allies,allness,allonym,alloquy,allose,allot,allotee,allover,allow,allower,alloxan,alloy,allseed,alltud,allude,allure,allurer,alluvia,allwork,ally,allyl,allylic,alma,almadia,almadie,almagra,almanac,alme,almemar,almique,almirah,almoign,almon,almond,almondy,almoner,almonry,almost,almous,alms,almsful,almsman,almuce,almud,almude,almug,almuten,aln,alnage,alnager,alnein,alnico,alnoite,alnuin,alo,alochia,alod,alodial,alodian,alodium,alody,aloe,aloed,aloesol,aloetic,aloft,alogia,alogism,alogy,aloid,aloin,aloma,alone,along,alongst,aloof,aloofly,aloose,alop,alopeke,alose,aloud,alow,alowe,alp,alpaca,alpeen,alpha,alphol,alphorn,alphos,alphyl,alpieu,alpine,alpist,alquier,alraun,already,alright,alroot,alruna,also,alsoon,alt,altaite,altar,altared,alter,alterer,altern,alterne,althea,althein,altho,althorn,altilik,altin,alto,altoun,altrose,altun,aludel,alula,alular,alulet,alum,alumic,alumina,alumine,alumish,alumite,alumium,alumna,alumnae,alumnal,alumni,alumnus,alunite,alupag,alure,aluta,alvar,alveary,alveloz,alveola,alveole,alveoli,alveus,alvine,alvite,alvus,alway,always,aly,alypin,alysson,am,ama,amaas,amadou,amaga,amah,amain,amakebe,amala,amalaka,amalgam,amaltas,amamau,amandin,amang,amani,amania,amanori,amanous,amapa,amar,amarin,amarine,amarity,amaroid,amass,amasser,amastia,amasty,amateur,amative,amatol,amatory,amaze,amazed,amazia,amazing,amba,ambage,ambalam,amban,ambar,ambaree,ambary,ambash,ambassy,ambatch,ambay,ambeer,amber,ambery,ambiens,ambient,ambier,ambit,ambital,ambitty,ambitus,amble,ambler,ambling,ambo,ambon,ambos,ambrain,ambrein,ambrite,ambroid,ambrose,ambry,ambsace,ambury,ambush,amchoor,ame,ameed,ameen,amelia,amellus,amelu,amelus,amen,amend,amende,amender,amends,amene,amenia,amenity,ament,amental,amentia,amentum,amerce,amercer,amerism,amesite,ametria,amgarn,amhar,amhran,ami,amiable,amiably,amianth,amic,amical,amice,amiced,amicron,amid,amidase,amidate,amide,amidic,amidid,amidide,amidin,amidine,amido,amidol,amidon,amidoxy,amidst,amil,amimia,amimide,amin,aminate,amine,amini,aminic,aminity,aminize,amino,aminoid,amir,amiray,amiss,amity,amixia,amla,amli,amlikar,amlong,amma,amman,ammelin,ammer,ammeter,ammine,ammo,ammonal,ammonia,ammonic,ammono,ammu,amnesia,amnesic,amnesty,amnia,amniac,amnic,amnion,amniote,amober,amobyr,amoeba,amoebae,amoeban,amoebic,amoebid,amok,amoke,amole,amomal,amomum,among,amongst,amor,amorado,amoraic,amoraim,amoral,amoret,amorism,amorist,amoroso,amorous,amorphy,amort,amotion,amotus,amount,amour,amove,ampalea,amper,ampere,ampery,amphid,amphide,amphora,amphore,ample,amplify,amply,ampoule,ampul,ampulla,amputee,ampyx,amra,amreeta,amrita,amsath,amsel,amt,amtman,amuck,amuguis,amula,amulet,amulla,amunam,amurca,amuse,amused,amusee,amuser,amusia,amusing,amusive,amutter,amuyon,amuyong,amuze,amvis,amy,amyelia,amyelic,amygdal,amyl,amylan,amylase,amylate,amylene,amylic,amylin,amylo,amyloid,amylom,amylon,amylose,amylum,amyous,amyrin,amyrol,amyroot,an,ana,anabata,anabo,anabong,anacara,anacard,anacid,anadem,anadrom,anaemia,anaemic,anagap,anagep,anagoge,anagogy,anagram,anagua,anahau,anal,analav,analgen,analgia,analgic,anally,analogy,analyse,analyst,analyze,anam,anama,anamite,anan,anana,ananas,ananda,ananym,anaphia,anapnea,anapsid,anaqua,anarch,anarchy,anareta,anarya,anatase,anatifa,anatine,anatomy,anatox,anatron,anaudia,anaxial,anaxon,anaxone,anay,anba,anbury,anchor,anchovy,ancient,ancile,ancilla,ancon,anconad,anconal,ancone,ancony,ancora,ancoral,and,anda,andante,andirin,andiron,andric,android,androl,andron,anear,aneath,anele,anemia,anemic,anemone,anemony,anend,anenst,anent,anepia,anergia,anergic,anergy,anerly,aneroid,anes,anesis,aneuria,aneuric,aneurin,anew,angaria,angary,angekok,angel,angelet,angelic,angelin,angelot,anger,angerly,angeyok,angico,angild,angili,angina,anginal,angioid,angioma,angle,angled,angler,angling,angloid,ango,angolar,angor,angrily,angrite,angry,angst,angster,anguid,anguine,anguis,anguish,angula,angular,anguria,anhang,anhima,anhinga,ani,anicut,anidian,aniente,anigh,anight,anights,anil,anilao,anilau,anile,anilic,anilid,anilide,aniline,anility,anilla,anima,animal,animate,anime,animi,animism,animist,animize,animous,animus,anion,anionic,anis,anisal,anisate,anise,aniseed,anisic,anisil,anisoin,anisole,anisoyl,anisum,anisyl,anither,anjan,ankee,anker,ankh,ankle,anklet,anklong,ankus,ankusha,anlace,anlaut,ann,anna,annal,annale,annals,annat,annates,annatto,anneal,annelid,annet,annex,annexa,annexal,annexer,annite,annona,annoy,annoyer,annual,annuary,annuent,annuity,annul,annular,annulet,annulus,anoa,anodal,anode,anodic,anodize,anodos,anodyne,anoesia,anoesis,anoetic,anoil,anoine,anoint,anole,anoli,anolian,anolyte,anomaly,anomite,anomy,anon,anonang,anonol,anonym,anonyma,anopia,anopsia,anorak,anorexy,anormal,anorth,anosmia,anosmic,another,anotia,anotta,anotto,anotus,anounou,anoxia,anoxic,ansa,ansar,ansate,ansu,answer,ant,anta,antacid,antal,antapex,antdom,ante,anteact,anteal,antefix,antenna,antes,antewar,anthela,anthem,anthema,anthemy,anther,anthill,anthine,anthoid,anthood,anthrax,anthrol,anthryl,anti,antiae,antiar,antic,antical,anticly,anticor,anticum,antifat,antigen,antigod,antihum,antiqua,antique,antired,antirun,antisun,antitax,antiwar,antiwit,antler,antlia,antling,antoeci,antonym,antra,antral,antre,antrin,antrum,antship,antu,antwise,anubing,anuloma,anuran,anuria,anuric,anurous,anury,anus,anusim,anvil,anxiety,anxious,any,anybody,anyhow,anyone,anyway,anyways,anywhen,anywhy,anywise,aogiri,aonach,aorist,aorta,aortal,aortic,aortism,aosmic,aoudad,apa,apace,apache,apadana,apagoge,apaid,apalit,apandry,apar,aparejo,apart,apasote,apatan,apathic,apathy,apatite,ape,apeak,apedom,apehood,apeiron,apelet,apelike,apeling,apepsia,apepsy,apeptic,aper,aperch,aperea,apert,apertly,apery,apetaly,apex,apexed,aphagia,aphakia,aphakic,aphasia,aphasic,aphemia,aphemic,aphesis,apheta,aphetic,aphid,aphides,aphidid,aphodal,aphodus,aphonia,aphonic,aphony,aphoria,aphotic,aphrite,aphtha,aphthic,aphylly,aphyric,apian,apiary,apiator,apicad,apical,apices,apicula,apiece,apieces,apii,apiin,apilary,apinch,aping,apinoid,apio,apioid,apiole,apiolin,apionol,apiose,apish,apishly,apism,apitong,apitpat,aplanat,aplasia,aplenty,aplite,aplitic,aplomb,aplome,apnea,apneal,apneic,apocarp,apocha,apocope,apod,apodal,apodan,apodema,apodeme,apodia,apodous,apogamy,apogeal,apogean,apogee,apogeic,apogeny,apohyal,apoise,apojove,apokrea,apolar,apology,aponia,aponic,apoop,apoplex,apopyle,aporia,aporose,aport,aposia,aposoro,apostil,apostle,apothem,apotome,apotype,apout,apozem,apozema,appall,apparel,appay,appeal,appear,appease,append,appet,appete,applaud,apple,applied,applier,applot,apply,appoint,apport,appose,apposer,apprend,apprise,apprize,approof,approve,appulse,apraxia,apraxic,apricot,apriori,apron,apropos,apse,apsidal,apsides,apsis,apt,apteral,apteran,aptly,aptness,aptote,aptotic,apulse,apyonin,apyrene,apyrexy,apyrous,aqua,aquabib,aquage,aquaria,aquatic,aquavit,aqueous,aquifer,aquiver,aquo,aquose,ar,ara,araba,araban,arabana,arabin,arabit,arable,araca,aracari,arachic,arachin,arad,arado,arain,arake,araliad,aralie,aralkyl,aramina,araneid,aranein,aranga,arango,arar,arara,ararao,arariba,araroba,arati,aration,aratory,arba,arbacin,arbalo,arbiter,arbor,arboral,arbored,arboret,arbute,arbutin,arbutus,arc,arca,arcade,arcana,arcanal,arcane,arcanum,arcate,arch,archae,archaic,arche,archeal,arched,archer,archery,arches,archeus,archfoe,archgod,archil,arching,archive,archly,archon,archont,archsee,archsin,archspy,archwag,archway,archy,arcing,arcked,arcking,arctian,arctic,arctiid,arctoid,arcual,arcuale,arcuate,arcula,ardeb,ardella,ardency,ardent,ardish,ardoise,ardor,ardri,ardu,arduous,are,area,areach,aread,areal,arear,areaway,arecain,ared,areek,areel,arefact,areito,arena,arenae,arend,areng,arenoid,arenose,arent,areola,areolar,areole,areolet,arete,argal,argala,argali,argans,argasid,argeers,argel,argenol,argent,arghan,arghel,arghool,argil,argo,argol,argolet,argon,argosy,argot,argotic,argue,arguer,argufy,argute,argyria,argyric,arhar,arhat,aria,aribine,aricine,arid,aridge,aridian,aridity,aridly,ariel,arienzo,arietta,aright,arigue,aril,ariled,arillus,ariose,arioso,ariot,aripple,arisard,arise,arisen,arist,arista,arite,arjun,ark,arkite,arkose,arkosic,arles,arm,armada,armbone,armed,armer,armet,armful,armhole,armhoop,armied,armiger,armil,armilla,arming,armless,armlet,armload,armoire,armor,armored,armorer,armory,armpit,armrack,armrest,arms,armscye,armure,army,arn,arna,arnee,arni,arnica,arnotta,arnotto,arnut,aroar,aroast,arock,aroeira,aroid,aroint,arolium,arolla,aroma,aroon,arose,around,arousal,arouse,arouser,arow,aroxyl,arpen,arpent,arrack,arrah,arraign,arrame,arrange,arrant,arras,arrased,arratel,arrau,array,arrayal,arrayer,arrear,arrect,arrent,arrest,arriage,arriba,arride,arridge,arrie,arriere,arrimby,arris,arrish,arrival,arrive,arriver,arroba,arrope,arrow,arrowed,arrowy,arroyo,arse,arsenal,arsenic,arseno,arsenyl,arses,arsheen,arshin,arshine,arsine,arsinic,arsino,arsis,arsle,arsoite,arson,arsonic,arsono,arsyl,art,artaba,artabe,artal,artar,artel,arterin,artery,artful,artha,arthel,arthral,artiad,article,artisan,artist,artiste,artless,artlet,artlike,artware,arty,aru,arui,aruke,arumin,arupa,arusa,arusha,arustle,arval,arvel,arx,ary,aryl,arylate,arzan,arzun,as,asaddle,asak,asale,asana,asaphia,asaphid,asaprol,asarite,asaron,asarone,asbest,asbolin,ascan,ascare,ascarid,ascaron,ascend,ascent,ascetic,ascham,asci,ascian,ascii,ascites,ascitic,asclent,ascoma,ascon,ascot,ascribe,ascript,ascry,ascula,ascus,asdic,ase,asearch,aseethe,aseity,asem,asemia,asepsis,aseptic,aseptol,asexual,ash,ashake,ashame,ashamed,ashamnu,ashcake,ashen,asherah,ashery,ashes,ashet,ashily,ashine,ashiver,ashkoko,ashlar,ashless,ashling,ashman,ashore,ashpan,ashpit,ashraf,ashrafi,ashur,ashweed,ashwort,ashy,asialia,aside,asideu,asiento,asilid,asimen,asimmer,asinego,asinine,asitia,ask,askable,askance,askant,askar,askari,asker,askew,askip,asklent,askos,aslant,aslaver,asleep,aslop,aslope,asmack,asmalte,asmear,asmile,asmoke,asnort,asoak,asocial,asok,asoka,asonant,asonia,asop,asor,asouth,asp,aspace,aspect,aspen,asper,asperge,asperse,asphalt,asphyxy,aspic,aspire,aspirer,aspirin,aspish,asport,aspout,asprawl,aspread,aspring,asprout,asquare,asquat,asqueal,asquint,asquirm,ass,assacu,assagai,assai,assail,assapan,assart,assary,assate,assault,assaut,assay,assayer,assbaa,asse,assegai,asself,assent,assert,assess,asset,assets,assever,asshead,assi,assify,assign,assilag,assis,assise,assish,assist,assize,assizer,assizes,asslike,assman,assoil,assort,assuade,assuage,assume,assumed,assumer,assure,assured,assurer,assurge,ast,asta,astalk,astare,astart,astasia,astatic,astay,asteam,asteep,asteer,asteism,astelic,astely,aster,asteria,asterin,astern,astheny,asthma,asthore,astilbe,astint,astir,astite,astomia,astony,astoop,astor,astound,astrain,astral,astrand,astray,astream,astrer,astrict,astride,astrier,astrild,astroid,astrut,astute,astylar,asudden,asunder,aswail,aswarm,asway,asweat,aswell,aswim,aswing,aswirl,aswoon,asyla,asylum,at,atabal,atabeg,atabek,atactic,atafter,ataman,atangle,atap,ataraxy,ataunt,atavi,atavic,atavism,atavist,atavus,ataxia,ataxic,ataxite,ataxy,atazir,atbash,ate,atebrin,atechny,ateeter,atef,atelets,atelier,atelo,ates,ateuchi,athanor,athar,atheism,atheist,atheize,athelia,athenee,athenor,atheous,athing,athirst,athlete,athodyd,athort,athrill,athrive,athrob,athrong,athwart,athymia,athymic,athymy,athyria,athyrid,atilt,atimon,atinga,atingle,atinkle,atip,atis,atlas,atlatl,atle,atlee,atloid,atma,atman,atmid,atmo,atmos,atocha,atocia,atokal,atoke,atokous,atoll,atom,atomerg,atomic,atomics,atomism,atomist,atomity,atomize,atomy,atonal,atone,atoner,atonia,atonic,atony,atop,atophan,atopic,atopite,atopy,atour,atoxic,atoxyl,atrail,atrepsy,atresia,atresic,atresy,atretic,atria,atrial,atrip,atrium,atrocha,atropal,atrophy,atropia,atropic,atrous,atry,atta,attacco,attach,attache,attack,attacus,attagen,attain,attaint,attaleh,attar,attask,attempt,attend,attent,atter,attern,attery,attest,attic,attid,attinge,attire,attired,attirer,attorn,attract,attrap,attrist,attrite,attune,atule,atumble,atune,atwain,atweel,atween,atwin,atwirl,atwist,atwitch,atwixt,atwo,atypic,atypy,auantic,aube,aubrite,auburn,auca,auchlet,auction,aucuba,audible,audibly,audient,audile,audio,audion,audit,auditor,auge,augen,augend,auger,augerer,augh,aught,augite,augitic,augment,augur,augural,augury,august,auh,auhuhu,auk,auklet,aula,aulae,auld,auletai,aulete,auletes,auletic,aulic,auloi,aulos,aulu,aum,aumaga,aumail,aumbry,aumery,aumil,aumous,aumrie,auncel,aune,aunt,auntie,auntish,auntly,aupaka,aura,aurae,aural,aurally,aurar,aurate,aurated,aureate,aureity,aurelia,aureola,aureole,aureous,auresca,aureus,auric,auricle,auride,aurific,aurify,aurigal,aurin,aurir,aurist,aurite,aurochs,auronal,aurora,aurorae,auroral,aurore,aurous,aurum,aurure,auryl,auscult,auslaut,auspex,auspice,auspicy,austere,austral,ausu,ausubo,autarch,autarky,aute,autecy,autem,author,autism,autist,auto,autobus,autocab,autocar,autoecy,autoist,automa,automat,autonym,autopsy,autumn,auxesis,auxetic,auxin,auxinic,auxotox,ava,avadana,avahi,avail,aval,avalent,avania,avarice,avast,avaunt,ave,avellan,aveloz,avenage,avener,avenge,avenger,avenin,avenous,avens,avenue,aver,avera,average,averah,averil,averin,averral,averse,avert,averted,averter,avian,aviary,aviate,aviatic,aviator,avichi,avicide,avick,avid,avidity,avidly,avidous,avidya,avigate,avijja,avine,aviso,avital,avitic,avives,avo,avocado,avocate,avocet,avodire,avoid,avoider,avolate,avouch,avow,avowal,avowant,avowed,avower,avowry,avoyer,avulse,aw,awa,awabi,awaft,awag,await,awaiter,awake,awaken,awald,awalim,awalt,awane,awapuhi,award,awarder,aware,awash,awaste,awat,awatch,awater,awave,away,awber,awd,awe,aweary,aweband,awee,aweek,aweel,aweigh,awesome,awest,aweto,awfu,awful,awfully,awheel,awheft,awhet,awhile,awhir,awhirl,awide,awiggle,awin,awing,awink,awiwi,awkward,awl,awless,awlwort,awmous,awn,awned,awner,awning,awnless,awnlike,awny,awoke,awork,awreck,awrist,awrong,awry,ax,axal,axe,axed,axenic,axes,axfetch,axhead,axial,axially,axiate,axiform,axil,axile,axilla,axillae,axillar,axine,axinite,axiom,axion,axis,axised,axite,axle,axled,axmaker,axman,axogamy,axoid,axolotl,axon,axonal,axonost,axseed,axstone,axtree,axunge,axweed,axwise,axwort,ay,ayah,aye,ayelp,ayin,ayless,aylet,ayllu,ayond,ayont,ayous,ayu,azafrin,azalea,azarole,azelaic,azelate,azide,azilut,azimene,azimide,azimine,azimino,azimuth,azine,aziola,azo,azoch,azofier,azofy,azoic,azole,azon,azonal,azonic,azonium,azophen,azorite,azotate,azote,azoted,azoth,azotic,azotine,azotite,azotize,azotous,azox,azoxime,azoxine,azoxy,azteca,azulene,azulite,azulmic,azumbre,azure,azurean,azured,azurine,azurite,azurous,azury,azygos,azygous,azyme,azymite,azymous,b,ba,baa,baal,baar,baba,babai,babasco,babassu,babbitt,babble,babbler,babbly,babby,babe,babelet,babery,babiche,babied,babish,bablah,babloh,baboen,baboo,baboon,baboot,babroot,babu,babudom,babuina,babuism,babul,baby,babydom,babyish,babyism,bac,bacaba,bacach,bacalao,bacao,bacca,baccae,baccara,baccate,bacchar,bacchic,bacchii,bach,bache,bachel,bacilli,back,backage,backcap,backed,backen,backer,backet,backie,backing,backjaw,backlet,backlog,backrun,backsaw,backset,backup,backway,baclin,bacon,baconer,bacony,bacula,bacule,baculi,baculum,baculus,bacury,bad,badan,baddish,baddock,bade,badge,badger,badiaga,badian,badious,badland,badly,badness,bae,baetuli,baetyl,bafaro,baff,baffeta,baffle,baffler,baffy,baft,bafta,bag,baga,bagani,bagasse,bagel,bagful,baggage,baggala,bagged,bagger,baggie,baggily,bagging,baggit,baggy,baglike,bagman,bagnio,bagnut,bago,bagonet,bagpipe,bagre,bagreef,bagroom,bagwig,bagworm,bagwyn,bah,bahan,bahar,bahay,bahera,bahisti,bahnung,baho,bahoe,bahoo,baht,bahur,bahut,baignet,baikie,bail,bailage,bailee,bailer,bailey,bailie,bailiff,bailor,bain,bainie,baioc,baiocco,bairagi,bairn,bairnie,bairnly,baister,bait,baiter,baith,baittle,baize,bajada,bajan,bajra,bajree,bajri,bajury,baka,bakal,bake,baked,baken,bakepan,baker,bakerly,bakery,bakie,baking,bakli,baktun,baku,bakula,bal,balafo,balagan,balai,balance,balanic,balanid,balao,balas,balata,balboa,balcony,bald,balden,balder,baldish,baldly,baldrib,baldric,baldy,bale,baleen,baleful,balei,baleise,baler,balete,bali,baline,balita,balk,balker,balky,ball,ballad,ballade,ballam,ballan,ballant,ballast,ballata,ballate,balldom,balled,baller,ballet,balli,ballist,ballium,balloon,ballot,ballow,ballup,bally,balm,balmily,balmony,balmy,balneal,balonea,baloney,baloo,balow,balsa,balsam,balsamo,balsamy,baltei,balter,balteus,balu,balut,balza,bam,bamban,bambini,bambino,bamboo,bamoth,ban,banaba,banago,banak,banal,banally,banana,banat,banc,banca,bancal,banchi,banco,bancus,band,banda,bandage,bandaka,bandala,bandar,bandbox,bande,bandeau,banded,bander,bandhu,bandi,bandie,banding,bandit,bandle,bandlet,bandman,bando,bandog,bandore,bandrol,bandy,bane,baneful,bang,banga,bange,banger,banghy,banging,bangkok,bangle,bangled,bani,banian,banig,banilad,banish,baniwa,baniya,banjo,banjore,banjuke,bank,banked,banker,bankera,banket,banking,bankman,banky,banner,bannet,banning,bannock,banns,bannut,banquet,banshee,bant,bantam,bantay,banteng,banter,bantery,banty,banuyo,banya,banyan,banzai,baobab,bap,baptism,baptize,bar,bara,barad,barauna,barb,barbal,barbary,barbas,barbate,barbe,barbed,barbel,barber,barbet,barbion,barblet,barbone,barbudo,barbule,bard,bardane,bardash,bardel,bardess,bardic,bardie,bardily,barding,bardish,bardism,bardlet,bardo,bardy,bare,bareca,barefit,barely,barer,baresma,baretta,barff,barfish,barfly,barful,bargain,barge,bargee,bargeer,barger,bargh,bargham,bari,baria,baric,barid,barie,barile,barilla,baring,baris,barish,barit,barite,barium,bark,barken,barker,barkery,barkey,barkhan,barking,barkle,barky,barless,barley,barling,barlock,barlow,barm,barmaid,barman,barmkin,barmote,barmy,barn,barnard,barney,barnful,barnman,barny,baroi,barolo,baron,baronet,barong,baronry,barony,baroque,baroto,barpost,barra,barrack,barrad,barrage,barras,barred,barrel,barren,barrer,barret,barrico,barrier,barring,barrio,barroom,barrow,barruly,barry,barse,barsom,barter,barth,barton,baru,baruria,barvel,barwal,barway,barways,barwise,barwood,barye,baryta,barytes,barytic,baryton,bas,basal,basale,basalia,basally,basalt,basaree,bascule,steembase,based,basely,baseman,basenji,bases,bash,bashaw,bashful,bashlyk,basial,basiate,basic,basidia,basify,basil,basilar,basilic,basin,basined,basinet,basion,basis,bask,basker,basket,basoid,bason,basos,basote,basque,basqued,bass,bassan,bassara,basset,bassie,bassine,bassist,basso,bassoon,bassus,bast,basta,bastard,baste,basten,baster,bastide,basting,bastion,bastite,basto,baston,bat,bataan,batad,batakan,batara,batata,batch,batcher,bate,batea,bateau,bateaux,bated,batel,bateman,bater,batfish,batfowl,bath,bathe,bather,bathic,bathing,bathman,bathmic,bathos,bathtub,bathyal,batik,batiker,bating,batino,batiste,batlan,batlike,batling,batlon,batman,batoid,baton,batonne,bats,batsman,batster,batt,batta,battel,batten,batter,battery,battik,batting,battish,battle,battled,battler,battue,batty,batule,batwing,batz,batzen,bauble,bauch,bauchle,bauckie,baud,baul,bauleah,baun,bauno,bauson,bausond,bauta,bauxite,bavaroy,bavary,bavian,baviere,bavin,bavoso,baw,bawbee,bawcock,bawd,bawdily,bawdry,bawl,bawler,bawley,bawn,bawtie,baxter,baxtone,bay,baya,bayal,bayamo,bayard,baybolt,baybush,baycuru,bayed,bayeta,baygall,bayhead,bayish,baylet,baylike,bayman,bayness,bayok,bayonet,bayou,baywood,bazaar,baze,bazoo,bazooka,bazzite,bdellid,be,beach,beached,beachy,beacon,bead,beaded,beader,beadily,beading,beadle,beadlet,beadman,beadrow,beady,beagle,beak,beaked,beaker,beakful,beaky,beal,beala,bealing,beam,beamage,beamed,beamer,beamful,beamily,beaming,beamish,beamlet,beamman,beamy,bean,beanbag,beancod,beanery,beanie,beano,beant,beany,bear,beard,bearded,bearder,beardie,beardom,beardy,bearer,bearess,bearing,bearish,bearlet,bearm,beast,beastie,beastly,beat,beata,beatae,beatee,beaten,beater,beath,beatify,beating,beatus,beau,beaufin,beauish,beauism,beauti,beauty,beaux,beaver,beavery,beback,bebait,bebang,bebar,bebaron,bebaste,bebat,bebathe,bebay,bebeast,bebed,bebeeru,bebilya,bebite,beblain,beblear,bebled,bebless,beblood,bebloom,bebog,bebop,beboss,bebotch,bebrave,bebrine,bebrush,bebump,bebusy,becall,becalm,becap,becard,becarve,becater,because,becense,bechalk,becharm,bechase,becheck,becher,bechern,bechirp,becivet,beck,becker,becket,beckon,beclad,beclang,beclart,beclasp,beclaw,becloak,beclog,becloud,beclout,beclown,becolme,becolor,become,becomes,becomma,becoom,becost,becovet,becram,becramp,becrawl,becreep,becrime,becroak,becross,becrowd,becrown,becrush,becrust,becry,becuiba,becuna,becurl,becurry,becurse,becut,bed,bedad,bedamn,bedamp,bedare,bedark,bedash,bedaub,bedawn,beday,bedaze,bedbug,bedcap,bedcase,bedcord,bedded,bedder,bedding,bedead,bedeaf,bedebt,bedeck,bedel,beden,bedene,bedevil,bedew,bedewer,bedfast,bedfoot,bedgery,bedgoer,bedgown,bedight,bedikah,bedim,bedin,bedip,bedirt,bedirty,bedizen,bedkey,bedlam,bedlar,bedless,bedlids,bedman,bedmate,bedog,bedolt,bedot,bedote,bedouse,bedown,bedoyo,bedpan,bedpost,bedrail,bedral,bedrape,bedress,bedrid,bedrift,bedrip,bedrock,bedroll,bedroom,bedrop,bedrown,bedrug,bedsick,bedside,bedsite,bedsock,bedsore,bedtick,bedtime,bedub,beduck,beduke,bedull,bedumb,bedunce,bedunch,bedung,bedur,bedusk,bedust,bedwarf,bedway,bedways,bedwell,bedye,bee,beearn,beech,beechen,beechy,beedged,beedom,beef,beefer,beefily,beefin,beefish,beefy,beehead,beeherd,beehive,beeish,beek,beekite,beelbow,beelike,beeline,beelol,beeman,been,beennut,beer,beerage,beerily,beerish,beery,bees,beest,beeswax,beet,beeth,beetle,beetled,beetler,beety,beeve,beevish,beeware,beeway,beeweed,beewise,beewort,befall,befame,befan,befancy,befavor,befilch,befile,befilth,befire,befist,befit,beflag,beflap,beflea,befleck,beflour,beflout,beflum,befoam,befog,befool,befop,before,befoul,befret,befrill,befriz,befume,beg,begad,begall,begani,begar,begari,begash,begat,begaud,begaudy,begay,begaze,begeck,begem,beget,beggar,beggary,begging,begift,begild,begin,begird,beglad,beglare,beglic,beglide,begloom,begloze,begluc,beglue,begnaw,bego,begob,begobs,begohm,begone,begonia,begorra,begorry,begoud,begowk,begrace,begrain,begrave,begray,begreen,begrett,begrim,begrime,begroan,begrown,beguard,beguess,beguile,beguine,begulf,begum,begun,begunk,begut,behale,behalf,behap,behave,behead,behear,behears,behedge,beheld,behelp,behen,behenic,behest,behind,behint,behn,behold,behoney,behoof,behoot,behoove,behorn,behowl,behung,behymn,beice,beige,being,beinked,beira,beisa,bejade,bejan,bejant,bejazz,bejel,bejewel,bejig,bekah,bekick,beking,bekiss,bekko,beknave,beknit,beknow,beknown,bel,bela,belabor,belaced,beladle,belady,belage,belah,belam,belanda,belar,belard,belash,belate,belated,belaud,belay,belayer,belch,belcher,beld,beldam,beleaf,beleap,beleave,belee,belfry,belga,belibel,belick,belie,belief,belier,believe,belight,beliked,belion,belite,belive,bell,bellboy,belle,belled,bellhop,bellied,belling,bellite,bellman,bellote,bellow,bellows,belly,bellyer,beloam,beloid,belong,belonid,belord,belout,belove,beloved,below,belsire,belt,belted,belter,beltie,beltine,belting,beltman,belton,beluga,belute,belve,bely,belying,bema,bemad,bemadam,bemail,bemaim,beman,bemar,bemask,bemat,bemata,bemaul,bemazed,bemeal,bemean,bemercy,bemire,bemist,bemix,bemoan,bemoat,bemock,bemoil,bemole,bemolt,bemoon,bemotto,bemoult,bemouth,bemuck,bemud,bemuddy,bemuse,bemused,bemusk,ben,bena,benab,bename,benami,benasty,benben,bench,bencher,benchy,bencite,bend,benda,bended,bender,bending,bendlet,bendy,bene,beneath,benefic,benefit,benempt,benet,beng,beni,benight,benign,benison,benj,benjy,benmost,benn,benne,bennel,bennet,benny,beno,benorth,benote,bensel,bensh,benshea,benshee,benshi,bent,bentang,benthal,benthic,benthon,benthos,benting,benty,benumb,benward,benweed,benzal,benzein,benzene,benzil,benzine,benzo,benzoic,benzoid,benzoin,benzol,benzole,benzoxy,benzoyl,benzyl,beode,bepaid,bepale,bepaper,beparch,beparse,bepart,bepaste,bepat,bepaw,bepearl,bepelt,bepen,bepewed,bepiece,bepile,bepill,bepinch,bepity,beprank,bepray,bepress,bepride,beprose,bepuff,bepun,bequalm,bequest,bequote,ber,berain,berakah,berake,berapt,berat,berate,beray,bere,bereave,bereft,berend,beret,berg,berger,berglet,bergut,bergy,bergylt,berhyme,beride,berinse,berith,berley,berlin,berline,berm,berne,berobed,beroll,beround,berret,berri,berried,berrier,berry,berseem,berserk,berth,berthed,berther,bertram,bertrum,berust,bervie,berycid,beryl,bes,besa,besagne,besaiel,besaint,besan,besauce,bescab,bescarf,bescent,bescorn,bescour,bescurf,beseam,besee,beseech,beseem,beseen,beset,beshade,beshag,beshake,beshame,beshear,beshell,beshine,beshlik,beshod,beshout,beshow,beshrew,beside,besides,besiege,besigh,besin,besing,besiren,besit,beslab,beslap,beslash,beslave,beslime,beslow,beslur,besmear,besmell,besmile,besmoke,besmut,besnare,besneer,besnow,besnuff,besogne,besoil,besom,besomer,besoot,besot,besoul,besour,bespate,bespawl,bespeak,besped,bespeed,bespell,bespend,bespete,bespew,bespice,bespill,bespin,bespit,besplit,bespoke,bespot,bespout,bespray,bespy,besquib,besra,best,bestab,bestain,bestamp,bestar,bestare,bestay,bestead,besteer,bester,bestial,bestick,bestill,bestink,bestir,bestock,bestore,bestorm,bestove,bestow,bestraw,bestrew,bestuck,bestud,besugar,besuit,besully,beswarm,beswim,bet,beta,betag,betail,betaine,betalk,betask,betaxed,betear,beteela,beteem,betel,beth,bethel,bethink,bethumb,bethump,betide,betimes,betinge,betire,betis,betitle,betoil,betoken,betone,betony,betoss,betowel,betrace,betrail,betrap,betray,betread,betrend,betrim,betroth,betrunk,betso,betted,better,betters,betting,bettong,bettor,betty,betulin,betutor,between,betwine,betwit,betwixt,beveil,bevel,beveled,beveler,bevenom,bever,beverse,beveto,bevined,bevomit,bevue,bevy,bewail,bewall,beware,bewash,bewaste,bewater,beweary,beweep,bewept,bewest,bewet,bewhig,bewhite,bewidow,bewig,bewired,bewitch,bewith,bework,beworm,beworn,beworry,bewrap,bewray,bewreck,bewrite,bey,beydom,beylic,beyond,beyship,bezant,bezanty,bezel,bezetta,bezique,bezoar,bezzi,bezzle,bezzo,bhabar,bhakta,bhakti,bhalu,bhandar,bhang,bhangi,bhara,bharal,bhat,bhava,bheesty,bhikku,bhikshu,bhoosa,bhoy,bhungi,bhut,biabo,biacid,biacuru,bialate,biallyl,bianco,biarchy,bias,biaxal,biaxial,bib,bibasic,bibb,bibber,bibble,bibbler,bibbons,bibcock,bibi,bibiri,bibless,biblus,bice,biceps,bicetyl,bichir,bichord,bichy,bick,bicker,bickern,bicolor,bicone,biconic,bicorn,bicorne,bicron,bicycle,bicyclo,bid,bidar,bidarka,bidcock,bidder,bidding,biddy,bide,bident,bider,bidet,biding,bidri,biduous,bield,bieldy,bien,bienly,biennia,bier,bietle,bifara,bifer,biff,biffin,bifid,bifidly,bifilar,biflex,bifocal,bifoil,bifold,bifolia,biform,bifront,big,biga,bigamic,bigamy,bigener,bigeye,bigg,biggah,biggen,bigger,biggest,biggin,biggish,bigha,bighead,bighorn,bight,biglot,bigness,bignou,bigot,bigoted,bigotry,bigotty,bigroot,bigwig,bija,bijasal,bijou,bijoux,bike,bikh,bikini,bilabe,bilalo,bilbie,bilbo,bilby,bilch,bilcock,bildar,bilders,bile,bilge,bilgy,biliary,biliate,bilic,bilify,bilimbi,bilio,bilious,bilith,bilk,bilker,bill,billa,billbug,billed,biller,billet,billety,billian,billing,billion,billman,billon,billot,billow,billowy,billy,billyer,bilo,bilobe,bilobed,bilsh,bilsted,biltong,bimalar,bimanal,bimane,bimasty,bimbil,bimeby,bimodal,bin,binal,binary,binate,bind,binder,bindery,binding,bindle,bindlet,bindweb,bine,bing,binge,bingey,binghi,bingle,bingo,bingy,binh,bink,binman,binna,binning,binnite,bino,binocle,binodal,binode,binotic,binous,bint,binukau,biod,biodyne,biogen,biogeny,bioherm,biolith,biology,biome,bion,bionomy,biopsic,biopsy,bioral,biorgan,bios,biose,biosis,biota,biotaxy,biotic,biotics,biotin,biotite,biotome,biotomy,biotope,biotype,bioxide,bipack,biparty,biped,bipedal,biphase,biplane,bipod,bipolar,biprism,biprong,birch,birchen,bird,birddom,birdeen,birder,birdie,birding,birdlet,birdman,birdy,bireme,biretta,biri,biriba,birk,birken,birkie,birl,birle,birler,birlie,birlinn,birma,birn,birny,birr,birse,birsle,birsy,birth,birthy,bis,bisabol,bisalt,biscuit,bisect,bisexed,bisext,bishop,bismar,bismite,bismuth,bisnaga,bison,bispore,bisque,bissext,bisson,bistate,bister,bisti,bistort,bistro,bit,bitable,bitch,bite,biter,biti,biting,bitless,bito,bitolyl,bitt,bitted,bitten,bitter,bittern,bitters,bittie,bittock,bitty,bitume,bitumed,bitumen,bitwise,bityite,bitypic,biune,biunial,biunity,biurate,biurea,biuret,bivalve,bivinyl,bivious,bivocal,bivouac,biwa,bixin,biz,bizarre,bizet,bizonal,bizone,bizz,blab,blabber,black,blacken,blacker,blackey,blackie,blackit,blackly,blacky,blad,bladder,blade,bladed,blader,blading,bladish,blady,blae,blaff,blaflum,blah,blain,blair,blake,blame,blamed,blamer,blaming,blan,blanc,blanca,blanch,blanco,bland,blanda,blandly,blank,blanked,blanket,blankly,blanky,blanque,blare,blarney,blarnid,blarny,blart,blas,blase,blash,blashy,blast,blasted,blaster,blastid,blastie,blasty,blat,blatant,blate,blately,blather,blatta,blatter,blatti,blattid,blaubok,blaver,blaw,blawort,blay,blaze,blazer,blazing,blazon,blazy,bleach,bleak,bleakly,bleaky,blear,bleared,bleary,bleat,bleater,bleaty,bleb,blebby,bleck,blee,bleed,bleeder,bleery,bleeze,bleezy,blellum,blemish,blench,blend,blende,blended,blender,blendor,blenny,blent,bleo,blesbok,bless,blessed,blesser,blest,blet,blewits,blibe,blick,blickey,blight,blighty,blimp,blimy,blind,blinded,blinder,blindly,blink,blinked,blinker,blinks,blinky,blinter,blintze,blip,bliss,blissom,blister,blite,blithe,blithen,blither,blitter,blitz,blizz,blo,bloat,bloated,bloater,blob,blobbed,blobber,blobby,bloc,block,blocked,blocker,blocky,blodite,bloke,blolly,blonde,blood,blooded,bloody,blooey,bloom,bloomer,bloomy,bloop,blooper,blore,blosmy,blossom,blot,blotch,blotchy,blotter,blotto,blotty,blouse,bloused,blout,blow,blowen,blower,blowfly,blowgun,blowing,blown,blowoff,blowout,blowth,blowup,blowy,blowze,blowzed,blowzy,blub,blubber,blucher,blue,bluecap,bluecup,blueing,blueleg,bluely,bluer,blues,bluet,bluetop,bluey,bluff,bluffer,bluffly,bluffy,bluggy,bluing,bluish,bluism,blunder,blunge,blunger,blunk,blunker,blunks,blunnen,blunt,blunter,bluntie,bluntly,blup,blur,blurb,blurred,blurrer,blurry,blurt,blush,blusher,blushy,bluster,blype,bo,boa,boagane,boar,board,boarder,boardly,boardy,boarish,boast,boaster,boat,boatage,boater,boatful,boatie,boating,boatlip,boatly,boatman,bob,boba,bobac,bobbed,bobber,bobbery,bobbin,bobbing,bobbish,bobble,bobby,bobcat,bobcoat,bobeche,bobfly,bobo,bobotie,bobsled,bobstay,bobtail,bobwood,bocal,bocardo,bocca,boccale,boccaro,bocce,boce,bocher,bock,bocking,bocoy,bod,bodach,bode,bodeful,bodega,boden,boder,bodge,bodger,bodgery,bodhi,bodice,bodiced,bodied,bodier,bodikin,bodily,boding,bodkin,bodle,bodock,body,bog,boga,bogan,bogard,bogart,bogey,boggart,boggin,boggish,boggle,boggler,boggy,boghole,bogie,bogier,bogland,bogle,boglet,bogman,bogmire,bogo,bogong,bogtrot,bogue,bogum,bogus,bogway,bogwood,bogwort,bogy,bogydom,bogyism,bohawn,bohea,boho,bohor,bohunk,boid,boil,boiled,boiler,boilery,boiling,boily,boist,bojite,bojo,bokadam,bokard,bokark,boke,bokom,bola,bolar,bold,bolden,boldine,boldly,boldo,bole,boled,boleite,bolero,bolete,bolide,bolimba,bolis,bolivar,bolivia,bolk,boll,bollard,bolled,boller,bolling,bollock,bolly,bolo,boloman,boloney,bolson,bolster,bolt,boltage,boltant,boltel,bolter,bolti,bolting,bolus,bom,boma,bomb,bombard,bombast,bombed,bomber,bombo,bombola,bombous,bon,bonaci,bonagh,bonaght,bonair,bonally,bonang,bonanza,bonasus,bonbon,bonce,bond,bondage,bondar,bonded,bonder,bonding,bondman,bonduc,bone,boned,bonedog,bonelet,boner,boneset,bonfire,bong,bongo,boniata,bonify,bonito,bonk,bonnaz,bonnet,bonnily,bonny,bonsai,bonus,bonxie,bony,bonze,bonzer,bonzery,bonzian,boo,boob,boobery,boobily,boobook,booby,bood,boodie,boodle,boodler,boody,boof,booger,boohoo,boojum,book,bookdom,booked,booker,bookery,bookful,bookie,booking,bookish,bookism,booklet,bookman,booky,bool,booly,boolya,boom,boomage,boomah,boomdas,boomer,booming,boomlet,boomy,boon,boonk,boopis,boor,boorish,boort,boose,boost,booster,boosy,boot,bootboy,booted,bootee,booter,bootery,bootful,booth,boother,bootied,booting,bootleg,boots,booty,booze,boozed,boozer,boozily,boozy,bop,bopeep,boppist,bopyrid,bor,bora,borable,boracic,borage,borak,boral,borasca,borate,borax,bord,bordage,bordar,bordel,border,bordure,bore,boread,boreal,borean,boredom,boree,boreen,boregat,boreism,borele,borer,borg,borgh,borh,boric,boride,borine,boring,borish,borism,bority,borize,borlase,born,borne,borneol,borning,bornite,bornyl,boro,boron,boronic,borough,borrel,borrow,borsch,borscht,borsht,bort,bortsch,borty,bortz,borwort,boryl,borzoi,boscage,bosch,bose,boser,bosh,bosher,bosk,bosker,bosket,bosky,bosn,bosom,bosomed,bosomer,bosomy,boss,bossage,bossdom,bossed,bosser,bosset,bossing,bossism,bosslet,bossy,boston,bostryx,bosun,bot,bota,botanic,botany,botargo,botch,botched,botcher,botchka,botchy,bote,botella,boterol,botfly,both,bother,bothros,bothway,bothy,botonee,botong,bott,bottine,bottle,bottled,bottler,bottom,botulin,bouchal,bouche,boucher,boud,boudoir,bougar,bouge,bouget,bough,boughed,bought,boughy,bougie,bouk,boukit,boulder,boule,boultel,boulter,boun,bounce,bouncer,bound,bounded,bounden,bounder,boundly,bounty,bouquet,bourbon,bourd,bourder,bourdon,bourg,bourn,bourock,bourse,bouse,bouser,bousy,bout,boutade,bouto,bouw,bovate,bovid,bovine,bovoid,bow,bowable,bowback,bowbent,bowboy,bowed,bowel,boweled,bowels,bower,bowery,bowet,bowfin,bowhead,bowie,bowing,bowk,bowkail,bowker,bowknot,bowl,bowla,bowleg,bowler,bowless,bowlful,bowlike,bowline,bowling,bowls,bowly,bowman,bowpin,bowshot,bowwood,bowwort,bowwow,bowyer,boxbush,boxcar,boxen,boxer,boxfish,boxful,boxhaul,boxhead,boxing,boxlike,boxman,boxty,boxwood,boxwork,boxy,boy,boyang,boyar,boyard,boycott,boydom,boyer,boyhood,boyish,boyism,boyla,boylike,boyship,boza,bozal,bozo,bozze,bra,brab,brabant,brabble,braca,braccia,braccio,brace,braced,bracer,bracero,braces,brach,brachet,bracing,brack,bracken,bracker,bracket,bracky,bract,bractea,bracted,brad,bradawl,bradsot,brae,braeman,brag,braggat,bragger,bragget,bragite,braid,braided,braider,brail,brain,brainer,brainge,brains,brainy,braird,brairo,braise,brake,braker,brakie,braky,bramble,brambly,bran,branch,branchi,branchy,brand,branded,brander,brandy,brangle,branial,brank,brankie,branle,branner,branny,bransle,brant,brash,brashy,brasque,brass,brasse,brasser,brasset,brassic,brassie,brassy,brat,brattie,brattle,brauna,bravade,bravado,brave,bravely,braver,bravery,braving,bravish,bravo,bravura,braw,brawl,brawler,brawly,brawlys,brawn,brawned,brawner,brawny,braws,braxy,bray,brayer,brayera,braza,braze,brazen,brazer,brazera,brazier,brazil,breach,breachy,bread,breaden,breadth,breaghe,break,breakax,breaker,breakup,bream,breards,breast,breath,breathe,breathy,breba,breccia,brecham,breck,brecken,bred,brede,bredi,bree,breech,breed,breeder,breedy,breek,breeze,breezy,bregma,brehon,brei,brekkle,brelaw,breme,bremely,brent,brephic,bret,breth,brett,breva,breve,brevet,brevier,brevit,brevity,brew,brewage,brewer,brewery,brewing,brewis,brewst,brey,briar,bribe,bribee,briber,bribery,brichen,brick,brickel,bricken,brickle,brickly,bricky,bricole,bridal,bridale,bride,bridely,bridge,bridged,bridger,bridle,bridled,bridler,bridoon,brief,briefly,briefs,brier,briered,briery,brieve,brig,brigade,brigand,bright,brill,brills,brim,brimful,briming,brimmed,brimmer,brin,brine,briner,bring,bringal,bringer,brinish,brinjal,brink,briny,brioche,brique,brisk,brisken,brisket,briskly,brisque,briss,bristle,bristly,brisure,brit,brith,brither,britska,britten,brittle,brizz,broach,broad,broadax,broaden,broadly,brob,brocade,brocard,broch,brochan,broche,brocho,brock,brocked,brocket,brockle,brod,brodder,brog,brogan,brogger,broggle,brogue,broguer,broider,broigne,broil,broiler,brokage,broke,broken,broker,broking,brolga,broll,brolly,broma,bromal,bromate,brome,bromic,bromide,bromine,bromism,bromite,bromize,bromoil,bromol,bromous,bronc,bronchi,bronco,bronk,bronze,bronzed,bronzen,bronzer,bronzy,broo,brooch,brood,brooder,broody,brook,brooked,brookie,brooky,brool,broom,broomer,broomy,broon,broose,brose,brosot,brosy,brot,brotan,brotany,broth,brothel,brother,brothy,brough,brought,brow,browden,browed,browis,browman,brown,browner,brownie,brownly,browny,browse,browser,browst,bruang,brucia,brucina,brucine,brucite,bruckle,brugh,bruin,bruise,bruiser,bruit,bruiter,bruke,brulee,brulyie,brumal,brumby,brume,brumous,brunch,brunet,brunt,bruscus,brush,brushed,brusher,brushes,brushet,brushy,brusque,brustle,brut,brutage,brutal,brute,brutely,brutify,bruting,brutish,brutism,brutter,bruzz,bryonin,bryony,bu,bual,buaze,bub,buba,bubal,bubalis,bubble,bubbler,bubbly,bubby,bubinga,bubo,buboed,bubonic,bubukle,bucare,bucca,buccal,buccan,buccate,buccina,buccula,buchite,buchu,buck,bucked,buckeen,bucker,bucket,buckety,buckeye,buckie,bucking,buckish,buckle,buckled,buckler,bucklum,bucko,buckpot,buckra,buckram,bucksaw,bucky,bucolic,bucrane,bud,buda,buddage,budder,buddhi,budding,buddle,buddler,buddy,budge,budger,budget,budless,budlet,budlike,budmash,budtime,budwood,budworm,budzat,bufagin,buff,buffalo,buffed,buffer,buffet,buffing,buffle,buffont,buffoon,buffy,bufidin,bufo,bug,bugaboo,bugan,bugbane,bugbear,bugbite,bugdom,bugfish,bugger,buggery,buggy,bughead,bugle,bugled,bugler,buglet,bugloss,bugre,bugseed,bugweed,bugwort,buhl,buhr,build,builder,buildup,built,buirdly,buisson,buist,bukh,bukshi,bulak,bulb,bulbar,bulbed,bulbil,bulblet,bulbose,bulbous,bulbul,bulbule,bulby,bulchin,bulge,bulger,bulgy,bulimia,bulimic,bulimy,bulk,bulked,bulker,bulkily,bulkish,bulky,bull,bulla,bullace,bullan,bullary,bullate,bullbat,bulldog,buller,bullet,bullety,bulling,bullion,bullish,bullism,bullit,bullnut,bullock,bullous,bullule,bully,bulrush,bulse,bult,bulter,bultey,bultong,bultow,bulwand,bulwark,bum,bumbaze,bumbee,bumble,bumbler,bumbo,bumboat,bumicky,bummalo,bummed,bummer,bummie,bumming,bummler,bummock,bump,bumpee,bumper,bumpily,bumping,bumpkin,bumpy,bumtrap,bumwood,bun,buna,buncal,bunce,bunch,buncher,bunchy,bund,bunder,bundle,bundler,bundlet,bundook,bundy,bung,bungee,bungey,bungfu,bungle,bungler,bungo,bungy,bunion,bunk,bunker,bunkery,bunkie,bunko,bunkum,bunnell,bunny,bunt,buntal,bunted,bunter,bunting,bunton,bunty,bunya,bunyah,bunyip,buoy,buoyage,buoyant,bur,buran,burao,burbank,burbark,burble,burbler,burbly,burbot,burbush,burd,burden,burdie,burdock,burdon,bure,bureau,bureaux,burel,burele,buret,burette,burfish,burg,burgage,burgall,burgee,burgeon,burgess,burgh,burghal,burgher,burglar,burgle,burgoo,burgul,burgus,burhead,buri,burial,burian,buried,burier,burin,burion,buriti,burka,burke,burker,burl,burlap,burled,burler,burlet,burlily,burly,burmite,burn,burned,burner,burnet,burnie,burning,burnish,burnous,burnout,burnt,burnut,burny,buro,burp,burr,burrah,burred,burrel,burrer,burring,burrish,burrito,burro,burrow,burry,bursa,bursal,bursar,bursary,bursate,burse,burseed,burst,burster,burt,burton,burucha,burweed,bury,burying,bus,busby,buscarl,bush,bushed,bushel,busher,bushful,bushi,bushily,bushing,bushlet,bushwa,bushy,busied,busily,busine,busk,busked,busker,busket,buskin,buskle,busky,busman,buss,busser,bussock,bussu,bust,bustard,busted,bustee,buster,bustic,bustle,bustled,bustler,busy,busying,busyish,but,butanal,butane,butanol,butch,butcher,butein,butene,butenyl,butic,butine,butler,butlery,butment,butoxy,butoxyl,butt,butte,butter,buttery,butting,buttle,buttock,button,buttons,buttony,butty,butyl,butylic,butyne,butyr,butyral,butyric,butyrin,butyryl,buxerry,buxom,buxomly,buy,buyable,buyer,buzane,buzz,buzzard,buzzer,buzzies,buzzing,buzzle,buzzwig,buzzy,by,bycoket,bye,byee,byeman,byepath,byerite,bygane,bygo,bygoing,bygone,byhand,bylaw,byname,byon,byous,byously,bypass,bypast,bypath,byplay,byre,byreman,byrlaw,byrnie,byroad,byrrus,bysen,byspell,byssal,byssin,byssine,byssoid,byssus,byth,bytime,bywalk,byway,bywoner,byword,bywork,c,ca,caam,caama,caaming,caapeba,cab,caba,cabaan,caback,cabaho,cabal,cabala,cabalic,caban,cabana,cabaret,cabas,cabbage,cabbagy,cabber,cabble,cabbler,cabby,cabda,caber,cabezon,cabin,cabinet,cabio,cable,cabled,cabler,cablet,cabling,cabman,cabob,cabocle,cabook,caboose,cabot,cabree,cabrit,cabuya,cacam,cacao,cachaza,cache,cachet,cachexy,cachou,cachrys,cacique,cack,cackle,cackler,cacodyl,cacoepy,caconym,cacoon,cacti,cactoid,cacur,cad,cadamba,cadaver,cadbait,cadbit,cadbote,caddice,caddie,caddis,caddish,caddle,caddow,caddy,cade,cadelle,cadence,cadency,cadent,cadenza,cader,caderas,cadet,cadetcy,cadette,cadew,cadge,cadger,cadgily,cadgy,cadi,cadism,cadjan,cadlock,cadmia,cadmic,cadmide,cadmium,cados,cadrans,cadre,cadua,caduac,caduca,cadus,cadweed,caeca,caecal,caecum,caeoma,caesura,cafeneh,cafenet,caffa,caffeic,caffeol,caffiso,caffle,caffoy,cafh,cafiz,caftan,cag,cage,caged,cageful,cageman,cager,cagey,caggy,cagily,cagit,cagmag,cahiz,cahoot,cahot,cahow,caickle,caid,caiman,caimito,cain,caique,caird,cairn,cairned,cairny,caisson,caitiff,cajeput,cajole,cajoler,cajuela,cajun,cajuput,cake,cakebox,caker,cakette,cakey,caky,cal,calaba,calaber,calade,calais,calalu,calamus,calash,calcar,calced,calcic,calcify,calcine,calcite,calcium,calculi,calden,caldron,calean,calends,calepin,calf,calfish,caliber,calibre,calices,calicle,calico,calid,caliga,caligo,calinda,calinut,calipee,caliper,caliph,caliver,calix,calk,calkage,calker,calkin,calking,call,callant,callboy,caller,callet,calli,callid,calling,callo,callose,callous,callow,callus,calm,calmant,calmer,calmly,calmy,calomba,calomel,calool,calor,caloric,calorie,caloris,calotte,caloyer,calp,calpac,calpack,caltrap,caltrop,calumba,calumet,calumny,calve,calved,calver,calves,calvish,calvity,calvous,calx,calyces,calycle,calymma,calypso,calyx,cam,camaca,camagon,camail,caman,camansi,camara,camass,camata,camb,cambaye,camber,cambial,cambism,cambist,cambium,cambrel,cambuca,came,cameist,camel,camelry,cameo,camera,cameral,camilla,camion,camise,camisia,camlet,cammed,cammock,camoodi,camp,campana,campane,camper,campho,camphol,camphor,campion,cample,campo,campody,campoo,campus,camus,camused,camwood,can,canaba,canada,canadol,canal,canamo,canape,canard,canari,canarin,canary,canasta,canaut,cancan,cancel,cancer,canch,cancrum,cand,candela,candent,candid,candied,candier,candify,candiru,candle,candler,candock,candor,candroy,candy,candys,cane,canel,canella,canelo,caner,canette,canful,cangan,cangia,cangle,cangler,cangue,canhoop,canid,canille,caninal,canine,caninus,canions,canjac,cank,canker,cankery,canman,canna,cannach,canned,cannel,canner,cannery,cannet,cannily,canning,cannon,cannot,cannula,canny,canoe,canon,canonic,canonry,canopic,canopy,canroy,canso,cant,cantala,cantar,cantara,cantaro,cantata,canted,canteen,canter,canthal,canthus,cantic,cantico,cantily,cantina,canting,cantion,cantish,cantle,cantlet,canto,canton,cantoon,cantor,cantred,cantref,cantrip,cantus,canty,canun,canvas,canvass,cany,canyon,canzon,caoba,cap,capable,capably,capanna,capanne,capax,capcase,cape,caped,capel,capelet,capelin,caper,caperer,capes,capful,caph,caphar,caphite,capias,capicha,capital,capitan,capivi,capkin,capless,caplin,capman,capmint,capomo,capon,caporal,capot,capote,capped,capper,cappie,capping,capple,cappy,caprate,capreol,capric,caprice,caprid,caprin,caprine,caproic,caproin,caprone,caproyl,capryl,capsa,capsid,capsize,capstan,capsula,capsule,captain,caption,captive,captor,capture,capuche,capulet,capulin,car,carabao,carabid,carabin,carabus,caracal,caracol,caract,carafe,caraibe,caraipi,caramba,caramel,caranda,carane,caranna,carapax,carapo,carat,caratch,caravan,caravel,caraway,carbarn,carbeen,carbene,carbide,carbine,carbo,carbon,carbona,carbora,carboxy,carboy,carbro,carbure,carbyl,carcake,carcass,carceag,carcel,carcoon,card,cardecu,carded,cardel,carder,cardia,cardiac,cardial,cardin,carding,cardo,cardol,cardon,cardona,cardoon,care,careen,career,careful,carene,carer,caress,carest,caret,carfare,carfax,carful,carga,cargo,carhop,cariama,caribou,carid,caries,carina,carinal,cariole,carious,cark,carking,carkled,carl,carless,carlet,carlie,carlin,carline,carling,carlish,carload,carlot,carls,carman,carmele,carmine,carmot,carnage,carnal,carnate,carneol,carney,carnic,carnify,carnose,carnous,caroa,carob,caroba,caroche,carol,caroler,caroli,carolin,carolus,carom,carone,caronic,caroome,caroon,carotic,carotid,carotin,carouse,carp,carpal,carpale,carpel,carpent,carper,carpet,carpid,carping,carpium,carport,carpos,carpus,carr,carrack,carrel,carrick,carried,carrier,carrion,carrizo,carroch,carrot,carroty,carrow,carry,carse,carshop,carsick,cart,cartage,carte,cartel,carter,cartful,cartman,carton,cartoon,cartway,carty,carua,carucal,carval,carve,carvel,carven,carvene,carver,carving,carvol,carvone,carvyl,caryl,casaba,casabe,casal,casalty,casate,casaun,casava,casave,casavi,casbah,cascade,cascado,cascara,casco,cascol,case,casease,caseate,casebox,cased,caseful,casefy,caseic,casein,caseose,caseous,caser,casern,caseum,cash,casha,cashaw,cashbox,cashboy,cashel,cashew,cashier,casing,casino,casiri,cask,casket,casking,casque,casqued,casquet,cass,cassady,casse,cassena,cassia,cassie,cassina,cassine,cassino,cassis,cassock,casson,cassoon,cast,caste,caster,castice,casting,castle,castled,castlet,castock,castoff,castor,castory,castra,castral,castrum,castuli,casual,casuary,casuist,casula,cat,catalpa,catan,catapan,cataria,catarrh,catasta,catbird,catboat,catcall,catch,catcher,catchup,catchy,catclaw,catdom,cate,catechu,catella,catena,catenae,cater,cateran,caterer,caterva,cateye,catface,catfall,catfish,catfoot,catgut,cathead,cathect,catheti,cathin,cathine,cathion,cathode,cathole,cathood,cathop,cathro,cation,cativo,catjang,catkin,catlap,catlike,catlin,catling,catmint,catnip,catpipe,catskin,catstep,catsup,cattabu,cattail,cattalo,cattery,cattily,catting,cattish,cattle,catty,catvine,catwalk,catwise,catwood,catwort,caubeen,cauboge,cauch,caucho,caucus,cauda,caudad,caudae,caudal,caudata,caudate,caudex,caudle,caught,cauk,caul,cauld,caules,cauline,caulis,caulome,caulote,caum,cauma,caunch,caup,caupo,caurale,causal,causate,cause,causer,causey,causing,causse,causson,caustic,cautel,cauter,cautery,caution,cautivo,cava,cavae,caval,cavalla,cavalry,cavate,cave,caveat,cavel,cavelet,cavern,cavetto,caviar,cavie,cavil,caviler,caving,cavings,cavish,cavity,caviya,cavort,cavus,cavy,caw,cawk,cawky,cawney,cawquaw,caxiri,caxon,cay,cayenne,cayman,caza,cazimi,ce,cearin,cease,ceasmic,cebell,cebian,cebid,cebil,cebine,ceboid,cebur,cecils,cecity,cedar,cedared,cedarn,cedary,cede,cedent,ceder,cedilla,cedrat,cedrate,cedre,cedrene,cedrin,cedrine,cedrium,cedrol,cedron,cedry,cedula,cee,ceibo,ceil,ceile,ceiler,ceilidh,ceiling,celadon,celemin,celery,celesta,celeste,celiac,celite,cell,cella,cellae,cellar,celled,cellist,cello,celloid,cellose,cellule,celsian,celt,celtium,celtuce,cembalo,cement,cenacle,cendre,cenoby,cense,censer,censive,censor,censual,censure,census,cent,centage,cental,centare,centaur,centavo,centena,center,centiar,centile,centime,centimo,centner,cento,centrad,central,centric,centrum,centry,centum,century,ceorl,cep,cepa,cepe,cephid,ceps,ceptor,cequi,cerago,ceral,ceramal,ceramic,ceras,cerasin,cerata,cerate,cerated,cercal,cerci,cercus,cere,cereal,cerebra,cered,cereous,cerer,ceresin,cerevis,ceria,ceric,ceride,cerillo,ceriman,cerin,cerine,ceriops,cerise,cerite,cerium,cermet,cern,cero,ceroma,cerote,cerotic,cerotin,cerous,cerrero,cerrial,cerris,certain,certie,certify,certis,certy,cerule,cerumen,ceruse,cervid,cervine,cervix,cervoid,ceryl,cesious,cesium,cess,cesser,cession,cessor,cesspit,cest,cestode,cestoid,cestrum,cestus,cetane,cetene,ceti,cetic,cetin,cetyl,cetylic,cevine,cha,chaa,chab,chabot,chabouk,chabuk,chacate,chack,chacker,chackle,chacma,chacona,chacte,chad,chaeta,chafe,chafer,chafery,chaff,chaffer,chaffy,chaft,chafted,chagan,chagrin,chaguar,chagul,chahar,chai,chain,chained,chainer,chainon,chair,chairer,chais,chaise,chaitya,chaja,chaka,chakar,chakari,chakazi,chakdar,chakobu,chakra,chakram,chaksi,chal,chalaco,chalana,chalaza,chalaze,chalcid,chalcon,chalcus,chalder,chalet,chalice,chalk,chalker,chalky,challah,challie,challis,chalmer,chalon,chalone,chalque,chalta,chalutz,cham,chamal,chamar,chamber,chambul,chamfer,chamiso,chamite,chamma,chamois,champ,champac,champer,champy,chance,chancel,chancer,chanche,chanco,chancre,chancy,chandam,chandi,chandoo,chandu,chandul,chang,changa,changar,change,changer,chank,channel,channer,chanson,chanst,chant,chanter,chantey,chantry,chao,chaos,chaotic,chap,chapah,chape,chapeau,chaped,chapel,chapin,chaplet,chapman,chapped,chapper,chappie,chappin,chappow,chappy,chaps,chapt,chapter,char,charac,charade,charas,charbon,chard,chare,charer,charet,charge,chargee,charger,charier,charily,chariot,charism,charity,chark,charka,charkha,charm,charmel,charmer,charnel,charpit,charpoy,charqui,charr,charry,chart,charter,charuk,chary,chase,chaser,chasing,chasm,chasma,chasmal,chasmed,chasmic,chasmy,chasse,chassis,chaste,chasten,chat,chataka,chateau,chati,chatta,chattel,chatter,chatty,chauk,chaus,chaute,chauth,chavish,chaw,chawan,chawer,chawk,chawl,chay,chaya,chayote,chazan,che,cheap,cheapen,cheaply,cheat,cheatee,cheater,chebec,chebel,chebog,chebule,check,checked,checker,checkup,checky,cheder,chee,cheecha,cheek,cheeker,cheeky,cheep,cheeper,cheepy,cheer,cheered,cheerer,cheerio,cheerly,cheery,cheese,cheeser,cheesy,cheet,cheetah,cheeter,cheetie,chef,chegoe,chegre,cheir,chekan,cheke,cheki,chekmak,chela,chelate,chelem,chelide,chello,chelone,chelp,chelys,chemic,chemis,chemise,chemism,chemist,chena,chende,cheng,chenica,cheque,cherem,cherish,cheroot,cherry,chert,cherte,cherty,cherub,chervil,cheson,chess,chessel,chesser,chest,chester,chesty,cheth,chettik,chetty,chevage,cheval,cheve,cheven,chevin,chevise,chevon,chevron,chevy,chew,chewer,chewink,chewy,cheyney,chhatri,chi,chia,chiasm,chiasma,chiaus,chibouk,chibrit,chic,chicane,chichi,chick,chicken,chicker,chicky,chicle,chico,chicory,chicot,chicote,chid,chidden,chide,chider,chiding,chidra,chief,chiefly,chield,chien,chiffer,chiffon,chiggak,chigger,chignon,chigoe,chih,chihfu,chikara,chil,child,childe,childed,childly,chile,chili,chiliad,chill,chilla,chilled,chiller,chillo,chillum,chilly,chiloma,chilver,chimble,chime,chimer,chimera,chimney,chin,china,chinar,chinch,chincha,chinche,chine,chined,ching,chingma,chinik,chinin,chink,chinker,chinkle,chinks,chinky,chinnam,chinned,chinny,chino,chinoa,chinol,chinse,chint,chintz,chip,chiplet,chipped,chipper,chippy,chips,chiral,chirata,chiripa,chirk,chirm,chiro,chirp,chirper,chirpy,chirr,chirrup,chisel,chit,chitak,chital,chitin,chiton,chitose,chitra,chitter,chitty,chive,chivey,chkalik,chlamyd,chlamys,chlor,chloral,chlore,chloric,chloryl,cho,choana,choate,choaty,chob,choca,chocard,chocho,chock,chocker,choel,choenix,choffer,choga,chogak,chogset,choice,choicy,choil,choiler,choir,chokage,choke,choker,choking,chokra,choky,chol,chola,cholane,cholate,chold,choleic,choler,cholera,choli,cholic,choline,cholla,choller,cholum,chomp,chondre,chonta,choop,choose,chooser,choosy,chop,chopa,chopin,chopine,chopped,chopper,choppy,choragy,choral,chord,chorda,chordal,chorded,chore,chorea,choreal,choree,choregy,choreic,choreus,chorial,choric,chorine,chorion,chorism,chorist,chorogi,choroid,chorook,chort,chorten,chortle,chorus,choryos,chose,chosen,chott,chough,chouka,choup,chous,chouse,chouser,chow,chowder,chowk,chowry,choya,chria,chrism,chrisma,chrisom,chroma,chrome,chromic,chromid,chromo,chromy,chromyl,chronal,chronic,chrotta,chrysal,chrysid,chrysin,chub,chubbed,chubby,chuck,chucker,chuckle,chucky,chuddar,chufa,chuff,chuffy,chug,chugger,chuhra,chukar,chukker,chukor,chulan,chullpa,chum,chummer,chummy,chump,chumpy,chun,chunari,chunga,chunk,chunky,chunner,chunnia,chunter,chupak,chupon,church,churchy,churel,churl,churled,churly,churm,churn,churr,churrus,chut,chute,chuter,chutney,chyack,chyak,chyle,chylify,chyloid,chylous,chymase,chyme,chymia,chymic,chymify,chymous,chypre,chytra,chytrid,cibol,cibory,ciboule,cicad,cicada,cicadid,cicala,cicely,cicer,cichlid,cidarid,cidaris,cider,cig,cigala,cigar,cigua,cilia,ciliary,ciliate,cilice,cilium,cimbia,cimelia,cimex,cimicid,cimline,cinch,cincher,cinclis,cinct,cinder,cindery,cine,cinel,cinema,cinene,cineole,cinerea,cingle,cinnyl,cinque,cinter,cinuran,cion,cipher,cipo,cipolin,cippus,circa,circle,circled,circler,circlet,circuit,circus,circusy,cirque,cirrate,cirri,cirrose,cirrous,cirrus,cirsoid,ciruela,cisco,cise,cisele,cissing,cissoid,cist,cista,cistae,cisted,cistern,cistic,cit,citable,citadel,citator,cite,citee,citer,citess,cithara,cither,citied,citify,citizen,citole,citral,citrate,citrean,citrene,citric,citril,citrin,citrine,citron,citrous,citrus,cittern,citua,city,citydom,cityful,cityish,cive,civet,civic,civics,civil,civilly,civism,civvy,cixiid,clabber,clachan,clack,clacker,clacket,clad,cladine,cladode,cladose,cladus,clag,claggum,claggy,claim,claimer,clairce,claith,claiver,clam,clamant,clamb,clamber,clame,clamer,clammed,clammer,clammy,clamor,clamp,clamper,clan,clang,clangor,clank,clanned,clap,clapnet,clapped,clapper,clapt,claque,claquer,clarain,claret,clarify,clarin,clarion,clarity,clark,claro,clart,clarty,clary,clash,clasher,clashy,clasp,clasper,claspt,class,classed,classer,classes,classic,classis,classy,clastic,clat,clatch,clatter,clatty,claught,clausal,clause,claut,clava,claval,clavate,clave,clavel,claver,clavial,clavier,claviol,clavis,clavola,clavus,clavy,claw,clawed,clawer,clawk,clawker,clay,clayen,clayer,clayey,clayish,clayman,claypan,cleach,clead,cleaded,cleam,cleamer,clean,cleaner,cleanly,cleanse,cleanup,clear,clearer,clearly,cleat,cleave,cleaver,cleche,cleck,cled,cledge,cledgy,clee,cleek,cleeked,cleeky,clef,cleft,clefted,cleg,clem,clement,clench,cleoid,clep,clergy,cleric,clerid,clerisy,clerk,clerkly,cleruch,cletch,cleuch,cleve,clever,clevis,clew,cliack,cliche,click,clicker,clicket,clicky,cliency,client,cliff,cliffed,cliffy,clift,clifty,clima,climata,climate,climath,climax,climb,climber,clime,clinal,clinch,cline,cling,clinger,clingy,clinia,clinic,clinium,clink,clinker,clinkum,clinoid,clint,clinty,clip,clipei,clipeus,clipped,clipper,clips,clipse,clipt,clique,cliquy,clisere,clit,clitch,clite,clites,clithe,clitia,clition,clitter,clival,clive,clivers,clivis,clivus,cloaca,cloacal,cloak,cloaked,cloam,cloamen,cloamer,clobber,clochan,cloche,clocher,clock,clocked,clocker,clod,clodder,cloddy,clodlet,cloff,clog,clogger,cloggy,cloghad,clogwyn,cloit,clomb,clomben,clonal,clone,clonic,clonism,clonus,cloof,cloop,cloot,clootie,clop,close,closed,closely,closen,closer,closet,closh,closish,closter,closure,clot,clotbur,clote,cloth,clothe,clothes,clothy,clotter,clotty,cloture,cloud,clouded,cloudy,clough,clour,clout,clouted,clouter,clouty,clove,cloven,clovene,clover,clovery,clow,clown,cloy,cloyer,cloying,club,clubbed,clubber,clubby,clubdom,clubman,cluck,clue,cluff,clump,clumpy,clumse,clumsy,clunch,clung,clunk,clupeid,cluster,clutch,cluther,clutter,cly,clyer,clype,clypeal,clypeus,clysis,clysma,clysmic,clyster,cnemial,cnemis,cnicin,cnida,coabode,coach,coachee,coacher,coachy,coact,coactor,coadapt,coadmit,coadore,coaged,coagent,coagula,coaid,coaita,coak,coakum,coal,coalbag,coalbin,coalbox,coaler,coalify,coalize,coalpit,coaly,coaming,coannex,coapt,coarb,coarse,coarsen,coast,coastal,coaster,coat,coated,coatee,coater,coati,coatie,coating,coax,coaxal,coaxer,coaxial,coaxing,coaxy,cob,cobaea,cobalt,cobang,cobbed,cobber,cobbing,cobble,cobbler,cobbly,cobbra,cobby,cobcab,cobego,cobhead,cobia,cobiron,coble,cobless,cobloaf,cobnut,cobola,cobourg,cobra,coburg,cobweb,cobwork,coca,cocaine,cocash,cocause,coccal,cocci,coccid,cocco,coccoid,coccous,coccule,coccus,coccyx,cochal,cochief,cochlea,cock,cockade,cockal,cocked,cocker,cocket,cockeye,cockily,cocking,cockish,cockle,cockled,cockler,cocklet,cockly,cockney,cockpit,cockshy,cockup,cocky,coco,cocoa,cocoach,coconut,cocoon,cocotte,coctile,coction,cocuisa,cocullo,cocuyo,cod,coda,codbank,codder,codding,coddle,coddler,code,codeine,coder,codex,codfish,codger,codhead,codical,codices,codicil,codify,codilla,codille,codist,codling,codman,codo,codol,codon,codworm,coe,coecal,coecum,coed,coelar,coelder,coelect,coelho,coelia,coeliac,coelian,coelin,coeline,coelom,coeloma,coempt,coenact,coenjoy,coenobe,coequal,coerce,coercer,coetus,coeval,coexert,coexist,coff,coffee,coffer,coffin,coffle,coffret,coft,cog,cogence,cogency,cogener,cogent,cogged,cogger,coggie,cogging,coggle,coggly,coghle,cogman,cognac,cognate,cognize,cogon,cogonal,cograil,cogroad,cogue,cogway,cogwood,cohabit,coheir,cohere,coherer,cohibit,coho,cohoba,cohol,cohort,cohosh,cohune,coif,coifed,coign,coigue,coil,coiled,coiler,coiling,coin,coinage,coiner,coinfer,coining,cointer,coiny,coir,coital,coition,coiture,coitus,cojudge,cojuror,coke,cokeman,coker,cokery,coking,coky,col,cola,colane,colarin,colate,colauxe,colback,cold,colder,coldish,coldly,cole,coletit,coleur,coli,colibri,colic,colical,colicky,colima,colin,coling,colitic,colitis,colk,coll,collage,collar,collard,collare,collate,collaud,collect,colleen,college,collery,collet,colley,collide,collie,collied,collier,collin,colline,colling,collins,collock,colloid,collop,collude,collum,colly,collyba,colmar,colobin,colon,colonel,colonic,colony,color,colored,colorer,colorin,colors,colory,coloss,colossi,colove,colp,colpeo,colport,colpus,colt,colter,coltish,colugo,columbo,column,colunar,colure,coly,colyone,colytic,colyum,colza,coma,comaker,comal,comamie,comanic,comart,comate,comb,combat,combed,comber,combine,combing,comble,comboy,combure,combust,comby,come,comedic,comedo,comedy,comely,comenic,comer,comes,comet,cometic,comfit,comfort,comfrey,comfy,comic,comical,comicry,coming,comino,comism,comital,comitia,comity,comma,command,commend,comment,commie,commit,commix,commixt,commode,common,commons,commot,commove,communa,commune,commute,comoid,comose,comourn,comous,compact,company,compare,compart,compass,compear,compeer,compel,compend,compete,compile,complex,complin,complot,comply,compo,compoer,compole,compone,compony,comport,compos,compose,compost,compote,compreg,compter,compute,comrade,con,conacre,conal,conamed,conatus,concave,conceal,concede,conceit,concent,concept,concern,concert,conch,concha,conchal,conche,conched,concher,conchy,concile,concise,concoct,concord,concupy,concur,concuss,cond,condemn,condign,condite,condole,condone,condor,conduce,conduct,conduit,condyle,cone,coned,coneen,coneine,conelet,coner,cones,confab,confact,confect,confess,confide,confine,confirm,confix,conflow,conflux,conform,confuse,confute,conga,congeal,congee,conger,congest,congius,congou,conic,conical,conicle,conics,conidia,conifer,conima,conin,conine,conject,conjoin,conjure,conjury,conk,conker,conkers,conky,conn,connach,connate,connect,conner,connex,conning,connive,connote,conoid,conopid,conquer,conred,consent,consign,consist,consol,console,consort,conspue,constat,consul,consult,consume,consute,contact,contain,conte,contect,contemn,content,conter,contest,context,contise,conto,contort,contour,contra,control,contund,contuse,conure,conus,conusee,conusor,conuzee,conuzor,convect,convene,convent,convert,conveth,convex,convey,convict,convive,convoke,convoy,cony,coo,cooba,coodle,cooee,cooer,coof,cooing,cooja,cook,cookdom,cookee,cooker,cookery,cooking,cookish,cookout,cooky,cool,coolant,coolen,cooler,coolie,cooling,coolish,coolly,coolth,coolung,cooly,coom,coomb,coomy,coon,cooncan,coonily,coontie,coony,coop,cooper,coopery,cooree,coorie,cooser,coost,coot,cooter,coothay,cootie,cop,copa,copable,copaene,copaiba,copaiye,copal,copalm,copart,coparty,cope,copei,copeman,copen,copepod,coper,coperta,copied,copier,copilot,coping,copious,copis,copist,copita,copolar,copped,copper,coppery,coppet,coppice,coppin,copping,copple,coppled,coppy,copr,copra,coprose,copse,copsing,copsy,copter,copula,copular,copus,copy,copycat,copyism,copyist,copyman,coque,coquet,coquina,coquita,coquito,cor,cora,corach,coracle,corah,coraise,coral,coraled,coram,coranto,corban,corbeau,corbeil,corbel,corbie,corbula,corcass,corcir,cord,cordage,cordant,cordate,cordax,corded,cordel,corder,cordial,cordies,cording,cordite,cordoba,cordon,cordy,cordyl,core,corebel,cored,coreid,coreign,corella,corer,corf,corge,corgi,corial,coriin,coring,corinne,corium,cork,corkage,corke,corked,corker,corking,corkish,corkite,corky,corm,cormel,cormoid,cormous,cormus,corn,cornage,cornbin,corncob,cornea,corneal,cornein,cornel,corner,cornet,corneum,cornic,cornice,cornin,corning,cornu,cornual,cornule,cornute,cornuto,corny,coroa,corody,corol,corolla,corona,coronad,coronae,coronal,coroner,coronet,corozo,corp,corpora,corps,corpse,corpus,corrade,corral,correal,correct,corrie,corrige,corrode,corrupt,corsac,corsage,corsair,corse,corset,corsie,corsite,corta,cortege,cortex,cortez,cortin,cortina,coruco,coruler,corupay,corver,corvina,corvine,corvoid,coryl,corylin,corymb,coryza,cos,cosaque,coscet,coseat,cosec,cosech,coseism,coset,cosh,cosher,coshery,cosily,cosine,cosmic,cosmism,cosmist,cosmos,coss,cossas,cosse,cosset,cossid,cost,costa,costal,costar,costard,costate,costean,coster,costing,costive,costly,costrel,costula,costume,cosy,cot,cotch,cote,coteful,coterie,coth,cothe,cothish,cothon,cothurn,cothy,cotidal,cotise,cotland,cotman,coto,cotoin,cotoro,cotrine,cotset,cotta,cottage,cotte,cotted,cotter,cottid,cottier,cottoid,cotton,cottony,cotty,cotuit,cotula,cotutor,cotwin,cotwist,cotyla,cotylar,cotype,couac,coucal,couch,couched,couchee,coucher,couchy,coude,coudee,coue,cougar,cough,cougher,cougnar,coul,could,coulee,coulomb,coulure,couma,coumara,council,counite,counsel,count,counter,countor,country,county,coup,coupage,coupe,couped,coupee,couper,couple,coupled,coupler,couplet,coupon,coupure,courage,courant,courap,courb,courge,courida,courier,couril,courlan,course,coursed,courser,court,courter,courtin,courtly,cousin,cousiny,coutel,couter,couth,couthie,coutil,couvade,couxia,covado,cove,coved,covent,cover,covered,coverer,covert,covet,coveter,covey,covid,covin,coving,covisit,covite,cow,cowal,coward,cowardy,cowbane,cowbell,cowbind,cowbird,cowboy,cowdie,coween,cower,cowfish,cowgate,cowgram,cowhage,cowheel,cowherb,cowherd,cowhide,cowhorn,cowish,cowitch,cowl,cowle,cowled,cowlick,cowlike,cowling,cowman,cowpath,cowpea,cowpen,cowpock,cowpox,cowrie,cowroid,cowshed,cowskin,cowslip,cowtail,cowweed,cowy,cowyard,cox,coxa,coxal,coxcomb,coxite,coxitis,coxy,coy,coyan,coydog,coyish,coyly,coyness,coynye,coyo,coyol,coyote,coypu,coyure,coz,coze,cozen,cozener,cozier,cozily,cozy,crab,crabbed,crabber,crabby,craber,crablet,crabman,crack,cracked,cracker,crackle,crackly,cracky,craddy,cradge,cradle,cradler,craft,crafty,crag,craggan,cragged,craggy,craichy,crain,craisey,craizey,crajuru,crake,crakow,cram,crambe,crambid,cramble,crambly,crambo,crammer,cramp,cramped,cramper,crampet,crampon,crampy,cran,cranage,crance,crane,craner,craney,crania,craniad,cranial,cranian,cranic,cranium,crank,cranked,cranker,crankle,crankly,crankum,cranky,crannog,cranny,crants,crap,crapaud,crape,crappie,crappin,crapple,crappo,craps,crapy,crare,crash,crasher,crasis,crass,crassly,cratch,crate,crater,craunch,cravat,crave,craven,craver,craving,cravo,craw,crawdad,crawful,crawl,crawler,crawley,crawly,crawm,crawtae,crayer,crayon,craze,crazed,crazily,crazy,crea,creagh,creaght,creak,creaker,creaky,cream,creamer,creamy,creance,creant,crease,creaser,creasy,creat,create,creatic,creator,creche,credent,credit,cree,creed,creedal,creeded,creek,creeker,creeky,creel,creeler,creem,creen,creep,creeper,creepie,creepy,creese,creesh,creeshy,cremate,cremone,cremor,cremule,crena,crenate,crenel,crenele,crenic,crenula,creole,creosol,crepe,crepine,crepon,crept,crepy,cresol,cresoxy,cress,cressed,cresset,cresson,cressy,crest,crested,cresyl,creta,cretic,cretify,cretin,cretion,crevice,crew,crewel,crewer,crewman,crib,cribber,cribble,cribo,cribral,cric,crick,cricket,crickey,crickle,cricoid,cried,crier,criey,crig,crile,crime,crimine,crimp,crimper,crimple,crimpy,crimson,crin,crinal,crine,crined,crinet,cringe,cringer,cringle,crinite,crink,crinkle,crinkly,crinoid,crinose,crinula,cripes,cripple,cripply,crises,crisic,crisis,crisp,crisped,crisper,crisply,crispy,criss,crissal,crissum,crista,critch,crith,critic,crizzle,cro,croak,croaker,croaky,croc,crocard,croceic,crocein,croche,crochet,croci,crocin,crock,crocker,crocket,crocky,crocus,croft,crofter,crome,crone,cronet,cronish,cronk,crony,crood,croodle,crook,crooked,crooken,crookle,crool,croon,crooner,crop,cropman,croppa,cropper,croppie,croppy,croquet,crore,crosa,crosier,crosnes,cross,crosse,crossed,crosser,crossly,crotal,crotalo,crotch,crotchy,crotin,crottle,crotyl,crouch,croup,croupal,croupe,croupy,crouse,crout,croute,crouton,crow,crowbar,crowd,crowded,crowder,crowdy,crower,crowhop,crowing,crowl,crown,crowned,crowner,crowtoe,croy,croyden,croydon,croze,crozer,crozzle,crozzly,crubeen,cruce,cruces,cruche,crucial,crucian,crucify,crucily,cruck,crude,crudely,crudity,cruel,cruelly,cruels,cruelty,cruent,cruet,cruety,cruise,cruiser,cruive,cruller,crum,crumb,crumber,crumble,crumbly,crumby,crumen,crumlet,crummie,crummy,crump,crumper,crumpet,crumple,crumply,crumpy,crunch,crunchy,crunk,crunkle,crunode,crunt,cruor,crupper,crural,crureus,crus,crusade,crusado,cruse,crush,crushed,crusher,crusie,crusily,crust,crusta,crustal,crusted,cruster,crusty,crutch,cruth,crutter,crux,cry,cryable,crybaby,crying,cryogen,cryosel,crypt,crypta,cryptal,crypted,cryptic,crystal,crystic,csardas,ctene,ctenoid,cuadra,cuarta,cub,cubage,cubbing,cubbish,cubby,cubdom,cube,cubeb,cubelet,cuber,cubhood,cubi,cubic,cubica,cubical,cubicle,cubicly,cubism,cubist,cubit,cubital,cubited,cubito,cubitus,cuboid,cuck,cuckold,cuckoo,cuculla,cud,cudava,cudbear,cudden,cuddle,cuddly,cuddy,cudgel,cudweed,cue,cueball,cueca,cueist,cueman,cuerda,cuesta,cuff,cuffer,cuffin,cuffy,cuinage,cuir,cuirass,cuisine,cuisse,cuissen,cuisten,cuke,culbut,culebra,culet,culeus,culgee,culicid,cull,culla,cullage,culler,cullet,culling,cullion,cullis,cully,culm,culmen,culmy,culotte,culpa,culpose,culprit,cult,cultch,cultic,cultish,cultism,cultist,cultual,culture,cultus,culver,culvert,cum,cumal,cumay,cumbent,cumber,cumbha,cumbly,cumbre,cumbu,cumene,cumenyl,cumhal,cumic,cumidin,cumin,cuminal,cuminic,cuminol,cuminyl,cummer,cummin,cumol,cump,cumshaw,cumular,cumuli,cumulus,cumyl,cuneal,cuneate,cunette,cuneus,cunila,cunjah,cunjer,cunner,cunning,cunye,cuorin,cup,cupay,cupcake,cupel,cupeler,cupful,cuphead,cupidon,cupless,cupman,cupmate,cupola,cupolar,cupped,cupper,cupping,cuppy,cuprene,cupric,cupride,cuprite,cuproid,cuprose,cuprous,cuprum,cupseed,cupula,cupule,cur,curable,curably,curacao,curacy,curare,curate,curatel,curatic,curator,curb,curber,curbing,curby,curcas,curch,curd,curdle,curdler,curdly,curdy,cure,curer,curette,curfew,curial,curiate,curie,curin,curine,curing,curio,curiosa,curioso,curious,curite,curium,curl,curled,curler,curlew,curlike,curlily,curling,curly,curn,curney,curnock,curple,curr,currach,currack,curragh,currant,current,curried,currier,currish,curry,cursal,curse,cursed,curser,curship,cursive,cursor,cursory,curst,curstly,cursus,curt,curtail,curtain,curtal,curtate,curtesy,curtly,curtsy,curua,curuba,curule,cururo,curvant,curvate,curve,curved,curver,curvet,curvity,curvous,curvy,cuscus,cusec,cush,cushag,cushat,cushaw,cushion,cushy,cusie,cusk,cusp,cuspal,cuspate,cusped,cuspid,cuspule,cuss,cussed,cusser,cusso,custard,custody,custom,customs,cut,cutaway,cutback,cutch,cutcher,cute,cutely,cutheal,cuticle,cutie,cutin,cutis,cutitis,cutlass,cutler,cutlery,cutlet,cutling,cutlips,cutoff,cutout,cutover,cuttage,cuttail,cutted,cutter,cutting,cuttle,cuttler,cuttoo,cutty,cutup,cutweed,cutwork,cutworm,cuvette,cuvy,cuya,cwierc,cwm,cyan,cyanate,cyanean,cyanic,cyanide,cyanin,cyanine,cyanite,cyanize,cyanol,cyanole,cyanose,cyanus,cyath,cyathos,cyathus,cycad,cyclane,cyclar,cyclas,cycle,cyclene,cycler,cyclian,cyclic,cyclide,cycling,cyclism,cyclist,cyclize,cycloid,cyclone,cyclope,cyclopy,cyclose,cyclus,cyesis,cygnet,cygnine,cyke,cylix,cyma,cymar,cymba,cymbal,cymbalo,cymbate,cyme,cymelet,cymene,cymling,cymoid,cymose,cymous,cymule,cynebot,cynic,cynical,cynipid,cynism,cynoid,cyp,cypre,cypres,cypress,cyprine,cypsela,cyrus,cyst,cystal,cysted,cystic,cystid,cystine,cystis,cystoid,cystoma,cystose,cystous,cytase,cytasic,cytitis,cytode,cytoid,cytoma,cyton,cytost,cytula,czar,czardas,czardom,czarian,czaric,czarina,czarish,czarism,czarist,d,da,daalder,dab,dabb,dabba,dabber,dabble,dabbler,dabby,dablet,daboia,daboya,dabster,dace,dacite,dacitic,dacker,dacoit,dacoity,dacryon,dactyl,dad,dada,dadap,dadder,daddle,daddock,daddy,dade,dado,dae,daedal,daemon,daemony,daer,daff,daffery,daffing,daffish,daffle,daffy,daft,daftly,dag,dagaba,dagame,dagassa,dagesh,dagga,dagger,daggers,daggle,daggly,daggy,daghesh,daglock,dagoba,dags,dah,dahoon,daidle,daidly,daiker,daikon,daily,daimen,daimio,daimon,dain,daincha,dainty,daira,dairi,dairy,dais,daisied,daisy,daitya,daiva,dak,daker,dakir,dal,dalar,dale,daleman,daler,daleth,dali,dalk,dallack,dalle,dalles,dallier,dally,dalt,dalteen,dalton,dam,dama,damage,damager,damages,daman,damask,damasse,dambose,dambrod,dame,damiana,damie,damier,damine,damlike,dammar,damme,dammer,dammish,damn,damned,damner,damnify,damning,damnous,damp,dampang,damped,dampen,damper,damping,dampish,damply,dampy,damsel,damson,dan,danaid,danaide,danaine,danaite,dance,dancer,dancery,dancing,dand,danda,dander,dandify,dandily,dandle,dandler,dandy,dang,danger,dangle,dangler,danglin,danio,dank,dankish,dankly,danli,danner,dannock,dansant,danta,danton,dao,daoine,dap,daphnin,dapicho,dapico,dapifer,dapper,dapple,dappled,dar,darac,daraf,darat,darbha,darby,dardaol,dare,dareall,dareful,darer,daresay,darg,dargah,darger,dargue,dari,daribah,daric,daring,dariole,dark,darken,darkful,darkish,darkle,darkly,darky,darling,darn,darned,darnel,darner,darnex,darning,daroga,daroo,darr,darrein,darst,dart,dartars,darter,darting,dartle,dartman,dartoic,dartoid,dartos,dartre,darts,darzee,das,dash,dashed,dashee,dasheen,dasher,dashing,dashpot,dashy,dasi,dasnt,dassie,dassy,dastard,dastur,dasturi,dasyure,data,datable,datably,dataria,datary,datch,datcha,date,dater,datil,dating,dation,datival,dative,dattock,datum,daturic,daub,daube,dauber,daubery,daubing,dauby,daud,daunch,dauncy,daunt,daunter,daunton,dauphin,daut,dautie,dauw,davach,daven,daver,daverdy,davit,davoch,davy,davyne,daw,dawdle,dawdler,dawdy,dawish,dawkin,dawn,dawning,dawny,dawtet,dawtit,dawut,day,dayal,daybeam,daybook,daydawn,dayfly,dayless,daylit,daylong,dayman,daymare,daymark,dayroom,days,daysman,daystar,daytale,daytide,daytime,dayward,daywork,daywrit,daze,dazed,dazedly,dazy,dazzle,dazzler,de,deacon,dead,deaden,deader,deadeye,deading,deadish,deadly,deadman,deadpan,deadpay,deaf,deafen,deafish,deafly,deair,deal,dealate,dealer,dealing,dealt,dean,deaner,deanery,deaness,dear,dearie,dearly,dearth,deary,deash,deasil,death,deathin,deathly,deathy,deave,deavely,deb,debacle,debadge,debar,debark,debase,debaser,debate,debater,debauch,debby,debeige,deben,debile,debind,debit,debord,debosh,debouch,debride,debrief,debris,debt,debtee,debtful,debtor,debunk,debus,debut,decad,decadal,decade,decadic,decafid,decagon,decal,decamp,decan,decanal,decane,decani,decant,decap,decapod,decarch,decare,decart,decast,decate,decator,decatyl,decay,decayed,decayer,decease,deceit,deceive,decence,decency,decene,decent,decenyl,decern,decess,deciare,decibel,decide,decided,decider,decidua,decil,decile,decima,decimal,deck,decke,decked,deckel,decker,deckie,decking,deckle,declaim,declare,declass,decline,declive,decoat,decoct,decode,decoic,decoke,decolor,decorum,decoy,decoyer,decream,decree,decreer,decreet,decrete,decrew,decrial,decried,decrier,decrown,decry,decuman,decuple,decuria,decurve,decury,decus,decyl,decylic,decyne,dedimus,dedo,deduce,deduct,dee,deed,deedbox,deedeed,deedful,deedily,deedy,deem,deemer,deemie,deep,deepen,deeping,deepish,deeply,deer,deerdog,deerlet,deevey,deface,defacer,defalk,defame,defamed,defamer,defassa,defat,default,defease,defeat,defect,defence,defend,defense,defer,defial,defiant,defiber,deficit,defier,defile,defiled,defiler,define,defined,definer,deflate,deflect,deflesh,deflex,defog,deforce,deform,defoul,defraud,defray,defrock,defrost,deft,deftly,defunct,defuse,defy,deg,degas,degauss,degerm,degged,degger,deglaze,degorge,degrade,degrain,degree,degu,degum,degust,dehair,dehisce,dehorn,dehors,dehort,dehull,dehusk,deice,deicer,deicide,deictic,deific,deifier,deiform,deify,deign,deink,deinos,deiseal,deism,deist,deistic,deity,deject,dejecta,dejeune,dekko,dekle,delaine,delapse,delate,delater,delator,delawn,delay,delayer,dele,delead,delenda,delete,delf,delft,delible,delict,delight,delime,delimit,delint,deliver,dell,deloul,delouse,delta,deltaic,deltal,deltic,deltoid,delude,deluder,deluge,deluxe,delve,delver,demagog,demal,demand,demarch,demark,demast,deme,demean,demency,dement,demerit,demesne,demi,demibob,demidog,demigod,demihag,demiman,demiowl,demiox,demiram,demirep,demise,demiss,demit,demivol,demob,demoded,demoid,demon,demonic,demonry,demos,demote,demotic,demount,demulce,demure,demy,den,denaro,denary,denat,denda,dendral,dendric,dendron,dene,dengue,denial,denier,denim,denizen,dennet,denote,dense,densely,densen,densher,densify,density,dent,dental,dentale,dentary,dentata,dentate,dentel,denter,dentex,dentil,dentile,dentin,dentine,dentist,dentoid,denture,denty,denude,denuder,deny,deodand,deodara,deota,depa,depaint,depark,depart,depas,depass,depend,depeter,dephase,depict,deplane,deplete,deplore,deploy,deplume,deplump,depoh,depone,deport,deposal,depose,deposer,deposit,depot,deprave,depress,deprint,deprive,depside,depth,depthen,depute,deputy,dequeen,derah,deraign,derail,derange,derat,derate,derater,deray,derby,dere,dereism,deric,deride,derider,derival,derive,derived,deriver,derm,derma,dermad,dermal,dermic,dermis,dermoid,dermol,dern,dernier,derout,derrick,derride,derries,derry,dertrum,derust,dervish,desalt,desand,descale,descant,descend,descent,descort,descry,deseed,deseret,desert,deserve,desex,desi,desight,design,desire,desired,desirer,desist,desize,desk,deslime,desma,desman,desmic,desmid,desmine,desmoid,desmoma,desmon,despair,despect,despise,despite,despoil,despond,despot,dess,dessa,dessert,dessil,destain,destine,destiny,destour,destroy,desuete,desugar,desyl,detach,detail,detain,detar,detax,detect,detent,deter,deterge,detest,detin,detinet,detinue,detour,detract,detrain,detrude,detune,detur,deuce,deuced,deul,deuton,dev,deva,devall,devalue,devance,devast,devata,develin,develop,devest,deviant,deviate,device,devil,deviled,deviler,devilet,devilry,devily,devious,devisal,devise,devisee,deviser,devisor,devoice,devoid,devoir,devolve,devote,devoted,devotee,devoter,devour,devout,devow,devvel,dew,dewan,dewanee,dewater,dewax,dewbeam,dewclaw,dewcup,dewdamp,dewdrop,dewer,dewfall,dewily,dewlap,dewless,dewlike,dewool,deworm,dewret,dewtry,dewworm,dewy,dexter,dextrad,dextral,dextran,dextrin,dextro,dey,deyship,dezinc,dha,dhabb,dhai,dhak,dhamnoo,dhan,dhangar,dhanuk,dhanush,dharana,dharani,dharma,dharna,dhaura,dhauri,dhava,dhaw,dheri,dhobi,dhole,dhoni,dhoon,dhoti,dhoul,dhow,dhu,dhunchi,dhurra,dhyal,dhyana,di,diabase,diacid,diacle,diacope,diact,diactin,diadem,diaderm,diaene,diagram,dial,dialect,dialer,dialin,dialing,dialist,dialkyl,diallel,diallyl,dialyze,diamb,diambic,diamide,diamine,diamond,dian,diander,dianite,diapase,diapasm,diaper,diaplex,diapsid,diarch,diarchy,diarial,diarian,diarist,diarize,diary,diastem,diaster,diasyrm,diatom,diaulic,diaulos,diaxial,diaxon,diazide,diazine,diazoic,diazole,diazoma,dib,dibase,dibasic,dibatag,dibber,dibble,dibbler,dibbuk,dibhole,dibrach,dibrom,dibs,dicast,dice,dicebox,dicecup,diceman,dicer,dicetyl,dich,dichas,dichord,dicing,dick,dickens,dicker,dickey,dicky,dicolic,dicolon,dicot,dicotyl,dicta,dictate,dictic,diction,dictum,dicycle,did,didder,diddle,diddler,diddy,didelph,didie,didine,didle,didna,didnt,didromy,didst,didym,didymia,didymus,die,dieb,dieback,diedral,diedric,diehard,dielike,diem,diene,dier,diesel,diesis,diet,dietal,dietary,dieter,diethyl,dietic,dietics,dietine,dietist,diewise,diffame,differ,diffide,difform,diffuse,dig,digamma,digamy,digenic,digeny,digest,digger,digging,dight,dighter,digit,digital,digitus,diglot,diglyph,digmeat,dignify,dignity,digram,digraph,digress,digs,dihalo,diiamb,diiodo,dika,dikage,dike,diker,diketo,dikkop,dilate,dilated,dilater,dilator,dildo,dilemma,dilker,dill,dilli,dillier,dilling,dillue,dilluer,dilly,dilo,dilogy,diluent,dilute,diluted,dilutee,diluter,dilutor,diluvia,dim,dimber,dimble,dime,dimer,dimeran,dimeric,dimeter,dimiss,dimit,dimity,dimly,dimmed,dimmer,dimmest,dimmet,dimmish,dimness,dimoric,dimorph,dimple,dimply,dimps,dimpsy,din,dinar,dinder,dindle,dine,diner,dineric,dinero,dinette,ding,dingar,dingbat,dinge,dingee,dinghee,dinghy,dingily,dingle,dingly,dingo,dingus,dingy,dinic,dinical,dining,dinitro,dink,dinkey,dinkum,dinky,dinmont,dinner,dinnery,dinomic,dinsome,dint,dinus,diobely,diobol,diocese,diode,diodont,dioecy,diol,dionise,dionym,diopter,dioptra,dioptry,diorama,diorite,diose,diosmin,diota,diotic,dioxane,dioxide,dioxime,dioxy,dip,dipetto,diphase,diphead,diplex,diploe,diploic,diploid,diplois,diploma,diplont,diplopy,dipnoan,dipnoid,dipode,dipodic,dipody,dipolar,dipole,diporpa,dipped,dipper,dipping,dipsas,dipsey,dipter,diptote,diptych,dipware,dipygus,dipylon,dipyre,dird,dirdum,dire,direct,direful,direly,dirempt,dirge,dirgler,dirhem,dirk,dirl,dirndl,dirt,dirten,dirtily,dirty,dis,disable,disagio,disally,disarm,disavow,disawa,disazo,disband,disbar,disbark,disbody,disbud,disbury,disc,discage,discal,discard,discase,discept,discern,discerp,discoid,discord,discous,discus,discuss,disdain,disdub,disease,disedge,diseme,disemic,disfame,disfen,disgig,disglut,disgood,disgown,disgulf,disgust,dish,dished,dishelm,disher,dishful,dishome,dishorn,dishpan,dishrag,disject,disjoin,disjune,disk,disleaf,dislike,dislimn,dislink,dislip,disload,dislove,dismain,dismal,disman,dismark,dismask,dismast,dismay,disme,dismiss,disna,disnest,disnew,disobey,disodic,disomic,disomus,disorb,disown,dispark,dispart,dispel,dispend,display,dispone,dispope,disport,dispose,dispost,dispulp,dispute,disrank,disrate,disring,disrobe,disroof,disroot,disrump,disrupt,diss,disseat,dissect,dissent,dissert,dissoul,dissuit,distad,distaff,distain,distal,distale,distant,distend,distent,distich,distill,distome,distort,distune,disturb,disturn,disuse,diswood,disyoke,dit,dita,dital,ditch,ditcher,dite,diter,dither,dithery,dithion,ditolyl,ditone,dittamy,dittany,dittay,dittied,ditto,ditty,diurnal,diurne,div,diva,divan,divata,dive,divel,diver,diverge,divers,diverse,divert,divest,divide,divided,divider,divine,diviner,diving,divinyl,divisor,divorce,divot,divoto,divulge,divulse,divus,divvy,diwata,dixie,dixit,dixy,dizain,dizen,dizoic,dizzard,dizzily,dizzy,djave,djehad,djerib,djersa,do,doab,doable,doarium,doat,doated,doater,doating,doatish,dob,dobbed,dobber,dobbin,dobbing,dobby,dobe,dobla,doblon,dobra,dobrao,dobson,doby,doc,docent,docible,docile,docity,dock,dockage,docken,docker,docket,dockize,dockman,docmac,doctor,doctrix,dod,dodd,doddart,dodded,dodder,doddery,doddie,dodding,doddle,doddy,dodecyl,dodge,dodger,dodgery,dodgily,dodgy,dodkin,dodlet,dodman,dodo,dodoism,dodrans,doe,doebird,doeglic,doer,does,doeskin,doesnt,doest,doff,doffer,dog,dogal,dogate,dogbane,dogbite,dogblow,dogboat,dogbolt,dogbush,dogcart,dogdom,doge,dogedom,dogface,dogfall,dogfish,dogfoot,dogged,dogger,doggery,doggess,doggish,doggo,doggone,doggrel,doggy,doghead,doghole,doghood,dogie,dogless,doglike,dogly,dogma,dogman,dogmata,dogs,dogship,dogskin,dogtail,dogtie,dogtrot,dogvane,dogwood,dogy,doigt,doiled,doily,doina,doing,doings,doit,doited,doitkin,doke,dokhma,dola,dolabra,dolcan,dolcian,dolcino,doldrum,dole,doleful,dolent,doless,doli,dolia,dolina,doline,dolium,doll,dollar,dolldom,dollier,dollish,dollop,dolly,dolman,dolmen,dolor,dolose,dolous,dolphin,dolt,doltish,dom,domain,domal,domba,dome,doment,domer,domett,domic,domical,domine,dominie,domino,dominus,domite,domitic,domn,domnei,domoid,dompt,domy,don,donable,donary,donate,donated,donatee,donator,donax,done,donee,doney,dong,donga,dongon,donjon,donkey,donna,donnert,donnish,donnism,donnot,donor,donship,donsie,dont,donum,doob,doocot,doodab,doodad,doodle,doodler,dooja,dook,dooket,dookit,dool,doolee,dooley,dooli,doolie,dooly,doom,doomage,doomer,doomful,dooms,doon,door,doorba,doorboy,doored,doorman,doorway,dop,dopa,dopatta,dope,doper,dopey,dopper,doppia,dor,dorab,dorad,dorado,doree,dorhawk,doria,dorje,dorlach,dorlot,dorm,dormant,dormer,dormie,dormy,dorn,dorneck,dornic,dornick,dornock,dorp,dorsad,dorsal,dorsale,dorsel,dorser,dorsum,dorter,dorts,dorty,doruck,dory,dos,dosa,dosadh,dosage,dose,doser,dosis,doss,dossal,dossel,dosser,dossier,dossil,dossman,dot,dotage,dotal,dotard,dotardy,dotate,dotchin,dote,doted,doter,doting,dotish,dotkin,dotless,dotlike,dotted,dotter,dottily,dotting,dottle,dottler,dotty,doty,douar,double,doubled,doubler,doublet,doubly,doubt,doubter,douc,douce,doucely,doucet,douche,doucin,doucine,doudle,dough,dought,doughty,doughy,doum,doup,douping,dour,dourine,dourly,douse,douser,dout,douter,doutous,dove,dovecot,dovekey,dovekie,dovelet,dover,dovish,dow,dowable,dowager,dowcet,dowd,dowdily,dowdy,dowed,dowel,dower,doweral,dowery,dowf,dowie,dowily,dowitch,dowl,dowlas,dowless,down,downby,downcry,downcut,downer,downily,downlie,downset,downway,downy,dowp,dowry,dowse,dowser,dowset,doxa,doxy,doze,dozed,dozen,dozener,dozenth,dozer,dozily,dozy,dozzled,drab,drabbet,drabble,drabby,drably,drachm,drachma,dracma,draff,draffy,draft,draftee,drafter,drafty,drag,dragade,dragbar,dragged,dragger,draggle,draggly,draggy,dragman,dragnet,drago,dragon,dragoon,dragsaw,drail,drain,draine,drained,drainer,drake,dram,drama,dramm,dramme,drammed,drammer,drang,drank,drant,drape,draper,drapery,drassid,drastic,drat,drate,dratted,draught,dravya,draw,drawarm,drawbar,drawboy,drawcut,drawee,drawer,drawers,drawing,drawk,drawl,drawler,drawly,drawn,drawnet,drawoff,drawout,drawrod,dray,drayage,drayman,drazel,dread,dreader,dreadly,dream,dreamer,dreamsy,dreamt,dreamy,drear,drearly,dreary,dredge,dredger,dree,dreep,dreepy,dreg,dreggy,dregs,drench,dreng,dress,dressed,dresser,dressy,drest,drew,drewite,drias,drib,dribble,driblet,driddle,dried,drier,driest,drift,drifter,drifty,drill,driller,drillet,dringle,drink,drinker,drinn,drip,dripper,dripple,drippy,drisk,drivage,drive,drivel,driven,driver,driving,drizzle,drizzly,droddum,drogh,drogher,drogue,droit,droll,drolly,drome,dromic,dromond,dromos,drona,dronage,drone,droner,drongo,dronish,drony,drool,droop,drooper,droopt,droopy,drop,droplet,dropman,dropout,dropper,droppy,dropsy,dropt,droshky,drosky,dross,drossel,drosser,drossy,drostdy,droud,drought,drouk,drove,drover,drovy,drow,drown,drowner,drowse,drowsy,drub,drubber,drubbly,drucken,drudge,drudger,druery,drug,drugger,drugget,druggy,drugman,druid,druidic,druidry,druith,drum,drumble,drumlin,drumly,drummer,drummy,drung,drungar,drunk,drunken,drupal,drupe,drupel,druse,drusy,druxy,dry,dryad,dryadic,dryas,drycoal,dryfoot,drying,dryish,dryly,dryness,dryster,dryth,duad,duadic,dual,duali,dualin,dualism,dualist,duality,dualize,dually,duarch,duarchy,dub,dubash,dubb,dubba,dubbah,dubber,dubbing,dubby,dubiety,dubious,dubs,ducal,ducally,ducape,ducat,ducato,ducdame,duces,duchess,duchy,duck,ducker,duckery,duckie,ducking,duckpin,duct,ducted,ductile,duction,ductor,ductule,dud,dudaim,dudder,duddery,duddies,dude,dudeen,dudgeon,dudine,dudish,dudism,dudler,dudley,dudman,due,duel,dueler,dueling,duelist,duello,dueness,duenna,duer,duet,duff,duffel,duffer,duffing,dufoil,dufter,duftery,dug,dugal,dugdug,duggler,dugong,dugout,dugway,duhat,duiker,duim,duit,dujan,duke,dukedom,dukely,dukery,dukhn,dukker,dulbert,dulcet,dulcian,dulcify,dulcose,duledge,duler,dulia,dull,dullard,duller,dullery,dullify,dullish,dullity,dully,dulosis,dulotic,dulse,dult,dultie,duly,dum,duma,dumaist,dumb,dumba,dumbcow,dumbly,dumdum,dummel,dummy,dumose,dump,dumpage,dumper,dumpily,dumping,dumpish,dumple,dumpoke,dumpy,dumsola,dun,dunair,dunal,dunbird,dunce,duncery,dunch,duncify,duncish,dunder,dune,dunfish,dung,dungeon,dunger,dungol,dungon,dungy,dunite,dunk,dunker,dunlin,dunnage,dunne,dunner,dunness,dunnish,dunnite,dunnock,dunny,dunst,dunt,duntle,duny,duo,duodena,duodene,duole,duopod,duopoly,duotone,duotype,dup,dupable,dupe,dupedom,duper,dupery,dupion,dupla,duple,duplet,duplex,duplify,duplone,duppy,dura,durable,durably,durain,dural,duramen,durance,durant,durax,durbar,dure,durene,durenol,duress,durgan,durian,during,durity,durmast,durn,duro,durra,durrie,durrin,durry,durst,durwaun,duryl,dusack,duscle,dush,dusio,dusk,dusken,duskily,duskish,duskly,dusky,dust,dustbin,dustbox,dustee,duster,dustily,dusting,dustman,dustpan,dustuck,dusty,dutch,duteous,dutied,dutiful,dutra,duty,duumvir,duvet,duvetyn,dux,duyker,dvaita,dvandva,dwale,dwalm,dwang,dwarf,dwarfy,dwell,dwelled,dweller,dwelt,dwindle,dwine,dyad,dyadic,dyarchy,dyaster,dyce,dye,dyeable,dyeing,dyer,dyester,dyeware,dyeweed,dyewood,dying,dyingly,dyke,dyker,dynamic,dynamis,dynamo,dynast,dynasty,dyne,dyphone,dyslogy,dysnomy,dyspnea,dystome,dysuria,dysuric,dzeren,e,ea,each,eager,eagerly,eagle,eagless,eaglet,eagre,ean,ear,earache,earbob,earcap,eardrop,eardrum,eared,earful,earhole,earing,earl,earlap,earldom,earless,earlet,earlike,earlish,earlock,early,earmark,earn,earner,earnest,earnful,earning,earpick,earplug,earring,earshot,earsore,eartab,earth,earthed,earthen,earthly,earthy,earwax,earwig,earworm,earwort,ease,easeful,easel,easer,easier,easiest,easily,easing,east,easter,eastern,easting,easy,eat,eatable,eatage,eaten,eater,eatery,eating,eats,eave,eaved,eaver,eaves,ebb,ebbman,eboe,ebon,ebonist,ebonite,ebonize,ebony,ebriate,ebriety,ebrious,ebulus,eburine,ecad,ecanda,ecarte,ecbatic,ecbole,ecbolic,ecdemic,ecderon,ecdysis,ecesic,ecesis,eche,echea,echelon,echidna,echinal,echinid,echinus,echo,echoer,echoic,echoism,echoist,echoize,ecize,ecklein,eclair,eclat,eclegm,eclegma,eclipse,eclogue,ecoid,ecole,ecology,economy,ecotone,ecotype,ecphore,ecru,ecstasy,ectad,ectal,ectally,ectasia,ectasis,ectatic,ectene,ecthyma,ectiris,ectopia,ectopic,ectopy,ectozoa,ectypal,ectype,eczema,edacity,edaphic,edaphon,edder,eddish,eddo,eddy,edea,edeagra,edeitis,edema,edemic,edenite,edental,edestan,edestin,edge,edged,edgeman,edger,edging,edgrew,edgy,edh,edible,edict,edictal,edicule,edifice,edifier,edify,edit,edital,edition,editor,educand,educate,educe,educive,educt,eductor,eegrass,eel,eelboat,eelbob,eelcake,eeler,eelery,eelfare,eelfish,eellike,eelpot,eelpout,eelshop,eelskin,eelware,eelworm,eely,eer,eerie,eerily,effable,efface,effacer,effect,effects,effendi,effete,effigy,efflate,efflux,efform,effort,effulge,effund,effuse,eft,eftest,egad,egality,egence,egeran,egest,egesta,egg,eggcup,egger,eggfish,egghead,egghot,egging,eggler,eggless,egglike,eggnog,eggy,egilops,egipto,egma,ego,egohood,egoism,egoist,egoity,egoize,egoizer,egol,egomism,egotism,egotist,egotize,egress,egret,eh,eheu,ehlite,ehuawa,eident,eider,eidetic,eidolic,eidolon,eight,eighth,eighty,eigne,eimer,einkorn,eisodic,either,eject,ejecta,ejector,ejoo,ekaha,eke,eker,ekerite,eking,ekka,ekphore,ektene,ektenes,el,elaidic,elaidin,elain,elaine,elance,eland,elanet,elapid,elapine,elapoid,elapse,elastic,elastin,elatcha,elate,elated,elater,elation,elative,elator,elb,elbow,elbowed,elbower,elbowy,elcaja,elchee,eld,elder,elderly,eldest,eldin,elding,eldress,elect,electee,electly,elector,electro,elegant,elegiac,elegist,elegit,elegize,elegy,eleidin,element,elemi,elemin,elench,elenchi,elenge,elevate,eleven,elevon,elf,elfhood,elfic,elfin,elfish,elfkin,elfland,elflike,elflock,elfship,elfwife,elfwort,elicit,elide,elision,elisor,elite,elixir,elk,elkhorn,elkslip,elkwood,ell,ellagic,elle,elleck,ellfish,ellipse,ellops,ellwand,elm,elmy,elocute,elod,eloge,elogium,eloign,elope,eloper,elops,els,else,elsehow,elsin,elt,eluate,elude,eluder,elusion,elusive,elusory,elute,elution,elutor,eluvial,eluvium,elvan,elver,elves,elvet,elvish,elysia,elytral,elytrin,elytron,elytrum,em,emanant,emanate,emanium,emarcid,emball,embalm,embank,embar,embargo,embark,embassy,embathe,embay,embed,embelic,ember,embind,embira,emblaze,emblem,emblema,emblic,embody,embog,embole,embolic,embolo,embolum,embolus,emboly,embosom,emboss,embound,embow,embowed,embowel,embower,embox,embrace,embrail,embroil,embrown,embryo,embryon,embuia,embus,embusk,emcee,eme,emeer,emend,emender,emerald,emerge,emerize,emerse,emersed,emery,emesis,emetic,emetine,emgalla,emigree,eminent,emir,emirate,emit,emitter,emma,emmenic,emmer,emmet,emodin,emoloa,emote,emotion,emotive,empall,empanel,empaper,empark,empasm,empathy,emperor,empery,empire,empiric,emplace,emplane,employ,emplume,emporia,empower,empress,emprise,empt,emptier,emptily,emptins,emption,emptor,empty,empyema,emu,emulant,emulate,emulous,emulsin,emulsor,emyd,emydian,en,enable,enabler,enact,enactor,enaena,enage,enalid,enam,enamber,enamdar,enamel,enamor,enapt,enarbor,enarch,enarm,enarme,enate,enatic,enation,enbrave,encage,encake,encamp,encase,encash,encauma,encave,encell,enchain,enchair,enchant,enchase,enchest,encina,encinal,encist,enclasp,enclave,encloak,enclose,encloud,encoach,encode,encoil,encolor,encomia,encomic,encoop,encore,encowl,encraal,encraty,encreel,encrisp,encrown,encrust,encrypt,encup,encurl,encyst,end,endable,endarch,endaze,endear,ended,endemic,ender,endere,enderon,endevil,endew,endgate,ending,endite,endive,endless,endlong,endmost,endogen,endome,endopod,endoral,endore,endorse,endoss,endotys,endow,endower,endozoa,endue,endura,endure,endurer,endways,endwise,endyma,endymal,endysis,enema,enemy,energic,energid,energy,eneuch,eneugh,enface,enfelon,enfeoff,enfever,enfile,enfiled,enflesh,enfoil,enfold,enforce,enfork,enfoul,enframe,enfree,engage,engaged,engager,engaol,engarb,engaud,engaze,engem,engild,engine,engird,engirt,englad,englobe,engloom,englory,englut,englyn,engobe,engold,engore,engorge,engrace,engraff,engraft,engrail,engrain,engram,engrasp,engrave,engreen,engross,enguard,engulf,enhalo,enhance,enhat,enhaunt,enheart,enhedge,enhelm,enherit,enhusk,eniac,enigma,enisle,enjail,enjamb,enjelly,enjewel,enjoin,enjoy,enjoyer,enkraal,enlace,enlard,enlarge,enleaf,enlief,enlife,enlight,enlink,enlist,enliven,enlock,enlodge,enmask,enmass,enmesh,enmist,enmity,enmoss,ennead,ennerve,enniche,ennoble,ennoic,ennomic,ennui,enocyte,enodal,enoil,enol,enolate,enolic,enolize,enomoty,enoplan,enorm,enough,enounce,enow,enplane,enquire,enquiry,enrace,enrage,enraged,enrange,enrank,enrapt,enray,enrib,enrich,enring,enrive,enrobe,enrober,enrol,enroll,enroot,enrough,enruin,enrut,ens,ensaint,ensand,ensate,enscene,ense,enseam,enseat,enseem,enserf,ensete,enshade,enshawl,enshell,ensign,ensile,ensky,enslave,ensmall,ensnare,ensnarl,ensnow,ensoul,enspell,enstamp,enstar,enstate,ensteel,enstool,enstore,ensuant,ensue,ensuer,ensure,ensurer,ensweep,entach,entad,entail,ental,entame,entasia,entasis,entelam,entente,enter,enteral,enterer,enteria,enteric,enteron,entheal,enthral,enthuse,entia,entice,enticer,entify,entire,entiris,entitle,entity,entoil,entomb,entomic,entone,entopic,entotic,entozoa,entrail,entrain,entrant,entrap,entreat,entree,entropy,entrust,entry,entwine,entwist,enure,enurny,envapor,envault,enveil,envelop,envenom,envied,envier,envious,environ,envoy,envy,envying,enwiden,enwind,enwisen,enwoman,enwomb,enwood,enwound,enwrap,enwrite,enzone,enzooty,enzym,enzyme,enzymic,eoan,eolith,eon,eonism,eophyte,eosate,eoside,eosin,eosinic,eozoon,epacme,epacrid,epact,epactal,epagoge,epanody,eparch,eparchy,epaule,epaulet,epaxial,epee,epeeist,epeiric,epeirid,epergne,epha,ephah,ephebe,ephebic,ephebos,ephebus,ephelis,ephetae,ephete,ephetic,ephod,ephor,ephoral,ephoric,ephorus,ephyra,epibole,epiboly,epic,epical,epicarp,epicede,epicele,epicene,epichil,epicism,epicist,epicly,epicure,epicyte,epidemy,epiderm,epidote,epigeal,epigean,epigeic,epigene,epigone,epigram,epigyne,epigyny,epihyal,epikeia,epilate,epilobe,epimer,epimere,epimyth,epinaos,epinine,epiotic,epipial,episode,epistle,epitaph,epitela,epithem,epithet,epitoke,epitome,epiural,epizoa,epizoal,epizoan,epizoic,epizoon,epoch,epocha,epochal,epode,epodic,eponym,eponymy,epopee,epopt,epoptes,epoptic,epos,epsilon,epulary,epulis,epulo,epuloid,epural,epurate,equable,equably,equal,equally,equant,equate,equator,equerry,equid,equine,equinia,equinox,equinus,equip,equiped,equison,equites,equity,equoid,er,era,erade,eral,eranist,erase,erased,eraser,erasion,erasure,erbia,erbium,erd,erdvark,ere,erect,erecter,erectly,erector,erelong,eremic,eremite,erenach,erenow,erepsin,erept,ereptic,erethic,erg,ergal,ergasia,ergates,ergodic,ergoism,ergon,ergot,ergoted,ergotic,ergotin,ergusia,eria,eric,ericad,erical,ericius,ericoid,erika,erikite,erineum,erinite,erinose,eristic,erizo,erlking,ermelin,ermine,ermined,erminee,ermines,erne,erode,eroded,erodent,erogeny,eros,erose,erosely,erosion,erosive,eroteme,erotic,erotica,erotism,err,errable,errancy,errand,errant,errata,erratic,erratum,errhine,erring,errite,error,ers,ersatz,erth,erthen,erthly,eruc,eruca,erucic,erucin,eruct,erudit,erudite,erugate,erupt,eryngo,es,esca,escalan,escalin,escalop,escape,escapee,escaper,escarp,eschar,eschara,escheat,eschew,escoba,escolar,escort,escribe,escrol,escrow,escudo,esculin,esere,eserine,esexual,eshin,esker,esne,esodic,esotery,espadon,esparto,espave,espial,espier,espinal,espino,esplees,espouse,espy,esquire,ess,essang,essay,essayer,essed,essence,essency,essling,essoin,estadal,estadio,estado,estamp,estate,esteem,ester,estevin,estival,estmark,estoc,estoile,estop,estrade,estray,estre,estreat,estrepe,estrin,estriol,estrone,estrous,estrual,estuary,estufa,estuous,estus,eta,etacism,etacist,etalon,etamine,etch,etcher,etching,eternal,etesian,ethal,ethanal,ethane,ethanol,ethel,ethene,ethenic,ethenol,ethenyl,ether,ethered,etheric,etherin,ethic,ethical,ethics,ethid,ethide,ethine,ethiops,ethmoid,ethnal,ethnic,ethnize,ethnos,ethos,ethoxyl,ethrog,ethyl,ethylic,ethylin,ethyne,ethynyl,etiolin,etna,ettle,etua,etude,etui,etym,etymic,etymon,etypic,eu,euaster,eucaine,euchre,euchred,euclase,eucone,euconic,eucrasy,eucrite,euge,eugenic,eugenol,eugeny,eulalia,eulogia,eulogic,eulogy,eumenid,eunicid,eunomy,eunuch,euonym,euonymy,euouae,eupad,eupathy,eupepsy,euphemy,euphon,euphone,euphony,euphory,euphroe,eupione,euploid,eupnea,eureka,euripus,eurite,eurobin,euryon,eusol,eustyle,eutaxic,eutaxy,eutexia,eutony,evacue,evacuee,evade,evader,evalue,evangel,evanish,evase,evasion,evasive,eve,evejar,evelong,even,evener,evening,evenly,evens,event,eveque,ever,evert,evertor,everwho,every,evestar,evetide,eveweed,evict,evictor,evident,evil,evilly,evince,evirate,evisite,evitate,evocate,evoe,evoke,evoker,evolute,evolve,evolver,evovae,evulse,evzone,ewder,ewe,ewer,ewerer,ewery,ewry,ex,exact,exacter,exactly,exactor,exalate,exalt,exalted,exalter,exam,examen,examine,example,exarate,exarch,exarchy,excamb,excave,exceed,excel,except,excerpt,excess,excide,exciple,excise,excisor,excite,excited,exciter,excitor,exclaim,exclave,exclude,excreta,excrete,excurse,excusal,excuse,excuser,excuss,excyst,exdie,exeat,execute,exedent,exedra,exegete,exempt,exequy,exergue,exert,exes,exeunt,exflect,exhale,exhaust,exhibit,exhort,exhume,exhumer,exigent,exile,exiler,exilian,exilic,exility,exist,exister,exit,exite,exition,exitus,exlex,exocarp,exocone,exode,exoderm,exodic,exodist,exodos,exodus,exody,exogamy,exogen,exogeny,exomion,exomis,exon,exoner,exopod,exordia,exormia,exosmic,exostra,exotic,exotism,expand,expanse,expect,expede,expel,expend,expense,expert,expiate,expire,expiree,expirer,expiry,explain,explant,explode,exploit,explore,expone,export,exposal,expose,exposed,exposer,exposit,expound,express,expugn,expulse,expunge,expurge,exradio,exscind,exsect,exsert,exship,exsurge,extant,extend,extense,extent,exter,extern,externe,extima,extinct,extine,extol,extoll,extort,extra,extract,extrait,extreme,extrude,extund,exudate,exude,exult,exultet,exuviae,exuvial,ey,eyah,eyalet,eyas,eye,eyeball,eyebalm,eyebar,eyebeam,eyebolt,eyebree,eyebrow,eyecup,eyed,eyedot,eyedrop,eyeflap,eyeful,eyehole,eyelash,eyeless,eyelet,eyelid,eyelike,eyeline,eyemark,eyen,eyepit,eyer,eyeroot,eyeseed,eyeshot,eyesome,eyesore,eyespot,eyewash,eyewear,eyewink,eyewort,eyey,eying,eyn,eyne,eyot,eyoty,eyra,eyre,eyrie,eyrir,ezba,f,fa,fabella,fabes,fable,fabled,fabler,fabliau,fabling,fabric,fabular,facadal,facade,face,faced,faceman,facer,facet,facete,faceted,facia,facial,faciend,facient,facies,facile,facing,fack,fackins,facks,fact,factful,faction,factish,factive,factor,factory,factrix,factual,factum,facture,facty,facula,facular,faculty,facund,facy,fad,fadable,faddish,faddism,faddist,faddle,faddy,fade,faded,fadedly,faden,fader,fadge,fading,fady,fae,faerie,faery,faff,faffle,faffy,fag,fagald,fage,fager,fagger,faggery,fagging,fagine,fagot,fagoter,fagoty,faham,fahlerz,fahlore,faience,fail,failing,faille,failure,fain,fainly,fains,faint,fainter,faintly,faints,fainty,faipule,fair,fairer,fairily,fairing,fairish,fairly,fairm,fairway,fairy,faith,faitour,fake,faker,fakery,fakir,faky,falbala,falcade,falcate,falcer,falces,falcial,falcon,falcula,faldage,faldfee,fall,fallace,fallacy,fallage,fallen,faller,falling,fallow,fallway,fally,falsary,false,falsely,falsen,falser,falsie,falsify,falsism,faltche,falter,falutin,falx,fam,famble,fame,fameful,familia,family,famine,famish,famous,famulus,fan,fana,fanal,fanam,fanatic,fanback,fancied,fancier,fancify,fancy,fand,fandom,fanega,fanfare,fanfoot,fang,fanged,fangle,fangled,fanglet,fangot,fangy,fanion,fanlike,fanman,fannel,fanner,fannier,fanning,fanon,fant,fantail,fantast,fantasy,fantod,fanweed,fanwise,fanwork,fanwort,faon,far,farad,faraday,faradic,faraway,farce,farcer,farcial,farcied,farcify,farcing,farcist,farcy,farde,fardel,fardh,fardo,fare,farer,farfara,farfel,fargood,farina,faring,farish,farl,farleu,farm,farmage,farmer,farmery,farming,farmost,farmy,farness,faro,farrago,farrand,farrier,farrow,farruca,farse,farseer,farset,farther,fasces,fascet,fascia,fascial,fascine,fascis,fascism,fascist,fash,fasher,fashery,fashion,fass,fast,fasten,faster,fasting,fastish,fastus,fat,fatal,fatally,fatbird,fate,fated,fateful,fathead,father,fathmur,fathom,fatidic,fatigue,fatiha,fatil,fatless,fatling,fatly,fatness,fatsia,fatten,fatter,fattily,fattish,fatty,fatuism,fatuity,fatuoid,fatuous,fatwood,faucal,fauces,faucet,faucial,faucre,faugh,fauld,fault,faulter,faulty,faun,faunal,faunish,faunist,faunule,fause,faust,fautor,fauve,favella,favilla,favism,favissa,favn,favor,favored,favorer,favose,favous,favus,fawn,fawner,fawnery,fawning,fawny,fay,fayles,faze,fazenda,fe,feague,feak,feal,fealty,fear,feared,fearer,fearful,feasor,feast,feasten,feaster,feat,feather,featly,featous,feature,featy,feaze,febrile,fecal,feces,feck,feckful,feckly,fecula,fecund,fed,feddan,federal,fee,feeable,feeble,feebly,feed,feedbin,feedbox,feeder,feeding,feedman,feedway,feedy,feel,feeler,feeless,feeling,feer,feere,feering,feetage,feeze,fegary,fei,feif,feigher,feign,feigned,feigner,feil,feint,feis,feist,feisty,felid,feline,fell,fellage,fellah,fellen,feller,fellic,felling,felloe,fellow,felly,feloid,felon,felonry,felony,fels,felsite,felt,felted,felter,felting,felty,felucca,felwort,female,feme,femic,feminal,feminie,feminin,femora,femoral,femur,fen,fenbank,fence,fencer,fenchyl,fencing,fend,fender,fendy,fenite,fenks,fenland,fenman,fennec,fennel,fennig,fennish,fenny,fensive,fent,fenter,feod,feodal,feodary,feoff,feoffee,feoffor,feower,feral,feralin,ferash,ferdwit,ferfet,feria,ferial,feridgi,ferie,ferine,ferity,ferk,ferling,ferly,fermail,ferme,ferment,fermery,fermila,fern,ferned,fernery,ferny,feroher,ferrado,ferrate,ferrean,ferret,ferrety,ferri,ferric,ferrier,ferrite,ferrous,ferrule,ferrum,ferry,fertile,feru,ferula,ferule,ferulic,fervent,fervid,fervor,fescue,fess,fessely,fest,festal,fester,festine,festive,festoon,festuca,fet,fetal,fetch,fetched,fetcher,fetial,fetid,fetidly,fetish,fetlock,fetlow,fetor,fetter,fettle,fettler,fetus,feu,feuage,feuar,feucht,feud,feudal,feudee,feudist,feued,feuille,fever,feveret,few,fewness,fewsome,fewter,fey,feyness,fez,fezzed,fezzy,fi,fiacre,fiance,fiancee,fiar,fiard,fiasco,fiat,fib,fibber,fibbery,fibdom,fiber,fibered,fibril,fibrin,fibrine,fibroid,fibroin,fibroma,fibrose,fibrous,fibry,fibster,fibula,fibulae,fibular,ficary,fice,ficelle,fiche,fichu,fickle,fickly,fico,ficoid,fictile,fiction,fictive,fid,fidalgo,fidate,fiddle,fiddler,fiddley,fide,fideism,fideist,fidfad,fidge,fidget,fidgety,fiducia,fie,fiefdom,field,fielded,fielder,fieldy,fiend,fiendly,fient,fierce,fiercen,fierily,fiery,fiesta,fife,fifer,fifie,fifish,fifo,fifteen,fifth,fifthly,fifty,fig,figaro,figbird,figent,figged,figgery,figging,figgle,figgy,fight,fighter,figless,figlike,figment,figural,figure,figured,figurer,figury,figworm,figwort,fike,fikie,filace,filacer,filao,filar,filaria,filasse,filate,filator,filbert,filch,filcher,file,filemot,filer,filet,filial,filiate,filibeg,filical,filicic,filicin,filiety,filing,filings,filippo,filite,fill,filled,filler,fillet,filleul,filling,fillip,fillock,filly,film,filmdom,filmet,filmic,filmily,filmish,filmist,filmize,filmy,filo,filose,fils,filter,filth,filthy,fimble,fimbria,fin,finable,finagle,final,finale,finally,finance,finback,finch,finched,find,findal,finder,finding,findjan,fine,fineish,finely,finer,finery,finesse,finetop,finfish,finfoot,fingent,finger,fingery,finial,finical,finick,finific,finify,finikin,fining,finis,finish,finite,finity,finjan,fink,finkel,finland,finless,finlet,finlike,finnac,finned,finner,finnip,finny,fiord,fiorded,fiorin,fiorite,fip,fipenny,fipple,fique,fir,firca,fire,firearm,firebox,fireboy,firebug,fired,firedog,firefly,firelit,fireman,firer,firetop,firing,firk,firker,firkin,firlot,firm,firman,firmer,firmly,firn,firring,firry,first,firstly,firth,fisc,fiscal,fise,fisetin,fish,fishbed,fished,fisher,fishery,fishet,fisheye,fishful,fishgig,fishify,fishily,fishing,fishlet,fishman,fishpot,fishway,fishy,fisnoga,fissate,fissile,fission,fissive,fissure,fissury,fist,fisted,fister,fistful,fistic,fistify,fisting,fistuca,fistula,fistule,fisty,fit,fitch,fitched,fitchee,fitcher,fitchet,fitchew,fitful,fitly,fitment,fitness,fitout,fitroot,fittage,fitted,fitten,fitter,fitters,fittily,fitting,fitty,fitweed,five,fivebar,fiver,fives,fix,fixable,fixage,fixate,fixatif,fixator,fixed,fixedly,fixer,fixing,fixity,fixture,fixure,fizgig,fizz,fizzer,fizzle,fizzy,fjeld,flabby,flabrum,flaccid,flack,flacked,flacker,flacket,flaff,flaffer,flag,flagger,flaggy,flaglet,flagman,flagon,flail,flair,flaith,flak,flakage,flake,flaker,flakily,flaky,flam,flamant,flamb,flame,flamed,flamen,flamer,flamfew,flaming,flamy,flan,flanch,flandan,flane,flange,flanger,flank,flanked,flanker,flanky,flannel,flanque,flap,flapper,flare,flaring,flary,flaser,flash,flasher,flashet,flashly,flashy,flask,flasker,flasket,flasque,flat,flatcap,flatcar,flatdom,flated,flathat,flatlet,flatly,flatman,flatten,flatter,flattie,flattop,flatus,flatway,flaught,flaunt,flaunty,flavedo,flavic,flavid,flavin,flavine,flavo,flavone,flavor,flavory,flavour,flaw,flawed,flawful,flawn,flawy,flax,flaxen,flaxman,flaxy,flay,flayer,flea,fleam,fleay,flebile,fleche,fleck,flecken,flecker,flecky,flector,fled,fledge,fledgy,flee,fleece,fleeced,fleecer,fleech,fleecy,fleer,fleerer,fleet,fleeter,fleetly,flemish,flench,flense,flenser,flerry,flesh,fleshed,fleshen,flesher,fleshly,fleshy,flet,fletch,flether,fleuret,fleury,flew,flewed,flewit,flews,flex,flexed,flexile,flexion,flexor,flexure,fley,flick,flicker,flicky,flidder,flier,fligger,flight,flighty,flimmer,flimp,flimsy,flinch,flinder,fling,flinger,flingy,flint,flinter,flinty,flioma,flip,flipe,flipper,flirt,flirter,flirty,flisk,flisky,flit,flitch,flite,fliting,flitter,flivver,flix,float,floater,floaty,flob,flobby,floc,floccus,flock,flocker,flocky,flocoon,flodge,floe,floey,flog,flogger,flokite,flong,flood,flooded,flooder,floody,floor,floorer,floozy,flop,flopper,floppy,flora,floral,floran,florate,floreal,florent,flores,floret,florid,florin,florist,floroon,florula,flory,flosh,floss,flosser,flossy,flot,flota,flotage,flotant,flotsam,flounce,flour,floury,flouse,flout,flouter,flow,flowage,flower,flowery,flowing,flown,flowoff,flu,fluate,fluavil,flub,flubdub,flucan,flue,flued,flueman,fluency,fluent,fluer,fluey,fluff,fluffer,fluffy,fluible,fluid,fluidal,fluidic,fluidly,fluke,fluked,flukily,fluking,fluky,flume,flummer,flummox,flump,flung,flunk,flunker,flunky,fluor,fluoran,fluoric,fluoryl,flurn,flurr,flurry,flush,flusher,flushy,flusk,flusker,fluster,flute,fluted,fluter,flutina,fluting,flutist,flutter,fluty,fluvial,flux,fluxer,fluxile,fluxion,fly,flyable,flyaway,flyback,flyball,flybane,flybelt,flyblow,flyboat,flyboy,flyer,flyflap,flying,flyleaf,flyless,flyman,flyness,flype,flytail,flytier,flytrap,flyway,flywort,foal,foaly,foam,foambow,foamer,foamily,foaming,foamy,fob,focal,focally,foci,focoids,focsle,focus,focuser,fod,fodda,fodder,foder,fodge,fodgel,fodient,foe,foehn,foeish,foeless,foelike,foeman,foeship,fog,fogbow,fogdog,fogdom,fogey,foggage,fogged,fogger,foggily,foggish,foggy,foghorn,fogle,fogless,fogman,fogo,fogon,fogou,fogram,fogus,fogy,fogydom,fogyish,fogyism,fohat,foible,foil,foiler,foiling,foining,foison,foist,foister,foisty,foiter,fold,foldage,folded,folden,folder,folding,foldure,foldy,fole,folia,foliage,folial,foliar,foliary,foliate,folie,folio,foliole,foliose,foliot,folious,folium,folk,folkmot,folksy,folkway,folky,folles,follis,follow,folly,foment,fomes,fomites,fondak,fondant,fondish,fondle,fondler,fondly,fondu,fondue,fonduk,fonly,fonnish,fono,fons,font,fontal,fonted,fontful,fontlet,foo,food,fooder,foodful,foody,fool,fooldom,foolery,fooless,fooling,foolish,fooner,fooster,foot,footage,footboy,footed,footer,footful,foothot,footing,footle,footler,footman,footpad,foots,footway,footy,foozle,foozler,fop,fopling,foppery,foppish,foppy,fopship,for,fora,forage,forager,foramen,forane,foray,forayer,forb,forbade,forbar,forbear,forbid,forbit,forbled,forblow,forbore,forbow,forby,force,forced,forceps,forcer,forche,forcing,ford,fordays,fording,fordo,fordone,fordy,fore,foreact,forearm,forebay,forecar,foreday,forefin,forefit,forego,foreign,forel,forelay,foreleg,foreman,forepad,forepaw,foreran,forerib,forerun,foresay,foresee,foreset,foresin,forest,foresty,foretop,foreuse,forever,forevow,forfar,forfare,forfars,forfeit,forfend,forge,forged,forger,forgery,forget,forgie,forging,forgive,forgo,forgoer,forgot,forgrow,forhoo,forhooy,forhow,forint,fork,forked,forker,forkful,forkman,forky,forleft,forlet,forlorn,form,formal,formant,format,formate,forme,formed,formee,formel,formene,former,formful,formic,formin,forming,formose,formula,formule,formy,formyl,fornent,fornix,forpet,forpine,forpit,forrad,forrard,forride,forrit,forrue,forsake,forset,forslow,fort,forte,forth,forthgo,forthy,forties,fortify,fortin,fortis,fortlet,fortune,forty,forum,forward,forwean,forwent,fosh,fosie,fossa,fossage,fossane,fosse,fossed,fossick,fossil,fossor,fossula,fossule,fostell,foster,fot,fotch,fother,fotmal,fotui,fou,foud,fouette,fougade,fought,foughty,foujdar,foul,foulage,foulard,fouler,fouling,foulish,foully,foumart,foun,found,founder,foundry,fount,four,fourble,fourche,fourer,fourre,fourth,foussa,foute,fouter,fouth,fovea,foveal,foveate,foveola,foveole,fow,fowk,fowl,fowler,fowlery,fowling,fox,foxbane,foxchop,foxer,foxery,foxfeet,foxfish,foxhole,foxily,foxing,foxish,foxlike,foxship,foxskin,foxtail,foxwood,foxy,foy,foyaite,foyboat,foyer,fozy,fra,frab,frabbit,frabous,fracas,frache,frack,fracted,frae,fraghan,fragile,fraid,fraik,frail,frailly,frailty,fraise,fraiser,frame,framea,framed,framer,framing,frammit,franc,franco,frank,franker,frankly,frantic,franzy,frap,frappe,frasco,frase,frasier,frass,frat,fratch,fratchy,frater,fratery,fratry,fraud,fraught,frawn,fraxin,fray,frayed,fraying,frayn,fraze,frazer,frazil,frazzle,freak,freaky,fream,freath,freck,frecken,frecket,freckle,freckly,free,freed,freedom,freeing,freeish,freely,freeman,freer,freet,freety,freeway,freeze,freezer,freight,freir,freit,freity,fremd,fremdly,frenal,frenate,frenum,frenzy,fresco,fresh,freshen,freshet,freshly,fresnel,fresno,fret,fretful,frett,frette,fretted,fretter,fretty,fretum,friable,friand,friar,friarly,friary,frib,fribble,fribby,fried,friend,frier,frieze,friezer,friezy,frig,frigate,friggle,fright,frighty,frigid,frijol,frike,frill,frilled,friller,frilly,frim,fringe,fringed,fringy,frisca,frisk,frisker,frisket,frisky,frison,frist,frisure,frit,frith,fritt,fritter,frivol,frixion,friz,frize,frizer,frizz,frizzer,frizzle,frizzly,frizzy,fro,frock,froe,frog,frogbit,frogeye,frogged,froggy,frogleg,froglet,frogman,froise,frolic,from,frond,fronded,front,frontad,frontal,fronted,fronter,froom,frore,frory,frosh,frost,frosted,froster,frosty,frot,froth,frother,frothy,frotton,frough,froughy,frounce,frow,froward,frower,frowl,frown,frowner,frowny,frowst,frowsty,frowy,frowze,frowzly,frowzy,froze,frozen,fructed,frugal,fruggan,fruit,fruited,fruiter,fruity,frump,frumple,frumpy,frush,frustum,frutify,fry,fryer,fu,fub,fubby,fubsy,fucate,fuchsin,fuci,fucoid,fucosan,fucose,fucous,fucus,fud,fuddle,fuddler,fuder,fudge,fudger,fudgy,fuel,fueler,fuerte,fuff,fuffy,fugal,fugally,fuggy,fugient,fugle,fugler,fugu,fugue,fuguist,fuidhir,fuji,fulcral,fulcrum,fulfill,fulgent,fulgid,fulgide,fulgor,fulham,fulk,full,fullam,fuller,fullery,fulling,fullish,fullom,fully,fulmar,fulmine,fulsome,fulth,fulvene,fulvid,fulvous,fulwa,fulyie,fulzie,fum,fumado,fumage,fumaric,fumaryl,fumble,fumbler,fume,fumer,fumet,fumette,fumily,fuming,fumose,fumous,fumy,fun,fund,fundal,funded,funder,fundi,fundic,funds,fundus,funeral,funest,fungal,fungate,fungi,fungian,fungic,fungin,fungo,fungoid,fungose,fungous,fungus,fungusy,funicle,funis,funk,funker,funky,funnel,funnily,funny,funori,funt,fur,fural,furan,furazan,furbish,furca,furcal,furcate,furcula,furdel,furfur,furiant,furied,furify,furil,furilic,furiosa,furioso,furious,furison,furl,furler,furless,furlong,furnace,furnage,furner,furnish,furoic,furoid,furoin,furole,furor,furore,furphy,furred,furrier,furrily,furring,furrow,furrowy,furry,further,furtive,fury,furyl,furze,furzed,furzery,furzy,fusain,fusate,fusc,fuscin,fuscous,fuse,fused,fusee,fusht,fusible,fusibly,fusil,fusilly,fusion,fusoid,fuss,fusser,fussify,fussily,fussock,fussy,fust,fustee,fustet,fustian,fustic,fustily,fustin,fustle,fusty,fusuma,fusure,fut,futchel,fute,futhorc,futile,futtock,futural,future,futuric,futwa,fuye,fuze,fuzz,fuzzily,fuzzy,fyke,fylfot,fyrd,g,ga,gab,gabbard,gabber,gabble,gabbler,gabbro,gabby,gabelle,gabgab,gabi,gabion,gable,gablet,gablock,gaby,gad,gadbee,gadbush,gadded,gadder,gaddi,gadding,gaddish,gade,gadfly,gadge,gadger,gadget,gadid,gadling,gadman,gadoid,gadroon,gadsman,gaduin,gadwall,gaen,gaet,gaff,gaffe,gaffer,gaffle,gag,gagate,gage,gagee,gageite,gager,gagger,gaggery,gaggle,gaggler,gagman,gagor,gagroot,gahnite,gaiassa,gaiety,gaily,gain,gainage,gaine,gainer,gainful,gaining,gainly,gains,gainsay,gainset,gainst,gair,gait,gaited,gaiter,gaiting,gaize,gaj,gal,gala,galah,galanas,galanga,galant,galany,galatea,galaxy,galban,gale,galea,galeage,galeate,galee,galeeny,galeid,galena,galenic,galeoid,galera,galerum,galerus,galet,galey,galgal,gali,galilee,galiot,galipot,gall,galla,gallah,gallant,gallate,galled,gallein,galleon,galler,gallery,gallet,galley,gallfly,gallic,galline,galling,gallium,gallnut,gallon,galloon,gallop,gallous,gallows,gally,galoot,galop,galore,galosh,galp,galt,galumph,galuth,galyac,galyak,gam,gamahe,gamasid,gamb,gamba,gambade,gambado,gambang,gambeer,gambet,gambia,gambier,gambist,gambit,gamble,gambler,gamboge,gambol,gambrel,game,gamebag,gameful,gamely,gamene,gametal,gamete,gametic,gamic,gamily,gamin,gaming,gamma,gammer,gammick,gammock,gammon,gammy,gamont,gamori,gamp,gamut,gamy,gan,ganam,ganch,gander,gandul,gandum,gane,ganef,gang,ganga,gangan,gangava,gangdom,gange,ganger,ganging,gangism,ganglia,gangly,gangman,gangrel,gangue,gangway,ganja,ganner,gannet,ganoid,ganoin,ganosis,gansel,gansey,gansy,gant,ganta,gantang,gantlet,ganton,gantry,gantsl,ganza,ganzie,gaol,gaoler,gap,gapa,gape,gaper,gapes,gaping,gapo,gappy,gapy,gar,gara,garad,garage,garance,garava,garawi,garb,garbage,garbel,garbell,garbill,garble,garbler,garboil,garbure,garce,gardant,gardeen,garden,gardeny,gardy,gare,gareh,garetta,garfish,garget,gargety,gargle,gargol,garial,gariba,garish,garland,garle,garlic,garment,garn,garnel,garner,garnet,garnets,garnett,garnetz,garnice,garniec,garnish,garoo,garrafa,garran,garret,garrot,garrote,garrupa,garse,garsil,garston,garten,garter,garth,garum,garvey,garvock,gas,gasbag,gaseity,gaseous,gash,gashes,gashful,gashly,gashy,gasify,gasket,gaskin,gasking,gaskins,gasless,gaslit,gaslock,gasman,gasp,gasper,gasping,gaspy,gasser,gassing,gassy,gast,gaster,gastral,gastric,gastrin,gat,gata,gatch,gate,gateado,gateage,gated,gateman,gater,gateway,gather,gating,gator,gatter,gau,gaub,gauby,gauche,gaud,gaudery,gaudful,gaudily,gaudy,gaufer,gauffer,gauffre,gaufre,gauge,gauger,gauging,gaulin,gault,gaulter,gaum,gaumish,gaumy,gaun,gaunt,gaunted,gauntly,gauntry,gaunty,gaup,gaupus,gaur,gaus,gauss,gauster,gaut,gauze,gauzily,gauzy,gavall,gave,gavel,gaveler,gavial,gavotte,gavyuti,gaw,gawby,gawcie,gawk,gawkily,gawkish,gawky,gawm,gawn,gawney,gawsie,gay,gayal,gayatri,gaybine,gaycat,gayish,gayment,gayness,gaysome,gayyou,gaz,gazabo,gaze,gazebo,gazee,gazel,gazelle,gazer,gazette,gazi,gazing,gazon,gazy,ge,geal,gean,gear,gearbox,geared,gearing,gearman,gearset,gease,geason,geat,gebang,gebanga,gebbie,gebur,geck,gecko,geckoid,ged,gedackt,gedder,gedeckt,gedrite,gee,geebong,geebung,geejee,geek,geelbec,geerah,geest,geet,geezer,gegg,geggee,gegger,geggery,gein,geira,geisha,geison,geitjie,gel,gelable,gelada,gelatin,geld,geldant,gelder,gelding,gelid,gelidly,gelilah,gell,gelly,gelong,gelose,gelosin,gelt,gem,gemauve,gemel,gemeled,gemless,gemlike,gemma,gemmae,gemmate,gemmer,gemmily,gemmoid,gemmula,gemmule,gemmy,gemot,gemsbok,gemul,gemuti,gemwork,gen,gena,genal,genapp,genarch,gender,gene,genear,geneat,geneki,genep,genera,general,generic,genesic,genesis,genet,genetic,geneva,genial,genian,genic,genie,genii,genin,genion,genip,genipa,genipap,genista,genital,genitor,genius,genizah,genoese,genom,genome,genomic,genos,genre,genro,gens,genson,gent,genteel,gentes,gentian,gentile,gentle,gently,gentman,gentry,genty,genu,genua,genual,genuine,genus,genys,geo,geobios,geodal,geode,geodesy,geodete,geodic,geodist,geoduck,geoform,geogeny,geogony,geoid,geoidal,geology,geomaly,geomant,geomyid,geonoma,geopony,georama,georgic,geosid,geoside,geotaxy,geotic,geoty,ger,gerah,geranic,geranyl,gerate,gerated,geratic,geraty,gerb,gerbe,gerbil,gercrow,gerefa,gerenda,gerent,gerenuk,gerim,gerip,germ,germal,german,germane,germen,germin,germina,germing,germon,germule,germy,gernitz,geront,geronto,gers,gersum,gerund,gerusia,gervao,gesith,gesning,gesso,gest,gestant,gestate,geste,gested,gesten,gestic,gestion,gesture,get,geta,getah,getaway,gether,getling,getter,getting,getup,geum,gewgaw,gewgawy,gey,geyan,geyser,gez,ghafir,ghaist,ghalva,gharial,gharnao,gharry,ghastly,ghat,ghatti,ghatwal,ghazi,ghazism,ghebeta,ghee,gheleem,gherkin,ghetti,ghetto,ghizite,ghoom,ghost,ghoster,ghostly,ghosty,ghoul,ghrush,ghurry,giant,giantly,giantry,giardia,giarra,giarre,gib,gibaro,gibbals,gibbed,gibber,gibbet,gibbles,gibbon,gibbose,gibbous,gibbus,gibby,gibe,gibel,giber,gibing,gibleh,giblet,giblets,gibus,gid,giddap,giddea,giddify,giddily,giddy,gidgee,gie,gied,gien,gif,gift,gifted,giftie,gig,gigback,gigeria,gigful,gigger,giggish,giggit,giggle,giggler,giggly,giglet,giglot,gigman,gignate,gigolo,gigot,gigsman,gigster,gigtree,gigunu,gilbert,gild,gilded,gilden,gilder,gilding,gilguy,gilia,gilim,gill,gilled,giller,gillie,gilling,gilly,gilo,gilpy,gilse,gilt,giltcup,gim,gimbal,gimble,gimel,gimlet,gimlety,gimmal,gimmer,gimmick,gimp,gimped,gimper,gimping,gin,ging,ginger,gingery,gingham,gingili,gingiva,gink,ginkgo,ginned,ginner,ginners,ginnery,ginney,ginning,ginnle,ginny,ginseng,ginward,gio,gip,gipon,gipper,gipser,gipsire,giraffe,girasol,girba,gird,girder,girding,girdle,girdler,girl,girleen,girlery,girlie,girling,girlish,girlism,girly,girn,girny,giro,girr,girse,girsh,girsle,girt,girth,gisarme,gish,gisla,gisler,gist,git,gitalin,gith,gitonin,gitoxin,gittern,gittith,give,given,giver,givey,giving,gizz,gizzard,gizzen,gizzern,glace,glaceed,glacial,glacier,glacis,glack,glad,gladden,gladdon,gladdy,glade,gladeye,gladful,gladify,gladii,gladius,gladly,glady,glaga,glaieul,glaik,glaiket,glair,glairy,glaive,glaived,glaked,glaky,glam,glamour,glance,glancer,gland,glandes,glans,glar,glare,glarily,glaring,glarry,glary,glashan,glass,glassen,glasser,glasses,glassie,glassy,glaucin,glaum,glaur,glaury,glaver,glaze,glazed,glazen,glazer,glazier,glazily,glazing,glazy,gleam,gleamy,glean,gleaner,gleary,gleba,glebal,glebe,glebous,glede,gledy,glee,gleed,gleeful,gleek,gleeman,gleet,gleety,gleg,glegly,glen,glenoid,glent,gleyde,glia,gliadin,glial,glib,glibly,glidder,glide,glider,gliding,gliff,glime,glimmer,glimpse,glink,glint,glioma,gliosa,gliosis,glirine,glisk,glisky,glisten,glister,glitter,gloam,gloat,gloater,global,globate,globe,globed,globin,globoid,globose,globous,globule,globy,glochid,glochis,gloea,gloeal,glom,glome,glommox,glomus,glonoin,gloom,gloomth,gloomy,glop,gloppen,glor,glore,glorify,glory,gloss,glossa,glossal,glossed,glosser,glossic,glossy,glost,glottal,glottic,glottid,glottis,glout,glove,glover,glovey,gloving,glow,glower,glowfly,glowing,gloy,gloze,glozing,glub,glucase,glucid,glucide,glucina,glucine,gluck,glucose,glue,glued,gluepot,gluer,gluey,glug,gluish,glum,gluma,glumal,glume,glumly,glummy,glumose,glump,glumpy,glunch,glusid,gluside,glut,glutch,gluteal,gluten,gluteus,glutin,glutoid,glutose,glutter,glutton,glycid,glycide,glycine,glycol,glycose,glycyl,glyoxal,glyoxim,glyoxyl,glyph,glyphic,glyptic,glyster,gnabble,gnar,gnarl,gnarled,gnarly,gnash,gnat,gnathal,gnathic,gnatter,gnatty,gnaw,gnawer,gnawing,gnawn,gneiss,gneissy,gnome,gnomed,gnomic,gnomide,gnomish,gnomist,gnomon,gnosis,gnostic,gnu,go,goa,goad,goaf,goal,goalage,goalee,goalie,goanna,goat,goatee,goateed,goatish,goatly,goaty,goave,gob,goback,goban,gobang,gobbe,gobber,gobbet,gobbin,gobbing,gobble,gobbler,gobby,gobelin,gobi,gobiid,gobioid,goblet,goblin,gobline,gobo,gobony,goburra,goby,gocart,god,goddard,godded,goddess,goddize,gode,godet,godhead,godhood,godkin,godless,godlet,godlike,godlily,godling,godly,godown,godpapa,godsend,godship,godson,godwit,goeduck,goel,goelism,goer,goes,goetia,goetic,goety,goff,goffer,goffle,gog,gogga,goggan,goggle,goggled,goggler,goggly,goglet,gogo,goi,going,goitcho,goiter,goitral,gol,gola,golach,goladar,gold,goldbug,goldcup,golden,golder,goldie,goldin,goldish,goldtit,goldy,golee,golem,golf,golfdom,golfer,goli,goliard,goliath,golland,gollar,golly,goloe,golpe,gomari,gomart,gomavel,gombay,gombeen,gomer,gomeral,gomlah,gomuti,gon,gonad,gonadal,gonadic,gonagra,gonakie,gonal,gonapod,gondang,gondite,gondola,gone,goner,gong,gongman,gonia,goniac,gonial,goniale,gonid,gonidia,gonidic,gonimic,gonion,gonitis,gonium,gonne,gony,gonys,goo,goober,good,gooding,goodish,goodly,goodman,goods,goody,goof,goofer,goofily,goofy,googly,googol,googul,gook,gool,goolah,gools,gooma,goon,goondie,goonie,goose,goosery,goosish,goosy,gopher,gopura,gor,gora,goracco,goral,goran,gorb,gorbal,gorbet,gorble,gorce,gorcock,gorcrow,gore,gorer,gorevan,gorfly,gorge,gorged,gorger,gorget,gorglin,gorhen,goric,gorilla,gorily,goring,gorlin,gorlois,gormaw,gormed,gorra,gorraf,gorry,gorse,gorsedd,gorsy,gory,gos,gosain,goschen,gosh,goshawk,goslet,gosling,gosmore,gospel,gosport,gossan,gossard,gossip,gossipy,gossoon,gossy,got,gotch,gote,gothite,gotra,gotraja,gotten,gouaree,gouge,gouger,goujon,goulash,goumi,goup,gourami,gourd,gourde,gourdy,gourmet,gousty,gout,goutify,goutily,goutish,goutte,gouty,gove,govern,gowan,gowdnie,gowf,gowfer,gowk,gowked,gowkit,gowl,gown,gownlet,gowpen,goy,goyim,goyin,goyle,gozell,gozzard,gra,grab,grabber,grabble,graben,grace,gracer,gracile,grackle,grad,gradal,gradate,graddan,grade,graded,gradely,grader,gradin,gradine,grading,gradual,gradus,graff,graffer,graft,grafted,grafter,graham,grail,grailer,grain,grained,grainer,grainy,graip,graisse,graith,grallic,gram,grama,grame,grammar,gramme,gramp,grampa,grampus,granada,granage,granary,granate,granch,grand,grandam,grandee,grandly,grandma,grandpa,grane,grange,granger,granite,grank,grannom,granny,grano,granose,grant,grantee,granter,grantor,granula,granule,granza,grape,graped,grapery,graph,graphic,graphy,graping,grapnel,grappa,grapple,grapy,grasp,grasper,grass,grassed,grasser,grasset,grassy,grat,grate,grater,grather,gratify,grating,gratis,gratten,graupel,grave,graved,gravel,gravely,graven,graver,gravic,gravid,graving,gravity,gravure,gravy,grawls,gray,grayfly,grayish,graylag,grayly,graze,grazer,grazier,grazing,grease,greaser,greasy,great,greaten,greater,greatly,greave,greaved,greaves,grebe,grece,gree,greed,greedy,green,greener,greeney,greenly,greenth,greenuk,greeny,greet,greeter,gregal,gregale,grege,greggle,grego,greige,grein,greisen,gremial,gremlin,grenade,greund,grew,grey,greyly,gribble,grice,grid,griddle,gride,griece,grieced,grief,grieve,grieved,griever,griff,griffe,griffin,griffon,grift,grifter,grig,grignet,grigri,grike,grill,grille,grilled,griller,grilse,grim,grimace,grime,grimful,grimily,grimly,grimme,grimp,grimy,grin,grinch,grind,grinder,grindle,gringo,grinner,grinny,grip,gripe,griper,griping,gripman,grippal,grippe,gripper,gripple,grippy,gripy,gris,grisard,griskin,grisly,grison,grist,grister,gristle,gristly,gristy,grit,grith,grits,gritten,gritter,grittle,gritty,grivet,grivna,grizzle,grizzly,groan,groaner,groat,groats,grobian,grocer,grocery,groff,grog,groggy,grogram,groin,groined,grommet,groom,groomer,groomy,groop,groose,groot,grooty,groove,groover,groovy,grope,groper,groping,gropple,gros,groser,groset,gross,grossen,grosser,grossly,grosso,grosz,groszy,grot,grotto,grouch,grouchy,grouf,grough,ground,grounds,groundy,group,grouped,grouper,grouse,grouser,grousy,grout,grouter,grouts,grouty,grouze,grove,groved,grovel,grovy,grow,growan,growed,grower,growing,growl,growler,growly,grown,grownup,growse,growth,growthy,grozart,grozet,grr,grub,grubbed,grubber,grubby,grubs,grudge,grudger,grue,gruel,grueler,gruelly,gruff,gruffly,gruffs,gruffy,grufted,grugru,gruine,grum,grumble,grumbly,grume,grumly,grummel,grummet,grumose,grumous,grump,grumph,grumphy,grumpy,grun,grundy,grunion,grunt,grunter,gruntle,grush,grushie,gruss,grutch,grutten,gryde,grylli,gryllid,gryllos,gryllus,grysbok,guaba,guacimo,guacin,guaco,guaiac,guaiol,guaka,guama,guan,guana,guanaco,guanase,guanay,guango,guanine,guanize,guano,guanyl,guao,guapena,guar,guara,guarabu,guarana,guarani,guard,guarded,guarder,guardo,guariba,guarri,guasa,guava,guavina,guayaba,guayabi,guayabo,guayule,guaza,gubbo,gucki,gud,gudame,guddle,gude,gudge,gudgeon,gudget,gudok,gue,guebucu,guemal,guenepe,guenon,guepard,guerdon,guereza,guess,guesser,guest,guesten,guester,gufa,guff,guffaw,guffer,guffin,guffy,gugal,guggle,gugglet,guglet,guglia,guglio,gugu,guhr,guib,guiba,guidage,guide,guider,guidman,guidon,guige,guignol,guijo,guild,guilder,guildic,guildry,guile,guilery,guilt,guilty,guily,guimpe,guinea,guipure,guisard,guise,guiser,guising,guitar,gul,gula,gulae,gulaman,gular,gularis,gulch,gulden,gule,gules,gulf,gulfy,gulgul,gulix,gull,gullery,gullet,gullion,gullish,gully,gulonic,gulose,gulp,gulper,gulpin,gulping,gulpy,gulsach,gum,gumbo,gumboil,gumby,gumdrop,gumihan,gumless,gumlike,gumly,gumma,gummage,gummata,gummed,gummer,gumming,gummite,gummose,gummous,gummy,gump,gumpus,gumshoe,gumweed,gumwood,gun,guna,gunate,gunboat,gundi,gundy,gunebo,gunfire,gunge,gunite,gunj,gunk,gunl,gunless,gunlock,gunman,gunnage,gunne,gunnel,gunner,gunnery,gunnies,gunning,gunnung,gunny,gunong,gunplay,gunrack,gunsel,gunshop,gunshot,gunsman,gunster,gunter,gunwale,gunyah,gunyang,gunyeh,gup,guppy,gur,gurdle,gurge,gurgeon,gurges,gurgle,gurglet,gurgly,gurjun,gurk,gurl,gurly,gurnard,gurnet,gurniad,gurr,gurrah,gurry,gurt,guru,gush,gusher,gushet,gushily,gushing,gushy,gusla,gusle,guss,gusset,gussie,gust,gustful,gustily,gusto,gusty,gut,gutless,gutlike,gutling,gutt,gutta,guttate,gutte,gutter,guttery,gutti,guttide,guttie,guttle,guttler,guttula,guttule,guttus,gutty,gutweed,gutwise,gutwort,guy,guydom,guyer,guz,guze,guzzle,guzzler,gwag,gweduc,gweed,gweeon,gwely,gwine,gwyniad,gyle,gym,gymel,gymnast,gymnic,gymnics,gymnite,gymnure,gympie,gyn,gyne,gynecic,gynic,gynics,gyp,gype,gypper,gyps,gypsine,gypsite,gypsous,gypster,gypsum,gypsy,gypsyfy,gypsyry,gyral,gyrally,gyrant,gyrate,gyrator,gyre,gyrene,gyri,gyric,gyrinid,gyro,gyrocar,gyroma,gyron,gyronny,gyrose,gyrous,gyrus,gyte,gytling,gyve,h,ha,haab,haaf,habble,habeas,habena,habenal,habenar,habile,habille,habit,habitan,habitat,habited,habitue,habitus,habnab,haboob,habu,habutai,hache,hachure,hack,hackbut,hacked,hackee,hacker,hackery,hackin,hacking,hackle,hackler,hacklog,hackly,hackman,hackney,hacksaw,hacky,had,hadbot,hadden,haddie,haddo,haddock,hade,hading,hadj,hadji,hadland,hadrome,haec,haem,haemony,haet,haff,haffet,haffle,hafiz,hafnium,hafnyl,haft,hafter,hag,hagboat,hagborn,hagbush,hagdon,hageen,hagfish,haggada,haggard,hagged,hagger,haggis,haggish,haggle,haggler,haggly,haggy,hagi,hagia,haglet,haglike,haglin,hagride,hagrope,hagseed,hagship,hagweed,hagworm,hah,haik,haikai,haikal,haikwan,hail,hailer,hailse,haily,hain,haine,hair,haircut,hairdo,haire,haired,hairen,hairif,hairlet,hairpin,hairup,hairy,haje,hajib,hajilij,hak,hakam,hakdar,hake,hakeem,hakim,hako,haku,hala,halakah,halakic,halal,halberd,halbert,halch,halcyon,hale,halebi,haler,halerz,half,halfer,halfman,halfway,halibiu,halibut,halide,halidom,halite,halitus,hall,hallage,hallah,hallan,hallel,hallex,halling,hallman,halloo,hallow,hallux,hallway,halma,halo,halogen,haloid,hals,halse,halsen,halt,halter,halting,halurgy,halutz,halvans,halve,halved,halver,halves,halyard,ham,hamal,hamald,hamate,hamated,hamatum,hamble,hame,hameil,hamel,hamfat,hami,hamlah,hamlet,hammada,hammam,hammer,hammock,hammy,hamose,hamous,hamper,hamsa,hamster,hamular,hamule,hamulus,hamus,hamza,han,hanaper,hanbury,hance,hanced,hanch,hand,handbag,handbow,handcar,handed,hander,handful,handgun,handily,handle,handled,handler,handout,handsaw,handsel,handset,handy,hangar,hangby,hangdog,hange,hangee,hanger,hangie,hanging,hangle,hangman,hangout,hangul,hanif,hank,hanker,hankie,hankle,hanky,hanna,hansa,hanse,hansel,hansom,hant,hantle,hao,haole,haoma,haori,hap,hapless,haplite,haploid,haploma,haplont,haply,happen,happier,happify,happily,happing,happy,hapten,haptene,haptere,haptic,haptics,hapu,hapuku,harass,haratch,harbi,harbor,hard,harden,harder,hardily,hardim,hardish,hardly,hardock,hardpan,hardy,hare,harebur,harelip,harem,harfang,haricot,harish,hark,harka,harl,harling,harlock,harlot,harm,harmal,harmala,harman,harmel,harmer,harmful,harmine,harmony,harmost,harn,harness,harnpan,harp,harpago,harper,harpier,harpist,harpoon,harpula,harr,harrier,harrow,harry,harsh,harshen,harshly,hart,hartal,hartin,hartite,harvest,hasan,hash,hashab,hasher,hashish,hashy,hask,hasky,haslet,haslock,hasp,hassar,hassel,hassle,hassock,hasta,hastate,hastati,haste,hasten,haster,hastily,hastish,hastler,hasty,hat,hatable,hatband,hatbox,hatbrim,hatch,hatchel,hatcher,hatchet,hate,hateful,hater,hatful,hath,hathi,hatless,hatlike,hatpin,hatrack,hatrail,hatred,hatress,hatt,hatted,hatter,hattery,hatting,hattock,hatty,hau,hauberk,haugh,haught,haughty,haul,haulage,hauld,hauler,haulier,haulm,haulmy,haunch,haunchy,haunt,haunter,haunty,hause,hausen,hausse,hautboy,hauteur,havage,have,haveage,havel,haven,havener,havenet,havent,haver,haverel,haverer,havers,havier,havoc,haw,hawbuck,hawer,hawk,hawkbit,hawked,hawker,hawkery,hawkie,hawking,hawkish,hawknut,hawky,hawm,hawok,hawse,hawser,hay,haya,hayband,haybird,haybote,haycap,haycart,haycock,hayey,hayfork,haylift,hayloft,haymow,hayrack,hayrake,hayrick,hayseed,haysel,haysuck,haytime,hayward,hayweed,haywire,hayz,hazard,haze,hazel,hazeled,hazelly,hazen,hazer,hazily,hazing,hazle,hazy,hazzan,he,head,headcap,headed,header,headful,headily,heading,headman,headset,headway,heady,heaf,heal,heald,healder,healer,healful,healing,health,healthy,heap,heaper,heaps,heapy,hear,hearer,hearing,hearken,hearsay,hearse,hearst,heart,hearted,hearten,hearth,heartly,hearts,hearty,heat,heater,heatful,heath,heathen,heather,heathy,heating,heaume,heaumer,heave,heaven,heavens,heaver,heavies,heavily,heaving,heavity,heavy,hebamic,hebenon,hebete,hebetic,hech,heck,heckle,heckler,hectare,hecte,hectic,hector,heddle,heddler,hedebo,heder,hederic,hederin,hedge,hedger,hedging,hedgy,hedonic,heed,heeder,heedful,heedily,heedy,heehaw,heel,heelcap,heeled,heeler,heeltap,heer,heeze,heezie,heezy,heft,hefter,heftily,hefty,hegari,hegemon,hegira,hegumen,hei,heiau,heifer,heigh,height,heii,heimin,heinous,heir,heirdom,heiress,heitiki,hekteus,helbeh,helcoid,helder,hele,helenin,heliast,helical,heliced,helices,helicin,helicon,helide,heling,helio,helioid,helium,helix,hell,hellbox,hellcat,helldog,heller,helleri,hellhag,hellier,hellion,hellish,hello,helluo,helly,helm,helmage,helmed,helmet,helodes,heloe,heloma,helonin,helosis,helotry,help,helper,helpful,helping,helply,helve,helvell,helver,helvite,hem,hemad,hemal,hemapod,hemase,hematal,hematic,hematid,hematin,heme,hemen,hemera,hemiamb,hemic,hemin,hemina,hemine,heminee,hemiope,hemipic,heml,hemlock,hemmel,hemmer,hemocry,hemoid,hemol,hemopod,hemp,hempen,hempy,hen,henad,henbane,henbill,henbit,hence,hencoop,hencote,hend,hendly,henfish,henism,henlike,henna,hennery,hennin,hennish,henny,henotic,henpeck,henpen,henry,hent,henter,henware,henwife,henwise,henyard,hep,hepar,heparin,hepatic,hepcat,heppen,hepper,heptace,heptad,heptal,heptane,heptene,heptine,heptite,heptoic,heptose,heptyl,heptyne,her,herald,herb,herbage,herbal,herbane,herbary,herbish,herbist,herblet,herbman,herbose,herbous,herby,herd,herdboy,herder,herdic,herding,here,hereat,hereby,herein,herem,hereof,hereon,heresy,heretic,hereto,herile,heriot,heritor,herl,herling,herma,hermaic,hermit,hern,hernani,hernant,herne,hernia,hernial,hero,heroess,heroic,heroid,heroify,heroin,heroine,heroism,heroize,heron,heroner,heronry,herpes,herring,hers,herse,hersed,herself,hership,hersir,hertz,hessite,hest,hestern,het,hetaera,hetaery,heteric,hetero,hething,hetman,hetter,heuau,heugh,heumite,hevi,hew,hewable,hewel,hewer,hewhall,hewn,hewt,hex,hexa,hexace,hexacid,hexact,hexad,hexadic,hexagon,hexagyn,hexane,hexaped,hexapla,hexapod,hexarch,hexene,hexer,hexerei,hexeris,hexine,hexis,hexitol,hexode,hexogen,hexoic,hexone,hexonic,hexosan,hexose,hexyl,hexylic,hexyne,hey,heyday,hi,hia,hiant,hiatal,hiate,hiation,hiatus,hibbin,hic,hicatee,hiccup,hick,hickey,hickory,hidable,hidage,hidalgo,hidated,hidden,hide,hided,hideous,hider,hidling,hie,hieder,hield,hiemal,hieron,hieros,higdon,higgle,higgler,high,highboy,higher,highest,highish,highly,highman,hight,hightop,highway,higuero,hijack,hike,hiker,hilch,hilding,hill,hiller,hillet,hillman,hillock,hilltop,hilly,hilsa,hilt,hilum,hilus,him,himp,himself,himward,hin,hinau,hinch,hind,hinder,hing,hinge,hinger,hingle,hinney,hinny,hinoid,hinoki,hint,hinter,hiodont,hip,hipbone,hipe,hiper,hiphalt,hipless,hipmold,hipped,hippen,hippian,hippic,hipping,hippish,hipple,hippo,hippoid,hippus,hippy,hipshot,hipwort,hirable,hircine,hire,hired,hireman,hirer,hirmos,hiro,hirple,hirse,hirsel,hirsle,hirsute,his,hish,hisn,hispid,hiss,hisser,hissing,hist,histie,histoid,histon,histone,history,histrio,hit,hitch,hitcher,hitchy,hithe,hither,hitless,hitter,hive,hiver,hives,hizz,ho,hoar,hoard,hoarder,hoarily,hoarish,hoarse,hoarsen,hoary,hoast,hoatzin,hoax,hoaxee,hoaxer,hob,hobber,hobbet,hobbil,hobble,hobbler,hobbly,hobby,hoblike,hobnail,hobnob,hobo,hoboism,hocco,hock,hocker,hocket,hockey,hocky,hocus,hod,hodden,hodder,hoddle,hoddy,hodful,hodman,hoe,hoecake,hoedown,hoeful,hoer,hog,hoga,hogan,hogback,hogbush,hogfish,hogged,hogger,hoggery,hogget,hoggie,hoggin,hoggish,hoggism,hoggy,hogherd,hoghide,hoghood,hoglike,hogling,hogmace,hognose,hognut,hogpen,hogship,hogskin,hogsty,hogward,hogwash,hogweed,hogwort,hogyard,hoi,hoick,hoin,hoise,hoist,hoister,hoit,hoju,hokey,hokum,holard,holcad,hold,holdall,holden,holder,holding,holdout,holdup,hole,holeman,holer,holey,holia,holiday,holily,holing,holism,holl,holla,holler,hollin,hollo,hollock,hollong,hollow,holly,holm,holmia,holmic,holmium,holmos,holour,holster,holt,holy,holyday,homage,homager,home,homelet,homely,homelyn,homeoid,homer,homey,homily,hominal,hominid,hominy,homish,homo,homodox,homogen,homonym,homrai,homy,honda,hondo,hone,honest,honesty,honey,honeyed,hong,honied,honily,honk,honker,honor,honoree,honorer,hontish,hontous,hooch,hood,hoodcap,hooded,hoodful,hoodie,hoodlum,hoodman,hoodoo,hoodshy,hooey,hoof,hoofed,hoofer,hoofish,hooflet,hoofrot,hoofs,hoofy,hook,hookah,hooked,hooker,hookers,hookish,hooklet,hookman,hooktip,hookum,hookup,hooky,hoolock,hooly,hoon,hoop,hooped,hooper,hooping,hoopla,hoople,hoopman,hoopoe,hoose,hoosh,hoot,hootay,hooter,hoove,hooven,hoovey,hop,hopbine,hopbush,hope,hoped,hopeful,hopeite,hoper,hopi,hoplite,hopoff,hopped,hopper,hoppers,hoppet,hoppity,hopple,hoppy,hoptoad,hopvine,hopyard,hora,horal,horary,hordary,horde,hordein,horizon,horme,hormic,hormigo,hormion,hormist,hormone,hormos,horn,horned,horner,hornet,hornety,hornful,hornify,hornily,horning,hornish,hornist,hornito,hornlet,horntip,horny,horrent,horreum,horrid,horrify,horror,horse,horser,horsify,horsily,horsing,horst,horsy,hortite,hory,hosanna,hose,hosed,hosel,hoseman,hosier,hosiery,hospice,host,hostage,hostel,hoster,hostess,hostie,hostile,hosting,hostler,hostly,hostry,hot,hotbed,hotbox,hotch,hotel,hotfoot,hothead,hoti,hotly,hotness,hotspur,hotter,hottery,hottish,houbara,hough,hougher,hounce,hound,hounder,houndy,hour,hourful,houri,hourly,housage,housal,house,housel,houser,housing,housty,housy,houtou,houvari,hove,hovel,hoveler,hoven,hover,hoverer,hoverly,how,howadji,howbeit,howdah,howder,howdie,howdy,howe,howel,however,howff,howish,howk,howkit,howl,howler,howlet,howling,howlite,howso,hox,hoy,hoyden,hoyle,hoyman,huaca,huaco,huarizo,hub,hubb,hubba,hubber,hubble,hubbly,hubbub,hubby,hubshi,huchen,hucho,huck,huckle,hud,huddle,huddler,huddock,huddup,hue,hued,hueful,hueless,huer,huff,huffier,huffily,huffish,huffle,huffler,huffy,hug,huge,hugely,hugeous,hugger,hugging,huggle,hugsome,huh,huia,huipil,huitain,huke,hula,huldee,hulk,hulkage,hulking,hulky,hull,huller,hullock,hulloo,hulsite,hulster,hulu,hulver,hum,human,humane,humanly,humate,humble,humbler,humblie,humbly,humbo,humbug,humbuzz,humdrum,humect,humeral,humeri,humerus,humet,humetty,humhum,humic,humid,humidly,humidor,humific,humify,humin,humite,humlie,hummel,hummer,hummie,humming,hummock,humor,humoral,humous,hump,humped,humph,humpty,humpy,humus,hunch,hunchet,hunchy,hundi,hundred,hung,hunger,hungry,hunh,hunk,hunker,hunkers,hunkies,hunks,hunky,hunt,hunting,hup,hura,hurdies,hurdis,hurdle,hurdler,hurds,hure,hureek,hurgila,hurkle,hurl,hurled,hurler,hurley,hurling,hurlock,hurly,huron,hurr,hurrah,hurried,hurrier,hurrock,hurroo,hurry,hurst,hurt,hurted,hurter,hurtful,hurting,hurtle,hurty,husband,huse,hush,hushaby,husheen,hushel,husher,hushful,hushing,hushion,husho,husk,husked,husker,huskily,husking,husky,huso,huspil,huss,hussar,hussy,husting,hustle,hustler,hut,hutch,hutcher,hutchet,huthold,hutia,hutlet,hutment,huvelyk,huzoor,huzz,huzza,huzzard,hyaena,hyaline,hyalite,hyaloid,hybosis,hybrid,hydatid,hydnoid,hydrant,hydrate,hydrazo,hydria,hydric,hydride,hydro,hydroa,hydroid,hydrol,hydrome,hydrone,hydrops,hydrous,hydroxy,hydrula,hyena,hyenic,hyenine,hyenoid,hyetal,hygeist,hygiene,hygric,hygrine,hygroma,hying,hyke,hyle,hyleg,hylic,hylism,hylist,hyloid,hymen,hymenal,hymenic,hymn,hymnal,hymnary,hymner,hymnic,hymnist,hymnode,hymnody,hynde,hyne,hyoid,hyoidal,hyoidan,hyoides,hyp,hypate,hypaton,hyper,hypha,hyphal,hyphema,hyphen,hypho,hypnody,hypnoid,hypnone,hypo,hypogee,hypoid,hyponym,hypopus,hyporit,hyppish,hypural,hyraces,hyracid,hyrax,hyson,hyssop,i,iamb,iambi,iambic,iambist,iambize,iambus,iao,iatric,iba,iberite,ibex,ibices,ibid,ibidine,ibis,ibolium,ibota,icaco,ice,iceberg,iceboat,icebone,icebox,icecap,iced,icefall,icefish,iceland,iceleaf,iceless,icelike,iceman,iceroot,icework,ich,ichnite,icho,ichor,ichthus,ichu,icica,icicle,icicled,icily,iciness,icing,icon,iconic,iconism,icosian,icotype,icteric,icterus,ictic,ictuate,ictus,icy,id,idalia,idant,iddat,ide,idea,ideaed,ideaful,ideal,ideally,ideate,ideist,identic,ides,idgah,idiasm,idic,idiocy,idiom,idiot,idiotcy,idiotic,idiotry,idite,iditol,idle,idleful,idleman,idler,idleset,idlety,idlish,idly,idol,idola,idolify,idolism,idolist,idolize,idolous,idolum,idoneal,idorgan,idose,idryl,idyl,idyler,idylism,idylist,idylize,idyllic,ie,if,ife,iffy,igloo,ignatia,ignavia,igneous,ignify,ignite,igniter,ignitor,ignoble,ignobly,ignore,ignorer,ignote,iguana,iguanid,ihi,ihleite,ihram,iiwi,ijma,ijolite,ikat,ikey,ikona,ikra,ileac,ileitis,ileon,ilesite,ileum,ileus,ilex,ilia,iliac,iliacus,iliahi,ilial,iliau,ilicic,ilicin,ilima,ilium,ilk,ilka,ilkane,ill,illapse,illeck,illegal,illeism,illeist,illess,illfare,illicit,illish,illium,illness,illocal,illogic,illoyal,illth,illude,illuder,illume,illumer,illupi,illure,illusor,illy,ilot,ilvaite,image,imager,imagery,imagine,imagism,imagist,imago,imam,imamah,imamate,imamic,imaret,imban,imband,imbarge,imbark,imbarn,imbased,imbat,imbauba,imbe,imbed,imber,imbibe,imbiber,imbondo,imbosom,imbower,imbrex,imbrue,imbrute,imbue,imburse,imi,imide,imidic,imine,imino,imitant,imitate,immane,immask,immense,immerd,immerge,immerit,immerse,immew,immi,immit,immix,immoral,immound,immund,immune,immure,immute,imonium,imp,impack,impact,impages,impaint,impair,impala,impale,impaler,impall,impalm,impalsy,impane,impanel,impar,impark,imparl,impart,impasse,impaste,impasto,impave,impavid,impawn,impeach,impearl,impede,impeder,impel,impen,impend,impent,imperia,imperil,impest,impetre,impetus,imphee,impi,impiety,impinge,impious,impish,implant,implate,implead,implete,implex,implial,impling,implode,implore,implume,imply,impofo,impone,impoor,import,imposal,impose,imposer,impost,impot,impound,impreg,impregn,impresa,imprese,impress,imprest,imprime,imprint,improof,improve,impship,impubic,impugn,impulse,impure,impute,imputer,impy,imshi,imsonic,imu,in,inachid,inadept,inagile,inaja,inane,inanely,inanga,inanity,inapt,inaptly,inarch,inarm,inaugur,inaxon,inbe,inbeing,inbent,inbirth,inblow,inblown,inboard,inbond,inborn,inbound,inbread,inbreak,inbred,inbreed,inbring,inbuilt,inburnt,inburst,inby,incarn,incase,incast,incense,incept,incest,inch,inched,inchpin,incide,incisal,incise,incisor,incite,inciter,incivic,incline,inclip,inclose,include,inclusa,incluse,incog,income,incomer,inconnu,incrash,increep,increst,incross,incrust,incubi,incubus,incudal,incudes,incult,incur,incurse,incurve,incus,incuse,incut,indaba,indan,indane,indart,indazin,indazol,inde,indebt,indeed,indeedy,indene,indent,index,indexed,indexer,indic,indican,indices,indicia,indict,indign,indigo,indite,inditer,indium,indogen,indole,indoles,indolyl,indoor,indoors,indorse,indoxyl,indraft,indrawn,indri,induce,induced,inducer,induct,indue,indulge,indult,indulto,induna,indwell,indy,indyl,indylic,inearth,inept,ineptly,inequal,inerm,inert,inertia,inertly,inesite,ineunt,inexact,inexist,inface,infall,infame,infamy,infancy,infand,infang,infant,infanta,infante,infarct,infare,infaust,infect,infeed,infeft,infelt,infer,infern,inferno,infest,infidel,infield,infill,infilm,infirm,infit,infix,inflame,inflate,inflect,inflex,inflict,inflood,inflow,influx,infold,inform,infra,infract,infula,infuse,infuser,ing,ingate,ingenit,ingenue,ingest,ingesta,ingiver,ingle,inglobe,ingoing,ingot,ingraft,ingrain,ingrate,ingress,ingross,ingrow,ingrown,inguen,ingulf,inhabit,inhale,inhaler,inhaul,inhaust,inhere,inherit,inhiate,inhibit,inhuman,inhume,inhumer,inial,iniome,inion,initial,initis,initive,inject,injelly,injunct,injure,injured,injurer,injury,ink,inkbush,inken,inker,inket,inkfish,inkhorn,inkish,inkle,inkless,inklike,inkling,inknot,inkosi,inkpot,inkroot,inks,inkshed,inkweed,inkwell,inkwood,inky,inlaid,inlaik,inlake,inland,inlaut,inlaw,inlawry,inlay,inlayer,inleak,inlet,inlier,inlook,inly,inlying,inmate,inmeats,inmost,inn,innate,inneity,inner,innerly,innerve,inness,innest,innet,inning,innless,innyard,inocyte,inogen,inoglia,inolith,inoma,inone,inopine,inorb,inosic,inosin,inosite,inower,inphase,inport,inpour,inpush,input,inquest,inquiet,inquire,inquiry,inring,inro,inroad,inroll,inrub,inrun,inrush,insack,insane,insculp,insea,inseam,insect,insee,inseer,insense,insert,inset,inshave,inshell,inship,inshoe,inshoot,inshore,inside,insider,insight,insigne,insipid,insist,insnare,insofar,insole,insolid,insooth,insorb,insoul,inspan,inspeak,inspect,inspire,inspoke,install,instant,instar,instate,instead,insteam,insteep,instep,instill,insula,insular,insulin,insulse,insult,insunk,insure,insured,insurer,insurge,inswamp,inswell,inswept,inswing,intact,intake,intaker,integer,inteind,intend,intense,intent,inter,interim,intern,intext,inthrow,intil,intima,intimal,intine,into,intoed,intone,intoner,intort,intown,intrada,intrait,intrant,intreat,intrine,introit,intrude,intruse,intrust,intube,intue,intuent,intuit,inturn,intwist,inula,inulase,inulin,inuloid,inunct,inure,inured,inurn,inutile,invade,invader,invalid,inveigh,inveil,invein,invent,inverse,invert,invest,invigor,invised,invital,invite,invitee,inviter,invivid,invoice,invoke,invoker,involve,inwale,inwall,inward,inwards,inweave,inweed,inwick,inwind,inwit,inwith,inwood,inwork,inworn,inwound,inwoven,inwrap,inwrit,inyoite,inyoke,io,iodate,iodic,iodide,iodine,iodism,iodite,iodize,iodizer,iodo,iodol,iodoso,iodous,iodoxy,iolite,ion,ionic,ionium,ionize,ionizer,ionogen,ionone,iota,iotize,ipecac,ipid,ipil,ipomea,ipseand,ipseity,iracund,irade,irate,irately,ire,ireful,ireless,irene,irenic,irenics,irian,irid,iridal,iridate,irides,iridial,iridian,iridic,iridin,iridine,iridite,iridium,iridize,iris,irised,irisin,iritic,iritis,irk,irksome,irok,iroko,iron,irone,ironer,ironice,ironish,ironism,ironist,ironize,ironly,ironman,irony,irrisor,irrupt,is,isagoge,isagon,isamine,isatate,isatic,isatide,isatin,isazoxy,isba,ischiac,ischial,ischium,ischury,iserine,iserite,isidium,isidoid,island,islandy,islay,isle,islet,isleted,islot,ism,ismal,ismatic,ismdom,ismy,iso,isoamyl,isobar,isobare,isobase,isobath,isochor,isocola,isocrat,isodont,isoflor,isogamy,isogen,isogeny,isogon,isogram,isohel,isohyet,isolate,isology,isomer,isomere,isomery,isoneph,isonomy,isonym,isonymy,isopag,isopod,isopoly,isoptic,isopyre,isotac,isotely,isotome,isotony,isotope,isotopy,isotron,isotype,isoxime,issei,issite,issuant,issue,issuer,issuing,ist,isthmi,isthmic,isthmus,istle,istoke,isuret,isuroid,it,itacism,itacist,italics,italite,itch,itching,itchy,itcze,item,iteming,itemize,itemy,iter,iterant,iterate,ither,itmo,itoubou,its,itself,iturite,itzebu,iva,ivied,ivin,ivoried,ivorine,ivorist,ivory,ivy,ivylike,ivyweed,ivywood,ivywort,iwa,iwaiwa,iwis,ixodian,ixodic,ixodid,iyo,izar,izard,izle,izote,iztle,izzard,j,jab,jabbed,jabber,jabbing,jabble,jabers,jabia,jabiru,jabot,jabul,jacal,jacamar,jacami,jacamin,jacana,jacare,jacate,jacchus,jacent,jacinth,jack,jackal,jackass,jackbox,jackboy,jackdaw,jackeen,jacker,jacket,jackety,jackleg,jackman,jacko,jackrod,jacksaw,jacktan,jacobus,jacoby,jaconet,jactant,jacu,jacuaru,jadder,jade,jaded,jadedly,jadeite,jadery,jadish,jady,jaeger,jag,jagat,jager,jagged,jagger,jaggery,jaggy,jagir,jagla,jagless,jagong,jagrata,jagua,jaguar,jail,jailage,jaildom,jailer,jailish,jajman,jake,jakes,jako,jalap,jalapa,jalapin,jalkar,jalopy,jalouse,jam,jama,jaman,jamb,jambeau,jambo,jambone,jambool,jambosa,jamdani,jami,jamlike,jammer,jammy,jampan,jampani,jamwood,janapa,janapan,jane,jangada,jangkar,jangle,jangler,jangly,janitor,jank,janker,jann,jannock,jantu,janua,jaob,jap,japan,jape,japer,japery,japing,japish,jaquima,jar,jara,jaragua,jarbird,jarble,jarbot,jarfly,jarful,jarg,jargon,jarkman,jarl,jarldom,jarless,jarnut,jarool,jarra,jarrah,jarring,jarry,jarvey,jasey,jaseyed,jasmine,jasmone,jasper,jaspery,jaspis,jaspoid,jass,jassid,jassoid,jatha,jati,jato,jaudie,jauk,jaun,jaunce,jaunder,jaunt,jauntie,jaunty,jaup,javali,javelin,javer,jaw,jawab,jawbone,jawed,jawfall,jawfish,jawfoot,jawless,jawy,jay,jayhawk,jaypie,jaywalk,jazz,jazzer,jazzily,jazzy,jealous,jean,jeans,jecoral,jecorin,jed,jedcock,jedding,jeddock,jeel,jeep,jeer,jeerer,jeering,jeery,jeff,jehu,jehup,jejunal,jejune,jejunum,jelab,jelick,jell,jellica,jellico,jellied,jellify,jellily,jelloid,jelly,jemadar,jemmily,jemmy,jenkin,jenna,jennet,jennier,jenny,jeofail,jeopard,jerboa,jereed,jerez,jerib,jerk,jerker,jerkily,jerkin,jerkish,jerky,jerl,jerm,jerque,jerquer,jerry,jersey,jert,jervia,jervina,jervine,jess,jessamy,jessant,jessed,jessur,jest,jestee,jester,jestful,jesting,jet,jetbead,jete,jetsam,jettage,jetted,jetter,jettied,jetton,jetty,jetware,jewbird,jewbush,jewel,jeweler,jewelry,jewely,jewfish,jezail,jeziah,jharal,jheel,jhool,jhow,jib,jibbah,jibber,jibby,jibe,jibhead,jibi,jibman,jiboa,jibstay,jicama,jicara,jiff,jiffle,jiffy,jig,jigger,jiggers,jigget,jiggety,jiggish,jiggle,jiggly,jiggy,jiglike,jigman,jihad,jikungu,jillet,jilt,jiltee,jilter,jiltish,jimbang,jimjam,jimmy,jimp,jimply,jina,jing,jingal,jingle,jingled,jingler,jinglet,jingly,jingo,jinja,jinjili,jink,jinker,jinket,jinkle,jinks,jinn,jinni,jinny,jinriki,jinx,jipper,jiqui,jirble,jirga,jiti,jitneur,jitney,jitro,jitter,jitters,jittery,jiva,jive,jixie,jo,job,jobade,jobarbe,jobber,jobbery,jobbet,jobbing,jobbish,jobble,jobless,jobman,jobo,joch,jock,jocker,jockey,jocko,jocoque,jocose,jocote,jocu,jocular,jocum,jocuma,jocund,jodel,jodelr,joe,joebush,joewood,joey,jog,jogger,joggle,joggler,joggly,johnin,join,joinant,joinder,joiner,joinery,joining,joint,jointed,jointer,jointly,jointy,joist,jojoba,joke,jokelet,joker,jokish,jokist,jokul,joky,joll,jollier,jollify,jollily,jollity,jollop,jolly,jolt,jolter,jolting,jolty,jonque,jonquil,joola,joom,jordan,joree,jorum,joseite,josh,josher,joshi,josie,joskin,joss,josser,jostle,jostler,jot,jota,jotisi,jotter,jotting,jotty,joubarb,joug,jough,jouk,joule,joulean,jounce,journal,journey,jours,joust,jouster,jovial,jow,jowar,jowari,jowel,jower,jowery,jowl,jowler,jowlish,jowlop,jowly,jowpy,jowser,jowter,joy,joyance,joyancy,joyant,joyful,joyhop,joyleaf,joyless,joylet,joyous,joysome,joyweed,juba,jubate,jubbah,jubbe,jube,jubilee,jubilus,juck,juckies,jud,judcock,judex,judge,judger,judices,judo,jufti,jug,jugal,jugale,jugate,jugated,juger,jugerum,jugful,jugger,juggins,juggle,juggler,juglone,jugular,jugulum,jugum,juice,juicily,juicy,jujitsu,juju,jujube,jujuism,jujuist,juke,jukebox,julep,julid,julidan,julio,juloid,julole,julolin,jumart,jumba,jumble,jumbler,jumbly,jumbo,jumbuck,jumby,jumelle,jument,jumfru,jumma,jump,jumper,jumpy,juncite,juncous,june,jungle,jungled,jungli,jungly,juniata,junior,juniper,junk,junker,junket,junking,junkman,junt,junta,junto,jupati,jupe,jupon,jural,jurally,jurant,jurara,jurat,jurator,jure,jurel,juridic,juring,jurist,juror,jury,juryman,jussel,jussion,jussive,jussory,just,justen,justice,justify,justly,justo,jut,jute,jutka,jutting,jutty,juvenal,juvia,juvite,jyngine,jynx,k,ka,kabaya,kabel,kaberu,kabiet,kabuki,kachin,kadaya,kadein,kados,kaffir,kafir,kafirin,kafiz,kafta,kago,kagu,kaha,kahar,kahau,kahili,kahu,kahuna,kai,kaid,kaik,kaikara,kail,kainga,kainite,kainsi,kainyn,kairine,kaiser,kaitaka,kaiwi,kajawah,kaka,kakapo,kakar,kaki,kakkak,kakke,kala,kalasie,kale,kalema,kalends,kali,kalian,kalium,kallah,kallege,kalo,kalon,kalong,kalpis,kamahi,kamala,kamansi,kamao,kamas,kamassi,kambal,kamboh,kame,kamerad,kamias,kamichi,kamik,kampong,kan,kana,kanae,kanagi,kanap,kanara,kanari,kanat,kanchil,kande,kandol,kaneh,kang,kanga,kangani,kankie,kannume,kanoon,kans,kantele,kanten,kaolin,kapa,kapai,kapeika,kapok,kapp,kappa,kappe,kapur,kaput,karagan,karaka,karakul,karamu,karaoke,karate,karaya,karbi,karch,kareao,kareeta,karela,karite,karma,karmic,karo,kaross,karou,karree,karri,karroo,karsha,karst,karstic,kartel,kartos,karwar,karyon,kasa,kasbah,kasbeke,kasher,kashga,kashi,kashima,kasida,kasm,kassu,kastura,kat,katar,katcina,kath,katha,kathal,katipo,katmon,katogle,katsup,katuka,katun,katurai,katydid,kauri,kava,kavaic,kavass,kawaka,kawika,kay,kayak,kayaker,kayles,kayo,kazi,kazoo,kea,keach,keacorn,keawe,keb,kebab,kebbie,kebbuck,kechel,keck,keckle,kecksy,kecky,ked,keddah,kedge,kedger,kedlock,keech,keek,keeker,keel,keelage,keeled,keeler,keelfat,keelie,keeling,keelman,keelson,keen,keena,keened,keener,keenly,keep,keeper,keeping,keest,keet,keeve,kef,keffel,kefir,kefiric,keg,kegler,kehaya,keita,keitloa,kekuna,kelchin,keld,kele,kelebe,keleh,kelek,kelep,kelk,kell,kella,kellion,kelly,keloid,kelp,kelper,kelpie,kelpy,kelt,kelter,kelty,kelvin,kemb,kemp,kempite,kemple,kempt,kempy,ken,kenaf,kenareh,kench,kend,kendir,kendyr,kenlore,kenmark,kennel,kenner,kenning,kenno,keno,kenosis,kenotic,kenspac,kent,kenyte,kep,kepi,kept,kerana,kerasin,kerat,keratin,keratto,kerchoo,kerchug,kerel,kerf,kerflap,kerflop,kermes,kermis,kern,kernel,kerner,kernish,kernite,kernos,kerogen,kerrie,kerril,kerrite,kerry,kersey,kerslam,kerugma,kerwham,kerygma,kestrel,ket,keta,ketal,ketch,ketchup,keten,ketene,ketipic,keto,ketogen,ketol,ketole,ketone,ketonic,ketose,ketosis,kette,ketting,kettle,kettler,ketty,ketuba,ketupa,ketyl,keup,kevalin,kevel,kewpie,kex,kexy,key,keyage,keyed,keyhole,keyless,keylet,keylock,keynote,keyway,khaddar,khadi,khahoon,khaiki,khair,khaja,khajur,khaki,khakied,khalifa,khalsa,khamsin,khan,khanate,khanda,khanjar,khanjee,khankah,khanum,khar,kharaj,kharua,khass,khat,khatib,khatri,khediva,khedive,khepesh,khet,khilat,khir,khirka,khoja,khoka,khot,khu,khubber,khula,khutbah,khvat,kiack,kiaki,kialee,kiang,kiaugh,kibber,kibble,kibbler,kibe,kibei,kibitka,kibitz,kiblah,kibosh,kiby,kick,kickee,kicker,kicking,kickish,kickoff,kickout,kickup,kidder,kiddier,kiddish,kiddush,kiddy,kidhood,kidlet,kidling,kidnap,kidney,kidskin,kidsman,kiekie,kiel,kier,kieye,kikar,kike,kiki,kiku,kikuel,kikumon,kil,kiladja,kilah,kilan,kildee,kileh,kilerg,kiley,kilhig,kiliare,kilim,kill,killas,killcu,killeen,killer,killick,killing,killy,kiln,kilneye,kilnman,kilnrib,kilo,kilobar,kiloton,kilovar,kilp,kilt,kilter,kiltie,kilting,kim,kimbang,kimnel,kimono,kin,kina,kinah,kinase,kinbote,kinch,kinchin,kincob,kind,kindle,kindler,kindly,kindred,kinepox,kinesic,kinesis,kinetic,king,kingcob,kingcup,kingdom,kinglet,kingly,kingpin,kingrow,kink,kinkhab,kinkily,kinkle,kinkled,kinkly,kinky,kinless,kino,kinship,kinsman,kintar,kioea,kiosk,kiotome,kip,kipage,kipe,kippeen,kipper,kippy,kipsey,kipskin,kiri,kirimon,kirk,kirker,kirkify,kirking,kirkman,kirmew,kirn,kirombo,kirsch,kirtle,kirtled,kirve,kirver,kischen,kish,kishen,kishon,kishy,kismet,kisra,kiss,kissage,kissar,kisser,kissing,kissy,kist,kistful,kiswa,kit,kitab,kitabis,kitar,kitcat,kitchen,kite,kith,kithe,kitish,kitling,kittel,kitten,kitter,kittle,kittles,kittly,kittock,kittul,kitty,kiva,kiver,kivu,kiwi,kiyas,kiyi,klafter,klam,klavern,klaxon,klepht,kleptic,klicket,klip,klipbok,klipdas,klippe,klippen,klister,klom,klop,klops,klosh,kmet,knab,knabble,knack,knacker,knacky,knag,knagged,knaggy,knap,knape,knappan,knapper,knar,knark,knarred,knarry,knave,knavery,knavess,knavish,knawel,knead,kneader,knee,kneecap,kneed,kneel,kneeler,kneelet,kneepad,kneepan,knell,knelt,knet,knew,knez,knezi,kniaz,kniazi,knick,knicker,knife,knifer,knight,knit,knitch,knitted,knitter,knittle,knived,knivey,knob,knobbed,knobber,knobble,knobbly,knobby,knock,knocker,knockup,knoll,knoller,knolly,knop,knopite,knopped,knopper,knoppy,knosp,knosped,knot,knotted,knotter,knotty,knout,know,knowe,knower,knowing,known,knub,knubbly,knubby,knublet,knuckle,knuckly,knur,knurl,knurled,knurly,knut,knutty,knyaz,knyazi,ko,koa,koae,koala,koali,kob,koban,kobi,kobird,kobold,kobong,kobu,koda,kodak,kodaker,kodakry,kodro,koel,koff,koft,koftgar,kohemp,kohl,kohua,koi,koil,koila,koilon,koine,koinon,kojang,kokako,kokam,kokan,kokil,kokio,koklas,koklass,koko,kokoon,kokowai,kokra,koku,kokum,kokumin,kola,kolach,kolea,kolhoz,kolkhos,kolkhoz,kollast,koller,kolo,kolobus,kolsun,komatik,kombu,kommos,kompeni,kon,kona,konak,kongoni,kongu,konini,konjak,kooka,kookery,kookri,koolah,koombar,koomkie,kootcha,kop,kopeck,koph,kopi,koppa,koppen,koppite,kor,kora,koradji,korait,korakan,korari,kore,korec,koreci,korero,kori,korin,korona,korova,korrel,koruna,korzec,kos,kosher,kosin,kosong,koswite,kotal,koto,kotuku,kotwal,kotyle,kotylos,kou,koulan,kouza,kovil,kowhai,kowtow,koyan,kozo,kra,kraal,kraft,krait,kraken,kral,krama,kran,kras,krasis,krausen,kraut,kreis,krelos,kremlin,krems,kreng,krieker,krimmer,krina,krocket,krome,krona,krone,kronen,kroner,kronor,kronur,kroon,krosa,krypsis,kryptic,kryptol,krypton,kuan,kuba,kubba,kuchen,kudize,kudos,kudu,kudzu,kuei,kuge,kugel,kuichua,kukri,kuku,kukui,kukupa,kula,kulack,kulah,kulaite,kulak,kulang,kulimit,kulm,kulmet,kumbi,kumhar,kumiss,kummel,kumquat,kumrah,kunai,kung,kunk,kunkur,kunzite,kuphar,kupper,kurbash,kurgan,kuruma,kurung,kurus,kurvey,kusa,kusam,kusha,kuskite,kuskos,kuskus,kusti,kusum,kutcha,kuttab,kuttar,kuttaur,kuvasz,kvass,kvint,kvinter,kwamme,kwan,kwarta,kwazoku,kyack,kyah,kyar,kyat,kyaung,kyl,kyle,kylite,kylix,kyrine,kyte,l,la,laager,laang,lab,labara,labarum,labba,labber,labefy,label,labeler,labella,labia,labial,labiate,labile,labiose,labis,labium,lablab,labor,labored,laborer,labour,labra,labral,labret,labroid,labrose,labrum,labrys,lac,lacca,laccaic,laccase,laccol,lace,laced,laceman,lacepod,lacer,lacery,lacet,lache,laches,lachsa,lacily,lacing,lacinia,lacis,lack,lacker,lackey,lackwit,lacmoid,lacmus,laconic,lacquer,lacrym,lactam,lactant,lactary,lactase,lactate,lacteal,lactean,lactic,lactid,lactide,lactify,lactim,lacto,lactoid,lactol,lactone,lactose,lactyl,lacuna,lacunae,lacunal,lacunar,lacune,lacwork,lacy,lad,ladakin,ladanum,ladder,laddery,laddess,laddie,laddish,laddock,lade,lademan,laden,lader,ladhood,ladies,ladify,lading,ladkin,ladle,ladler,ladrone,lady,ladybug,ladydom,ladyfly,ladyfy,ladyish,ladyism,ladykin,ladyly,laet,laeti,laetic,lag,lagan,lagarto,lagen,lagena,lagend,lager,lagetto,laggar,laggard,lagged,laggen,lagger,laggin,lagging,laglast,lagna,lagoon,lagwort,lai,laic,laical,laich,laicism,laicity,laicize,laid,laigh,lain,laine,laiose,lair,lairage,laird,lairdie,lairdly,lairman,lairy,laity,lak,lakatoi,lake,lakelet,laker,lakie,laking,lakish,lakism,lakist,laky,lalang,lall,lalling,lalo,lam,lama,lamaic,lamany,lamb,lamba,lambale,lambda,lambeau,lambent,lamber,lambert,lambie,lambish,lambkin,lambly,lamboys,lamby,lame,lamedh,lamel,lamella,lamely,lament,lameter,lametta,lamia,lamiger,lamiid,lamin,lamina,laminae,laminar,lamish,lamiter,lammas,lammer,lammock,lammy,lamnid,lamnoid,lamp,lampad,lampas,lamper,lampern,lampers,lampfly,lampful,lamping,lampion,lampist,lamplet,lamplit,lampman,lampoon,lamprey,lan,lanas,lanate,lanated,lanaz,lance,lanced,lancely,lancer,lances,lancet,lancha,land,landau,landed,lander,landing,landman,landmil,lane,lanete,laneway,laney,langaha,langca,langi,langite,langle,langoon,langsat,langued,languet,languid,languor,langur,laniary,laniate,lanific,lanioid,lanista,lank,lanket,lankily,lankish,lankly,lanky,lanner,lanolin,lanose,lansat,lanseh,lanson,lant,lantaca,lantern,lantum,lanugo,lanum,lanx,lanyard,lap,lapacho,lapcock,lapel,lapeler,lapful,lapillo,lapon,lappage,lapped,lapper,lappet,lapping,lapse,lapsed,lapser,lapsi,lapsing,lapwing,lapwork,laquear,laqueus,lar,larceny,larch,larchen,lard,larder,lardite,lardon,lardy,large,largely,largen,largess,largish,largo,lari,lariat,larick,larid,larigo,larigot,lariid,larin,larine,larixin,lark,larker,larking,larkish,larky,larmier,larnax,laroid,larrup,larry,larva,larvae,larval,larvate,larve,larvule,larynx,las,lasa,lascar,laser,lash,lasher,lask,lasket,lasque,lass,lasset,lassie,lasso,lassock,lassoer,last,lastage,laster,lasting,lastly,lastre,lasty,lat,lata,latah,latch,latcher,latchet,late,latebra,lated,lateen,lately,laten,latence,latency,latent,later,latera,laterad,lateral,latest,latex,lath,lathe,lathee,lathen,lather,lathery,lathing,lathy,latices,latigo,lation,latish,latitat,latite,latomy,latrant,latria,latrine,latro,latrobe,latron,latten,latter,lattice,latus,lauan,laud,lauder,laudist,laugh,laughee,laugher,laughy,lauia,laun,launce,launch,laund,launder,laundry,laur,laura,laurate,laurel,lauric,laurin,laurite,laurone,lauryl,lava,lavable,lavabo,lavacre,lavage,lavanga,lavant,lavaret,lavatic,lave,laveer,laver,lavic,lavish,lavolta,law,lawbook,lawful,lawing,lawish,lawk,lawless,lawlike,lawman,lawn,lawned,lawner,lawnlet,lawny,lawsuit,lawter,lawyer,lawyery,lawzy,lax,laxate,laxism,laxist,laxity,laxly,laxness,lay,layaway,layback,layboy,layer,layered,layery,layette,laying,layland,layman,layne,layoff,layout,layover,layship,laystow,lazar,lazaret,lazarly,laze,lazily,lazule,lazuli,lazy,lazyish,lea,leach,leacher,leachy,lead,leadage,leaded,leaden,leader,leadin,leading,leadman,leadoff,leadout,leadway,leady,leaf,leafage,leafboy,leafcup,leafdom,leafed,leafen,leafer,leafery,leafit,leaflet,leafy,league,leaguer,leak,leakage,leaker,leaky,leal,lealand,leally,lealty,leam,leamer,lean,leaner,leaning,leanish,leanly,leant,leap,leaper,leaping,leapt,lear,learn,learned,learner,learnt,lease,leaser,leash,leasing,leasow,least,leat,leath,leather,leatman,leave,leaved,leaven,leaver,leaves,leaving,leavy,leawill,leban,lebbek,lecama,lech,lecher,lechery,lechwe,leck,lecker,lectern,lection,lector,lectual,lecture,lecyth,led,lede,leden,ledge,ledged,ledger,ledging,ledgy,ledol,lee,leech,leecher,leeches,leed,leefang,leek,leekish,leeky,leep,leepit,leer,leerily,leerish,leery,lees,leet,leetman,leewan,leeward,leeway,leewill,left,leftish,leftism,leftist,leg,legacy,legal,legally,legate,legatee,legato,legator,legend,legenda,leger,leges,legged,legger,legging,leggy,leghorn,legible,legibly,legific,legion,legist,legit,legitim,leglen,legless,leglet,leglike,legman,legoa,legpull,legrope,legua,leguan,legume,legumen,legumin,lehr,lehrman,lehua,lei,leister,leisure,lek,lekach,lekane,lekha,leman,lemel,lemma,lemmata,lemming,lemnad,lemon,lemony,lempira,lemur,lemures,lemurid,lenad,lenard,lench,lend,lendee,lender,lene,length,lengthy,lenient,lenify,lenis,lenitic,lenity,lennow,leno,lens,lensed,lent,lenth,lentigo,lentil,lentisc,lentisk,lento,lentoid,lentor,lentous,lenvoi,lenvoy,leonine,leonite,leopard,leotard,lepa,leper,lepered,leporid,lepra,lepric,leproid,leproma,leprose,leprosy,leprous,leptid,leptite,leptome,lepton,leptus,lerot,lerp,lerret,lesche,lesion,lesiy,less,lessee,lessen,lesser,lessive,lessn,lesson,lessor,lest,lestrad,let,letch,letchy,letdown,lete,lethal,letoff,letten,letter,lettrin,lettuce,letup,leu,leuch,leucine,leucism,leucite,leuco,leucoid,leucoma,leucon,leucous,leucyl,leud,leuk,leuma,lev,levance,levant,levator,levee,level,leveler,levelly,lever,leverer,leveret,levers,levier,levin,levir,levity,levo,levulic,levulin,levy,levyist,lew,lewd,lewdly,lewis,lewth,lexia,lexical,lexicon,ley,leyland,leysing,li,liable,liaison,liana,liang,liar,liard,libant,libate,libber,libbet,libbra,libel,libelee,libeler,liber,liberal,liberty,libido,libken,libra,libral,library,librate,licca,license,lich,licham,lichen,licheny,lichi,licit,licitly,lick,licker,licking,licorn,licorne,lictor,lid,lidded,lidder,lidgate,lidless,lie,lied,lief,liege,liegely,lieger,lien,lienal,lienee,lienic,lienor,lier,lierne,lierre,liesh,lieu,lieue,lieve,life,lifeday,lifeful,lifelet,lifer,lifey,lifo,lift,lifter,lifting,liftman,ligable,ligas,ligate,ligator,ligger,light,lighten,lighter,lightly,ligne,lignify,lignin,lignite,lignone,lignose,lignum,ligula,ligular,ligule,ligulin,ligure,liin,lija,likable,like,likely,liken,liker,likin,liking,liknon,lilac,lilacin,lilacky,lile,lilied,lill,lilt,lily,lilyfy,lim,limacel,limacon,liman,limb,limbal,limbat,limbate,limbeck,limbed,limber,limbers,limbic,limbie,limbo,limbous,limbus,limby,lime,limeade,limeman,limen,limer,limes,limetta,limey,liminal,liming,limit,limital,limited,limiter,limma,limmer,limmock,limmu,limn,limner,limnery,limniad,limnite,limoid,limonin,limose,limous,limp,limper,limpet,limpid,limpily,limpin,limping,limpish,limpkin,limply,limpsy,limpy,limsy,limu,limulid,limy,lin,lina,linable,linaga,linage,linaloa,linalol,linch,linchet,linctus,lindane,linden,linder,lindo,line,linea,lineage,lineal,linear,lineate,linecut,lined,linelet,lineman,linen,liner,ling,linga,linge,lingel,linger,lingo,lingtow,lingua,lingual,linguet,lingula,lingy,linha,linhay,linie,linin,lining,linitis,liniya,linja,linje,link,linkage,linkboy,linked,linker,linking,linkman,links,linky,linn,linnet,lino,linolic,linolin,linon,linous,linoxin,linoxyn,linpin,linseed,linsey,lint,lintel,linten,linter,lintern,lintie,linty,linwood,liny,lion,lioncel,lionel,lioness,lionet,lionism,lionize,lionly,lip,lipa,liparid,lipase,lipemia,lipide,lipin,lipless,liplet,liplike,lipoid,lipoma,lipopod,liposis,lipped,lippen,lipper,lipping,lippy,lipuria,lipwork,liquate,liquefy,liqueur,liquid,liquidy,liquor,lira,lirate,lire,lirella,lis,lisere,lish,lisk,lisle,lisp,lisper,lispund,liss,lissom,lissome,list,listed,listel,listen,lister,listing,listred,lit,litany,litas,litch,litchi,lite,liter,literal,lith,lithe,lithely,lithi,lithia,lithic,lithify,lithite,lithium,litho,lithoid,lithous,lithy,litmus,litotes,litra,litster,litten,litter,littery,little,lituite,liturgy,litus,lituus,litz,livable,live,lived,livedo,lively,liven,liver,livered,livery,livid,lividly,livier,living,livor,livre,liwan,lixive,lizard,llama,llano,llautu,llyn,lo,loa,loach,load,loadage,loaded,loaden,loader,loading,loaf,loafer,loafing,loaflet,loam,loamily,loaming,loamy,loan,loaner,loanin,loath,loathe,loather,loathly,loave,lob,lobal,lobar,lobate,lobated,lobber,lobbish,lobby,lobbyer,lobcock,lobe,lobed,lobelet,lobelin,lobfig,lobing,lobiped,lobo,lobola,lobose,lobster,lobtail,lobular,lobule,lobworm,loca,locable,local,locale,locally,locanda,locate,locator,loch,lochage,lochan,lochia,lochial,lochus,lochy,loci,lock,lockage,lockbox,locked,locker,locket,lockful,locking,lockjaw,locklet,lockman,lockout,lockpin,lockram,lockup,locky,loco,locoism,locular,locule,loculus,locum,locus,locust,locusta,locutor,lod,lode,lodge,lodged,lodger,lodging,loess,loessal,loessic,lof,loft,lofter,loftily,lofting,loftman,lofty,log,loganin,logbook,logcock,loge,logeion,logeum,loggat,logged,logger,loggia,loggin,logging,loggish,loghead,logia,logic,logical,logie,login,logion,logium,loglet,loglike,logman,logoi,logos,logroll,logway,logwise,logwood,logwork,logy,lohan,lohoch,loimic,loin,loined,loir,loiter,loka,lokao,lokaose,loke,loket,lokiec,loll,loller,lollop,lollopy,lolly,loma,lombard,lomboy,loment,lomita,lommock,lone,lonely,long,longa,longan,longbow,longe,longear,longer,longfin,longful,longing,longish,longjaw,longly,longs,longue,longway,lontar,loo,looby,lood,loof,loofah,loofie,look,looker,looking,lookout,lookum,loom,loomer,loomery,looming,loon,loonery,looney,loony,loop,looper,loopful,looping,loopist,looplet,loopy,loose,loosely,loosen,looser,loosing,loosish,loot,looten,looter,lootie,lop,lope,loper,lophiid,lophine,loppard,lopper,loppet,lopping,loppy,lopseed,loquat,loquent,lora,loral,loran,lorate,lorcha,lord,lording,lordkin,lordlet,lordly,lordy,lore,loreal,lored,lori,loric,lorica,lorilet,lorimer,loriot,loris,lormery,lorn,loro,lorry,lors,lorum,lory,losable,lose,losel,loser,losh,losing,loss,lost,lot,lota,lotase,lote,lotic,lotion,lotment,lotrite,lots,lotter,lottery,lotto,lotus,lotusin,louch,loud,louden,loudish,loudly,louey,lough,louk,loukoum,loulu,lounder,lounge,lounger,loungy,loup,loupe,lour,lourdy,louse,lousily,louster,lousy,lout,louter,louther,loutish,louty,louvar,louver,lovable,lovably,lovage,love,loveful,lovely,loveman,lover,lovered,loverly,loving,low,lowa,lowan,lowbell,lowborn,lowboy,lowbred,lowdah,lowder,loweite,lower,lowerer,lowery,lowish,lowland,lowlily,lowly,lowmen,lowmost,lown,lowness,lownly,lowth,lowwood,lowy,lox,loxia,loxic,loxotic,loy,loyal,loyally,loyalty,lozenge,lozengy,lubber,lube,lubra,lubric,lubrify,lucanid,lucarne,lucban,luce,lucence,lucency,lucent,lucern,lucerne,lucet,lucible,lucid,lucida,lucidly,lucifee,lucific,lucigen,lucivee,luck,lucken,luckful,luckie,luckily,lucky,lucre,lucrify,lucule,lucumia,lucy,ludden,ludibry,ludo,lue,lues,luetic,lufbery,luff,lug,luge,luger,luggage,luggar,lugged,lugger,luggie,lugmark,lugsail,lugsome,lugworm,luhinga,luigino,luke,lukely,lulab,lull,lullaby,luller,lulu,lum,lumbago,lumbang,lumbar,lumber,lumen,luminal,lumine,lummox,lummy,lump,lumper,lumpet,lumpily,lumping,lumpish,lumpkin,lumpman,lumpy,luna,lunacy,lunar,lunare,lunary,lunate,lunatic,lunatum,lunch,luncher,lune,lunes,lunette,lung,lunge,lunged,lunger,lungful,lungi,lungie,lungis,lungy,lunn,lunoid,lunt,lunula,lunular,lunule,lunulet,lupe,lupeol,lupeose,lupine,lupinin,lupis,lupoid,lupous,lupulic,lupulin,lupulus,lupus,lura,lural,lurch,lurcher,lurdan,lure,lureful,lurer,lurg,lurid,luridly,lurk,lurker,lurky,lurrier,lurry,lush,lusher,lushly,lushy,lusk,lusky,lusory,lust,luster,lustful,lustily,lustra,lustral,lustrum,lusty,lut,lutany,lute,luteal,lutecia,lutein,lutelet,luteo,luteoma,luteous,luter,luteway,lutfisk,luthern,luthier,luting,lutist,lutose,lutrin,lutrine,lux,luxate,luxe,luxury,luxus,ly,lyam,lyard,lyceal,lyceum,lycid,lycopin,lycopod,lycosid,lyctid,lyddite,lydite,lye,lyery,lygaeid,lying,lyingly,lymph,lymphad,lymphy,lyncean,lynch,lyncher,lyncine,lynx,lyra,lyrate,lyrated,lyraway,lyre,lyreman,lyric,lyrical,lyrism,lyrist,lys,lysate,lyse,lysin,lysine,lysis,lysogen,lyssa,lyssic,lytic,lytta,lyxose,m,ma,maam,mabi,mabolo,mac,macabre,macaco,macadam,macan,macana,macao,macaque,macaw,macco,mace,maceman,macer,machan,machar,machete,machi,machila,machin,machine,machree,macies,mack,mackins,mackle,macle,macled,maco,macrame,macro,macron,macuca,macula,macular,macule,macuta,mad,madam,madame,madcap,madden,madder,madding,maddish,maddle,made,madefy,madhuca,madid,madling,madly,madman,madnep,madness,mado,madoqua,madrier,madrona,madship,maduro,madweed,madwort,mae,maenad,maestri,maestro,maffia,maffick,maffle,mafflin,mafic,mafoo,mafura,mag,magadis,magani,magas,mage,magenta,magged,maggle,maggot,maggoty,magi,magic,magical,magiric,magma,magnate,magnes,magnet,magneta,magneto,magnify,magnum,magot,magpie,magpied,magsman,maguari,maguey,maha,mahaleb,mahalla,mahant,mahar,maharao,mahatma,mahmal,mahmudi,mahoe,maholi,mahone,mahout,mahseer,mahua,mahuang,maid,maidan,maiden,maidish,maidism,maidkin,maidy,maiefic,maigre,maiid,mail,mailbag,mailbox,mailed,mailer,mailie,mailman,maim,maimed,maimer,maimon,main,mainly,mainour,mainpin,mains,maint,maintop,maioid,maire,maize,maizer,majagua,majesty,majo,majoon,major,makable,make,makedom,maker,makhzan,maki,making,makluk,mako,makuk,mal,mala,malacia,malacon,malady,malagma,malaise,malakin,malambo,malanga,malapi,malar,malaria,malarin,malate,malati,malax,malduck,male,malease,maleate,maleic,malella,maleo,malfed,mali,malic,malice,malicho,malign,malik,maline,malines,malism,malison,malist,malkin,mall,mallard,malleal,mallear,mallee,mallein,mallet,malleus,mallow,mallum,mallus,malm,malmsey,malmy,malo,malodor,malonic,malonyl,malouah,malpais,malt,maltase,malter,maltha,malting,maltman,maltose,malty,mamba,mambo,mamma,mammal,mammary,mammate,mammee,mammer,mammock,mammon,mammoth,mammula,mammy,mamo,man,mana,manacle,manage,managee,manager,manaism,manakin,manal,manas,manatee,manavel,manbird,manbot,manche,manchet,mancono,mancus,mand,mandala,mandant,mandate,mandil,mandola,mandom,mandora,mandore,mandra,mandrel,mandrin,mandua,mandyas,mane,maned,manege,manei,manent,manes,maness,maney,manful,mang,manga,mangal,mange,mangeao,mangel,manger,mangi,mangily,mangle,mangler,mango,mangona,mangue,mangy,manhead,manhole,manhood,mani,mania,maniac,manic,manid,manify,manikin,manila,manilla,manille,manioc,maniple,manism,manist,manito,maniu,manjak,mank,mankin,mankind,manless,manlet,manlike,manlily,manling,manly,manna,mannan,manner,manners,manness,mannide,mannie,mannify,manning,mannish,mannite,mannose,manny,mano,manoc,manomin,manor,manque,manred,manrent,manroot,manrope,mansard,manse,manship,mansion,manso,mant,manta,mantal,manteau,mantel,manter,mantes,mantic,mantid,mantis,mantle,mantled,mantlet,manto,mantoid,mantra,mantrap,mantua,manual,manuao,manuka,manul,manuma,manumea,manumit,manure,manurer,manus,manward,manway,manweed,manwise,many,manzana,manzil,mao,maomao,map,mapach,mapau,mapland,maple,mapo,mapper,mappist,mappy,mapwise,maqui,maquis,mar,marabou,maraca,maracan,marae,maral,marang,marara,mararie,marasca,maraud,marble,marbled,marbler,marbles,marbly,marc,marcel,march,marcher,marcid,marco,marconi,marcor,mardy,mare,maremma,marengo,marfire,margay,marge,margent,margin,margosa,marhala,maria,marid,marimba,marina,marine,mariner,mariola,maris,marish,marital,mark,marka,marked,marker,market,markhor,marking,markka,markman,markup,marl,marled,marler,marli,marlin,marline,marlite,marlock,marlpit,marly,marm,marmit,marmite,marmose,marmot,maro,marok,maroon,marplot,marque,marquee,marquis,marrano,marree,marrer,married,marrier,marron,marrot,marrow,marrowy,marry,marryer,marsh,marshal,marshy,marsoon,mart,martel,marten,martext,martial,martin,martite,martlet,martyr,martyry,maru,marvel,marver,mary,marybud,mas,masa,mascara,mascled,mascot,masculy,masdeu,mash,masha,mashal,masher,mashie,mashing,mashman,mashru,mashy,masjid,mask,masked,masker,maskoid,maslin,mason,masoned,masoner,masonic,masonry,masooka,masoola,masque,masquer,mass,massa,massage,masse,massel,masser,masseur,massier,massif,massily,massive,massoy,massula,massy,mast,mastaba,mastage,mastax,masted,master,mastery,mastful,mastic,mastiff,masting,mastman,mastoid,masty,masu,mat,mataco,matador,matai,matalan,matanza,matapan,matapi,matara,matax,match,matcher,matchy,mate,mately,mater,matey,math,mathes,matico,matin,matinal,matinee,mating,matins,matipo,matka,matless,matlow,matra,matral,matrass,matreed,matric,matris,matrix,matron,matross,matsu,matsuri,matta,mattaro,matte,matted,matter,mattery,matti,matting,mattock,mattoid,mattoir,mature,maturer,matweed,maty,matzo,matzoon,matzos,matzoth,mau,maud,maudle,maudlin,mauger,maugh,maul,mauler,mauley,mauling,maumet,maun,maund,maunder,maundy,maunge,mauther,mauve,mauvine,maux,mavis,maw,mawk,mawkish,mawky,mawp,maxilla,maxim,maxima,maximal,maximed,maximum,maximus,maxixe,maxwell,may,maya,maybe,maybush,maycock,mayday,mayfish,mayhap,mayhem,maynt,mayor,mayoral,maypop,maysin,mayten,mayweed,maza,mazame,mazard,maze,mazed,mazedly,mazeful,mazer,mazic,mazily,mazuca,mazuma,mazurka,mazut,mazy,mazzard,mbalolo,mbori,me,meable,mead,meader,meadow,meadowy,meager,meagre,meak,meal,mealer,mealies,mealily,mealman,mealy,mean,meander,meaned,meaner,meaning,meanish,meanly,meant,mease,measle,measled,measles,measly,measure,meat,meatal,meated,meatily,meatman,meatus,meaty,mecate,mecon,meconic,meconin,medal,medaled,medalet,meddle,meddler,media,mediacy,mediad,medial,median,mediant,mediate,medic,medical,medico,mediety,medimn,medimno,medino,medio,medium,medius,medlar,medley,medrick,medulla,medusal,medusan,meebos,meece,meed,meek,meeken,meekly,meered,meerkat,meese,meet,meeten,meeter,meeting,meetly,megabar,megaerg,megafog,megapod,megaron,megaton,megerg,megilp,megmho,megohm,megrim,mehalla,mehari,mehtar,meile,mein,meinie,meio,meiobar,meiosis,meiotic,meith,mel,mela,melada,melagra,melam,melamed,melange,melanic,melanin,melano,melasma,melch,meld,melder,meldrop,mele,melee,melena,melene,melenic,melic,melilot,meline,melisma,melitis,mell,mellate,mellay,meller,mellit,mellite,mellon,mellow,mellowy,melodia,melodic,melody,meloe,meloid,melon,melonry,melos,melosa,melt,meltage,melted,melter,melters,melting,melton,mem,member,membral,memento,meminna,memo,memoir,memoria,memory,men,menace,menacer,menacme,menage,menald,mend,mendee,mender,mending,mendole,mends,menfolk,meng,menhir,menial,meninx,menkind,mennom,mensa,mensal,mense,menses,mensk,mensual,mental,mentary,menthol,menthyl,mention,mentor,mentum,menu,meny,menyie,menzie,merbaby,mercal,mercer,mercery,merch,merchet,mercy,mere,merel,merely,merfold,merfolk,merge,merger,mergh,meriah,merice,meril,merism,merist,merit,merited,meriter,merk,merkhet,merkin,merl,merle,merlin,merlon,mermaid,merman,mero,merop,meropia,meros,merrily,merrow,merry,merse,mesa,mesad,mesail,mesal,mesally,mesange,mesarch,mescal,mese,mesem,mesenna,mesh,meshed,meshy,mesiad,mesial,mesian,mesic,mesilla,mesion,mesityl,mesne,meso,mesobar,mesode,mesodic,mesole,meson,mesonic,mesopic,mespil,mess,message,messan,messe,messer,messet,messily,messin,messing,messman,messor,messrs,messtin,messy,mestee,mester,mestiza,mestizo,mestome,met,meta,metad,metage,metal,metaler,metamer,metanym,metate,metayer,mete,metel,meteor,meter,methane,methene,mether,methid,methide,methine,method,methyl,metic,metier,metis,metochy,metonym,metope,metopic,metopon,metra,metreta,metrete,metria,metric,metrics,metrify,metrist,mettar,mettle,mettled,metusia,metze,meuse,meute,mew,meward,mewer,mewl,mewler,mezcal,mezuzah,mezzo,mho,mi,miamia,mian,miaow,miaower,mias,miasm,miasma,miasmal,miasmic,miaul,miauler,mib,mica,micate,mice,micelle,miche,micher,miching,micht,mick,mickle,mico,micrify,micro,microbe,microhm,micron,miction,mid,midday,midden,middle,middler,middy,mide,midge,midget,midgety,midgy,midiron,midland,midleg,midmain,midmorn,midmost,midnoon,midpit,midrash,midrib,midriff,mids,midship,midst,midtap,midvein,midward,midway,midweek,midwife,midwise,midyear,mien,miff,miffy,mig,might,mightnt,mighty,miglio,mignon,migrant,migrate,mihrab,mijl,mikado,mike,mikie,mil,mila,milady,milch,milcher,milchy,mild,milden,milder,mildew,mildewy,mildish,mildly,mile,mileage,miler,mileway,milfoil,milha,miliary,milieu,militia,milium,milk,milken,milker,milkily,milking,milkman,milksop,milky,mill,milla,millage,milldam,mille,milled,miller,millet,millful,milliad,millile,milline,milling,million,millman,milner,milo,milord,milpa,milreis,milsey,milsie,milt,milter,milty,milvine,mim,mima,mimbar,mimble,mime,mimeo,mimer,mimesis,mimetic,mimic,mimical,mimicry,mimine,mimly,mimmest,mimmock,mimmood,mimmoud,mimosis,mimp,mimsey,min,mina,minable,minar,minaret,minaway,mince,mincer,mincing,mind,minded,minder,mindful,minding,mine,miner,mineral,minery,mines,minette,ming,minge,mingle,mingler,mingy,minhag,minhah,miniate,minibus,minicam,minify,minikin,minim,minima,minimal,minimum,minimus,mining,minion,minish,minium,miniver,minivet,mink,minkery,minkish,minnie,minning,minnow,minny,mino,minoize,minor,minot,minster,mint,mintage,minter,mintman,minty,minuend,minuet,minus,minute,minuter,minutia,minx,minxish,miny,minyan,miqra,mir,mirach,miracle,mirador,mirage,miragy,mirate,mirbane,mird,mirdaha,mire,mirid,mirific,mirish,mirk,miro,mirror,mirrory,mirth,miry,mirza,misact,misadd,misaim,misally,misbias,misbill,misbind,misbode,misborn,misbusy,miscall,miscast,mischio,miscoin,miscook,miscrop,miscue,miscut,misdate,misdaub,misdeal,misdeed,misdeem,misdiet,misdo,misdoer,misdraw,mise,misease,misedit,miser,miserly,misery,misfare,misfile,misfire,misfit,misfond,misform,misgive,misgo,misgrow,mishap,mishmee,misjoin,miskeep,misken,miskill,misknow,misky,mislay,mislead,mislear,misled,mislest,mislike,mislive,mismade,mismake,mismate,mismove,misname,misobey,mispage,mispart,mispay,mispick,misplay,misput,misrate,misread,misrule,miss,missal,missay,misseem,missel,misset,missile,missing,mission,missis,missish,missive,misstay,misstep,missy,mist,mistake,mistbow,misted,mistell,mistend,mister,misterm,mistful,mistic,mistide,mistify,mistily,mistime,mistle,mistone,mistook,mistral,mistry,misturn,misty,misura,misuse,misuser,miswed,miswish,misword,misyoke,mite,miter,mitered,miterer,mitis,mitome,mitosis,mitotic,mitra,mitral,mitrate,mitre,mitrer,mitt,mitten,mitty,mity,miurus,mix,mixable,mixed,mixedly,mixen,mixer,mixhill,mixible,mixite,mixtion,mixture,mixy,mizmaze,mizzen,mizzle,mizzler,mizzly,mizzy,mneme,mnemic,mnesic,mnestic,mnioid,mo,moan,moanful,moaning,moat,mob,mobable,mobber,mobbish,mobbism,mobbist,mobby,mobcap,mobed,mobile,moble,moblike,mobship,mobsman,mobster,mocha,mochras,mock,mockado,mocker,mockery,mockful,mocmain,mocuck,modal,modally,mode,model,modeler,modena,modern,modest,modesty,modicum,modify,modish,modist,modiste,modius,modular,module,modulo,modulus,moellon,mofette,moff,mog,mogador,mogdad,moggan,moggy,mogo,moguey,moha,mohabat,mohair,mohar,mohel,moho,mohr,mohur,moider,moidore,moieter,moiety,moil,moiler,moiles,moiley,moiling,moineau,moio,moire,moise,moist,moisten,moistly,moisty,moit,moity,mojarra,mojo,moke,moki,moko,moksha,mokum,moky,mola,molal,molar,molary,molassy,molave,mold,molder,moldery,molding,moldy,mole,moleism,moler,molest,molimen,moline,molka,molland,molle,mollie,mollify,mollusk,molly,molman,moloid,moloker,molompi,molosse,molpe,molt,molten,molter,moly,mombin,momble,mome,moment,momenta,momism,momme,mommet,mommy,momo,mon,mona,monad,monadic,monaene,monal,monarch,monas,monase,monaxon,mone,monel,monepic,moner,moneral,moneran,moneric,moneron,monesia,money,moneyed,moneyer,mong,monger,mongery,mongler,mongrel,mongst,monial,moniker,monism,monist,monitor,monk,monkdom,monkery,monkess,monkey,monkish,monkism,monkly,monny,mono,monoazo,monocle,monocot,monodic,monody,monoid,monomer,mononch,monont,mononym,monose,monotic,monsoon,monster,montage,montana,montane,montant,monte,montem,month,monthly,monthon,montjoy,monton,monture,moo,mooch,moocha,moocher,mood,mooder,moodily,moodish,moodle,moody,mooing,mool,moolet,mools,moolum,moon,moonack,mooned,mooner,moonery,mooneye,moonily,mooning,moonish,moonite,moonja,moonjah,moonlet,moonlit,moonman,moonset,moonway,moony,moop,moor,moorage,mooring,moorish,moorman,moorn,moorpan,moors,moorup,moory,moosa,moose,moosey,moost,moot,mooter,mooth,mooting,mootman,mop,mopane,mope,moper,moph,mophead,moping,mopish,mopla,mopper,moppet,moppy,mopsy,mopus,mor,mora,moraine,moral,morale,morally,morals,morass,morassy,morat,morate,moray,morbid,morbify,mordant,mordent,mordore,more,moreen,moreish,morel,morella,morello,mores,morfrey,morg,morga,morgan,morgay,morgen,morglay,morgue,moric,moriche,morin,morinel,morion,morkin,morlop,mormaor,mormo,mormon,mormyr,mormyre,morn,morne,morned,morning,moro,moroc,morocco,moron,moroncy,morong,moronic,moronry,morose,morosis,morph,morphea,morphew,morphia,morphic,morphon,morris,morrow,morsal,morse,morsel,morsing,morsure,mort,mortal,mortar,mortary,morth,mortier,mortify,mortise,morula,morular,morule,morvin,morwong,mosaic,mosaist,mosette,mosey,mosker,mosque,moss,mossed,mosser,mossery,mossful,mossy,most,moste,mostly,mot,mote,moted,motel,moter,motet,motey,moth,mothed,mother,mothery,mothy,motif,motific,motile,motion,motive,motley,motmot,motor,motored,motoric,motory,mott,motte,mottle,mottled,mottler,motto,mottoed,motyka,mou,mouche,moud,moudie,moudy,mouflon,mouille,moujik,moul,mould,moulded,moule,moulin,mouls,moulter,mouly,mound,moundy,mount,mounted,mounter,moup,mourn,mourner,mouse,mouser,mousery,mousey,mousily,mousing,mousle,mousmee,mousse,moustoc,mousy,mout,moutan,mouth,mouthed,mouther,mouthy,mouton,mouzah,movable,movably,movant,move,mover,movie,moving,mow,mowable,mowana,mowburn,mowch,mowcht,mower,mowha,mowie,mowing,mowland,mown,mowra,mowrah,mowse,mowt,mowth,moxa,moy,moyen,moyenne,moyite,moyle,moyo,mozing,mpret,mu,muang,mubarat,mucago,mucaro,mucedin,much,muchly,mucic,mucid,mucific,mucigen,mucin,muck,mucker,mucket,muckite,muckle,muckman,muckna,mucksy,mucky,mucluc,mucoid,muconic,mucopus,mucor,mucosa,mucosal,mucose,mucous,mucro,mucus,mucusin,mud,mudar,mudbank,mudcap,mudd,mudde,mudden,muddify,muddily,mudding,muddish,muddle,muddler,muddy,mudee,mudfish,mudflow,mudhead,mudhole,mudir,mudiria,mudland,mudlark,mudless,mudra,mudsill,mudweed,mudwort,muermo,muezzin,muff,muffed,muffet,muffin,muffish,muffle,muffled,muffler,mufflin,muffy,mufti,mufty,mug,muga,mugful,mugg,mugger,mugget,muggily,muggins,muggish,muggles,muggy,mugient,mugweed,mugwort,mugwump,muid,muir,muist,mukluk,muktar,mukti,mulatta,mulatto,mulch,mulcher,mulct,mulder,mule,muleman,muleta,muletta,muley,mulga,mulier,mulish,mulism,mulita,mulk,mull,mulla,mullah,mullar,mullein,muller,mullet,mullets,mulley,mullid,mullion,mullite,mullock,mulloid,mulmul,mulse,mulsify,mult,multum,multure,mum,mumble,mumbler,mummer,mummery,mummick,mummied,mummify,mumming,mummy,mumness,mump,mumper,mumpish,mumps,mun,munch,muncher,munchet,mund,mundane,mundic,mundify,mundil,mundle,mung,munga,munge,mungey,mungo,mungofa,munguba,mungy,munific,munity,munj,munjeet,munnion,munshi,munt,muntin,muntjac,mura,murage,mural,muraled,murally,murchy,murder,murdrum,mure,murex,murexan,murga,murgavi,murgeon,muriate,muricid,murid,murine,murinus,muriti,murium,murk,murkily,murkish,murkly,murky,murlin,murly,murmur,murphy,murra,murrain,murre,murrey,murrina,murshid,muruxi,murva,murza,musal,musang,musar,muscade,muscat,muscid,muscle,muscled,muscly,muscoid,muscone,muscose,muscot,muscovy,muscule,muse,mused,museful,museist,muser,musery,musette,museum,mush,musha,mushaa,mushed,musher,mushily,mushla,mushru,mushy,music,musical,musico,musie,musily,musimon,musing,musk,muskat,muskeg,musket,muskie,muskish,muskrat,musky,muslin,musnud,musquaw,musrol,muss,mussal,mussel,mussily,mussuk,mussy,must,mustang,mustard,mustee,muster,mustify,mustily,mustnt,musty,muta,mutable,mutably,mutage,mutant,mutase,mutate,mutch,mute,mutedly,mutely,muth,mutic,mutiny,mutism,mutist,mutive,mutsje,mutt,mutter,mutton,muttony,mutual,mutuary,mutule,mutuum,mux,muyusa,muzhik,muzz,muzzily,muzzle,muzzler,muzzy,my,myal,myalgia,myalgic,myalism,myall,myarian,myatony,mycele,mycelia,mycoid,mycose,mycosin,mycosis,mycotic,mydine,myelic,myelin,myeloic,myeloid,myeloma,myelon,mygale,mygalid,myiasis,myiosis,myitis,mykiss,mymarid,myna,myocele,myocyte,myogen,myogram,myoid,myology,myoma,myomere,myoneme,myope,myophan,myopia,myopic,myops,myopy,myosin,myosis,myosote,myotic,myotome,myotomy,myotony,myowun,myoxine,myrcene,myrcia,myriad,myriare,myrica,myricin,myricyl,myringa,myron,myronic,myrosin,myrrh,myrrhed,myrrhic,myrrhol,myrrhy,myrtal,myrtle,myrtol,mysel,myself,mysell,mysid,mysoid,mysost,myst,mystax,mystery,mystes,mystic,mystify,myth,mythify,mythism,mythist,mythize,mythos,mythus,mytilid,myxa,myxemia,myxo,myxoid,myxoma,myxopod,myzont,n,na,naa,naam,nab,nabak,nabber,nabk,nabla,nable,nabob,nabobry,nabs,nacarat,nace,nacelle,nach,nachani,nacket,nacre,nacred,nacrine,nacrite,nacrous,nacry,nadder,nadir,nadiral,nae,naebody,naegate,nael,naether,nag,naga,nagaika,nagana,nagara,nagger,naggin,nagging,naggish,naggle,naggly,naggy,naght,nagmaal,nagman,nagnag,nagnail,nagor,nagsman,nagster,nagual,naiad,naiant,naid,naif,naifly,naig,naigie,naik,nail,nailbin,nailer,nailery,nailing,nailrod,naily,nain,nainsel,naio,naipkin,nairy,nais,naish,naither,naive,naively,naivete,naivety,nak,nake,naked,nakedly,naker,nakhod,nakhoda,nako,nakong,nakoo,nallah,nam,namable,namaqua,namaz,namda,name,namely,namer,naming,nammad,nan,nana,nancy,nandi,nandine,nandow,nandu,nane,nanes,nanga,nanism,nankeen,nankin,nanny,nanoid,nanpie,nant,nantle,naology,naos,nap,napa,napal,napalm,nape,napead,naperer,napery,naphtha,naphtho,naphtol,napkin,napless,napoo,nappe,napped,napper,napping,nappy,napron,napu,nar,narcism,narcist,narcoma,narcose,narcous,nard,nardine,nardoo,nares,nargil,narial,naric,narica,narine,nark,narky,narr,narra,narras,narrate,narrow,narrowy,narthex,narwhal,nary,nasab,nasal,nasalis,nasally,nasard,nascent,nasch,nash,nashgab,nashgob,nasi,nasial,nasion,nasitis,nasrol,nast,nastic,nastika,nastily,nasty,nasus,nasute,nasutus,nat,nataka,natal,natals,natant,natator,natch,nates,nathe,nather,nation,native,natr,natrium,natron,natter,nattily,nattle,natty,natuary,natural,nature,naucrar,nauger,naught,naughty,naumk,naunt,nauntle,nausea,naut,nautch,nauther,nautic,nautics,naval,navally,navar,navarch,nave,navel,naveled,navet,navette,navew,navite,navvy,navy,naw,nawab,nawt,nay,nayaur,naysay,nayward,nayword,naze,nazim,nazir,ne,nea,neal,neanic,neap,neaped,nearby,nearest,nearish,nearly,neat,neaten,neath,neatify,neatly,neb,neback,nebbed,nebbuck,nebbuk,nebby,nebel,nebris,nebula,nebulae,nebular,nebule,neck,neckar,necked,necker,neckful,necking,necklet,necktie,necrose,nectar,nectary,nedder,neddy,nee,neebor,neebour,need,needer,needful,needham,needily,needing,needle,needled,needler,needles,needly,needs,needy,neeger,neeld,neele,neem,neep,neepour,neer,neese,neet,neetup,neeze,nef,nefast,neffy,neftgil,negate,negator,neger,neglect,negrine,negro,negus,nei,neif,neigh,neigher,neiper,neist,neither,nekton,nelson,nema,nematic,nemeses,nemesic,nemoral,nenta,neo,neocyte,neogamy,neolith,neology,neon,neonate,neorama,neossin,neoteny,neotype,neoza,nep,neper,nephele,nephesh,nephew,nephria,nephric,nephron,nephros,nepman,nepotal,nepote,nepotic,nereite,nerine,neritic,nerval,nervate,nerve,nerver,nervid,nervily,nervine,nerving,nervish,nervism,nervose,nervous,nervule,nervure,nervy,nese,nesh,neshly,nesiote,ness,nest,nestage,nester,nestful,nestle,nestler,nesty,net,netball,netbush,netcha,nete,neter,netful,neth,nether,neti,netleaf,netlike,netman,netop,netsman,netsuke,netted,netter,netting,nettle,nettler,nettly,netty,netwise,network,neuma,neume,neumic,neurad,neural,neurale,neuric,neurin,neurine,neurism,neurite,neuroid,neuroma,neuron,neurone,neurula,neuter,neutral,neutron,neve,nevel,never,nevo,nevoid,nevoy,nevus,new,newcal,newcome,newel,newelty,newing,newings,newish,newly,newness,news,newsboy,newsful,newsman,newsy,newt,newtake,newton,nexal,next,nextly,nexum,nexus,neyanda,ngai,ngaio,ngapi,ni,niacin,niata,nib,nibbana,nibbed,nibber,nibble,nibbler,nibby,niblick,niblike,nibong,nibs,nibsome,nice,niceish,nicely,nicety,niche,nicher,nick,nickel,nicker,nickey,nicking,nickle,nicky,nicolo,nicotia,nicotic,nictate,nid,nidal,nidana,niddick,niddle,nide,nidge,nidget,nidgety,nidi,nidify,niding,nidor,nidulus,nidus,niece,nielled,niello,niepa,nieve,nieveta,nife,niffer,nific,nifle,nifling,nifty,nig,niggard,nigger,niggery,niggle,niggler,niggly,nigh,nighly,night,nighted,nightie,nightly,nights,nignay,nignye,nigori,nigre,nigrify,nigrine,nigrous,nigua,nikau,nil,nilgai,nim,nimb,nimbed,nimbi,nimble,nimbly,nimbose,nimbus,nimiety,niminy,nimious,nimmer,nimshi,nincom,nine,ninepin,nineted,ninety,ninny,ninon,ninth,ninthly,nintu,ninut,niobate,niobic,niobite,niobium,niobous,niog,niota,nip,nipa,nipper,nippers,nippily,nipping,nipple,nippy,nipter,nirles,nirvana,nisei,nishiki,nisnas,nispero,nisse,nisus,nit,nitch,nitency,niter,nitered,nither,nithing,nitid,nito,niton,nitrate,nitric,nitride,nitrify,nitrile,nitrite,nitro,nitrous,nitryl,nitter,nitty,nitwit,nival,niveous,nix,nixie,niyoga,nizam,nizamut,nizy,njave,no,noa,nob,nobber,nobbily,nobble,nobbler,nobbut,nobby,noble,nobley,nobly,nobody,nobs,nocake,nocent,nock,nocket,nocktat,noctuid,noctule,nocturn,nocuity,nocuous,nod,nodal,nodated,nodder,nodding,noddle,noddy,node,noded,nodi,nodiak,nodical,nodose,nodous,nodular,nodule,noduled,nodulus,nodus,noel,noetic,noetics,nog,nogada,nogal,noggen,noggin,nogging,noghead,nohow,noil,noilage,noiler,noily,noint,noir,noise,noisily,noisome,noisy,nokta,noll,nolle,nolo,noma,nomad,nomadic,nomancy,nomarch,nombril,nome,nomial,nomic,nomina,nominal,nominee,nominy,nomism,nomisma,nomos,non,nonacid,nonact,nonage,nonagon,nonaid,nonair,nonane,nonary,nonbase,nonce,noncock,noncom,noncome,noncon,nonda,nondo,none,nonego,nonene,nonent,nonepic,nones,nonet,nonevil,nonfact,nonfarm,nonfat,nonfood,nonform,nonfrat,nongas,nongod,nongold,nongray,nongrey,nonhero,nonic,nonion,nonius,nonjury,nonlife,nonly,nonnant,nonnat,nonoic,nonoily,nonomad,nonpaid,nonpar,nonpeak,nonplus,nonpoet,nonport,nonrun,nonsale,nonsane,nonself,nonsine,nonskid,nonslip,nonstop,nonsuit,nontan,nontax,nonterm,nonuple,nonuse,nonuser,nonwar,nonya,nonyl,nonylic,nonzero,noodle,nook,nooked,nookery,nooking,nooklet,nooky,noology,noon,noonday,nooning,noonlit,noop,noose,nooser,nopal,nopalry,nope,nor,norard,norate,noreast,norelin,norgine,nori,noria,norie,norimon,norite,norland,norm,norma,normal,norsel,north,norther,norward,norwest,nose,nosean,nosed,nosegay,noser,nosey,nosine,nosing,nosism,nostic,nostril,nostrum,nosy,not,notable,notably,notaeal,notaeum,notal,notan,notary,notate,notator,notch,notched,notchel,notcher,notchy,note,noted,notedly,notekin,notelet,noter,nother,nothing,nothous,notice,noticer,notify,notion,notitia,notour,notself,notum,nougat,nought,noun,nounal,nounize,noup,nourice,nourish,nous,nouther,nova,novalia,novate,novator,novcic,novel,novelet,novella,novelly,novelry,novelty,novem,novena,novene,novice,novity,now,nowaday,noway,noways,nowed,nowel,nowhat,nowhen,nowhere,nowhit,nowise,nowness,nowt,nowy,noxa,noxal,noxally,noxious,noy,noyade,noyau,nozzle,nozzler,nth,nu,nuance,nub,nubbin,nubble,nubbly,nubby,nubia,nubile,nucal,nucha,nuchal,nucin,nucleal,nuclear,nuclei,nuclein,nucleon,nucleus,nuclide,nucule,nuculid,nudate,nuddle,nude,nudely,nudge,nudger,nudiped,nudish,nudism,nudist,nudity,nugator,nuggar,nugget,nuggety,nugify,nuke,nul,null,nullah,nullify,nullism,nullity,nullo,numb,number,numbing,numble,numbles,numbly,numda,numdah,numen,numeral,numero,nummary,nummi,nummus,numud,nun,nunatak,nunbird,nunch,nuncio,nuncle,nundine,nunhood,nunky,nunlet,nunlike,nunnari,nunnery,nunni,nunnify,nunnish,nunship,nuptial,nuque,nuraghe,nurhag,nurly,nurse,nurser,nursery,nursing,nursle,nursy,nurture,nusfiah,nut,nutant,nutate,nutcake,nutgall,nuthook,nutlet,nutlike,nutmeg,nutpick,nutria,nutrice,nutrify,nutseed,nutted,nutter,nuttery,nuttily,nutting,nuttish,nutty,nuzzer,nuzzle,nyanza,nye,nylast,nylon,nymil,nymph,nympha,nymphae,nymphal,nymphet,nymphic,nymphid,nymphly,nyxis,o,oadal,oaf,oafdom,oafish,oak,oaken,oaklet,oaklike,oakling,oakum,oakweb,oakwood,oaky,oam,oar,oarage,oarcock,oared,oarfish,oarhole,oarial,oaric,oaritic,oaritis,oarium,oarless,oarlike,oarlock,oarlop,oarman,oarsman,oarweed,oary,oasal,oasean,oases,oasis,oasitic,oast,oat,oatbin,oatcake,oatear,oaten,oatfowl,oath,oathay,oathed,oathful,oathlet,oatland,oatlike,oatmeal,oatseed,oaty,oban,obclude,obe,obeah,obeche,obeism,obelia,obeliac,obelial,obelion,obelisk,obelism,obelize,obelus,obese,obesely,obesity,obex,obey,obeyer,obi,obispo,obit,obitual,object,objure,oblate,obley,oblige,obliged,obligee,obliger,obligor,oblique,oblong,obloquy,oboe,oboist,obol,obolary,obole,obolet,obolus,oboval,obovate,obovoid,obscene,obscure,obsede,obsequy,observe,obsess,obtain,obtect,obtest,obtrude,obtund,obtuse,obverse,obvert,obviate,obvious,obvolve,ocarina,occamy,occiput,occlude,occluse,occult,occupy,occur,ocean,oceaned,oceanet,oceanic,ocellar,ocelli,ocellus,oceloid,ocelot,och,ochava,ochavo,ocher,ochery,ochone,ochrea,ochro,ochroid,ochrous,ocht,ock,oclock,ocote,ocque,ocracy,ocrea,ocreate,octad,octadic,octagon,octan,octane,octant,octapla,octarch,octary,octaval,octave,octavic,octavo,octene,octet,octic,octine,octoad,octoate,octofid,octoic,octoid,octonal,octoon,octoped,octopi,octopod,octopus,octose,octoyl,octroi,octroy,octuor,octuple,octuply,octyl,octyne,ocuby,ocular,oculary,oculate,oculist,oculus,od,oda,odacoid,odal,odalisk,odaller,odalman,odd,oddish,oddity,oddlegs,oddly,oddman,oddment,oddness,odds,oddsman,ode,odel,odelet,odeon,odeum,odic,odinite,odious,odist,odium,odology,odontic,odoom,odor,odorant,odorate,odored,odorful,odorize,odorous,odso,odum,odyl,odylic,odylism,odylist,odylize,oe,oecist,oecus,oenin,oenolin,oenomel,oer,oersted,oes,oestrid,oestrin,oestrum,oestrus,of,off,offal,offbeat,offcast,offcome,offcut,offend,offense,offer,offeree,offerer,offeror,offhand,office,officer,offing,offish,offlet,offlook,offscum,offset,offtake,offtype,offward,oflete,oft,often,oftens,ofter,oftest,oftly,oftness,ofttime,ogaire,ogam,ogamic,ogdoad,ogdoas,ogee,ogeed,ogham,oghamic,ogival,ogive,ogived,ogle,ogler,ogmic,ogre,ogreish,ogreism,ogress,ogrish,ogrism,ogtiern,ogum,oh,ohelo,ohia,ohm,ohmage,ohmic,oho,ohoy,oidioid,oii,oil,oilbird,oilcan,oilcoat,oilcup,oildom,oiled,oiler,oilery,oilfish,oilhole,oilily,oilless,oillet,oillike,oilman,oilseed,oilskin,oilway,oily,oilyish,oime,oinomel,oint,oisin,oitava,oka,okapi,okee,okenite,oket,oki,okia,okonite,okra,okrug,olam,olamic,old,olden,older,oldish,oldland,oldness,oldster,oldwife,oleana,olease,oleate,olefin,olefine,oleic,olein,olena,olenid,olent,oleo,oleose,oleous,olfact,olfacty,oliban,olid,oligist,olio,olitory,oliva,olivary,olive,olived,olivet,olivil,olivile,olivine,olla,ollamh,ollapod,ollock,olm,ologist,ology,olomao,olona,oloroso,olpe,oltonde,oltunna,olycook,olykoek,om,omagra,omalgia,omao,omasum,omber,omega,omegoid,omelet,omen,omened,omental,omentum,omer,omicron,omina,ominous,omit,omitis,omitter,omlah,omneity,omniana,omnibus,omnific,omnify,omnist,omnium,on,ona,onager,onagra,onanism,onanist,onca,once,oncetta,oncia,oncin,oncome,oncosis,oncost,ondatra,ondine,ondy,one,onefold,onegite,onehow,oneiric,oneism,onement,oneness,oner,onerary,onerous,onery,oneself,onetime,oneyer,onfall,onflow,ongaro,ongoing,onicolo,onion,onionet,oniony,onium,onkos,onlay,onlepy,onliest,onlook,only,onmarch,onrush,ons,onset,onshore,onside,onsight,onstand,onstead,onsweep,ontal,onto,onus,onward,onwards,onycha,onychia,onychin,onym,onymal,onymity,onymize,onymous,onymy,onyx,onyxis,onza,ooblast,oocyst,oocyte,oodles,ooecial,ooecium,oofbird,ooftish,oofy,oogamy,oogeny,ooglea,oogone,oograph,ooid,ooidal,oolak,oolemma,oolite,oolitic,oolly,oologic,oology,oolong,oomancy,oometer,oometry,oons,oont,oopak,oophore,oophyte,ooplasm,ooplast,oopod,oopodal,oorali,oord,ooscope,ooscopy,oosperm,oospore,ootheca,ootid,ootype,ooze,oozily,oozooid,oozy,opacate,opacify,opacite,opacity,opacous,opah,opal,opaled,opaline,opalish,opalize,opaloid,opaque,ope,opelet,open,opener,opening,openly,opera,operae,operand,operant,operate,opercle,operose,ophic,ophioid,ophite,ophitic,ophryon,opianic,opianyl,opiate,opiatic,opiism,opinant,opine,opiner,opinion,opium,opossum,oppidan,oppose,opposed,opposer,opposit,oppress,oppugn,opsonic,opsonin,opsy,opt,optable,optably,optant,optate,optic,optical,opticon,optics,optimal,optime,optimum,option,optive,opulent,opulus,opus,oquassa,or,ora,orach,oracle,orad,orage,oral,oraler,oralism,oralist,orality,oralize,orally,oralogy,orang,orange,oranger,orangey,orant,orarian,orarion,orarium,orary,orate,oration,orator,oratory,oratrix,orb,orbed,orbic,orbical,orbicle,orbific,orbit,orbital,orbitar,orbite,orbless,orblet,orby,orc,orcanet,orcein,orchard,orchat,orchel,orchic,orchid,orchil,orcin,orcinol,ordain,ordeal,order,ordered,orderer,orderly,ordinal,ordinar,ordinee,ordines,ordu,ordure,ore,oread,orectic,orellin,oreman,orenda,oreweed,orewood,orexis,orf,orfgild,organ,organal,organdy,organer,organic,organon,organry,organum,orgasm,orgeat,orgia,orgiac,orgiacs,orgiasm,orgiast,orgic,orgue,orgy,orgyia,oribi,oriel,oriency,orient,orifice,oriform,origan,origin,orignal,orihon,orillon,oriole,orison,oristic,orle,orlean,orlet,orlo,orlop,ormer,ormolu,orna,ornate,ornery,ornis,ornoite,oroanal,orogen,orogeny,oroide,orology,oronoco,orotund,orphan,orpheon,orpheum,orphrey,orpine,orrery,orrhoid,orris,orsel,orselle,ort,ortalid,ortet,orthal,orthian,orthic,orthid,orthite,ortho,orthose,orthron,ortiga,ortive,ortolan,ortygan,ory,oryssid,os,osamin,osamine,osazone,oscella,oscheal,oscin,oscine,oscnode,oscular,oscule,osculum,ose,osela,oshac,oside,osier,osiered,osiery,osmate,osmatic,osmesis,osmetic,osmic,osmin,osmina,osmious,osmium,osmose,osmosis,osmotic,osmous,osmund,osone,osophy,osprey,ossal,osse,ossein,osselet,osseous,ossicle,ossific,ossify,ossuary,osteal,ostein,ostemia,ostent,osteoid,osteoma,ostial,ostiary,ostiate,ostiole,ostitis,ostium,ostmark,ostosis,ostrich,otalgia,otalgic,otalgy,otarian,otarine,otary,otate,other,othmany,otiant,otiatry,otic,otidine,otidium,otiose,otitic,otitis,otkon,otocyst,otolite,otolith,otology,otosis,ototomy,ottar,otter,otterer,otto,oturia,ouabain,ouabaio,ouabe,ouakari,ouch,ouenite,ouf,ough,ought,oughtnt,oukia,oulap,ounce,ounds,ouphe,ouphish,our,ourie,ouroub,ours,ourself,oust,ouster,out,outact,outage,outarde,outask,outawe,outback,outbake,outban,outbar,outbark,outbawl,outbeam,outbear,outbeg,outbent,outbid,outblot,outblow,outbond,outbook,outborn,outbow,outbowl,outbox,outbrag,outbray,outbred,outbud,outbulk,outburn,outbuy,outbuzz,outby,outcant,outcase,outcast,outcity,outcome,outcrop,outcrow,outcry,outcull,outcure,outcut,outdare,outdate,outdo,outdoer,outdoor,outdraw,outdure,outeat,outecho,outed,outedge,outen,outer,outerly,outeye,outeyed,outface,outfall,outfame,outfast,outfawn,outfeat,outfish,outfit,outflow,outflue,outflux,outfly,outfold,outfool,outfoot,outform,outfort,outgain,outgame,outgang,outgas,outgate,outgaze,outgive,outglad,outglow,outgnaw,outgo,outgoer,outgone,outgrin,outgrow,outgun,outgush,outhaul,outhear,outheel,outher,outhire,outhiss,outhit,outhold,outhowl,outhue,outhunt,outhurl,outhut,outhymn,outing,outish,outjazz,outjest,outjet,outjinx,outjump,outjut,outkick,outkill,outking,outkiss,outknee,outlaid,outland,outlash,outlast,outlaw,outlay,outlean,outleap,outler,outlet,outlie,outlier,outlimb,outlimn,outline,outlip,outlive,outlook,outlord,outlove,outlung,outly,outman,outmate,outmode,outmost,outmove,outname,outness,outnook,outoven,outpace,outpage,outpart,outpass,outpath,outpay,outpeal,outpeep,outpeer,outpick,outpipe,outpity,outplan,outplay,outplod,outplot,outpoll,outpomp,outpop,outport,outpost,outpour,outpray,outpry,outpull,outpurl,outpush,output,outrace,outrage,outrail,outrank,outrant,outrap,outrate,outrave,outray,outre,outread,outrede,outrick,outride,outrig,outring,outroar,outroll,outroot,outrove,outrow,outrun,outrush,outsail,outsay,outsea,outseam,outsee,outseek,outsell,outsert,outset,outshot,outshow,outshut,outside,outsift,outsigh,outsin,outsing,outsit,outsize,outskip,outsoar,outsole,outspan,outspin,outspit,outspue,outstay,outstep,outsuck,outsulk,outsum,outswim,outtalk,outtask,outtear,outtell,outtire,outtoil,outtop,outtrot,outturn,outvie,outvier,outvote,outwait,outwake,outwale,outwalk,outwall,outwar,outward,outwash,outwave,outwear,outweed,outweep,outwell,outwent,outwick,outwile,outwill,outwind,outwing,outwish,outwit,outwith,outwoe,outwood,outword,outwore,outwork,outworn,outyard,outyell,outyelp,outzany,ouzel,ova,oval,ovalish,ovalize,ovally,ovaloid,ovant,ovarial,ovarian,ovarin,ovarium,ovary,ovate,ovated,ovately,ovation,oven,ovenful,ovenly,ovenman,over,overact,overage,overall,overapt,overarm,overawe,overawn,overbet,overbid,overbig,overbit,overbow,overbuy,overby,overcap,overcow,overcoy,overcry,overcup,overcut,overdo,overdry,overdue,overdye,overeat,overegg,overeye,overfag,overfar,overfat,overfed,overfee,overfew,overfit,overfix,overfly,overget,overgo,overgod,overgun,overhit,overhot,overink,overjob,overjoy,overlap,overlax,overlay,overleg,overlie,overlip,overlow,overly,overman,overmix,overnet,overnew,overpay,overpet,overply,overpot,overrim,overrun,oversad,oversea,oversee,overset,oversew,oversot,oversow,overt,overtax,overtip,overtly,overtoe,overtop,overuse,overway,overweb,overwet,overwin,ovest,ovey,ovicell,ovicide,ovicyst,oviduct,oviform,ovigerm,ovile,ovine,ovinia,ovipara,ovisac,ovism,ovist,ovistic,ovocyte,ovoid,ovoidal,ovolo,ovology,ovular,ovulary,ovulate,ovule,ovulist,ovum,ow,owd,owe,owelty,ower,owerby,owght,owing,owk,owl,owldom,owler,owlery,owlet,owlhead,owling,owlish,owlism,owllike,owly,own,owner,ownhood,ownness,ownself,owrehip,owrelay,owse,owsen,owser,owtchah,ox,oxacid,oxalan,oxalate,oxalic,oxalite,oxalyl,oxamate,oxamic,oxamid,oxamide,oxan,oxanate,oxane,oxanic,oxazine,oxazole,oxbane,oxberry,oxbird,oxbiter,oxblood,oxbow,oxboy,oxbrake,oxcart,oxcheek,oxea,oxeate,oxen,oxeote,oxer,oxetone,oxeye,oxfly,oxgang,oxgoad,oxhead,oxheal,oxheart,oxhide,oxhoft,oxhorn,oxhouse,oxhuvud,oxidant,oxidase,oxidate,oxide,oxidic,oxidize,oximate,oxime,oxland,oxlike,oxlip,oxman,oxonic,oxonium,oxozone,oxphony,oxreim,oxshoe,oxskin,oxtail,oxter,oxwort,oxy,oxyacid,oxygas,oxygen,oxyl,oxymel,oxyntic,oxyopia,oxysalt,oxytone,oyapock,oyer,oyster,ozena,ozonate,ozone,ozoned,ozonic,ozonide,ozonify,ozonize,ozonous,ozophen,ozotype,p,pa,paal,paar,paauw,pabble,pablo,pabouch,pabular,pabulum,pac,paca,pacable,pacate,pacay,pacaya,pace,paced,pacer,pachak,pachisi,pacific,pacify,pack,package,packer,packery,packet,packly,packman,packway,paco,pact,paction,pad,padder,padding,paddle,paddled,paddler,paddock,paddy,padella,padfoot,padge,padle,padlike,padlock,padnag,padre,padtree,paean,paegel,paegle,paenula,paeon,paeonic,paga,pagan,paganic,paganly,paganry,page,pageant,pagedom,pageful,pager,pagina,paginal,pagoda,pagrus,pagurid,pagus,pah,paha,pahi,pahlavi,pahmi,paho,pahutan,paigle,paik,pail,pailful,pailou,pain,pained,painful,paining,paint,painted,painter,painty,paip,pair,paired,pairer,pais,paisa,paiwari,pajama,pajock,pakchoi,pakeha,paktong,pal,palace,palaced,paladin,palaite,palama,palame,palanka,palar,palas,palatal,palate,palated,palatic,palaver,palay,palazzi,palch,pale,palea,paleate,paled,palely,paleola,paler,palet,paletot,palette,paletz,palfrey,palgat,pali,palikar,palila,palinal,paling,palisfy,palish,palkee,pall,palla,pallae,pallah,pallall,palled,pallet,palli,pallial,pallid,pallion,pallium,pallone,pallor,pally,palm,palma,palmad,palmar,palmary,palmate,palmed,palmer,palmery,palmful,palmist,palmite,palmito,palmo,palmula,palmus,palmy,palmyra,palolo,palp,palpal,palpate,palped,palpi,palpon,palpus,palsied,palster,palsy,palt,palter,paltry,paludal,paludic,palule,palulus,palus,paly,pam,pament,pamment,pampas,pampean,pamper,pampero,pampre,pan,panace,panacea,panache,panada,panade,panama,panaris,panary,panax,pancake,pand,panda,pandal,pandan,pandect,pandemy,pander,pandita,pandle,pandora,pandour,pandrop,pandura,pandy,pane,paned,paneity,panel,panela,paneler,panfil,panfish,panful,pang,pangamy,pangane,pangen,pangene,pangful,pangi,panhead,panic,panical,panicky,panicle,panisc,panisca,panisic,pank,pankin,panman,panmixy,panmug,pannade,pannage,pannam,panne,pannel,panner,pannery,pannier,panning,pannose,pannum,pannus,panocha,panoche,panoply,panoram,panse,panside,pansied,pansy,pant,pantas,panter,panther,pantie,panties,pantile,panting,pantle,pantler,panto,pantod,panton,pantoon,pantoum,pantry,pants,pantun,panty,panung,panurgy,panyar,paolo,paon,pap,papa,papable,papabot,papacy,papain,papal,papally,papalty,papane,papaw,papaya,papboat,pape,paper,papered,paperer,papern,papery,papess,papey,papilla,papion,papish,papism,papist,papize,papless,papmeat,papoose,pappi,pappose,pappox,pappus,pappy,papreg,paprica,paprika,papula,papular,papule,papyr,papyral,papyri,papyrin,papyrus,paquet,par,para,parable,paracme,parade,parader,parado,parados,paradox,parafle,parage,paragon,parah,paraiba,parale,param,paramo,parang,parao,parapet,paraph,parapod,pararek,parasol,paraspy,parate,paraxon,parbake,parboil,parcel,parch,parcher,parchy,parcook,pard,pardao,parded,pardesi,pardine,pardner,pardo,pardon,pare,parel,parella,paren,parent,parer,paresis,paretic,parfait,pargana,parge,parget,pargo,pari,pariah,parial,parian,paries,parify,parilla,parine,paring,parish,parisis,parison,parity,park,parka,parkee,parker,parkin,parking,parkish,parkway,parky,parlay,parle,parley,parling,parlish,parlor,parlous,parly,parma,parmak,parnas,parnel,paroch,parode,parodic,parodos,parody,paroecy,parol,parole,parolee,paroli,paronym,parotic,parotid,parotis,parous,parpal,parquet,parr,parrel,parrier,parrock,parrot,parroty,parry,parse,parsec,parser,parsley,parsnip,parson,parsony,part,partake,partan,parted,parter,partial,partile,partite,partlet,partly,partner,parto,partook,parture,party,parulis,parure,paruria,parvenu,parvis,parvule,pasan,pasang,paschal,pascual,pash,pasha,pashm,pasi,pasmo,pasquil,pasquin,pass,passade,passado,passage,passant,passe,passee,passen,passer,passewa,passing,passion,passir,passive,passkey,passman,passo,passout,passus,passway,past,paste,pasted,pastel,paster,pastern,pasteur,pastil,pastile,pastime,pasting,pastor,pastose,pastry,pasture,pasty,pasul,pat,pata,pataca,patacao,pataco,patagon,pataka,patamar,patao,patapat,pataque,patas,patball,patch,patcher,patchy,pate,patefy,patel,patella,paten,patency,patener,patent,pater,patera,patesi,path,pathed,pathema,pathic,pathlet,pathos,pathway,pathy,patible,patient,patina,patine,patined,patio,patly,patness,pato,patois,patola,patonce,patria,patrial,patrice,patrico,patrin,patriot,patrist,patrix,patrol,patron,patroon,patta,patte,pattee,patten,patter,pattern,pattu,patty,patu,patwari,paty,pau,paucify,paucity,paughty,paukpan,paular,paulie,paulin,paunch,paunchy,paup,pauper,pausal,pause,pauser,paussid,paut,pauxi,pavage,pavan,pavane,pave,paver,pavid,pavier,paving,pavior,paviour,pavis,paviser,pavisor,pavy,paw,pawdite,pawer,pawing,pawk,pawkery,pawkily,pawkrie,pawky,pawl,pawn,pawnage,pawnee,pawner,pawnie,pawnor,pawpaw,pax,paxilla,paxiuba,paxwax,pay,payable,payably,payday,payed,payee,payeny,payer,paying,payment,paynim,payoff,payong,payor,payroll,pea,peace,peach,peachen,peacher,peachy,peacoat,peacock,peacod,peafowl,peag,peage,peahen,peai,peaiism,peak,peaked,peaker,peakily,peaking,peakish,peaky,peal,pealike,pean,peanut,pear,pearl,pearled,pearler,pearlet,pearlin,pearly,peart,pearten,peartly,peasant,peasen,peason,peasy,peat,peatery,peatman,peaty,peavey,peavy,peba,pebble,pebbled,pebbly,pebrine,pecan,peccant,peccary,peccavi,pech,pecht,pecite,peck,pecked,pecker,pecket,peckful,peckish,peckle,peckled,peckly,pecky,pectase,pectate,pecten,pectic,pectin,pectize,pectora,pectose,pectous,pectus,ped,peda,pedage,pedagog,pedal,pedaler,pedant,pedary,pedate,pedated,pedder,peddle,peddler,pedee,pedes,pedesis,pedicab,pedicel,pedicle,pedion,pedlar,pedlary,pedocal,pedrail,pedrero,pedro,pedule,pedum,pee,peed,peek,peel,peele,peeled,peeler,peeling,peelman,peen,peenge,peeoy,peep,peeper,peepeye,peepy,peer,peerage,peerdom,peeress,peerie,peerly,peery,peesash,peeve,peeved,peever,peevish,peewee,peg,pega,pegall,pegasid,pegbox,pegged,pegger,pegging,peggle,peggy,pegless,peglet,peglike,pegman,pegwood,peho,peine,peisage,peise,peiser,peixere,pekan,pekin,pekoe,peladic,pelage,pelagic,pelamyd,pelanos,pelean,pelecan,pelf,pelican,pelick,pelike,peliom,pelioma,pelisse,pelite,pelitic,pell,pellage,pellar,pellard,pellas,pellate,peller,pellet,pellety,pellile,pellock,pelmet,pelon,peloria,peloric,pelorus,pelota,peloton,pelt,pelta,peltast,peltate,pelter,pelting,peltry,pelu,peludo,pelves,pelvic,pelvis,pembina,pemican,pen,penal,penally,penalty,penance,penang,penates,penbard,pence,pencel,pencil,pend,penda,pendant,pendent,pending,pendle,pendom,pendule,penfold,penful,pengo,penguin,penhead,penial,penide,penile,penis,penk,penlike,penman,penna,pennae,pennage,pennant,pennate,penner,pennet,penni,pennia,pennied,pennill,penning,pennon,penny,penrack,penship,pensile,pension,pensive,penster,pensum,pensy,pent,penta,pentace,pentad,pentail,pentane,pentene,pentine,pentit,pentite,pentode,pentoic,pentol,pentose,pentrit,pentyl,pentyne,penuchi,penult,penury,peon,peonage,peonism,peony,people,peopler,peoplet,peotomy,pep,pepful,pepino,peplos,peplum,peplus,pepo,pepper,peppery,peppily,peppin,peppy,pepsin,pepsis,peptic,peptide,peptize,peptone,per,peracid,peract,perbend,percale,percent,percept,perch,percha,percher,percid,percoct,percoid,percur,percuss,perdu,perdure,pereion,pereira,peres,perfect,perfidy,perform,perfume,perfumy,perfuse,pergola,perhaps,peri,periapt,peridot,perigee,perigon,peril,perine,period,periost,perique,perish,perit,perite,periwig,perjink,perjure,perjury,perk,perkily,perkin,perking,perkish,perky,perle,perlid,perlite,perloir,perm,permit,permute,pern,pernine,pernor,pernyi,peroba,peropod,peropus,peroral,perosis,perotic,peroxy,peroxyl,perpend,perpera,perplex,perrier,perron,perry,persalt,perse,persico,persis,persist,person,persona,pert,pertain,perten,pertish,pertly,perturb,pertuse,perty,peruke,perula,perule,perusal,peruse,peruser,pervade,pervert,pes,pesa,pesade,pesage,peseta,peshkar,peshwa,peskily,pesky,peso,pess,pessary,pest,peste,pester,pestful,pestify,pestle,pet,petal,petaled,petalon,petaly,petard,petary,petasos,petasus,petcock,pete,peteca,peteman,peter,petful,petiole,petit,petite,petitor,petkin,petling,peto,petrary,petre,petrean,petrel,petrie,petrify,petrol,petrosa,petrous,petted,petter,pettily,pettish,pettle,petty,petune,petwood,petzite,peuhl,pew,pewage,pewdom,pewee,pewful,pewing,pewit,pewless,pewmate,pewter,pewtery,pewy,peyote,peyotl,peyton,peytrel,pfennig,pfui,pfund,phacoid,phaeism,phaeton,phage,phalanx,phalera,phallic,phallin,phallus,phanic,phano,phantom,phare,pharmic,pharos,pharynx,phase,phaseal,phasemy,phases,phasic,phasis,phasm,phasma,phasmid,pheal,phellem,phemic,phenate,phene,phenene,phenic,phenin,phenol,phenyl,pheon,phew,phi,phial,phiale,philter,philtra,phit,phiz,phizes,phizog,phlegm,phlegma,phlegmy,phloem,phloxin,pho,phobiac,phobic,phobism,phobist,phoby,phoca,phocal,phocid,phocine,phocoid,phoebe,phoenix,phoh,pholad,pholcid,pholido,phon,phonal,phonate,phone,phoneme,phonic,phonics,phonism,phono,phony,phoo,phoresy,phoria,phorid,phorone,phos,phose,phosis,phospho,phossy,phot,photal,photic,photics,photism,photo,photoma,photon,phragma,phrasal,phrase,phraser,phrasy,phrator,phratry,phrenic,phrynid,phrynin,phthor,phu,phugoid,phulwa,phut,phycite,phyla,phyle,phylic,phyllin,phylon,phylum,phyma,phymata,physic,physics,phytase,phytic,phytin,phytoid,phytol,phytoma,phytome,phyton,phytyl,pi,pia,piaba,piacaba,piacle,piaffe,piaffer,pial,pialyn,pian,pianic,pianino,pianism,pianist,piannet,piano,pianola,piaster,piastre,piation,piazine,piazza,pibcorn,pibroch,pic,pica,picador,pical,picamar,picara,picarel,picaro,picary,piccolo,pice,picene,piceous,pichi,picine,pick,pickage,pickax,picked,pickee,pickeer,picker,pickery,picket,pickle,pickler,pickman,pickmaw,pickup,picky,picnic,pico,picoid,picot,picotah,picotee,picra,picrate,picric,picrite,picrol,picryl,pict,picture,pictury,picuda,picudo,picul,piculet,pidan,piddle,piddler,piddock,pidgin,pie,piebald,piece,piecen,piecer,piecing,pied,piedly,pieless,pielet,pielum,piemag,pieman,pien,piend,piepan,pier,pierage,pierce,pierced,piercel,piercer,pierid,pierine,pierrot,pieshop,piet,pietas,pietic,pietism,pietist,pietose,piety,piewife,piewipe,piezo,piff,piffle,piffler,pifine,pig,pigdan,pigdom,pigeon,pigface,pigfish,pigfoot,pigful,piggery,piggin,pigging,piggish,piggle,piggy,pighead,pigherd,pightle,pigless,piglet,pigling,pigly,pigman,pigment,pignon,pignus,pignut,pigpen,pigroot,pigskin,pigsney,pigsty,pigtail,pigwash,pigweed,pigyard,piitis,pik,pika,pike,piked,pikel,pikelet,pikeman,piker,pikey,piki,piking,pikle,piky,pilage,pilapil,pilar,pilary,pilau,pilaued,pilch,pilcher,pilcorn,pilcrow,pile,pileata,pileate,piled,pileous,piler,piles,pileus,pilfer,pilger,pilgrim,pili,pilifer,piligan,pilikai,pilin,piline,piling,pilkins,pill,pillage,pillar,pillary,pillas,pillbox,pilled,pillet,pilleus,pillion,pillory,pillow,pillowy,pilm,pilmy,pilon,pilori,pilose,pilosis,pilot,pilotee,pilotry,pilous,pilpul,piltock,pilula,pilular,pilule,pilum,pilus,pily,pimaric,pimelic,pimento,pimlico,pimola,pimp,pimpery,pimping,pimpish,pimple,pimpled,pimplo,pimploe,pimply,pin,pina,pinaces,pinacle,pinacol,pinang,pinax,pinball,pinbone,pinbush,pincase,pincer,pincers,pinch,pinche,pinched,pinchem,pincher,pind,pinda,pinder,pindy,pine,pineal,pined,pinene,piner,pinery,pinesap,pinetum,piney,pinfall,pinfish,pinfold,ping,pingle,pingler,pingue,pinguid,pinguin,pinhead,pinhold,pinhole,pinhook,pinic,pining,pinion,pinite,pinitol,pinjane,pinjra,pink,pinked,pinkeen,pinken,pinker,pinkeye,pinkie,pinkify,pinkily,pinking,pinkish,pinkly,pinky,pinless,pinlock,pinna,pinnace,pinnae,pinnal,pinnate,pinned,pinnel,pinner,pinnet,pinning,pinnock,pinnula,pinnule,pinny,pino,pinole,pinolia,pinolin,pinon,pinonic,pinrail,pinsons,pint,pinta,pintado,pintail,pintano,pinte,pintle,pinto,pintura,pinulus,pinweed,pinwing,pinwork,pinworm,piny,pinyl,pinyon,pioneer,pioted,piotine,piotty,pioury,pious,piously,pip,pipa,pipage,pipal,pipe,pipeage,piped,pipeful,pipeman,piper,piperic,piperly,piperno,pipery,pipet,pipette,pipi,piping,pipiri,pipit,pipkin,pipless,pipped,pipper,pippin,pippy,piprine,piproid,pipy,piquant,pique,piquet,piquia,piqure,pir,piracy,piragua,piranha,pirate,piraty,pirl,pirn,pirner,pirnie,pirny,pirogue,pirol,pirr,pirrmaw,pisaca,pisang,pisay,piscary,piscian,piscina,piscine,pisco,pise,pish,pishaug,pishu,pisk,pisky,pismire,piso,piss,pissant,pist,pistic,pistil,pistle,pistol,pistole,piston,pistrix,pit,pita,pitanga,pitapat,pitarah,pitau,pitaya,pitch,pitcher,pitchi,pitchy,piteous,pitfall,pith,pithful,pithily,pithole,pithos,pithy,pitier,pitiful,pitless,pitlike,pitman,pitmark,pitmirk,pitpan,pitpit,pitside,pitted,pitter,pittine,pitting,pittite,pittoid,pituite,pituri,pitwood,pitwork,pity,pitying,piuri,pivalic,pivot,pivotal,pivoter,pix,pixie,pixy,pize,pizza,pizzle,placard,placate,place,placebo,placer,placet,placid,plack,placket,placode,placoid,placula,plaga,plagal,plagate,plage,plagium,plagose,plague,plagued,plaguer,plaguy,plaice,plaid,plaided,plaidie,plaidy,plain,plainer,plainly,plaint,plait,plaited,plaiter,plak,plakat,plan,planaea,planar,planate,planch,plandok,plane,planer,planet,planeta,planful,plang,plangor,planish,planity,plank,planker,planky,planner,plant,planta,plantad,plantal,plantar,planter,planula,planury,planxty,plap,plaque,plash,plasher,plashet,plashy,plasm,plasma,plasmic,plasome,plass,plasson,plaster,plastic,plastid,plastin,plat,platan,platane,platano,platch,plate,platea,plateau,plated,platen,plater,platery,platic,platina,plating,platode,platoid,platoon,platted,platten,platter,platty,platy,plaud,plaudit,play,playa,playbox,playboy,playday,player,playful,playlet,playman,playock,playpen,plaza,plea,pleach,plead,pleader,please,pleaser,pleat,pleater,pleb,plebe,plebify,plebs,pleck,plectre,pled,pledge,pledgee,pledger,pledget,pledgor,pleion,plenary,plenipo,plenish,plenism,plenist,plenty,plenum,pleny,pleon,pleonal,pleonic,pleopod,pleroma,plerome,plessor,pleura,pleural,pleuric,pleuron,pleurum,plew,plex,plexal,plexor,plexure,plexus,pliable,pliably,pliancy,pliant,plica,plical,plicate,plied,plier,plies,pliers,plight,plim,plinth,pliskie,plisky,ploat,ploce,plock,plod,plodder,plodge,plomb,plook,plop,plosion,plosive,plot,plote,plotful,plotted,plotter,plotty,plough,plouk,plouked,plouky,plounce,plout,plouter,plover,plovery,plow,plowboy,plower,plowing,plowman,ploy,pluck,plucked,plucker,plucky,plud,pluff,pluffer,pluffy,plug,plugged,plugger,pluggy,plugman,plum,pluma,plumach,plumade,plumage,plumate,plumb,plumber,plumbet,plumbic,plumbog,plumbum,plumcot,plume,plumed,plumer,plumery,plumet,plumier,plumify,plumist,plumlet,plummer,plummet,plummy,plumose,plumous,plump,plumpen,plumper,plumply,plumps,plumpy,plumula,plumule,plumy,plunder,plunge,plunger,plunk,plup,plural,pluries,plurify,plus,plush,plushed,plushy,pluteal,plutean,pluteus,pluvial,pluvian,pluvine,ply,plyer,plying,plywood,pneuma,po,poach,poacher,poachy,poalike,pob,pobby,pobs,pochade,pochard,pochay,poche,pock,pocket,pockety,pockily,pocky,poco,pocosin,pod,podagra,podal,podalic,podatus,podded,podder,poddish,poddle,poddy,podeon,podesta,podex,podge,podger,podgily,podgy,podial,podical,podices,podite,poditic,poditti,podium,podler,podley,podlike,podogyn,podsol,poduran,podurid,podware,podzol,poe,poem,poemet,poemlet,poesie,poesis,poesy,poet,poetdom,poetess,poetic,poetics,poetito,poetize,poetly,poetry,pogge,poggy,pogonip,pogrom,pogy,poh,poha,pohna,poi,poietic,poignet,poil,poilu,poind,poinder,point,pointed,pointel,pointer,pointy,poise,poised,poiser,poison,poitrel,pokable,poke,poked,pokeful,pokeout,poker,pokey,pokily,poking,pokomoo,pokunt,poky,pol,polacca,polack,polacre,polar,polaric,polarly,polaxis,poldavy,polder,pole,polearm,poleax,poleaxe,polecat,poleman,polemic,polenta,poler,poley,poliad,police,policed,policy,poligar,polio,polis,polish,polite,politic,polity,polk,polka,poll,pollack,polladz,pollage,pollam,pollan,pollard,polled,pollen,pollent,poller,pollex,polling,pollock,polloi,pollute,pollux,polo,poloist,polony,polos,polska,polt,poltina,poly,polyact,polyad,polygam,polygon,polygyn,polymer,polyose,polyp,polyped,polypi,polypod,polypus,pom,pomace,pomade,pomane,pomate,pomato,pomatum,pombe,pombo,pome,pomelo,pomey,pomfret,pomme,pommee,pommel,pommet,pommey,pommy,pomonal,pomonic,pomp,pompa,pompal,pompano,pompey,pomphus,pompier,pompion,pompist,pompon,pompous,pomster,pon,ponce,ponceau,poncho,pond,pondage,ponder,pondful,pondlet,pondman,pondok,pondus,pondy,pone,ponent,ponerid,poney,pong,ponga,pongee,poniard,ponica,ponier,ponja,pont,pontage,pontal,pontee,pontes,pontic,pontiff,pontify,pontil,pontile,pontin,pontine,pontist,ponto,ponton,pontoon,pony,ponzite,pooa,pooch,pooder,poodle,poof,poogye,pooh,pook,pooka,pookaun,pookoo,pool,pooler,pooli,pooly,poon,poonac,poonga,poop,pooped,poor,poorish,poorly,poot,pop,popadam,popal,popcorn,popdock,pope,popedom,popeism,popeler,popely,popery,popess,popeye,popeyed,popgun,popify,popinac,popish,popjoy,poplar,poplin,popover,poppa,poppean,poppel,popper,poppet,poppied,poppin,popple,popply,poppy,popshop,popular,populin,popweed,poral,porcate,porch,porched,porcine,pore,pored,porer,porge,porger,porgy,poring,porism,porite,pork,porker,porkery,porket,porkish,porkman,porkpie,porky,porogam,poroma,poros,porose,porosis,porotic,porous,porr,porrect,porret,porrigo,porry,port,porta,portage,portail,portal,portass,ported,portend,portent,porter,portia,portico,portify,portio,portion,portlet,portly,portman,porto,portray,portway,porty,porule,porus,pory,posca,pose,poser,poseur,posey,posh,posing,posit,positor,positum,posnet,posole,poss,posse,possess,posset,possum,post,postage,postal,postbag,postbox,postboy,posted,posteen,poster,postern,postfix,postic,postil,posting,postman,posture,postwar,posy,pot,potable,potamic,potash,potass,potassa,potate,potato,potator,potbank,potboil,potboy,potch,potcher,potdar,pote,poteen,potence,potency,potent,poter,poteye,potful,potgirl,potgun,pothead,potheen,pother,potherb,pothery,pothole,pothook,pothunt,potifer,potion,potleg,potlid,potlike,potluck,potman,potong,potoo,potoroo,potpie,potrack,pott,pottage,pottagy,pottah,potted,potter,pottery,potting,pottle,pottled,potto,potty,potware,potwork,potwort,pouce,poucer,poucey,pouch,pouched,pouchy,pouf,poulard,poulp,poulpe,poult,poulter,poultry,pounamu,pounce,pounced,pouncer,pouncet,pound,poundal,pounder,pour,pourer,pourie,pouring,pouser,pout,pouter,poutful,pouting,pouty,poverty,pow,powder,powdery,powdike,powdry,power,powered,powitch,pownie,powwow,pox,poxy,poy,poyou,praam,prabble,prabhu,practic,prad,praecox,praetor,prairie,praise,praiser,prajna,praline,pram,prana,prance,prancer,prancy,prank,pranked,pranker,prankle,pranky,prase,prasine,prasoid,prastha,prat,pratal,prate,prater,pratey,prating,prattle,prattly,prau,pravity,prawn,prawner,prawny,praxis,pray,praya,prayer,prayful,praying,preach,preachy,preacid,preact,preaged,preally,preanal,prearm,preaver,prebake,prebend,prebid,prebill,preboil,preborn,preburn,precant,precary,precast,precava,precede,precent,precept,preces,precess,precipe,precis,precise,precite,precoil,precook,precool,precopy,precox,precure,precut,precyst,predamn,predark,predata,predate,predawn,preday,predefy,predeny,predial,predict,prediet,predine,predoom,predraw,predry,predusk,preen,preener,preeze,prefab,preface,prefect,prefer,prefine,prefix,prefool,preform,pregain,pregust,prehaps,preheal,preheat,prehend,preidea,preknit,preknow,prelacy,prelate,prelect,prelim,preloan,preloss,prelude,premake,premate,premial,premier,premise,premiss,premium,premix,premold,premove,prename,prender,prendre,preomit,preopen,preoral,prep,prepare,prepave,prepay,prepink,preplan,preplot,prepose,prepuce,prepupa,prerent,prerich,prerupt,presage,presay,preseal,presee,presell,present,preses,preset,preship,preshow,preside,presift,presign,prespur,press,pressel,presser,pressor,prest,prester,presto,presume,pretan,pretell,pretend,pretest,pretext,pretire,pretone,pretry,pretty,pretzel,prevail,prevene,prevent,preverb,preveto,previde,preview,previse,prevoid,prevote,prevue,prewar,prewarn,prewash,prewhip,prewire,prewrap,prexy,prey,preyer,preyful,prezone,price,priced,pricer,prich,prick,pricked,pricker,pricket,prickle,prickly,pricks,pricky,pride,pridian,priding,pridy,pried,prier,priest,prig,prigdom,prigger,prigman,prill,prim,prima,primacy,primage,primal,primar,primary,primate,prime,primely,primer,primero,primine,priming,primly,primost,primp,primsie,primula,primus,primy,prince,princox,prine,pringle,prink,prinker,prinkle,prinky,print,printed,printer,prion,prionid,prior,prioral,priorly,priory,prisage,prisal,priscan,prism,prismal,prismed,prismy,prison,priss,prissy,pritch,prithee,prius,privacy,privant,private,privet,privily,privity,privy,prize,prizer,prizery,pro,proa,proal,proarmy,prob,probabl,probal,probang,probant,probate,probe,probeer,prober,probity,problem,procarp,proceed,process,proctal,proctor,procure,prod,prodder,proddle,prodigy,produce,product,proem,proetid,prof,profane,profert,profess,proffer,profile,profit,profuse,prog,progeny,progger,progne,program,project,proke,proker,prolan,prolate,proleg,prolify,proline,prolix,prolong,prolyl,promic,promise,promote,prompt,pronaos,pronate,pronavy,prone,pronely,proneur,prong,pronged,pronger,pronic,pronoun,pronpl,pronto,pronuba,proo,proof,proofer,proofy,prop,propago,propale,propane,propend,propene,proper,prophet,propine,proplex,propone,propons,propose,propoxy,propper,props,propupa,propyl,propyne,prorata,prorate,prore,prorean,prorsad,prorsal,prosaic,prosar,prose,prosect,proser,prosify,prosily,prosing,prosish,prosist,proso,prosode,prosody,prosoma,prosper,pross,prossy,prosy,protax,prote,protea,protead,protean,protect,protege,proteic,protein,protend,protest,protext,prothyl,protide,protist,protium,proto,protoma,protome,proton,protone,protore,protyl,protyle,protype,proudly,provand,provant,prove,provect,proved,proven,prover,proverb,provide,provine,proving,proviso,provoke,provost,prow,prowar,prowed,prowess,prowl,prowler,proxeny,proximo,proxy,proxysm,prozone,prude,prudely,prudent,prudery,prudish,prudist,prudity,pruh,prunase,prune,prunell,pruner,pruning,prunt,prunted,prurigo,prussic,prut,prutah,pry,pryer,prying,pryler,pryse,prytany,psalis,psalm,psalmic,psalmy,psaloid,psalter,psaltes,pschent,pseudo,psha,pshaw,psi,psiloi,psoadic,psoas,psoatic,psocid,psocine,psoitis,psora,psoric,psoroid,psorous,pst,psych,psychal,psyche,psychic,psychid,psychon,psykter,psylla,psyllid,ptarmic,ptereal,pteric,pterion,pteroid,pteroma,pteryla,ptinid,ptinoid,ptisan,ptomain,ptosis,ptotic,ptyalin,ptyxis,pu,pua,puan,pub,pubal,pubble,puberal,puberty,pubes,pubian,pubic,pubis,public,publish,puccoon,puce,pucelle,puchero,puck,pucka,pucker,puckery,puckish,puckle,puckrel,pud,puddee,pudder,pudding,puddle,puddled,puddler,puddly,puddock,puddy,pudency,pudenda,pudent,pudge,pudgily,pudgy,pudiano,pudic,pudical,pudsey,pudsy,pudu,pueblo,puerer,puerile,puerman,puff,puffed,puffer,puffery,puffily,puffin,puffing,pufflet,puffwig,puffy,pug,pugged,pugger,puggi,pugging,puggish,puggle,puggree,puggy,pugh,pugil,pugman,pugmill,puisne,puist,puistie,puja,puka,pukatea,puke,pukeko,puker,pukish,pukras,puku,puky,pul,pulahan,pulasan,pule,pulegol,puler,puli,pulicat,pulicid,puling,pulish,pulk,pulka,pull,pulldoo,pullen,puller,pullery,pullet,pulley,pulli,pullus,pulp,pulpal,pulper,pulpify,pulpily,pulpit,pulpous,pulpy,pulque,pulsant,pulsate,pulse,pulsion,pulsive,pulton,pulu,pulvic,pulvil,pulvino,pulwar,puly,puma,pumice,pumiced,pumicer,pummel,pummice,pump,pumpage,pumper,pumpkin,pumple,pumpman,pun,puna,punaise,punalua,punatoo,punch,puncher,punchy,punct,punctal,punctum,pundit,pundita,pundum,puneca,pung,punga,pungar,pungent,punger,pungey,pungi,pungle,pungled,punicin,punily,punish,punjum,punk,punkah,punkie,punky,punless,punlet,punnage,punner,punnet,punnic,punster,punt,punta,puntal,puntel,punter,punti,puntil,puntist,punto,puntout,punty,puny,punyish,punyism,pup,pupa,pupal,pupate,pupelo,pupil,pupilar,pupiled,pupoid,puppet,puppify,puppily,puppy,pupulo,pupunha,pur,purana,puranic,puraque,purdah,purdy,pure,pured,puree,purely,purer,purfle,purfled,purfler,purfly,purga,purge,purger,purgery,purging,purify,purine,puriri,purism,purist,purity,purl,purler,purlieu,purlin,purlman,purloin,purpart,purple,purply,purport,purpose,purpura,purpure,purr,purre,purree,purreic,purrel,purrer,purring,purrone,purry,purse,pursed,purser,pursily,purslet,pursley,pursual,pursue,pursuer,pursuit,pursy,purusha,purvey,purview,purvoe,pus,push,pusher,pushful,pushing,pushpin,puss,pusscat,pussley,pussy,pustule,put,putage,putamen,putback,putchen,putcher,puteal,putelee,puther,puthery,putid,putidly,putlog,putois,putrefy,putrid,putt,puttee,putter,puttier,puttock,putty,puture,puxy,puzzle,puzzled,puzzler,pya,pyal,pyche,pycnia,pycnial,pycnid,pycnite,pycnium,pyelic,pyemia,pyemic,pygal,pygarg,pygidid,pygmoid,pygmy,pygofer,pygopod,pyic,pyin,pyjama,pyke,pyknic,pyla,pylar,pylic,pylon,pyloric,pylorus,pyocele,pyocyst,pyocyte,pyoid,pyosis,pyr,pyral,pyralid,pyralis,pyramid,pyran,pyranyl,pyre,pyrena,pyrene,pyrenic,pyrenin,pyretic,pyrex,pyrexia,pyrexic,pyrgom,pyridic,pyridyl,pyrite,pyrites,pyritic,pyro,pyrogen,pyroid,pyrone,pyrope,pyropen,pyropus,pyrosis,pyrotic,pyrrhic,pyrrol,pyrrole,pyrroyl,pyrryl,pyruvic,pyruvil,pyruvyl,python,pyuria,pyvuril,pyx,pyxides,pyxie,pyxis,q,qasida,qere,qeri,qintar,qoph,qua,quab,quabird,quachil,quack,quackle,quacky,quad,quadded,quaddle,quadra,quadral,quadrat,quadric,quadrum,quaedam,quaff,quaffer,quag,quagga,quaggle,quaggy,quahog,quail,quaily,quaint,quake,quaker,quaking,quaky,quale,qualify,quality,qualm,qualmy,quan,quandy,quannet,quant,quanta,quantic,quantum,quar,quare,quark,quarl,quarle,quarred,quarrel,quarry,quart,quartan,quarter,quartet,quartic,quarto,quartz,quartzy,quash,quashey,quashy,quasi,quasky,quassin,quat,quata,quatch,quatern,quaters,quatral,quatre,quatrin,quattie,quatuor,quauk,quave,quaver,quavery,quaw,quawk,quay,quayage,quayful,quayman,qubba,queach,queachy,queak,queal,quean,queasom,queasy,quedful,queechy,queen,queenly,queer,queerer,queerly,queery,queest,queet,queeve,quegh,quei,quelch,quell,queller,quemado,queme,quemely,quench,quercic,quercin,querent,querier,querist,querken,querl,quern,quernal,query,quest,quester,questor,quet,quetch,quetzal,queue,quey,quiapo,quib,quibble,quiblet,quica,quick,quicken,quickie,quickly,quid,quidder,quiddit,quiddle,quiesce,quiet,quieten,quieter,quietly,quietus,quiff,quila,quiles,quilkin,quill,quillai,quilled,quiller,quillet,quilly,quilt,quilted,quilter,quin,quina,quinary,quinate,quince,quinch,quinia,quinic,quinin,quinina,quinine,quinism,quinite,quinize,quink,quinnat,quinnet,quinoa,quinoid,quinol,quinone,quinova,quinoyl,quinse,quinsy,quint,quintad,quintal,quintan,quinte,quintet,quintic,quintin,quinto,quinton,quintus,quinyl,quinze,quip,quipful,quipo,quipper,quippy,quipu,quira,quire,quirk,quirky,quirl,quirt,quis,quisby,quiscos,quisle,quit,quitch,quite,quits,quitted,quitter,quittor,quiver,quivery,quiz,quizzee,quizzer,quizzy,quo,quod,quoin,quoined,quoit,quoiter,quoits,quondam,quoniam,quop,quorum,quot,quota,quote,quotee,quoter,quoth,quotha,quotity,quotum,r,ra,raad,raash,rab,raband,rabanna,rabat,rabatte,rabbet,rabbi,rabbin,rabbit,rabbity,rabble,rabbler,rabboni,rabic,rabid,rabidly,rabies,rabific,rabinet,rabitic,raccoon,raccroc,race,raceme,racemed,racemic,racer,raceway,rach,rache,rachial,rachis,racial,racily,racing,racism,racist,rack,rackan,racker,racket,rackett,rackety,rackful,racking,rackle,rackway,racloir,racon,racoon,racy,rad,rada,radar,raddle,radial,radiale,radian,radiant,radiate,radical,radicel,radices,radicle,radii,radio,radiode,radish,radium,radius,radix,radman,radome,radon,radula,raff,raffe,raffee,raffery,raffia,raffing,raffish,raffle,raffler,raft,raftage,rafter,raftman,rafty,rag,raga,rage,rageful,rageous,rager,ragfish,ragged,raggedy,raggee,ragger,raggery,raggety,raggil,raggily,ragging,raggle,raggled,raggy,raging,raglan,raglet,raglin,ragman,ragout,ragshag,ragtag,ragtime,ragule,raguly,ragweed,ragwort,rah,rahdar,raia,raid,raider,rail,railage,railer,railing,railly,railman,railway,raiment,rain,rainbow,rainer,rainful,rainily,rainy,raioid,rais,raise,raised,raiser,raisin,raising,raisiny,raj,raja,rajah,rakan,rake,rakeage,rakeful,raker,rakery,rakh,raki,rakily,raking,rakish,rakit,raku,rallier,ralline,rally,ralph,ram,ramada,ramage,ramal,ramanas,ramass,ramate,rambeh,ramble,rambler,rambong,rame,rameal,ramed,ramekin,rament,rameous,ramet,ramex,ramhead,ramhood,rami,ramie,ramify,ramlike,ramline,rammack,rammel,rammer,rammish,rammy,ramose,ramous,ramp,rampage,rampant,rampart,ramped,ramper,rampick,rampike,ramping,rampion,rampire,rampler,ramplor,ramrace,ramrod,ramsch,ramson,ramstam,ramtil,ramular,ramule,ramulus,ramus,ran,rana,ranal,rance,rancel,rancer,ranch,ranche,rancher,rancho,rancid,rancor,rand,randan,randem,rander,randing,randir,randle,random,randy,rane,rang,range,ranged,ranger,rangey,ranging,rangle,rangler,rangy,rani,ranid,ranine,rank,ranked,ranker,rankish,rankle,rankly,rann,rannel,ranny,ransack,ransel,ransom,rant,rantan,ranter,ranting,rantock,ranty,ranula,ranular,rap,rape,rapeful,raper,raphany,raphe,raphide,raphis,rapic,rapid,rapidly,rapier,rapillo,rapine,rapiner,raping,rapinic,rapist,raploch,rappage,rappe,rappel,rapper,rapping,rappist,rapport,rapt,raptly,raptor,raptril,rapture,raptury,raptus,rare,rarebit,rarefy,rarely,rarish,rarity,ras,rasa,rasant,rascal,rasceta,rase,rasen,raser,rasgado,rash,rasher,rashful,rashing,rashly,rasion,rasp,rasped,rasper,rasping,raspish,raspite,raspy,rasse,rassle,raster,rastik,rastle,rasure,rat,rata,ratable,ratably,ratafee,ratafia,ratal,ratbite,ratch,ratchel,ratcher,ratchet,rate,rated,ratel,rater,ratfish,rath,rathe,rathed,rathely,rather,rathest,rathite,rathole,ratify,ratine,rating,ratio,ration,ratite,ratlike,ratline,ratoon,rattage,rattail,rattan,ratteen,ratten,ratter,rattery,ratti,rattish,rattle,rattled,rattler,rattles,rattly,ratton,rattrap,ratty,ratwa,ratwood,raucid,raucity,raucous,raught,rauk,raukle,rauli,raun,raunge,raupo,rauque,ravage,ravager,rave,ravel,raveler,ravelin,ravelly,raven,ravener,ravenry,ravens,raver,ravin,ravine,ravined,raviney,raving,ravioli,ravish,ravison,raw,rawhead,rawhide,rawish,rawness,rax,ray,raya,rayage,rayed,rayful,rayless,raylet,rayon,raze,razee,razer,razoo,razor,razz,razzia,razzly,re,rea,reaal,reabuse,reach,reacher,reachy,react,reactor,read,readapt,readd,reader,readily,reading,readmit,readopt,readorn,ready,reagent,reagin,reagree,reak,real,realarm,reales,realest,realgar,realign,realism,realist,reality,realive,realize,reallot,reallow,really,realm,realter,realtor,realty,ream,reamage,reamass,reamend,reamer,reamuse,reamy,reannex,reannoy,reanvil,reap,reaper,reapply,rear,rearer,reargue,rearise,rearm,rearray,reask,reason,reassay,reasty,reasy,reatus,reaudit,reavail,reave,reaver,reavoid,reavow,reawait,reawake,reaward,reaware,reb,rebab,reback,rebag,rebait,rebake,rebale,reban,rebar,rebase,rebasis,rebate,rebater,rebathe,rebato,rebawl,rebear,rebeat,rebec,rebeck,rebed,rebeg,rebeget,rebegin,rebel,rebelly,rebend,rebeset,rebia,rebias,rebid,rebill,rebind,rebirth,rebite,reblade,reblame,reblast,reblend,rebless,reblock,rebloom,reblot,reblow,reblue,rebluff,reboant,reboard,reboast,rebob,reboil,reboise,rebold,rebolt,rebone,rebook,rebop,rebore,reborn,rebound,rebox,rebrace,rebraid,rebrand,rebreed,rebrew,rebribe,rebrick,rebring,rebrown,rebrush,rebud,rebuff,rebuild,rebuilt,rebuke,rebuker,rebulk,rebunch,rebuoy,reburn,reburst,rebury,rebus,rebush,rebusy,rebut,rebute,rebuy,recable,recage,recalk,recall,recant,recap,recarry,recart,recarve,recase,recash,recast,recatch,recce,recco,reccy,recede,receder,receipt,receive,recency,recense,recent,recept,recess,rechafe,rechain,rechal,rechant,rechaos,rechar,rechase,rechaw,recheat,recheck,recheer,rechew,rechip,rechuck,rechurn,recipe,recital,recite,reciter,reck,reckla,reckon,reclaim,reclama,reclang,reclasp,reclass,reclean,reclear,reclimb,recline,reclose,recluse,recoach,recoal,recoast,recoat,recock,recoct,recode,recoil,recoin,recoke,recolor,recomb,recon,recook,recool,recopy,record,recork,recount,recoup,recover,recramp,recrank,recrate,recrew,recroon,recrop,recross,recrowd,recrown,recruit,recrush,rect,recta,rectal,recti,rectify,rection,recto,rector,rectory,rectrix,rectum,rectus,recur,recure,recurl,recurse,recurve,recuse,recut,recycle,red,redact,redan,redare,redarn,redart,redate,redaub,redawn,redback,redbait,redbill,redbird,redbone,redbuck,redbud,redcap,redcoat,redd,redden,redder,redding,reddish,reddock,reddy,rede,redeal,redebit,redeck,redeed,redeem,redefer,redefy,redeify,redelay,redeny,redeye,redfin,redfish,redfoot,redhead,redhoop,redia,redient,redig,redip,redive,redleg,redlegs,redly,redness,redo,redock,redoom,redoubt,redound,redowa,redox,redpoll,redraft,redrag,redrape,redraw,redream,redress,redrill,redrive,redroot,redry,redsear,redskin,redtab,redtail,redtop,redub,reduce,reduced,reducer,reduct,redue,redux,redward,redware,redweed,redwing,redwood,redye,ree,reechy,reed,reeded,reeden,reeder,reedily,reeding,reedish,reedman,reedy,reef,reefer,reefing,reefy,reek,reeker,reeky,reel,reeled,reeler,reem,reeming,reemish,reen,reenge,reeper,reese,reeshle,reesk,reesle,reest,reester,reestle,reesty,reet,reetam,reetle,reeve,ref,reface,refall,refan,refavor,refect,refeed,refeel,refeign,refel,refence,refer,referee,refetch,refight,refill,refilm,refind,refine,refined,refiner,refire,refit,refix,reflag,reflame,reflash,reflate,reflect,reflee,reflex,refling,refloat,reflog,reflood,refloor,reflow,reflush,reflux,refly,refocus,refold,refont,refool,refoot,reforce,reford,reforge,reform,refound,refract,refrain,reframe,refresh,refront,reft,refuel,refuge,refugee,refulge,refund,refurl,refusal,refuse,refuser,refutal,refute,refuter,reg,regain,regal,regale,regaler,regalia,regally,regard,regatta,regauge,regency,regent,reges,reget,regia,regift,regild,regill,regime,regimen,regin,reginal,region,regive,reglair,reglaze,regle,reglet,regloss,reglove,reglow,reglue,regma,regnal,regnant,regorge,regrade,regraft,regrant,regrasp,regrass,regrate,regrede,regreen,regreet,regress,regret,regrind,regrip,regroup,regrow,reguard,reguide,regula,regular,reguli,regulus,regur,regurge,regush,reh,rehair,rehale,rehang,reharm,rehash,rehaul,rehead,reheal,reheap,rehear,reheat,rehedge,reheel,rehoe,rehoist,rehonor,rehood,rehook,rehoop,rehouse,rehung,reif,reify,reign,reim,reimage,reimpel,reimply,rein,reina,reincur,reindue,reinfer,reins,reinter,reis,reissue,reit,reitbok,reiter,reiver,rejail,reject,rejerk,rejoice,rejoin,rejolt,rejudge,rekick,rekill,reking,rekiss,reknit,reknow,rel,relabel,relace,relade,reladen,relais,relamp,reland,relap,relapse,relast,relata,relatch,relate,related,relater,relator,relatum,relax,relaxed,relaxer,relay,relbun,relead,releap,relearn,release,relend,relent,relet,relevel,relevy,reliant,relic,relick,relict,relief,relier,relieve,relievo,relift,relight,relime,relimit,reline,reliner,relink,relish,relishy,relist,relive,reload,reloan,relock,relodge,relook,relose,relost,relot,relove,relower,reluct,relume,rely,remade,remail,remain,remains,remake,remaker,reman,remand,remanet,remap,remarch,remark,remarry,remask,remass,remast,rematch,remble,remeant,remede,remedy,remeet,remelt,remend,remerge,remetal,remex,remica,remicle,remiges,remill,remimic,remind,remint,remiped,remise,remiss,remit,remix,remnant,remock,remodel,remold,remop,remora,remord,remorse,remote,remould,remount,removal,remove,removed,remover,renable,renably,renail,renal,rename,rend,render,reneg,renege,reneger,renegue,renerve,renes,renet,renew,renewal,renewer,renin,renish,renk,renky,renne,rennet,rennin,renown,rent,rentage,rental,rented,rentee,renter,renvoi,renvoy,reoccur,reoffer,reoil,reomit,reopen,reorder,reown,rep,repace,repack,repage,repaint,repair,repale,repand,repanel,repaper,repark,repass,repast,repaste,repatch,repave,repawn,repay,repayal,repeal,repeat,repeg,repel,repen,repent,repew,rephase,repic,repick,repiece,repile,repin,repine,repiner,repipe,repique,repitch,repkie,replace,replait,replan,replane,replant,replate,replay,replead,repleat,replete,replevy,replica,replier,replod,replot,replow,replum,replume,reply,repoint,repoll,repolon,repone,repope,report,reposal,repose,reposed,reposer,reposit,repost,repot,repound,repour,repp,repped,repray,repress,reprice,reprime,reprint,reprise,reproof,reprove,reprune,reps,reptant,reptile,repuff,repugn,repulse,repump,repurge,repute,reputed,requeen,request,requiem,requin,require,requit,requite,requiz,requote,rerack,rerail,reraise,rerake,rerank,rerate,reread,reredos,reree,rereel,rereeve,rereign,rerent,rerig,rering,rerise,rerival,rerivet,rerob,rerobe,reroll,reroof,reroot,rerope,reroute,rerow,rerub,rerun,resaca,resack,resail,resale,resalt,resaw,resawer,resay,rescan,rescind,rescore,rescrub,rescue,rescuer,reseal,reseam,reseat,resect,reseda,resee,reseed,reseek,reseise,reseize,reself,resell,resend,resene,resent,reserve,reset,resever,resew,resex,resh,reshake,reshape,reshare,reshave,reshear,reshift,reshine,reship,reshoe,reshoot,reshun,reshunt,reshut,reside,resider,residua,residue,resift,resigh,resign,resile,resin,resina,resiner,resing,resinic,resink,resinol,resiny,resist,resize,resizer,reskin,reslash,reslate,reslay,reslide,reslot,resmell,resmelt,resmile,resnap,resnub,resoak,resoap,resoil,resole,resolve,resorb,resort,resound,resow,resp,respace,respade,respan,respeak,respect,respell,respin,respire,respite,resplit,respoke,respond,respot,respray,respue,ressala,ressaut,rest,restack,restaff,restain,restake,restamp,restant,restart,restate,restaur,resteal,resteel,resteep,restem,restep,rester,restes,restful,restiad,restiff,resting,restir,restis,restive,restock,restore,restow,restrap,restrip,restudy,restuff,resty,restyle,resuck,resue,resuing,resuit,result,resume,resumer,resun,resup,resurge,reswage,resward,reswarm,reswear,resweat,resweep,reswell,reswill,reswim,ret,retable,retack,retag,retail,retain,retake,retaker,retalk,retama,retame,retan,retape,retard,retare,retaste,retax,retch,reteach,retell,retem,retempt,retene,retent,retest,rethank,rethaw,rethe,rethink,rethrow,retia,retial,retiary,reticle,retie,retier,retile,retill,retime,retin,retina,retinal,retinol,retinue,retip,retiral,retire,retired,retirer,retoast,retold,retomb,retook,retool,retooth,retort,retoss,retotal,retouch,retour,retrace,retrack,retract,retrad,retrade,retrain,retral,retramp,retread,retreat,retree,retrial,retrim,retrip,retrot,retrude,retrue,retrust,retry,retted,retter,rettery,retting,rettory,retube,retuck,retune,returf,return,retuse,retwine,retwist,retying,retype,retzian,reune,reunify,reunion,reunite,reurge,reuse,reutter,rev,revalue,revamp,revary,reve,reveal,reveil,revel,reveler,revelly,revelry,revend,revenge,revent,revenue,rever,reverb,revere,revered,reverer,reverie,revers,reverse,reversi,reverso,revert,revery,revest,revet,revete,revie,review,revile,reviler,revisal,revise,revisee,reviser,revisit,revisor,revival,revive,reviver,revivor,revoice,revoke,revoker,revolt,revolve,revomit,revote,revue,revuist,rewade,rewager,rewake,rewaken,rewall,reward,rewarm,rewarn,rewash,rewater,rewave,rewax,rewayle,rewear,reweave,rewed,reweigh,reweld,rewend,rewet,rewhelp,rewhirl,rewiden,rewin,rewind,rewire,rewish,rewood,reword,rework,rewound,rewove,rewoven,rewrap,rewrite,rex,rexen,reyield,reyoke,reyouth,rhabdom,rhabdos,rhabdus,rhagite,rhagon,rhagose,rhamn,rhamnal,rhason,rhatany,rhe,rhea,rhebok,rheeboc,rheebok,rheen,rheic,rhein,rheinic,rhema,rheme,rhenium,rheotan,rhesian,rhesus,rhetor,rheum,rheumed,rheumic,rheumy,rhexis,rhinal,rhine,rhinion,rhino,rhizine,rhizoid,rhizoma,rhizome,rhizote,rho,rhodic,rhoding,rhodite,rhodium,rhomb,rhombic,rhombos,rhombus,rhubarb,rhumb,rhumba,rhyme,rhymer,rhymery,rhymic,rhymist,rhymy,rhyptic,rhythm,rhyton,ria,rial,riancy,riant,riantly,riata,rib,ribald,riband,ribat,ribband,ribbed,ribber,ribbet,ribbing,ribble,ribbon,ribbony,ribby,ribe,ribless,riblet,riblike,ribonic,ribose,ribskin,ribwork,ribwort,rice,ricer,ricey,rich,richdom,richen,riches,richly,richt,ricin,ricine,ricinic,ricinus,rick,ricker,rickets,rickety,rickey,rickle,ricksha,ricrac,rictal,rictus,rid,ridable,ridably,riddam,riddel,ridden,ridder,ridding,riddle,riddler,ride,rideau,riden,rident,rider,ridered,ridge,ridged,ridgel,ridger,ridgil,ridging,ridgy,riding,ridotto,rie,riem,riempie,rier,rife,rifely,riff,riffle,riffler,rifle,rifler,riflery,rifling,rift,rifter,rifty,rig,rigbane,riggald,rigger,rigging,riggish,riggite,riggot,right,righten,righter,rightle,rightly,righto,righty,rigid,rigidly,rigling,rignum,rigol,rigor,rigsby,rikisha,rikk,riksha,rikshaw,rilawa,rile,riley,rill,rillet,rillett,rillock,rilly,rim,rima,rimal,rimate,rimbase,rime,rimer,rimfire,rimland,rimless,rimmed,rimmer,rimose,rimous,rimpi,rimple,rimrock,rimu,rimula,rimy,rinceau,rinch,rincon,rind,rinded,rindle,rindy,rine,ring,ringe,ringed,ringent,ringer,ringeye,ringing,ringite,ringle,ringlet,ringman,ringtaw,ringy,rink,rinka,rinker,rinkite,rinner,rinse,rinser,rinsing,rio,riot,rioter,rioting,riotist,riotous,riotry,rip,ripa,ripal,ripcord,ripe,ripely,ripen,ripener,riper,ripgut,ripieno,ripier,ripost,riposte,ripper,rippet,rippier,ripping,rippit,ripple,rippler,ripplet,ripply,rippon,riprap,ripsack,ripsaw,ripup,risala,risberm,rise,risen,riser,rishi,risible,risibly,rising,risk,risker,riskful,riskily,riskish,risky,risp,risper,risque,risquee,rissel,risser,rissle,rissoid,rist,ristori,rit,rita,rite,ritling,ritual,ritzy,riva,rivage,rival,rivalry,rive,rivel,rivell,riven,river,rivered,riverly,rivery,rivet,riveter,riving,rivose,rivulet,rix,rixy,riyal,rizzar,rizzle,rizzom,roach,road,roadbed,roaded,roader,roading,roadite,roadman,roadway,roam,roamage,roamer,roaming,roan,roanoke,roar,roarer,roaring,roast,roaster,rob,robalo,roband,robber,robbery,robbin,robbing,robe,rober,roberd,robin,robinet,robing,robinin,roble,robomb,robot,robotry,robur,robust,roc,rocher,rochet,rock,rockaby,rocker,rockery,rocket,rockety,rocking,rockish,rocklay,rocklet,rockman,rocky,rococo,rocta,rod,rodd,roddin,rodding,rode,rodent,rodeo,rodge,rodham,roding,rodless,rodlet,rodlike,rodman,rodney,rodsman,rodster,rodwood,roe,roebuck,roed,roelike,roer,roey,rog,rogan,roger,roggle,rogue,roguery,roguing,roguish,rohan,rohob,rohun,rohuna,roi,roid,roil,roily,roister,roit,roka,roke,rokeage,rokee,rokelay,roker,rokey,roky,role,roleo,roll,rolled,roller,rolley,rollick,rolling,rollix,rollmop,rollock,rollway,roloway,romaika,romaine,romal,romance,romancy,romanza,romaunt,rombos,romeite,romero,rommack,romp,romper,romping,rompish,rompu,rompy,roncet,ronco,rond,ronde,rondeau,rondel,rondino,rondle,rondo,rondure,rone,rongeur,ronquil,rontgen,ronyon,rood,roodle,roof,roofage,roofer,roofing,rooflet,roofman,roofy,rooibok,rooinek,rook,rooker,rookery,rookie,rookish,rooklet,rooky,rool,room,roomage,roomed,roomer,roomful,roomie,roomily,roomlet,roomth,roomthy,roomy,roon,roosa,roost,roosted,rooster,root,rootage,rootcap,rooted,rooter,rootery,rootle,rootlet,rooty,roove,ropable,rope,ropeman,roper,ropery,ropes,ropeway,ropily,roping,ropish,ropp,ropy,roque,roquer,roquet,roquist,roral,roric,rorqual,rorty,rory,rosal,rosario,rosary,rosated,roscid,rose,roseal,roseate,rosebay,rosebud,rosed,roseine,rosel,roselet,rosella,roselle,roseola,roseous,rosery,roset,rosetan,rosette,rosetty,rosetum,rosety,rosied,rosier,rosilla,rosillo,rosily,rosin,rosiny,rosland,rosoli,rosolic,rosolio,ross,rosser,rossite,rostel,roster,rostra,rostral,rostrum,rosular,rosy,rot,rota,rotal,rotaman,rotan,rotang,rotary,rotate,rotated,rotator,rotch,rote,rotella,roter,rotge,rotgut,rother,rotifer,roto,rotor,rottan,rotten,rotter,rotting,rottle,rottock,rottolo,rotula,rotulad,rotular,rotulet,rotulus,rotund,rotunda,rotundo,roub,roucou,roud,roue,rouelle,rouge,rougeau,rougeot,rough,roughen,rougher,roughet,roughie,roughly,roughy,rougy,rouille,rouky,roulade,rouleau,roun,rounce,rouncy,round,rounded,roundel,rounder,roundly,roundup,roundy,roup,rouper,roupet,roupily,roupit,roupy,rouse,rouser,rousing,roust,rouster,rout,route,router,routh,routhie,routhy,routine,routing,routous,rove,rover,rovet,rovetto,roving,row,rowable,rowan,rowboat,rowdily,rowdy,rowed,rowel,rowen,rower,rowet,rowing,rowlet,rowlock,rowport,rowty,rowy,rox,roxy,royal,royale,royalet,royally,royalty,royet,royt,rozum,ruach,ruana,rub,rubasse,rubato,rubbed,rubber,rubbers,rubbery,rubbing,rubbish,rubble,rubbler,rubbly,rubdown,rubelet,rubella,rubelle,rubeola,rubiate,rubican,rubidic,rubied,rubific,rubify,rubine,rubious,ruble,rublis,rubor,rubric,rubrica,rubrify,ruby,ruche,ruching,ruck,rucker,ruckle,rucksey,ruckus,rucky,ruction,rud,rudas,rudd,rudder,ruddied,ruddily,ruddle,ruddock,ruddy,rude,rudely,ruderal,rudesby,rudge,rudish,rudity,rue,rueful,ruelike,ruelle,ruen,ruer,ruesome,ruewort,ruff,ruffed,ruffer,ruffian,ruffin,ruffle,ruffled,ruffler,ruffly,rufous,rufter,rufus,rug,ruga,rugate,rugged,rugging,ruggle,ruggy,ruglike,rugosa,rugose,rugous,ruin,ruinate,ruined,ruiner,ruing,ruinous,rukh,rulable,rule,ruledom,ruler,ruling,rull,ruller,rullion,rum,rumal,rumble,rumbler,rumbly,rumbo,rumen,ruminal,rumkin,rumless,rumly,rummage,rummagy,rummer,rummily,rummish,rummy,rumness,rumney,rumor,rumorer,rump,rumpad,rumpade,rumple,rumply,rumpus,rumshop,run,runaway,runback,runby,runch,rundale,rundle,rundlet,rune,runed,runer,runfish,rung,runic,runite,runkle,runkly,runless,runlet,runman,runnel,runner,runnet,running,runny,runoff,runout,runover,runrig,runt,runted,runtee,runtish,runty,runway,rupa,rupee,rupia,rupiah,rupial,rupie,rupitic,ruptile,ruption,ruptive,rupture,rural,rurally,rurban,ruru,ruse,rush,rushed,rushen,rusher,rushing,rushlit,rushy,rusine,rusk,ruskin,rusky,rusma,rusot,ruspone,russel,russet,russety,russia,russud,rust,rustful,rustic,rustily,rustle,rustler,rustly,rustre,rustred,rusty,ruswut,rut,rutate,rutch,ruth,ruther,ruthful,rutic,rutile,rutin,ruttee,rutter,ruttish,rutty,rutyl,ruvid,rux,ryal,ryania,rybat,ryder,rye,ryen,ryme,rynd,rynt,ryot,ryotwar,rype,rypeck,s,sa,saa,sab,sabalo,sabanut,sabbat,sabbath,sabe,sabeca,sabella,saber,sabered,sabicu,sabina,sabine,sabino,sable,sably,sabora,sabot,saboted,sabra,sabulum,saburra,sabutan,sabzi,sac,sacaton,sacatra,saccade,saccate,saccos,saccule,saccus,sachem,sachet,sack,sackage,sackbag,sackbut,sacked,sacken,sacker,sackful,sacking,sackman,saclike,saco,sacope,sacque,sacra,sacrad,sacral,sacred,sacring,sacrist,sacro,sacrum,sad,sadden,saddik,saddish,saddle,saddled,saddler,sade,sadh,sadhe,sadhu,sadic,sadiron,sadism,sadist,sadly,sadness,sado,sadr,saecula,saeter,saeume,safari,safe,safely,safen,safener,safety,saffian,safflor,safflow,saffron,safrole,saft,sag,saga,sagaie,sagaman,sagathy,sage,sagely,sagene,sagger,sagging,saggon,saggy,saging,sagitta,sagless,sago,sagoin,saguaro,sagum,saguran,sagwire,sagy,sah,sahh,sahib,sahme,sahukar,sai,saic,said,saiga,sail,sailage,sailed,sailer,sailing,sailor,saily,saim,saimiri,saimy,sain,saint,sainted,saintly,saip,sair,sairly,sairve,sairy,saithe,saj,sajou,sake,sakeber,sakeen,saker,sakeret,saki,sakieh,sakulya,sal,salaam,salable,salably,salacot,salad,salago,salal,salamo,salar,salary,salat,salay,sale,salele,salema,salep,salfern,salic,salicin,salicyl,salient,salify,saligot,salina,saline,salite,salited,saliva,salival,salix,salle,sallee,sallet,sallier,salloo,sallow,sallowy,sally,salma,salmiac,salmine,salmis,salmon,salol,salomon,salon,saloon,saloop,salp,salpa,salpian,salpinx,salpoid,salse,salsify,salt,salta,saltant,saltary,saltate,saltcat,salted,saltee,salten,salter,saltern,saltery,saltfat,saltier,saltine,salting,saltish,saltly,saltman,saltpan,saltus,salty,saluki,salung,salute,saluter,salvage,salve,salver,salviol,salvo,salvor,salvy,sam,samadh,samadhi,samaj,saman,samara,samaria,samarra,samba,sambal,sambar,sambo,sambuk,sambuke,same,samekh,samel,samely,samen,samh,samhita,samiel,samiri,samisen,samite,samkara,samlet,sammel,sammer,sammier,sammy,samovar,samp,sampan,sampi,sample,sampler,samsara,samshu,samson,samurai,san,sanable,sanai,sancho,sanct,sancta,sanctum,sand,sandak,sandal,sandan,sandbag,sandbin,sandbox,sandboy,sandbur,sanded,sander,sanders,sandhi,sanding,sandix,sandman,sandust,sandy,sane,sanely,sang,sanga,sangar,sangei,sanger,sangha,sangley,sangrel,sangsue,sanicle,sanies,sanify,sanious,sanity,sanjak,sank,sankha,sannup,sans,sansei,sansi,sant,santal,santene,santimi,santims,santir,santon,sao,sap,sapa,sapajou,sapan,sapbush,sapek,sapful,saphead,saphena,saphie,sapid,sapient,sapin,sapinda,saple,sapless,sapling,sapo,saponin,sapor,sapota,sapote,sappare,sapper,sapphic,sapping,sapples,sappy,saprine,sapsago,sapsuck,sapwood,sapwort,sar,saraad,saraf,sarangi,sarcasm,sarcast,sarcine,sarcle,sarcler,sarcode,sarcoid,sarcoma,sarcous,sard,sardel,sardine,sardius,sare,sargo,sargus,sari,sarif,sarigue,sarinda,sarip,sark,sarkar,sarkful,sarkine,sarking,sarkit,sarlak,sarlyk,sarment,sarna,sarod,saron,sarong,saronic,saros,sarpler,sarpo,sarra,sarraf,sarsa,sarsen,sart,sartage,sartain,sartor,sarus,sarwan,sasa,sasan,sasani,sash,sashay,sashery,sashing,sasin,sasine,sassaby,sassy,sat,satable,satan,satang,satanic,satara,satchel,sate,sateen,satiate,satient,satiety,satin,satine,satined,satiny,satire,satiric,satisfy,satlijk,satrap,satrapy,satron,sattle,sattva,satura,satyr,satyric,sauce,saucer,saucily,saucy,sauf,sauger,saugh,saughen,sauld,saulie,sault,saulter,saum,saumon,saumont,sauna,saunter,sauqui,saur,saurel,saurian,saury,sausage,saut,saute,sauteur,sauty,sauve,savable,savacu,savage,savanna,savant,savarin,save,saved,saveloy,saver,savin,saving,savior,savola,savor,savored,savorer,savory,savour,savoy,savoyed,savssat,savvy,saw,sawah,sawali,sawarra,sawback,sawbill,sawbuck,sawbwa,sawder,sawdust,sawed,sawer,sawfish,sawfly,sawing,sawish,sawlike,sawman,sawmill,sawmon,sawmont,sawn,sawney,sawt,sawway,sawwort,sawyer,sax,saxhorn,saxten,saxtie,saxtuba,say,saya,sayable,sayer,sayette,sayid,saying,sazen,sblood,scab,scabbed,scabble,scabby,scabid,scabies,scabish,scabrid,scad,scaddle,scads,scaff,scaffer,scaffie,scaffle,scaglia,scala,scalage,scalar,scalare,scald,scalded,scalder,scaldic,scaldy,scale,scaled,scalena,scalene,scaler,scales,scaling,scall,scalled,scallom,scallop,scalma,scaloni,scalp,scalpel,scalper,scalt,scaly,scam,scamble,scamell,scamler,scamles,scamp,scamper,scan,scandal,scandia,scandic,scanmag,scanner,scant,scantle,scantly,scanty,scap,scape,scapel,scapha,scapoid,scapose,scapple,scapula,scapus,scar,scarab,scarce,scarcen,scare,scarer,scarf,scarfed,scarfer,scarfy,scarid,scarify,scarily,scarlet,scarman,scarn,scaroid,scarp,scarred,scarrer,scarry,scart,scarth,scarus,scarved,scary,scase,scasely,scat,scatch,scathe,scatter,scatty,scatula,scaul,scaum,scaup,scauper,scaur,scaurie,scaut,scavage,scavel,scaw,scawd,scawl,scazon,sceat,scena,scenary,scend,scene,scenery,scenic,scenist,scenite,scent,scented,scenter,scepsis,scepter,sceptic,sceptry,scerne,schanz,schappe,scharf,schelly,schema,scheme,schemer,schemy,schene,schepel,schepen,scherm,scherzi,scherzo,schesis,schism,schisma,schist,schloop,schmelz,scho,schola,scholae,scholar,scholia,schone,school,schoon,schorl,schorly,schout,schtoff,schuh,schuhe,schuit,schule,schuss,schute,schwa,schwarz,sciapod,sciarid,sciatic,scibile,science,scient,scincid,scind,sciniph,scintle,scion,scious,scirrhi,scissel,scissor,sciurid,sclaff,sclate,sclater,sclaw,scler,sclera,scleral,sclere,scliff,sclim,sclimb,scoad,scob,scobby,scobs,scoff,scoffer,scog,scoggan,scogger,scoggin,scoke,scolb,scold,scolder,scolex,scolia,scoliid,scolion,scolite,scollop,scolog,sconce,sconcer,scone,scoon,scoop,scooped,scooper,scoot,scooter,scopa,scopate,scope,scopet,scopic,scopine,scopola,scops,scopula,scorch,score,scored,scorer,scoria,scoriac,scoriae,scorify,scoring,scorn,scorned,scorner,scorny,scorper,scorse,scot,scotale,scotch,scote,scoter,scotia,scotino,scotoma,scotomy,scouch,scouk,scoup,scour,scoured,scourer,scourge,scoury,scouse,scout,scouter,scouth,scove,scovel,scovy,scow,scowder,scowl,scowler,scowman,scrab,scrabe,scrae,scrag,scraggy,scraily,scram,scran,scranch,scrank,scranky,scranny,scrap,scrape,scraped,scraper,scrapie,scrappy,scrapy,scrat,scratch,scrath,scrauch,scraw,scrawk,scrawl,scrawly,scrawm,scrawny,scray,scraze,screak,screaky,scream,screamy,scree,screech,screed,screek,screel,screen,screeny,screet,screeve,screich,screigh,screve,screver,screw,screwed,screwer,screwy,scribal,scribe,scriber,scride,scrieve,scrike,scrim,scrime,scrimer,scrimp,scrimpy,scrin,scrinch,scrine,scringe,scrip,scripee,script,scritch,scrive,scriven,scriver,scrob,scrobe,scrobis,scrod,scroff,scrog,scroggy,scrolar,scroll,scrolly,scroo,scrooch,scrooge,scroop,scrota,scrotal,scrotum,scrouge,scrout,scrow,scroyle,scrub,scrubby,scruf,scruff,scruffy,scruft,scrum,scrump,scrunch,scrunge,scrunt,scruple,scrush,scruto,scruze,scry,scryer,scud,scudder,scuddle,scuddy,scudi,scudler,scudo,scuff,scuffed,scuffer,scuffle,scuffly,scuffy,scuft,scufter,scug,sculch,scull,sculler,scullog,sculp,sculper,sculpin,sculpt,sculsh,scum,scumber,scumble,scummed,scummer,scummy,scun,scunder,scunner,scup,scupful,scupper,scuppet,scur,scurdy,scurf,scurfer,scurfy,scurry,scurvy,scuse,scut,scuta,scutage,scutal,scutate,scutch,scute,scutel,scutter,scuttle,scutty,scutula,scutum,scybala,scye,scypha,scyphae,scyphi,scyphoi,scyphus,scyt,scytale,scythe,sdeath,se,sea,seadog,seafare,seafolk,seafowl,seagirt,seagoer,seah,seak,seal,sealant,sealch,sealed,sealer,sealery,sealess,sealet,sealike,sealine,sealing,seam,seaman,seamark,seamed,seamer,seaming,seamlet,seamost,seamrog,seamy,seance,seaport,sear,searce,searcer,search,seared,searer,searing,seary,seasick,seaside,season,seat,seatang,seated,seater,seathe,seating,seatron,seave,seavy,seawant,seaward,seaware,seaway,seaweed,seawife,seaworn,seax,sebacic,sebait,sebate,sebific,sebilla,sebkha,sebum,sebundy,sec,secable,secalin,secancy,secant,secede,seceder,secern,secesh,sech,seck,seclude,secluse,secohm,second,seconde,secos,secpar,secque,secre,secrecy,secret,secreta,secrete,secreto,sect,sectary,sectile,section,sectism,sectist,sective,sector,secular,secund,secure,securer,sedan,sedate,sedent,sedge,sedged,sedging,sedgy,sedile,sedilia,seduce,seducee,seducer,seduct,sedum,see,seeable,seech,seed,seedage,seedbed,seedbox,seeded,seeder,seedful,seedily,seedkin,seedlet,seedlip,seedman,seedy,seege,seeing,seek,seeker,seeking,seel,seelful,seely,seem,seemer,seeming,seemly,seen,seenie,seep,seepage,seeped,seepy,seer,seeress,seerpaw,seesaw,seesee,seethe,seg,seggar,seggard,segged,seggrom,segment,sego,segol,seiche,seidel,seine,seiner,seise,seism,seismal,seismic,seit,seity,seize,seizer,seizin,seizing,seizor,seizure,sejant,sejoin,sejunct,sekos,selah,selamin,seldom,seldor,sele,select,selenic,self,selfdom,selfful,selfish,selfism,selfist,selfly,selion,sell,sella,sellar,sellate,seller,sellie,selling,sellout,selly,selsyn,selt,selva,selvage,semarum,sematic,semball,semble,seme,semeed,semeia,semeion,semen,semence,semese,semi,semiape,semiarc,semibay,semic,semicup,semidry,semiegg,semifib,semifit,semify,semigod,semihot,seminal,seminar,semiorb,semiped,semipro,semiraw,semis,semita,semitae,semital,semiurn,semmet,semmit,semola,semsem,sen,senaite,senam,senary,senate,senator,sence,sencion,send,sendal,sendee,sender,sending,senega,senegin,senesce,senile,senior,senna,sennet,sennit,sennite,sensa,sensal,sensate,sense,sensed,sensify,sensile,sension,sensism,sensist,sensive,sensize,senso,sensor,sensory,sensual,sensum,sensyne,sent,sentry,sepad,sepal,sepaled,sephen,sepia,sepian,sepiary,sepic,sepioid,sepion,sepiost,sepium,sepone,sepoy,seppuku,seps,sepsine,sepsis,sept,septa,septal,septan,septane,septate,septave,septet,septic,septier,septile,septime,septoic,septole,septum,septuor,sequa,sequel,sequela,sequent,sequest,sequin,ser,sera,serab,seragli,serai,serail,seral,serang,serape,seraph,serau,seraw,sercial,serdab,sere,sereh,serene,serf,serfage,serfdom,serfish,serfism,serge,serger,serging,serial,seriary,seriate,sericea,sericin,seriema,series,serif,serific,serin,serine,seringa,serio,serious,serment,sermo,sermon,sero,serolin,seron,seroon,seroot,seropus,serosa,serous,serow,serpent,serphid,serpigo,serpula,serra,serrage,serran,serrana,serrano,serrate,serried,serry,sert,serta,sertule,sertum,serum,serumal,serut,servage,serval,servant,serve,server,servery,servet,service,servile,serving,servist,servo,sesame,sesma,sesqui,sess,sessile,session,sestet,sesti,sestiad,sestina,sestine,sestole,sestuor,set,seta,setae,setal,setback,setbolt,setdown,setfast,seth,sethead,setier,setline,setness,setoff,seton,setose,setous,setout,setover,setsman,sett,settee,setter,setting,settle,settled,settler,settlor,setula,setule,setup,setwall,setwise,setwork,seugh,seven,sevener,seventh,seventy,sever,several,severe,severer,severy,sew,sewable,sewage,sewan,sewed,sewen,sewer,sewered,sewery,sewing,sewless,sewn,sex,sexed,sexern,sexfid,sexfoil,sexhood,sexifid,sexiped,sexless,sexlike,sexly,sext,sextain,sextan,sextans,sextant,sextar,sextary,sextern,sextet,sextic,sextile,sexto,sextole,sexton,sextry,sextula,sexual,sexuale,sexuous,sexy,sey,sfoot,sh,sha,shab,shabash,shabbed,shabble,shabby,shachle,shachly,shack,shackle,shackly,shacky,shad,shade,shaded,shader,shadily,shadine,shading,shadkan,shadoof,shadow,shadowy,shady,shaffle,shaft,shafted,shafter,shafty,shag,shagbag,shagged,shaggy,shaglet,shagrag,shah,shahdom,shahi,shahin,shaikh,shaitan,shake,shaken,shaker,shakers,shakha,shakily,shaking,shako,shakti,shaku,shaky,shale,shall,shallal,shallon,shallop,shallot,shallow,shallu,shalom,shalt,shalwar,shaly,sham,shama,shamal,shamalo,shaman,shamba,shamble,shame,shamed,shamer,shamir,shammed,shammer,shammy,shampoo,shan,shandry,shandy,shangan,shank,shanked,shanker,shanna,shanny,shansa,shant,shanty,shap,shape,shaped,shapely,shapen,shaper,shaping,shaps,shapy,shard,sharded,shardy,share,sharer,shargar,shark,sharky,sharn,sharny,sharp,sharpen,sharper,sharpie,sharply,sharps,sharpy,sharrag,sharry,shaster,shastra,shastri,shat,shatan,shatter,shaugh,shaul,shaup,shauri,shauwe,shave,shaved,shavee,shaven,shaver,shavery,shaving,shaw,shawl,shawled,shawm,shawny,shawy,shay,she,shea,sheaf,sheafy,sheal,shear,sheard,shearer,shears,sheat,sheath,sheathe,sheathy,sheave,sheaved,shebang,shebeen,shed,shedded,shedder,sheder,shedman,shee,sheely,sheen,sheenly,sheeny,sheep,sheepy,sheer,sheered,sheerly,sheet,sheeted,sheeter,sheety,sheik,sheikly,shekel,shela,sheld,shelder,shelf,shelfy,shell,shellac,shelled,sheller,shellum,shelly,shelta,shelter,shelty,shelve,shelver,shelvy,shend,sheng,sheolic,sheppey,sher,sherbet,sheriat,sherif,sherifa,sheriff,sherifi,sherify,sherry,sheth,sheugh,sheva,shevel,shevri,shewa,shewel,sheyle,shi,shibah,shibar,shice,shicer,shicker,shide,shied,shiel,shield,shier,shies,shiest,shift,shifter,shifty,shigram,shih,shikar,shikara,shikari,shikimi,shikken,shiko,shikra,shilf,shilfa,shill,shilla,shillet,shilloo,shilpit,shim,shimal,shimmer,shimmy,shimose,shimper,shin,shindig,shindle,shindy,shine,shiner,shingle,shingly,shinily,shining,shinner,shinny,shinty,shiny,shinza,ship,shipboy,shipful,shiplap,shiplet,shipman,shipped,shipper,shippo,shippon,shippy,shipway,shire,shirk,shirker,shirky,shirl,shirpit,shirr,shirt,shirty,shish,shisham,shisn,shita,shither,shittah,shittim,shiv,shive,shiver,shivery,shivey,shivoo,shivy,sho,shoad,shoader,shoal,shoaler,shoaly,shoat,shock,shocker,shod,shodden,shoddy,shode,shoder,shoe,shoeboy,shoeing,shoeman,shoer,shoful,shog,shogaol,shoggie,shoggle,shoggly,shogi,shogun,shohet,shoji,shola,shole,shone,shoneen,shoo,shood,shoofa,shoofly,shooi,shook,shool,shooler,shoop,shoor,shoot,shootee,shooter,shop,shopboy,shopful,shophar,shoplet,shopman,shoppe,shopper,shoppy,shoq,shor,shoran,shore,shored,shorer,shoring,shorn,short,shorten,shorter,shortly,shorts,shot,shote,shotgun,shotman,shott,shotted,shotten,shotter,shotty,shou,should,shout,shouter,shoval,shove,shovel,shover,show,showdom,shower,showery,showily,showing,showish,showman,shown,showup,showy,shoya,shrab,shradh,shraf,shrag,shram,shrank,shrap,shrave,shravey,shred,shreddy,shree,shreeve,shrend,shrew,shrewd,shrewdy,shrewly,shriek,shrieky,shrift,shrike,shrill,shrilly,shrimp,shrimpi,shrimpy,shrinal,shrine,shrink,shrinky,shrip,shrite,shrive,shrivel,shriven,shriver,shroff,shrog,shroud,shroudy,shrove,shrover,shrub,shrubby,shruff,shrug,shrunk,shrups,shuba,shuck,shucker,shucks,shudder,shuff,shuffle,shug,shul,shuler,shumac,shun,shune,shunner,shunt,shunter,shure,shurf,shush,shusher,shut,shutoff,shutout,shutten,shutter,shuttle,shy,shyer,shyish,shyly,shyness,shyster,si,siak,sial,sialic,sialid,sialoid,siamang,sib,sibbed,sibbens,sibber,sibby,sibilus,sibling,sibness,sibrede,sibship,sibyl,sibylic,sibylla,sic,sicca,siccant,siccate,siccity,sice,sick,sickbed,sicken,sicker,sickish,sickle,sickled,sickler,sickly,sicsac,sicula,sicular,sidder,siddur,side,sideage,sidearm,sidecar,sided,sider,sideral,siderin,sides,sideway,sidhe,sidi,siding,sidle,sidler,sidling,sidth,sidy,sie,siege,sieger,sienna,sier,siering,sierra,sierran,siesta,sieve,siever,sievy,sifac,sifaka,sife,siffle,sifflet,sifflot,sift,siftage,sifted,sifter,sifting,sig,sigger,sigh,sigher,sighful,sighing,sight,sighted,sighten,sighter,sightly,sighty,sigil,sigla,siglos,sigma,sigmate,sigmoid,sign,signal,signary,signate,signee,signer,signet,signify,signior,signist,signman,signory,signum,sika,sikar,sikatch,sike,sikerly,siket,sikhara,sikhra,sil,silage,silane,sile,silen,silence,silency,sileni,silenic,silent,silenus,silesia,silex,silica,silicam,silicic,silicle,silico,silicon,silicyl,siliqua,silique,silk,silked,silken,silker,silkie,silkily,silkman,silky,sill,sillar,siller,sillily,sillock,sillon,silly,silo,siloist,silphid,silt,siltage,silting,silty,silurid,silva,silvan,silver,silvern,silvery,silvics,silyl,sima,simal,simar,simball,simbil,simblin,simblot,sime,simiad,simial,simian,similar,simile,similor,simioid,simious,simity,simkin,simlin,simling,simmer,simmon,simnel,simony,simool,simoom,simoon,simous,simp,simpai,simper,simple,simpler,simplex,simply,simsim,simson,simular,simuler,sin,sina,sinaite,sinal,sinamay,sinapic,sinapis,sinawa,since,sincere,sind,sinder,sindle,sindoc,sindon,sindry,sine,sinew,sinewed,sinewy,sinful,sing,singe,singed,singer,singey,singh,singing,single,singled,singler,singles,singlet,singly,singult,sinh,sink,sinkage,sinker,sinking,sinky,sinless,sinlike,sinnen,sinner,sinnet,sinopia,sinople,sinsion,sinsyne,sinter,sintoc,sinuate,sinuose,sinuous,sinus,sinusal,sinward,siol,sion,sip,sipage,sipe,siper,siphoid,siphon,sipid,siping,sipling,sipper,sippet,sippio,sir,sircar,sirdar,sire,siren,sirene,sirenic,sireny,siress,sirgang,sirian,siricid,sirih,siris,sirkeer,sirki,sirky,sirloin,siroc,sirocco,sirpea,sirple,sirpoon,sirrah,sirree,sirship,sirup,siruped,siruper,sirupy,sis,sisal,sise,sisel,sish,sisham,sisi,siskin,siss,sissify,sissoo,sissy,sist,sister,sistern,sistle,sistrum,sit,sitao,sitar,sitch,site,sitfast,sith,sithe,sithens,sitient,sitio,sittee,sitten,sitter,sittine,sitting,situal,situate,situla,situlae,situs,siva,siver,sivvens,siwash,six,sixain,sixer,sixfoil,sixfold,sixsome,sixte,sixteen,sixth,sixthet,sixthly,sixty,sizable,sizably,sizal,sizar,size,sized,sizeman,sizer,sizes,sizing,sizy,sizygia,sizz,sizzard,sizzing,sizzle,sjambok,skaddle,skaff,skaffie,skag,skair,skal,skance,skart,skasely,skat,skate,skater,skatiku,skating,skatist,skatole,skaw,skean,skedge,skee,skeed,skeeg,skeel,skeely,skeen,skeer,skeered,skeery,skeet,skeeter,skeezix,skeg,skegger,skeif,skeigh,skeily,skein,skeiner,skeipp,skel,skelder,skelf,skelic,skell,skellat,skeller,skellum,skelly,skelp,skelper,skelpin,skelter,skemmel,skemp,sken,skene,skeo,skeough,skep,skepful,skeptic,sker,skere,skerret,skerry,sketch,sketchy,skete,skevish,skew,skewed,skewer,skewl,skewly,skewy,skey,ski,skiapod,skibby,skice,skid,skidded,skidder,skiddoo,skiddy,skidpan,skidway,skied,skieppe,skier,skies,skiff,skift,skiing,skijore,skil,skilder,skill,skilled,skillet,skilly,skilpot,skilts,skim,skime,skimmed,skimmer,skimp,skimpy,skin,skinch,skinful,skink,skinker,skinkle,skinned,skinner,skinny,skip,skipman,skippel,skipper,skippet,skipple,skippy,skirl,skirp,skirr,skirreh,skirret,skirt,skirted,skirter,skirty,skit,skite,skiter,skither,skitter,skittle,skitty,skiv,skive,skiver,skiving,sklate,sklater,sklent,skoal,skoo,skookum,skoptsy,skout,skraigh,skrike,skrupul,skua,skulk,skulker,skull,skulled,skully,skulp,skun,skunk,skunky,skuse,sky,skybal,skyey,skyful,skyish,skylark,skyless,skylike,skylook,skyman,skyphoi,skyphos,skyre,skysail,skyugle,skyward,skyway,sla,slab,slabbed,slabber,slabby,slabman,slack,slacked,slacken,slacker,slackly,slad,sladang,slade,slae,slag,slagger,slaggy,slagman,slain,slainte,slait,slake,slaker,slaking,slaky,slam,slamp,slander,slane,slang,slangy,slank,slant,slantly,slap,slape,slapper,slare,slart,slarth,slash,slashed,slasher,slashy,slat,slatch,slate,slater,slath,slather,slatify,slating,slatish,slatted,slatter,slaty,slaum,slave,slaved,slaver,slavery,slavey,slaving,slavish,slaw,slay,slayer,slaying,sleathy,sleave,sleaved,sleazy,sleck,sled,sledded,sledder,sledful,sledge,sledger,slee,sleech,sleechy,sleek,sleeken,sleeker,sleekit,sleekly,sleeky,sleep,sleeper,sleepry,sleepy,sleer,sleet,sleety,sleeve,sleeved,sleever,sleigh,sleight,slender,slent,slepez,slept,slete,sleuth,slew,slewed,slewer,slewing,sley,sleyer,slice,sliced,slicer,slich,slicht,slicing,slick,slicken,slicker,slickly,slid,slidage,slidden,slidder,slide,slided,slider,sliding,slifter,slight,slighty,slim,slime,slimer,slimily,slimish,slimly,slimpsy,slimsy,slimy,sline,sling,slinge,slinger,slink,slinker,slinky,slip,slipe,slipman,slipped,slipper,slippy,slipway,slirt,slish,slit,slitch,slite,slither,slithy,slitted,slitter,slitty,slive,sliver,slivery,sliving,sloan,slob,slobber,slobby,slock,slocken,slod,slodder,slodge,slodger,sloe,slog,slogan,slogger,sloka,sloke,slon,slone,slonk,sloo,sloom,sloomy,sloop,sloosh,slop,slope,sloped,slopely,sloper,sloping,slopped,sloppy,slops,slopy,slorp,slosh,slosher,sloshy,slot,slote,sloted,sloth,slotted,slotter,slouch,slouchy,slough,sloughy,slour,sloush,sloven,slow,slowish,slowly,slowrie,slows,sloyd,slub,slubber,slubby,slud,sludder,sludge,sludged,sludger,sludgy,slue,sluer,slug,slugged,slugger,sluggy,sluice,sluicer,sluicy,sluig,sluit,slum,slumber,slumdom,slumgum,slummer,slummy,slump,slumpy,slung,slunge,slunk,slunken,slur,slurbow,slurp,slurry,slush,slusher,slushy,slut,slutch,slutchy,sluther,slutter,slutty,sly,slyish,slyly,slyness,slype,sma,smack,smackee,smacker,smaik,small,smallen,smaller,smalls,smally,smalm,smalt,smalter,smalts,smaragd,smarm,smarmy,smart,smarten,smartly,smarty,smash,smasher,smashup,smatter,smaze,smear,smeared,smearer,smeary,smectic,smectis,smeddum,smee,smeech,smeek,smeeky,smeer,smeeth,smegma,smell,smelled,smeller,smelly,smelt,smelter,smeth,smethe,smeuse,smew,smich,smicker,smicket,smiddie,smiddum,smidge,smidgen,smilax,smile,smiler,smilet,smiling,smily,smirch,smirchy,smiris,smirk,smirker,smirkle,smirkly,smirky,smirtle,smit,smitch,smite,smiter,smith,smitham,smither,smithy,smiting,smitten,smock,smocker,smog,smoke,smoked,smoker,smokery,smokily,smoking,smokish,smoky,smolder,smolt,smooch,smoochy,smoodge,smook,smoot,smooth,smopple,smore,smote,smother,smotter,smouch,smous,smouse,smouser,smout,smriti,smudge,smudged,smudger,smudgy,smug,smuggle,smugism,smugly,smuisty,smur,smurr,smurry,smuse,smush,smut,smutch,smutchy,smutted,smutter,smutty,smyth,smytrie,snab,snabbie,snabble,snack,snackle,snaff,snaffle,snafu,snag,snagged,snagger,snaggy,snagrel,snail,snails,snaily,snaith,snake,snaker,snakery,snakily,snaking,snakish,snaky,snap,snapbag,snape,snaper,snapped,snapper,snapps,snappy,snaps,snapy,snare,snarer,snark,snarl,snarler,snarly,snary,snaste,snatch,snatchy,snath,snathe,snavel,snavvle,snaw,snead,sneak,sneaker,sneaky,sneap,sneath,sneathe,sneb,sneck,snecker,snecket,sned,snee,sneer,sneerer,sneery,sneesh,sneest,sneesty,sneeze,sneezer,sneezy,snell,snelly,snerp,snew,snib,snibble,snibel,snicher,snick,snicker,snicket,snickey,snickle,sniddle,snide,sniff,sniffer,sniffle,sniffly,sniffy,snift,snifter,snifty,snig,snigger,sniggle,snip,snipe,sniper,sniping,snipish,snipper,snippet,snippy,snipy,snirl,snirt,snirtle,snitch,snite,snithe,snithy,snittle,snivel,snively,snivy,snob,snobber,snobby,snobdom,snocher,snock,snocker,snod,snodly,snoek,snog,snoga,snoke,snood,snooded,snook,snooker,snoop,snooper,snoopy,snoose,snoot,snooty,snoove,snooze,snoozer,snoozle,snoozy,snop,snore,snorer,snoring,snork,snorkel,snorker,snort,snorter,snortle,snorty,snot,snotter,snotty,snouch,snout,snouted,snouter,snouty,snow,snowcap,snowie,snowily,snowish,snowk,snowl,snowy,snozzle,snub,snubbed,snubbee,snubber,snubby,snuck,snudge,snuff,snuffer,snuffle,snuffly,snuffy,snug,snugger,snuggle,snugify,snugly,snum,snup,snupper,snur,snurl,snurly,snurp,snurt,snuzzle,sny,snying,so,soak,soakage,soaked,soaken,soaker,soaking,soakman,soaky,soally,soam,soap,soapbox,soaper,soapery,soapily,soapsud,soapy,soar,soarer,soaring,soary,sob,sobber,sobbing,sobby,sobeit,sober,soberer,soberly,sobful,soboles,soc,socage,socager,soccer,soce,socht,social,society,socii,socius,sock,socker,socket,sockeye,socky,socle,socman,soco,sod,soda,sodaic,sodded,sodden,sodding,soddite,soddy,sodic,sodio,sodium,sodless,sodoku,sodomic,sodomy,sodwork,sody,soe,soekoe,soever,sofa,sofane,sofar,soffit,soft,softa,soften,softish,softly,softner,softy,sog,soger,soget,soggily,sogging,soggy,soh,soho,soil,soilage,soiled,soiling,soilure,soily,soiree,soja,sojourn,sok,soka,soke,sokeman,soken,sol,sola,solace,solacer,solan,solanal,solanum,solar,solate,solatia,solay,sold,soldado,soldan,solder,soldi,soldier,soldo,sole,solea,soleas,soleil,solely,solemn,solen,solent,soler,soles,soleus,soleyn,soli,solicit,solid,solidi,solidly,solidum,solidus,solio,soliped,solist,sollar,solo,solod,solodi,soloist,solon,soloth,soluble,solubly,solum,solute,solvate,solve,solvend,solvent,solver,soma,somal,somata,somatic,somber,sombre,some,someday,somehow,someone,somers,someway,somewhy,somital,somite,somitic,somma,somnial,somnify,somnus,sompay,sompne,sompner,son,sonable,sonance,sonancy,sonant,sonar,sonata,sond,sondeli,soneri,song,songful,songish,songle,songlet,songman,songy,sonhood,sonic,soniou,sonk,sonless,sonlike,sonly,sonnet,sonny,sonoric,sons,sonship,sonsy,sontag,soodle,soodly,sook,sooky,sool,sooloos,soon,sooner,soonish,soonly,soorawn,soord,soorkee,soot,sooter,sooth,soothe,soother,sootily,sooty,sop,sope,soph,sophia,sophic,sophism,sophy,sopite,sopor,sopper,sopping,soppy,soprani,soprano,sora,sorage,soral,sorb,sorbate,sorbent,sorbic,sorbile,sorbin,sorbite,sorbose,sorbus,sorcer,sorcery,sorchin,sorda,sordes,sordid,sordine,sordino,sordor,sore,soredia,soree,sorehon,sorely,sorema,sorgho,sorghum,sorgo,sori,soricid,sorite,sorites,sorn,sornare,sornari,sorner,sorning,soroban,sororal,sorose,sorosis,sorra,sorrel,sorrily,sorroa,sorrow,sorrowy,sorry,sort,sortal,sorted,sorter,sortie,sortly,sorty,sorus,sorva,sory,sosh,soshed,soso,sosoish,soss,sossle,sot,sotie,sotnia,sotnik,sotol,sots,sottage,sotted,sotter,sottish,sou,souari,soubise,soucar,souchet,souchy,soud,souffle,sough,sougher,sought,soul,soulack,souled,soulful,soulish,souly,soum,sound,sounder,soundly,soup,soupcon,souper,souple,soupy,sour,source,soured,souren,sourer,souring,sourish,sourly,sourock,soursop,sourtop,soury,souse,souser,souslik,soutane,souter,south,souther,sov,soviet,sovite,sovkhoz,sovran,sow,sowable,sowan,sowans,sowar,sowarry,sowback,sowbane,sowel,sowens,sower,sowfoot,sowing,sowins,sowl,sowle,sowlike,sowlth,sown,sowse,sowt,sowte,soy,soya,soybean,sozin,sozolic,sozzle,sozzly,spa,space,spaced,spacer,spacing,spack,spacy,spad,spade,spaded,spader,spadger,spading,spadix,spadone,spae,spaedom,spaeman,spaer,spahi,spaid,spaik,spairge,spak,spald,spalder,spale,spall,spaller,spalt,span,spancel,spandle,spandy,spane,spanemy,spang,spangle,spangly,spaniel,spaning,spank,spanker,spanky,spann,spannel,spanner,spanule,spar,sparada,sparch,spare,sparely,sparer,sparge,sparger,sparid,sparing,spark,sparked,sparker,sparkle,sparkly,sparks,sparky,sparm,sparoid,sparred,sparrer,sparrow,sparry,sparse,spart,sparth,spartle,sparver,spary,spasm,spasmed,spasmic,spastic,spat,spate,spatha,spathal,spathe,spathed,spathic,spatial,spatted,spatter,spattle,spatula,spatule,spave,spaver,spavie,spavied,spaviet,spavin,spawn,spawner,spawny,spay,spayad,spayard,spaying,speak,speaker,speal,spean,spear,spearer,speary,spec,spece,special,specie,species,specify,speck,specked,speckle,speckly,specks,specky,specs,specter,spectra,spectry,specula,specus,sped,speech,speed,speeder,speedy,speel,speen,speer,speiss,spelder,spelk,spell,speller,spelt,spelter,speltz,spelunk,spence,spencer,spend,spender,spense,spent,speos,sperate,sperity,sperket,sperm,sperma,spermic,spermy,sperone,spet,spetch,spew,spewer,spewing,spewy,spex,sphacel,sphecid,spheges,sphegid,sphene,sphenic,spheral,sphere,spheric,sphery,sphinx,spica,spical,spicant,spicate,spice,spiced,spicer,spicery,spicily,spicing,spick,spicket,spickle,spicose,spicous,spicula,spicule,spicy,spider,spidery,spidger,spied,spiegel,spiel,spieler,spier,spiff,spiffed,spiffy,spig,spignet,spigot,spike,spiked,spiker,spikily,spiking,spiky,spile,spiler,spiling,spilite,spill,spiller,spillet,spilly,spiloma,spilt,spilth,spilus,spin,spina,spinach,spinae,spinage,spinal,spinate,spinder,spindle,spindly,spine,spined,spinel,spinet,spingel,spink,spinner,spinney,spinoid,spinose,spinous,spinule,spiny,spionid,spiral,spirale,spiran,spirant,spirate,spire,spirea,spired,spireme,spiring,spirit,spirity,spirket,spiro,spiroid,spirous,spirt,spiry,spise,spit,spital,spitbox,spite,spitful,spitish,spitted,spitten,spitter,spittle,spitz,spiv,spivery,splash,splashy,splat,splatch,splay,splayed,splayer,spleen,spleeny,spleet,splenic,splet,splice,splicer,spline,splint,splinty,split,splodge,splodgy,splore,splosh,splotch,splunge,splurge,splurgy,splurt,spoach,spode,spodium,spoffle,spoffy,spogel,spoil,spoiled,spoiler,spoilt,spoke,spoken,spoky,spole,spolia,spolium,spondee,spondyl,spong,sponge,sponged,sponger,spongin,spongy,sponsal,sponson,sponsor,spoof,spoofer,spook,spooky,spool,spooler,spoom,spoon,spooner,spoony,spoor,spoorer,spoot,spor,sporal,spore,spored,sporid,sporoid,sporont,sporous,sporran,sport,sporter,sportly,sports,sporty,sporule,sposh,sposhy,spot,spotted,spotter,spottle,spotty,spousal,spouse,spousy,spout,spouter,spouty,sprack,sprad,sprag,spraich,sprain,spraint,sprang,sprank,sprat,spratty,sprawl,sprawly,spray,sprayer,sprayey,spread,spready,spreath,spree,spreeuw,spreng,sprent,spret,sprew,sprewl,spried,sprier,spriest,sprig,spriggy,spring,springe,springy,sprink,sprint,sprit,sprite,spritty,sproat,sprod,sprogue,sproil,sprong,sprose,sprout,sprowsy,spruce,sprue,spruer,sprug,spruit,sprung,sprunny,sprunt,spry,spryly,spud,spudder,spuddle,spuddy,spuffle,spug,spuke,spume,spumone,spumose,spumous,spumy,spun,spung,spunk,spunkie,spunky,spunny,spur,spurge,spuriae,spurl,spurlet,spurn,spurner,spurred,spurrer,spurry,spurt,spurter,spurtle,spurway,sput,sputa,sputter,sputum,spy,spyboat,spydom,spyer,spyhole,spyism,spyship,squab,squabby,squacco,squad,squaddy,squail,squalid,squall,squally,squalm,squalor,squam,squama,squamae,squame,square,squared,squarer,squark,squary,squash,squashy,squat,squatly,squatty,squaw,squawk,squawky,squdge,squdgy,squeak,squeaky,squeal,squeald,squeam,squeamy,squeege,squeeze,squeezy,squelch,squench,squib,squid,squidge,squidgy,squiffy,squilla,squin,squinch,squinny,squinsy,squint,squinty,squire,squiret,squirk,squirm,squirmy,squirr,squirt,squirty,squish,squishy,squit,squitch,squoze,squush,squushy,sraddha,sramana,sri,sruti,ssu,st,staab,stab,stabber,stabile,stable,stabler,stably,staboy,stacher,stachys,stack,stacker,stacte,stadda,staddle,stade,stadia,stadic,stadion,stadium,staff,staffed,staffer,stag,stage,staged,stager,stagery,stagese,stagger,staggie,staggy,stagily,staging,stagnum,stagy,staia,staid,staidly,stain,stainer,staio,stair,staired,stairy,staith,staiver,stake,staker,stale,stalely,staling,stalk,stalked,stalker,stalko,stalky,stall,stallar,staller,stam,stambha,stamen,stamin,stamina,stammel,stammer,stamnos,stamp,stampee,stamper,stample,stance,stanch,stand,standee,standel,stander,stane,stang,stanine,stanjen,stank,stankie,stannel,stanner,stannic,stanno,stannum,stannyl,stanza,stanze,stap,stapes,staple,stapled,stapler,star,starch,starchy,stardom,stare,staree,starer,starets,starful,staring,stark,starken,starkly,starky,starlet,starlit,starn,starnel,starnie,starost,starred,starry,start,starter,startle,startly,startor,starty,starve,starved,starver,starvy,stary,stases,stash,stashie,stasis,statal,statant,state,stated,stately,stater,static,statics,station,statism,statist,stative,stator,statue,statued,stature,status,statute,stauk,staumer,staun,staunch,staup,stauter,stave,staver,stavers,staving,staw,stawn,staxis,stay,stayed,stayer,staynil,stays,stchi,stead,steady,steak,steal,stealed,stealer,stealth,stealy,steam,steamer,steamy,stean,stearic,stearin,stearyl,steatin,stech,steddle,steed,steek,steel,steeler,steely,steen,steenth,steep,steepen,steeper,steeple,steeply,steepy,steer,steerer,steeve,steever,steg,steid,steigh,stein,stekan,stela,stelae,stelai,stelar,stele,stell,stella,stellar,stem,stema,stemlet,stemma,stemmed,stemmer,stemmy,stemple,stemson,sten,stenar,stench,stenchy,stencil,stend,steng,stengah,stenion,steno,stenog,stent,stenter,stenton,step,steppe,stepped,stepper,stepson,stept,stepway,stere,stereo,steri,steric,sterics,steride,sterile,sterin,sterk,sterlet,stern,sterna,sternad,sternal,sterned,sternly,sternum,stero,steroid,sterol,stert,stertor,sterve,stet,stetch,stevel,steven,stevia,stew,steward,stewed,stewpan,stewpot,stewy,stey,sthenia,sthenic,stib,stibial,stibic,stibine,stibium,stich,stichic,stichid,stick,sticked,sticker,stickit,stickle,stickly,sticks,stickum,sticky,stid,stiddy,stife,stiff,stiffen,stiffly,stifle,stifler,stigma,stigmai,stigmal,stigme,stile,stilet,still,stiller,stilly,stilt,stilted,stilter,stilty,stim,stime,stimuli,stimy,stine,sting,stinge,stinger,stingo,stingy,stink,stinker,stint,stinted,stinter,stinty,stion,stionic,stipe,stiped,stipel,stipend,stipes,stippen,stipple,stipply,stipula,stipule,stir,stirk,stirp,stirps,stirra,stirrer,stirrup,stitch,stite,stith,stithy,stive,stiver,stivy,stoa,stoach,stoat,stoater,stob,stocah,stock,stocker,stocks,stocky,stod,stodge,stodger,stodgy,stoep,stof,stoff,stog,stoga,stogie,stogy,stoic,stoical,stoke,stoker,stola,stolae,stole,stoled,stolen,stolid,stolist,stollen,stolon,stoma,stomach,stomata,stomate,stomium,stomp,stomper,stond,stone,stoned,stonen,stoner,stong,stonied,stonify,stonily,stoning,stonish,stonker,stony,stood,stooded,stooden,stoof,stooge,stook,stooker,stookie,stool,stoon,stoond,stoop,stooper,stoory,stoot,stop,stopa,stope,stoper,stopgap,stoping,stopped,stopper,stoppit,stopple,storage,storax,store,storeen,storer,storge,storied,storier,storify,stork,storken,storm,stormer,stormy,story,stosh,stoss,stot,stotter,stoun,stound,stoup,stour,stoury,stoush,stout,stouten,stouth,stoutly,stouty,stove,stoven,stover,stow,stowage,stowce,stower,stowing,stra,strack,stract,strad,strade,stradl,stradld,strae,strafe,strafer,strag,straik,strain,straint,strait,strake,straked,straky,stram,stramp,strand,strang,strange,strany,strap,strass,strata,stratal,strath,strati,stratic,stratum,stratus,strave,straw,strawen,strawer,strawy,stray,strayer,stre,streak,streaky,stream,streamy,streck,stree,streek,streel,streen,streep,street,streets,streite,streke,stremma,streng,strent,strenth,strepen,strepor,stress,stret,stretch,strette,stretti,stretto,strew,strewer,strewn,strey,streyne,stria,striae,strial,striate,strich,striche,strick,strict,strid,stride,strider,stridor,strife,strig,striga,strigae,strigal,stright,strigil,strike,striker,strind,string,stringy,striola,strip,stripe,striped,striper,stript,stripy,strit,strive,strived,striven,striver,strix,stroam,strobic,strode,stroil,stroke,stroker,stroky,strold,stroll,strolld,strom,stroma,stromal,stromb,strome,strone,strong,strook,stroot,strop,strophe,stroth,stroud,stroup,strove,strow,strowd,strown,stroy,stroyer,strub,struck,strudel,strue,strum,struma,strumae,strung,strunt,strut,struth,struv,strych,stub,stubb,stubbed,stubber,stubble,stubbly,stubboy,stubby,stuber,stuboy,stucco,stuck,stud,studder,studdie,studdle,stude,student,studia,studied,studier,studio,studium,study,stue,stuff,stuffed,stuffer,stuffy,stug,stuggy,stuiver,stull,stuller,stulm,stum,stumble,stumbly,stumer,stummer,stummy,stump,stumper,stumpy,stun,stung,stunk,stunner,stunsle,stunt,stunted,stunter,stunty,stupa,stupe,stupefy,stupend,stupent,stupex,stupid,stupor,stupose,stupp,stuprum,sturdy,sturine,sturk,sturt,sturtan,sturtin,stuss,stut,stutter,sty,styan,styca,styful,stylar,stylate,style,styler,stylet,styline,styling,stylish,stylist,stylite,stylize,stylo,styloid,stylops,stylus,stymie,stypsis,styptic,styrax,styrene,styrol,styrone,styryl,stythe,styward,suable,suably,suade,suaharo,suant,suantly,suasion,suasive,suasory,suave,suavely,suavify,suavity,sub,subacid,subact,subage,subah,subaid,subanal,subarch,subarea,subatom,subaud,subband,subbank,subbase,subbass,subbeau,subbias,subbing,subcase,subcash,subcast,subcell,subcity,subclan,subcool,subdate,subdean,subdeb,subdial,subdie,subdual,subduce,subduct,subdue,subdued,subduer,subecho,subedit,suber,suberic,suberin,subface,subfeu,subfief,subfix,subform,subfusc,subfusk,subgape,subgens,subget,subgit,subgod,subgrin,subgyre,subhall,subhead,subherd,subhero,subicle,subidar,subidea,subitem,subjack,subject,subjee,subjoin,subking,sublate,sublet,sublid,sublime,sublong,sublot,submaid,submain,subman,submind,submiss,submit,subnect,subness,subnex,subnote,subnude,suboral,suborn,suboval,subpart,subpass,subpial,subpimp,subplat,subplot,subplow,subpool,subport,subrace,subrent,subroot,subrule,subsale,subsalt,subsea,subsect,subsept,subset,subside,subsidy,subsill,subsist,subsoil,subsult,subsume,subtack,subtend,subtext,subtile,subtill,subtle,subtly,subtone,subtype,subunit,suburb,subvein,subvene,subvert,subvola,subway,subwink,subzone,succade,succeed,succent,success,succi,succin,succise,succor,succory,succous,succub,succuba,succube,succula,succumb,succuss,such,suck,suckage,sucken,sucker,sucking,suckle,suckler,suclat,sucrate,sucre,sucrose,suction,sucuri,sucuriu,sud,sudamen,sudary,sudate,sudd,sudden,sudder,suddle,suddy,sudoral,sudoric,suds,sudsman,sudsy,sue,suede,suer,suet,suety,suff,suffect,suffer,suffete,suffice,suffix,sufflue,suffuse,sugamo,sugan,sugar,sugared,sugarer,sugary,sugent,suggest,sugh,sugi,suguaro,suhuaro,suicide,suid,suidian,suiform,suimate,suine,suing,suingly,suint,suist,suit,suite,suiting,suitor,suity,suji,sulcal,sulcar,sulcate,sulcus,suld,sulea,sulfa,sulfato,sulfion,sulfury,sulk,sulka,sulker,sulkily,sulky,sull,sulla,sullage,sullen,sullow,sully,sulpha,sulpho,sulphur,sultam,sultan,sultana,sultane,sultone,sultry,sulung,sum,sumac,sumatra,sumbul,sumless,summage,summand,summar,summary,summate,summed,summer,summery,summist,summit,summity,summon,summons,summula,summut,sumner,sump,sumpage,sumper,sumph,sumphy,sumpit,sumple,sumpman,sumpter,sun,sunbeam,sunbird,sunbow,sunburn,suncup,sundae,sundang,sundari,sundek,sunder,sundew,sundial,sundik,sundog,sundown,sundra,sundri,sundry,sune,sunfall,sunfast,sunfish,sung,sungha,sunglo,sunglow,sunk,sunken,sunket,sunlamp,sunland,sunless,sunlet,sunlike,sunlit,sunn,sunnily,sunnud,sunny,sunray,sunrise,sunroom,sunset,sunsmit,sunspot,sunt,sunup,sunward,sunway,sunways,sunweed,sunwise,sunyie,sup,supa,supari,supawn,supe,super,superb,supine,supper,supping,supple,supply,support,suppose,suppost,supreme,sur,sura,surah,surahi,sural,suranal,surat,surbase,surbate,surbed,surcoat,surcrue,surculi,surd,surdent,surdity,sure,surely,sures,surette,surety,surf,surface,surfacy,surfeit,surfer,surfle,surfman,surfuse,surfy,surge,surgent,surgeon,surgery,surging,surgy,suriga,surlily,surly,surma,surmark,surmise,surname,surnap,surnay,surpass,surplus,surra,surrey,surtax,surtout,survey,survive,suscept,susi,suslik,suspect,suspend,suspire,sustain,susu,susurr,suther,sutile,sutler,sutlery,sutor,sutra,suttee,sutten,suttin,suttle,sutural,suture,suum,suwarro,suwe,suz,svelte,swa,swab,swabber,swabble,swack,swacken,swad,swaddle,swaddy,swag,swage,swager,swagger,swaggie,swaggy,swagman,swain,swaird,swale,swaler,swaling,swallet,swallo,swallow,swam,swami,swamp,swamper,swampy,swan,swang,swangy,swank,swanker,swanky,swanner,swanny,swap,swape,swapper,swaraj,swarbie,sward,swardy,sware,swarf,swarfer,swarm,swarmer,swarmy,swarry,swart,swarth,swarthy,swartly,swarty,swarve,swash,swasher,swashy,swat,swatch,swath,swathe,swather,swathy,swatter,swattle,swaver,sway,swayed,swayer,swayful,swaying,sweal,swear,swearer,sweat,sweated,sweater,sweath,sweaty,swedge,sweeny,sweep,sweeper,sweepy,sweer,sweered,sweet,sweeten,sweetie,sweetly,sweety,swego,swell,swelled,sweller,swelly,swelp,swelt,swelter,swelth,sweltry,swelty,swep,swept,swerd,swerve,swerver,swick,swidge,swift,swiften,swifter,swifty,swig,swigger,swiggle,swile,swill,swiller,swim,swimmer,swimmy,swimy,swindle,swine,swinely,swinery,swiney,swing,swinge,swinger,swingle,swingy,swinish,swink,swinney,swipe,swiper,swipes,swiple,swipper,swipy,swird,swire,swirl,swirly,swish,swisher,swishy,swiss,switch,switchy,swith,swithe,swithen,swither,swivel,swivet,swiz,swizzle,swob,swollen,swom,swonken,swoon,swooned,swoony,swoop,swooper,swoosh,sword,swore,sworn,swosh,swot,swotter,swounds,swow,swum,swung,swungen,swure,syagush,sybotic,syce,sycee,sycock,sycoma,syconid,syconus,sycosis,sye,syenite,sylid,syllab,syllabe,syllabi,sylloge,sylph,sylphic,sylphid,sylphy,sylva,sylvae,sylvage,sylvan,sylvate,sylvic,sylvine,sylvite,symbion,symbiot,symbol,sympode,symptom,synacme,synacmy,synange,synapse,synapte,synaxar,synaxis,sync,syncarp,synch,synchro,syncope,syndic,syndoc,syne,synema,synergy,synesis,syngamy,synod,synodal,synoecy,synonym,synopsy,synovia,syntan,syntax,synthol,syntomy,syntone,syntony,syntype,synusia,sypher,syre,syringa,syringe,syrinx,syrma,syrphid,syrt,syrtic,syrup,syruped,syruper,syrupy,syssel,system,systole,systyle,syzygy,t,ta,taa,taar,tab,tabacin,tabacum,tabanid,tabard,tabaret,tabaxir,tabber,tabby,tabefy,tabella,taberna,tabes,tabet,tabetic,tabic,tabid,tabidly,tabific,tabinet,tabla,table,tableau,tabled,tabler,tables,tablet,tabling,tabloid,tabog,taboo,taboot,tabor,taborer,taboret,taborin,tabour,tabret,tabu,tabula,tabular,tabule,tabut,taccada,tach,tache,tachiol,tacit,tacitly,tack,tacker,tacket,tackety,tackey,tacking,tackle,tackled,tackler,tacky,tacnode,tacso,tact,tactful,tactic,tactics,tactile,taction,tactite,tactive,tactor,tactual,tactus,tad,tade,tadpole,tae,tael,taen,taenia,taenial,taenian,taenite,taennin,taffeta,taffety,taffle,taffy,tafia,taft,tafwiz,tag,tagetol,tagged,tagger,taggle,taggy,taglet,taglike,taglock,tagrag,tagsore,tagtail,tagua,taguan,tagwerk,taha,taheen,tahil,tahin,tahr,tahsil,tahua,tai,taiaha,taich,taiga,taigle,taihoa,tail,tailage,tailed,tailer,tailet,tailge,tailing,taille,taillie,tailor,tailory,tailpin,taily,tailzee,tailzie,taimen,tain,taint,taintor,taipan,taipo,tairge,tairger,tairn,taisch,taise,taissle,tait,taiver,taivers,taivert,taj,takable,takar,take,takeful,taken,taker,takin,taking,takings,takosis,takt,taky,takyr,tal,tala,talabon,talahib,talaje,talak,talao,talar,talari,talaria,talaric,talayot,talbot,talc,talcer,talcky,talcoid,talcose,talcous,talcum,tald,tale,taled,taleful,talent,taler,tales,tali,taliage,taliera,talion,talipat,taliped,talipes,talipot,talis,talisay,talite,talitol,talk,talker,talkful,talkie,talking,talky,tall,tallage,tallboy,taller,tallero,talles,tallet,talliar,tallier,tallis,tallish,tallit,tallith,talloel,tallote,tallow,tallowy,tally,tallyho,talma,talon,taloned,talonic,talonid,talose,talpid,talpify,talpine,talpoid,talthib,taluk,taluka,talus,taluto,talwar,talwood,tam,tamable,tamably,tamale,tamandu,tamanu,tamara,tamarao,tamarin,tamas,tamasha,tambac,tamber,tambo,tamboo,tambor,tambour,tame,tamein,tamely,tamer,tamis,tamise,tamlung,tammie,tammock,tammy,tamp,tampala,tampan,tampang,tamper,tampin,tamping,tampion,tampon,tampoon,tan,tana,tanach,tanager,tanaist,tanak,tanan,tanbark,tanbur,tancel,tandan,tandem,tandle,tandour,tane,tang,tanga,tanged,tangelo,tangent,tanger,tangham,tanghan,tanghin,tangi,tangie,tangka,tanglad,tangle,tangler,tangly,tango,tangram,tangs,tangue,tangum,tangun,tangy,tanh,tanha,tania,tanica,tanier,tanist,tanjib,tanjong,tank,tanka,tankage,tankah,tankard,tanked,tanker,tankert,tankful,tankle,tankman,tanling,tannage,tannaic,tannaim,tannase,tannate,tanned,tanner,tannery,tannic,tannide,tannin,tanning,tannoid,tannyl,tanoa,tanquam,tanquen,tanrec,tansy,tantara,tanti,tantivy,tantle,tantra,tantric,tantrik,tantrum,tantum,tanwood,tanyard,tanzeb,tanzib,tanzy,tao,taotai,taoyin,tap,tapa,tapalo,tapas,tapasvi,tape,tapeman,tapen,taper,tapered,taperer,taperly,tapet,tapetal,tapete,tapeti,tapetum,taphole,tapia,tapioca,tapir,tapis,tapism,tapist,taplash,taplet,tapmost,tapnet,tapoa,tapoun,tappa,tappall,tappaul,tappen,tapper,tappet,tapping,tappoon,taproom,taproot,taps,tapster,tapu,tapul,taqua,tar,tara,taraf,tarage,tarairi,tarand,taraph,tarapin,tarata,taratah,tarau,tarbet,tarboy,tarbush,tardily,tardive,tardle,tardy,tare,tarea,tarefa,tarente,tarfa,targe,targer,target,tarhood,tari,tarie,tariff,tarin,tariric,tarish,tarkhan,tarlike,tarmac,tarman,tarn,tarnal,tarnish,taro,taroc,tarocco,tarok,tarot,tarp,tarpan,tarpon,tarpot,tarpum,tarr,tarrack,tarras,tarrass,tarred,tarrer,tarri,tarrie,tarrier,tarrify,tarrily,tarrish,tarrock,tarrow,tarry,tars,tarsal,tarsale,tarse,tarsi,tarsia,tarsier,tarsome,tarsus,tart,tartago,tartan,tartana,tartane,tartar,tarten,tartish,tartle,tartlet,tartly,tartro,tartryl,tarve,tarweed,tarwood,taryard,tasajo,tascal,tasco,tash,tashie,tashlik,tashrif,task,taskage,tasker,taskit,taslet,tass,tassago,tassah,tassal,tassard,tasse,tassel,tassely,tasser,tasset,tassie,tassoo,taste,tasted,tasten,taster,tastily,tasting,tasty,tasu,tat,tataupa,tatbeb,tatchy,tate,tater,tath,tatie,tatinek,tatler,tatou,tatouay,tatsman,tatta,tatter,tattery,tatther,tattied,tatting,tattle,tattler,tattoo,tattva,tatty,tatu,tau,taught,taula,taum,taun,taunt,taunter,taupe,taupo,taupou,taur,taurean,taurian,tauric,taurine,taurite,tauryl,taut,tautaug,tauted,tauten,tautit,tautly,tautog,tav,tave,tavell,taver,tavern,tavers,tavert,tavola,taw,tawa,tawdry,tawer,tawery,tawie,tawite,tawkee,tawkin,tawn,tawney,tawnily,tawnle,tawny,tawpi,tawpie,taws,tawse,tawtie,tax,taxable,taxably,taxator,taxed,taxeme,taxemic,taxer,taxi,taxibus,taxicab,taximan,taxine,taxing,taxis,taxite,taxitic,taxless,taxman,taxon,taxor,taxpaid,taxwax,taxy,tay,tayer,tayir,tayra,taysaam,tazia,tch,tchai,tcharik,tchast,tche,tchick,tchu,tck,te,tea,teabox,teaboy,teacake,teacart,teach,teache,teacher,teachy,teacup,tead,teadish,teaer,teaey,teagle,teaish,teaism,teak,teal,tealery,tealess,team,teaman,teameo,teamer,teaming,teamman,tean,teanal,teap,teapot,teapoy,tear,tearage,tearcat,tearer,tearful,tearing,tearlet,tearoom,tearpit,teart,teary,tease,teasel,teaser,teashop,teasing,teasler,teasy,teat,teated,teathe,teather,teatime,teatman,teaty,teave,teaware,teaze,teazer,tebbet,tec,teca,tecali,tech,techily,technic,techous,techy,teck,tecomin,tecon,tectal,tectum,tecum,tecuma,ted,tedder,tedge,tedious,tedium,tee,teedle,teel,teem,teemer,teemful,teeming,teems,teen,teenage,teenet,teens,teensy,teenty,teeny,teer,teerer,teest,teet,teetan,teeter,teeth,teethe,teethy,teeting,teety,teevee,teff,teg,tegmen,tegmina,tegua,tegula,tegular,tegumen,tehseel,tehsil,teicher,teil,teind,teinder,teioid,tejon,teju,tekiah,tekke,tekken,tektite,tekya,telamon,telang,telar,telary,tele,teledu,telega,teleost,teleran,telergy,telesia,telesis,teleuto,televox,telfer,telford,teli,telial,telic,telical,telium,tell,tellach,tellee,teller,telling,tellt,telome,telomic,telpath,telpher,telson,telt,telurgy,telyn,temacha,teman,tembe,temblor,temenos,temiak,temin,temp,temper,tempera,tempery,tempest,tempi,templar,temple,templed,templet,tempo,tempora,tempre,tempt,tempter,temse,temser,ten,tenable,tenably,tenace,tenai,tenancy,tenant,tench,tend,tendant,tendent,tender,tending,tendon,tendour,tendril,tendron,tenebra,tenent,teneral,tenet,tenfold,teng,tengere,tengu,tenible,tenio,tenline,tenne,tenner,tennis,tennisy,tenon,tenoner,tenor,tenpin,tenrec,tense,tensely,tensify,tensile,tension,tensity,tensive,tenson,tensor,tent,tentage,tented,tenter,tentful,tenth,tenthly,tentigo,tention,tentlet,tenture,tenty,tenuate,tenues,tenuis,tenuity,tenuous,tenure,teopan,tepache,tepal,tepee,tepefy,tepid,tepidly,tepor,tequila,tera,terap,teras,terbia,terbic,terbium,tercel,tercer,tercet,tercia,tercine,tercio,terebic,terebra,teredo,terek,terete,tereu,terfez,tergal,tergant,tergite,tergum,term,terma,termage,termen,termer,termin,termine,termini,termino,termite,termly,termon,termor,tern,terna,ternal,ternar,ternary,ternate,terne,ternery,ternion,ternize,ternlet,terp,terpane,terpene,terpin,terpine,terrace,terrage,terrain,terral,terrane,terrar,terrene,terret,terrier,terrify,terrine,terron,terror,terry,terse,tersely,tersion,tertia,tertial,tertian,tertius,terton,tervee,terzina,terzo,tesack,teskere,tessara,tessel,tessera,test,testa,testacy,testar,testata,testate,teste,tested,testee,tester,testes,testify,testily,testing,testis,teston,testone,testoon,testor,testril,testudo,testy,tetanic,tetanus,tetany,tetard,tetch,tetchy,tete,tetel,teth,tether,tethery,tetra,tetract,tetrad,tetrane,tetrazo,tetric,tetrode,tetrole,tetrose,tetryl,tetter,tettery,tettix,teucrin,teufit,teuk,teviss,tew,tewel,tewer,tewit,tewly,tewsome,text,textile,textlet,textman,textual,texture,tez,tezkere,th,tha,thack,thacker,thakur,thalami,thaler,thalli,thallic,thallus,thameng,than,thana,thanage,thanan,thane,thank,thankee,thanker,thanks,thapes,thapsia,thar,tharf,tharm,that,thatch,thatchy,thatn,thats,thaught,thave,thaw,thawer,thawn,thawy,the,theah,theasum,theat,theater,theatry,theave,theb,theca,thecae,thecal,thecate,thecia,thecium,thecla,theclan,thecoid,thee,theek,theeker,theelin,theelol,theer,theet,theezan,theft,thegn,thegnly,theine,their,theirn,theirs,theism,theist,thelium,them,thema,themata,theme,themer,themis,themsel,then,thenal,thenar,thence,theody,theorbo,theorem,theoria,theoric,theorum,theory,theow,therapy,there,thereas,thereat,thereby,therein,thereof,thereon,theres,therese,thereto,thereup,theriac,therial,therm,thermae,thermal,thermic,thermit,thermo,thermos,theroid,these,theses,thesial,thesis,theta,thetch,thetic,thetics,thetin,thetine,theurgy,thew,thewed,thewy,they,theyll,theyre,thiamin,thiasi,thiasoi,thiasos,thiasus,thick,thicken,thicket,thickly,thief,thienyl,thieve,thiever,thig,thigger,thigh,thighed,thight,thilk,thill,thiller,thilly,thimber,thimble,thin,thine,thing,thingal,thingly,thingum,thingy,think,thinker,thinly,thinner,thio,thiol,thiolic,thionic,thionyl,thir,third,thirdly,thirl,thirst,thirsty,thirt,thirty,this,thishow,thisn,thissen,thistle,thistly,thither,thiuram,thivel,thixle,tho,thob,thocht,thof,thoft,thoke,thokish,thole,tholi,tholoi,tholos,tholus,thon,thonder,thone,thong,thonged,thongy,thoo,thooid,thoom,thoral,thorax,thore,thoria,thoric,thorina,thorite,thorium,thorn,thorned,thornen,thorny,thoro,thoron,thorp,thort,thorter,those,thou,though,thought,thouse,thow,thowel,thowt,thrack,thraep,thrail,thrain,thrall,thram,thrang,thrap,thrash,thrast,thrave,thraver,thraw,thrawn,thread,thready,threap,threat,three,threne,threnos,threose,thresh,threw,thrice,thrift,thrifty,thrill,thrilly,thrimp,thring,thrip,thripel,thrips,thrive,thriven,thriver,thro,throat,throaty,throb,throck,throddy,throe,thronal,throne,throng,throu,throuch,through,throve,throw,thrower,thrown,thrum,thrummy,thrush,thrushy,thrust,thrutch,thruv,thrymsa,thud,thug,thugdom,thuggee,thujene,thujin,thujone,thujyl,thulia,thulir,thulite,thulium,thulr,thuluth,thumb,thumbed,thumber,thumble,thumby,thump,thumper,thunder,thung,thunge,thuoc,thurify,thurl,thurm,thurmus,thurse,thurt,thus,thusly,thutter,thwack,thwaite,thwart,thwite,thy,thyine,thymate,thyme,thymele,thymene,thymic,thymine,thymol,thymoma,thymus,thymy,thymyl,thynnid,thyroid,thyrse,thyrsus,thysel,thyself,thysen,ti,tiang,tiao,tiar,tiara,tib,tibby,tibet,tibey,tibia,tibiad,tibiae,tibial,tibiale,tiburon,tic,tical,ticca,tice,ticer,tick,ticked,ticken,ticker,ticket,tickey,tickie,ticking,tickle,tickled,tickler,tickly,tickney,ticky,ticul,tid,tidal,tidally,tidbit,tiddle,tiddler,tiddley,tiddy,tide,tided,tideful,tidely,tideway,tidily,tiding,tidings,tidley,tidy,tidyism,tie,tieback,tied,tien,tiepin,tier,tierce,tierced,tiered,tierer,tietick,tiewig,tiff,tiffany,tiffie,tiffin,tiffish,tiffle,tiffy,tift,tifter,tig,tige,tigella,tigelle,tiger,tigerly,tigery,tigger,tight,tighten,tightly,tights,tiglic,tignum,tigress,tigrine,tigroid,tigtag,tikka,tikker,tiklin,tikor,tikur,til,tilaite,tilaka,tilbury,tilde,tile,tiled,tiler,tilery,tilikum,tiling,till,tillage,tiller,tilley,tillite,tillot,tilly,tilmus,tilpah,tilt,tilter,tilth,tilting,tiltup,tilty,tilyer,timable,timar,timarau,timawa,timbal,timbale,timbang,timbe,timber,timbern,timbery,timbo,timbre,timbrel,time,timed,timeful,timely,timeous,timer,times,timid,timidly,timing,timish,timist,timon,timor,timothy,timpani,timpano,tin,tinamou,tincal,tinchel,tinclad,tinct,tind,tindal,tindalo,tinder,tindery,tine,tinea,tineal,tinean,tined,tineid,tineine,tineman,tineoid,tinety,tinful,ting,tinge,tinged,tinger,tingi,tingid,tingle,tingler,tingly,tinguy,tinhorn,tinily,tining,tink,tinker,tinkle,tinkler,tinkly,tinlet,tinlike,tinman,tinned,tinner,tinnery,tinnet,tinnily,tinning,tinnock,tinny,tinosa,tinsel,tinsman,tint,tinta,tintage,tinted,tinter,tintie,tinting,tintist,tinty,tintype,tinwald,tinware,tinwork,tiny,tip,tipburn,tipcart,tipcat,tipe,tipful,tiphead,tipiti,tiple,tipless,tiplet,tipman,tipmost,tiponi,tipped,tippee,tipper,tippet,tipping,tipple,tippler,tipply,tippy,tipsify,tipsily,tipster,tipsy,tiptail,tiptilt,tiptoe,tiptop,tipulid,tipup,tirade,tiralee,tire,tired,tiredly,tiredom,tireman,tirer,tiriba,tiring,tirl,tirma,tirr,tirret,tirrlie,tirve,tirwit,tisane,tisar,tissual,tissue,tissued,tissuey,tiswin,tit,titania,titanic,titano,titanyl,titar,titbit,tite,titer,titfish,tithal,tithe,tither,tithing,titi,titian,titien,titlark,title,titled,titler,titlike,titling,titlist,titmal,titman,titoki,titrate,titre,titter,tittery,tittie,tittle,tittler,tittup,tittupy,titty,titular,titule,titulus,tiver,tivoli,tivy,tiza,tizeur,tizzy,tji,tjosite,tlaco,tmema,tmesis,to,toa,toad,toadeat,toader,toadery,toadess,toadier,toadish,toadlet,toady,toast,toastee,toaster,toasty,toat,toatoa,tobacco,tobe,tobine,tobira,toby,tobyman,toccata,tocher,tock,toco,tocome,tocsin,tocusso,tod,today,todder,toddick,toddite,toddle,toddler,toddy,tode,tody,toe,toecap,toed,toeless,toelike,toenail,toetoe,toff,toffee,toffing,toffish,toffy,toft,tofter,toftman,tofu,tog,toga,togaed,togata,togate,togated,toggel,toggery,toggle,toggler,togless,togs,togt,togue,toher,toheroa,toho,tohunga,toi,toil,toiled,toiler,toilet,toilful,toiling,toise,toit,toitish,toity,tokay,toke,token,tokened,toko,tokopat,tol,tolan,tolane,told,toldo,tole,tolite,toll,tollage,toller,tollery,tolling,tollman,tolly,tolsey,tolt,tolter,tolu,toluate,toluene,toluic,toluide,toluido,toluol,toluyl,tolyl,toman,tomato,tomb,tombac,tombal,tombe,tombic,tomblet,tombola,tombolo,tomboy,tomcat,tomcod,tome,tomeful,tomelet,toment,tomfool,tomial,tomin,tomish,tomium,tomjohn,tomkin,tommy,tomnoup,tomorn,tomosis,tompon,tomtate,tomtit,ton,tonal,tonally,tonant,tondino,tone,toned,toneme,toner,tonetic,tong,tonga,tonger,tongman,tongs,tongue,tongued,tonguer,tonguey,tonic,tonify,tonight,tonish,tonite,tonjon,tonk,tonkin,tonlet,tonnage,tonneau,tonner,tonnish,tonous,tonsil,tonsor,tonsure,tontine,tonus,tony,too,toodle,took,tooken,tool,toolbox,tooler,tooling,toolman,toom,toomly,toon,toop,toorie,toorock,tooroo,toosh,toot,tooter,tooth,toothed,toother,toothy,tootle,tootler,tootsy,toozle,toozoo,top,toparch,topass,topaz,topazy,topcap,topcast,topcoat,tope,topee,topeng,topepo,toper,topfull,toph,tophus,topi,topia,topiary,topic,topical,topknot,topless,toplike,topline,topman,topmast,topmost,topo,toponym,topped,topper,topping,topple,toppler,topply,toppy,toprail,toprope,tops,topsail,topside,topsl,topsman,topsoil,toptail,topwise,toque,tor,tora,torah,toral,toran,torc,torcel,torch,torcher,torchon,tore,tored,torero,torfel,torgoch,toric,torii,torma,tormen,torment,tormina,torn,tornade,tornado,tornal,tornese,torney,tornote,tornus,toro,toroid,torose,torous,torpedo,torpent,torpid,torpify,torpor,torque,torqued,torques,torrefy,torrent,torrid,torsade,torse,torsel,torsile,torsion,torsive,torsk,torso,tort,torta,torteau,tortile,tortive,tortula,torture,toru,torula,torulin,torulus,torus,torve,torvid,torvity,torvous,tory,tosh,tosher,toshery,toshly,toshy,tosily,toss,tosser,tossily,tossing,tosspot,tossup,tossy,tost,toston,tosy,tot,total,totally,totara,totchka,tote,totem,totemic,totemy,toter,tother,totient,toto,totora,totquot,totter,tottery,totting,tottle,totty,totuava,totum,toty,totyman,tou,toucan,touch,touched,toucher,touchy,toug,tough,toughen,toughly,tought,tould,toumnah,toup,toupee,toupeed,toupet,tour,touraco,tourer,touring,tourism,tourist,tourize,tourn,tournay,tournee,tourney,tourte,tousche,touse,touser,tousle,tously,tousy,tout,touter,tovar,tow,towable,towage,towai,towan,toward,towards,towboat,towcock,towd,towel,towelry,tower,towered,towery,towght,towhead,towhee,towing,towkay,towlike,towline,towmast,town,towned,townee,towner,townet,townful,townify,townish,townist,townlet,townly,townman,towny,towpath,towrope,towser,towy,tox,toxa,toxamin,toxcatl,toxemia,toxemic,toxic,toxical,toxicum,toxifer,toxin,toxity,toxoid,toxon,toxone,toxosis,toxotae,toy,toydom,toyer,toyful,toying,toyish,toyland,toyless,toylike,toyman,toyon,toyshop,toysome,toytown,toywort,toze,tozee,tozer,tra,trabal,trabant,trabea,trabeae,trabuch,trace,tracer,tracery,trachea,trachle,tracing,track,tracked,tracker,tract,tractor,tradal,trade,trader,trading,tradite,traduce,trady,traffic,trag,tragal,tragedy,tragi,tragic,tragus,trah,traheen,traik,trail,trailer,traily,train,trained,trainee,trainer,trainy,traipse,trait,traitor,traject,trajet,tralira,tram,trama,tramal,tramcar,trame,tramful,tramman,trammel,trammer,trammon,tramp,tramper,trample,trampot,tramway,trance,tranced,traneen,trank,tranka,tranker,trankum,tranky,transit,transom,trant,tranter,trap,trapes,trapeze,trapped,trapper,trappy,traps,trash,traship,trashy,trass,trasy,trauma,travail,travale,trave,travel,travis,travois,travoy,trawl,trawler,tray,trayful,treacle,treacly,tread,treader,treadle,treason,treat,treatee,treater,treator,treaty,treble,trebly,treddle,tree,treed,treeful,treeify,treelet,treeman,treen,treetop,treey,tref,trefle,trefoil,tregerg,tregohm,trehala,trek,trekker,trellis,tremble,trembly,tremie,tremolo,tremor,trenail,trench,trend,trendle,trental,trepan,trepang,trepid,tress,tressed,tresson,tressy,trest,trestle,tret,trevet,trews,trey,tri,triable,triace,triacid,triact,triad,triadic,triaene,triage,trial,triamid,triarch,triarii,triatic,triaxon,triazin,triazo,tribade,tribady,tribal,tribase,tribble,tribe,triblet,tribrac,tribual,tribuna,tribune,tribute,trica,tricae,tricar,trice,triceps,trichi,trichia,trichy,trick,tricker,trickle,trickly,tricksy,tricky,triclad,tricorn,tricot,trident,triduan,triduum,tried,triedly,triene,triens,trier,trifa,trifid,trifle,trifler,triflet,trifoil,trifold,trifoly,triform,trig,trigamy,trigger,triglid,triglot,trigly,trigon,trigone,trigram,trigyn,trikaya,trike,triker,triketo,trikir,trilabe,trilby,trilit,trilite,trilith,trill,trillet,trilli,trillo,trilobe,trilogy,trim,trimer,trimly,trimmer,trin,trinal,trinary,trindle,trine,trinely,tringle,trinity,trink,trinket,trinkle,trinode,trinol,trintle,trio,triobol,triode,triodia,triole,triolet,trionym,trior,triose,trip,tripal,tripara,tripart,tripe,tripel,tripery,triple,triplet,triplex,triplum,triply,tripod,tripody,tripoli,tripos,tripper,trippet,tripple,tripsis,tripy,trireme,trisalt,trisazo,trisect,triseme,trishna,trismic,trismus,trisome,trisomy,trist,trisul,trisula,tritaph,trite,tritely,tritish,tritium,tritolo,triton,tritone,tritor,trityl,triumph,triunal,triune,triurid,trivant,trivet,trivia,trivial,trivium,trivvet,trizoic,trizone,troat,troca,trocar,trochal,troche,trochee,trochi,trochid,trochus,trock,troco,trod,trodden,trode,troft,trog,trogger,troggin,trogon,trogs,trogue,troika,troke,troker,troll,troller,trolley,trollol,trollop,trolly,tromba,trombe,trommel,tromp,trompe,trompil,tromple,tron,trona,tronage,tronc,trone,troner,troolie,troop,trooper,troot,tropal,tropary,tropate,trope,tropeic,troper,trophal,trophi,trophic,trophy,tropic,tropine,tropism,tropist,tropoyl,tropyl,trot,troth,trotlet,trotol,trotter,trottie,trotty,trotyl,trouble,troubly,trough,troughy,trounce,troupe,trouper,trouse,trouser,trout,trouter,trouty,trove,trover,trow,trowel,trowing,trowman,trowth,troy,truancy,truant,trub,trubu,truce,trucial,truck,trucker,truckle,trucks,truddo,trudge,trudgen,trudger,true,truer,truff,truffle,trug,truish,truism,trull,truller,trullo,truly,trummel,trump,trumper,trumpet,trumph,trumpie,trun,truncal,trunch,trundle,trunk,trunked,trunnel,trush,trusion,truss,trussed,trusser,trust,trustee,trusten,truster,trustle,trusty,truth,truthy,truvat,try,trygon,trying,tryma,tryout,tryp,trypa,trypan,trypsin,tryptic,trysail,tryst,tryster,tryt,tsadik,tsamba,tsantsa,tsar,tsardom,tsarina,tsatlee,tsere,tsetse,tsia,tsine,tst,tsuba,tsubo,tsun,tsunami,tsungtu,tu,tua,tuan,tuarn,tuart,tuatara,tuatera,tuath,tub,tuba,tubae,tubage,tubal,tubar,tubate,tubba,tubbal,tubbeck,tubber,tubbie,tubbing,tubbish,tubboe,tubby,tube,tubeful,tubelet,tubeman,tuber,tuberin,tubfish,tubful,tubicen,tubifer,tubig,tubik,tubing,tublet,tublike,tubman,tubular,tubule,tubulet,tubuli,tubulus,tuchit,tuchun,tuck,tucker,tucket,tucking,tuckner,tucktoo,tucky,tucum,tucuma,tucuman,tudel,tue,tueiron,tufa,tufan,tuff,tuffet,tuffing,tuft,tufted,tufter,tuftily,tufting,tuftlet,tufty,tug,tugboat,tugger,tuggery,tugging,tughra,tugless,tuglike,tugman,tugrik,tugui,tui,tuik,tuille,tuilyie,tuism,tuition,tuitive,tuke,tukra,tula,tulare,tulasi,tulchan,tulchin,tule,tuliac,tulip,tulipy,tulisan,tulle,tulsi,tulwar,tum,tumasha,tumbak,tumble,tumbled,tumbler,tumbly,tumbrel,tume,tumefy,tumid,tumidly,tummals,tummel,tummer,tummock,tummy,tumor,tumored,tump,tumtum,tumular,tumuli,tumult,tumulus,tun,tuna,tunable,tunably,tunca,tund,tunder,tundish,tundra,tundun,tune,tuned,tuneful,tuner,tunful,tung,tungate,tungo,tunhoof,tunic,tunicin,tunicle,tuning,tunish,tunist,tunk,tunket,tunlike,tunmoot,tunna,tunnel,tunner,tunnery,tunnor,tunny,tuno,tunu,tuny,tup,tupara,tupek,tupelo,tupik,tupman,tupuna,tuque,tur,turacin,turb,turban,turbary,turbeh,turbid,turbine,turbit,turbith,turbo,turbot,turco,turd,turdine,turdoid,tureen,turf,turfage,turfdom,turfed,turfen,turfing,turfite,turfman,turfy,turgent,turgid,turgite,turgoid,turgor,turgy,turio,turion,turjite,turk,turken,turkey,turkis,turkle,turm,turma,turment,turmit,turmoil,turn,turncap,turndun,turned,turnel,turner,turnery,turney,turning,turnip,turnipy,turnix,turnkey,turnoff,turnout,turnpin,turnrow,turns,turnup,turp,turpeth,turpid,turps,turr,turret,turse,tursio,turtle,turtler,turtlet,turtosa,tururi,turus,turwar,tusche,tush,tushed,tusher,tushery,tusk,tuskar,tusked,tusker,tuskish,tusky,tussah,tussal,tusser,tussis,tussive,tussle,tussock,tussore,tussur,tut,tutania,tutball,tute,tutee,tutela,tutelar,tutenag,tuth,tutin,tutly,tutman,tutor,tutorer,tutorly,tutory,tutoyer,tutress,tutrice,tutrix,tuts,tutsan,tutster,tutti,tutty,tutu,tutulus,tutwork,tuwi,tux,tuxedo,tuyere,tuza,tuzzle,twa,twaddle,twaddly,twaddy,twae,twagger,twain,twaite,twal,twale,twalt,twang,twanger,twangle,twangy,twank,twanker,twankle,twanky,twant,twarly,twas,twasome,twat,twattle,tway,twazzy,tweag,tweak,tweaker,tweaky,twee,tweed,tweeded,tweedle,tweedy,tweeg,tweel,tween,tweeny,tweesh,tweesht,tweest,tweet,tweeter,tweeze,tweezer,tweil,twelfth,twelve,twenty,twere,twerp,twibil,twice,twicer,twicet,twick,twiddle,twiddly,twifoil,twifold,twig,twigful,twigged,twiggen,twigger,twiggy,twiglet,twilit,twill,twilled,twiller,twilly,twilt,twin,twindle,twine,twiner,twinge,twingle,twinism,twink,twinkle,twinkly,twinly,twinned,twinner,twinter,twiny,twire,twirk,twirl,twirler,twirly,twiscar,twisel,twist,twisted,twister,twistle,twisty,twit,twitch,twitchy,twite,twitten,twitter,twitty,twixt,twizzle,two,twofold,twoling,twoness,twosome,tychism,tychite,tycoon,tyddyn,tydie,tye,tyee,tyg,tying,tyke,tyken,tykhana,tyking,tylarus,tylion,tyloma,tylopod,tylose,tylosis,tylote,tylotic,tylotus,tylus,tymp,tympan,tympana,tympani,tympany,tynd,typal,type,typer,typeset,typhia,typhic,typhlon,typhoid,typhoon,typhose,typhous,typhus,typic,typica,typical,typicon,typicum,typify,typist,typo,typobar,typonym,typp,typy,tyranny,tyrant,tyre,tyro,tyroma,tyrone,tyronic,tyrosyl,tyste,tyt,tzolkin,tzontle,u,uang,uayeb,uberant,uberous,uberty,ubi,ubiety,ubiquit,ubussu,uckia,udal,udaler,udaller,udalman,udasi,udder,uddered,udell,udo,ug,ugh,uglify,uglily,ugly,ugsome,uhlan,uhllo,uhtsong,uily,uinal,uintjie,uitspan,uji,ukase,uke,ukiyoye,ukulele,ula,ulcer,ulcered,ulcery,ule,ulema,uletic,ulex,ulexine,ulexite,ulitis,ull,ulla,ullage,ullaged,uller,ulling,ulluco,ulmic,ulmin,ulminic,ulmo,ulmous,ulna,ulnad,ulnae,ulnar,ulnare,ulnaria,uloid,uloncus,ulster,ultima,ultimo,ultimum,ultra,ulu,ulua,uluhi,ululant,ululate,ululu,um,umbel,umbeled,umbella,umber,umbilic,umble,umbo,umbonal,umbone,umbones,umbonic,umbra,umbrae,umbrage,umbral,umbrel,umbril,umbrine,umbrose,umbrous,ume,umiak,umiri,umlaut,ump,umph,umpire,umpirer,umpteen,umpty,umu,un,unable,unably,unact,unacted,unacute,unadapt,unadd,unadded,unadopt,unadorn,unadult,unafire,unaflow,unaged,unagile,unaging,unaided,unaimed,unaired,unakin,unakite,unal,unalarm,unalert,unalike,unalist,unalive,unallow,unalone,unaloud,unamend,unamiss,unamo,unample,unamply,unangry,unannex,unapart,unapt,unaptly,unarch,unark,unarm,unarmed,unarray,unarted,unary,unasked,unau,unavian,unawake,unaware,unaway,unawed,unawful,unawned,unaxled,unbag,unbain,unbait,unbaked,unbale,unbank,unbar,unbarb,unbare,unbark,unbase,unbased,unbaste,unbated,unbay,unbe,unbear,unbeard,unbeast,unbed,unbefit,unbeget,unbegot,unbegun,unbeing,unbell,unbelt,unbench,unbend,unbent,unberth,unbeset,unbesot,unbet,unbias,unbid,unbind,unbit,unbitt,unblade,unbled,unblent,unbless,unblest,unblind,unbliss,unblock,unbloom,unblown,unblued,unblush,unboat,unbody,unbog,unboggy,unbokel,unbold,unbolt,unbone,unboned,unbonny,unboot,unbored,unborn,unborne,unbosom,unbound,unbow,unbowed,unbowel,unbox,unboxed,unboy,unbrace,unbraid,unbran,unbrand,unbrave,unbraze,unbred,unbrent,unbrick,unbrief,unbroad,unbroke,unbrown,unbrute,unbud,unbuild,unbuilt,unbulky,unbung,unburly,unburn,unburnt,unburst,unbury,unbush,unbusk,unbusy,unbuxom,unca,uncage,uncaged,uncake,uncalk,uncall,uncalm,uncaned,uncanny,uncap,uncart,uncase,uncased,uncask,uncast,uncaste,uncate,uncave,unceded,unchain,unchair,uncharm,unchary,uncheat,uncheck,unchid,unchild,unchurn,unci,uncia,uncial,uncinal,uncinch,uncinct,uncini,uncinus,uncite,uncited,uncity,uncivic,uncivil,unclad,unclamp,unclasp,unclay,uncle,unclead,unclean,unclear,uncleft,unclew,unclick,unclify,unclimb,uncling,unclip,uncloak,unclog,unclose,uncloud,unclout,unclub,unco,uncoach,uncoat,uncock,uncoded,uncoif,uncoil,uncoin,uncoked,uncolt,uncoly,uncome,uncomfy,uncomic,uncoop,uncope,uncord,uncore,uncored,uncork,uncost,uncouch,uncous,uncouth,uncover,uncowed,uncowl,uncoy,uncram,uncramp,uncream,uncrest,uncrib,uncried,uncrime,uncrisp,uncrook,uncropt,uncross,uncrown,uncrude,uncruel,unction,uncubic,uncular,uncurb,uncurd,uncured,uncurl,uncurse,uncurst,uncus,uncut,uncuth,undaily,undam,undamn,undared,undark,undate,undated,undaub,undazed,unde,undead,undeaf,undealt,undean,undear,undeck,undecyl,undeep,undeft,undeify,undelve,unden,under,underdo,underer,undergo,underly,undern,undevil,undewed,undewy,undid,undies,undig,undight,undiked,undim,undine,undined,undirk,undo,undock,undoer,undog,undoing,undomed,undon,undone,undoped,undose,undosed,undowny,undrab,undrag,undrape,undraw,undrawn,undress,undried,undrunk,undry,undub,unducal,undue,undug,unduke,undular,undull,unduly,unduped,undust,unduty,undwelt,undy,undye,undyed,undying,uneager,unearly,unearth,unease,uneasy,uneaten,uneath,unebbed,unedge,unedged,unelect,unempt,unempty,unended,unepic,unequal,unerect,unethic,uneven,unevil,unexact,uneye,uneyed,unface,unfaced,unfact,unfaded,unfain,unfaint,unfair,unfaith,unfaked,unfalse,unfamed,unfancy,unfar,unfast,unfeary,unfed,unfeed,unfele,unfelon,unfelt,unfence,unfeted,unfeued,unfew,unfiber,unfiend,unfiery,unfight,unfile,unfiled,unfill,unfilm,unfine,unfined,unfired,unfirm,unfit,unfitly,unfitty,unfix,unfixed,unflag,unflaky,unflank,unflat,unflead,unflesh,unflock,unfloor,unflown,unfluid,unflush,unfoggy,unfold,unfond,unfool,unfork,unform,unfoul,unfound,unfoxy,unfrail,unframe,unfrank,unfree,unfreed,unfret,unfried,unfrill,unfrizz,unfrock,unfrost,unfroze,unfull,unfully,unfumed,unfunny,unfur,unfurl,unfused,unfussy,ungag,ungaged,ungain,ungaite,ungaro,ungaudy,ungear,ungelt,unget,ungiant,ungiddy,ungild,ungill,ungilt,ungird,ungirt,ungirth,ungive,ungiven,ungka,unglad,unglaze,unglee,unglobe,ungloom,unglory,ungloss,unglove,unglue,unglued,ungnaw,ungnawn,ungod,ungodly,ungold,ungone,ungood,ungored,ungorge,ungot,ungouty,ungown,ungrace,ungraft,ungrain,ungrand,ungrasp,ungrave,ungreat,ungreen,ungrip,ungripe,ungross,ungrow,ungrown,ungruff,ungual,unguard,ungueal,unguent,ungues,unguis,ungula,ungulae,ungular,unguled,ungull,ungulp,ungum,unguyed,ungyve,ungyved,unhabit,unhad,unhaft,unhair,unhairy,unhand,unhandy,unhang,unhap,unhappy,unhard,unhardy,unharsh,unhasp,unhaste,unhasty,unhat,unhate,unhated,unhaunt,unhave,unhayed,unhazed,unhead,unheady,unheal,unheard,unheart,unheavy,unhedge,unheed,unheedy,unheld,unhele,unheler,unhelm,unherd,unhero,unhewed,unhewn,unhex,unhid,unhide,unhigh,unhinge,unhired,unhit,unhitch,unhive,unhoard,unhoary,unhoed,unhoist,unhold,unholy,unhome,unhoned,unhood,unhook,unhoop,unhoped,unhorny,unhorse,unhose,unhosed,unhot,unhouse,unhull,unhuman,unhumid,unhung,unhurt,unhusk,uniat,uniate,uniaxal,unible,unice,uniced,unicell,unicism,unicist,unicity,unicorn,unicum,unideal,unidle,unidly,unie,uniface,unific,unified,unifier,uniflow,uniform,unify,unilobe,unimped,uninked,uninn,unio,unioid,union,unioned,unionic,unionid,unioval,unipara,uniped,unipod,unique,unireme,unisoil,unison,unit,unitage,unital,unitary,unite,united,uniter,uniting,unition,unitism,unitive,unitize,unitude,unity,univied,unjaded,unjam,unjewel,unjoin,unjoint,unjolly,unjoyed,unjudge,unjuicy,unjust,unkamed,unked,unkempt,unken,unkept,unket,unkey,unkeyed,unkid,unkill,unkin,unkind,unking,unkink,unkirk,unkiss,unkist,unknave,unknew,unknit,unknot,unknow,unknown,unlace,unlaced,unlade,unladen,unlaid,unlame,unlamed,unland,unlap,unlarge,unlash,unlatch,unlath,unlaugh,unlaved,unlaw,unlawed,unlawly,unlay,unlead,unleaf,unleaky,unleal,unlean,unlearn,unleash,unleave,unled,unleft,unlegal,unlent,unless,unlet,unlevel,unlid,unlie,unlight,unlike,unliked,unliken,unlimb,unlime,unlimed,unlimp,unline,unlined,unlink,unlist,unlisty,unlit,unlive,unload,unloath,unlobed,unlocal,unlock,unlodge,unlofty,unlogic,unlook,unloop,unloose,unlord,unlost,unlousy,unlove,unloved,unlowly,unloyal,unlucid,unluck,unlucky,unlunar,unlured,unlust,unlusty,unlute,unluted,unlying,unmad,unmade,unmagic,unmaid,unmail,unmake,unmaker,unman,unmaned,unmanly,unmarch,unmarry,unmask,unmast,unmate,unmated,unmaze,unmeant,unmeek,unmeet,unmerge,unmerry,unmesh,unmet,unmeted,unmew,unmewed,unmind,unmined,unmired,unmiry,unmist,unmiter,unmix,unmixed,unmodel,unmoist,unmold,unmoldy,unmoor,unmoral,unmount,unmoved,unmowed,unmown,unmuddy,unmuted,unnail,unnaked,unname,unnamed,unneat,unneedy,unnegro,unnerve,unnest,unneth,unnethe,unnew,unnewly,unnice,unnigh,unnoble,unnobly,unnose,unnosed,unnoted,unnovel,unoared,unobese,unode,unoften,unogled,unoil,unoiled,unoily,unold,unoped,unopen,unorbed,unorder,unorn,unornly,unovert,unowed,unowing,unown,unowned,unpaced,unpack,unpagan,unpaged,unpaid,unpaint,unpale,unpaled,unpanel,unpapal,unpaper,unparch,unpared,unpark,unparty,unpass,unpaste,unpave,unpaved,unpawed,unpawn,unpeace,unpeel,unpeg,unpen,unpenal,unpent,unperch,unpetal,unpick,unpiece,unpiety,unpile,unpiled,unpin,unpious,unpiped,unplace,unplaid,unplain,unplait,unplan,unplank,unplant,unplat,unpleat,unplied,unplow,unplug,unplumb,unplume,unplump,unpoise,unpoled,unpope,unposed,unpot,unpower,unpray,unprim,unprime,unprint,unprop,unproud,unpure,unpurse,unput,unqueen,unquick,unquiet,unquit,unquote,unraced,unrack,unrainy,unrake,unraked,unram,unrank,unraped,unrare,unrash,unrated,unravel,unray,unrayed,unrazed,unread,unready,unreal,unreave,unrebel,unred,unreel,unreeve,unregal,unrein,unrent,unrest,unresty,unrhyme,unrich,unricht,unrid,unride,unrife,unrig,unright,unrigid,unrind,unring,unrip,unripe,unriped,unrisen,unrisky,unrived,unriven,unrivet,unroast,unrobe,unrobed,unroll,unroof,unroomy,unroost,unroot,unrope,unroped,unrosed,unroted,unrough,unround,unrove,unroved,unrow,unrowed,unroyal,unrule,unruled,unruly,unrun,unrung,unrural,unrust,unruth,unsack,unsad,unsafe,unsage,unsaid,unsaint,unsalt,unsane,unsappy,unsash,unsated,unsatin,unsaved,unsawed,unsawn,unsay,unscale,unscaly,unscarb,unscent,unscrew,unseal,unseam,unseat,unsee,unseen,unself,unsense,unsent,unset,unsew,unsewed,unsewn,unsex,unsexed,unshade,unshady,unshape,unsharp,unshawl,unsheaf,unshed,unsheet,unshell,unship,unshod,unshoe,unshoed,unshop,unshore,unshorn,unshort,unshot,unshown,unshowy,unshrew,unshut,unshy,unshyly,unsick,unsided,unsiege,unsight,unsilly,unsin,unsinew,unsing,unsized,unskin,unslack,unslain,unslate,unslave,unsleek,unslept,unsling,unslip,unslit,unslot,unslow,unslung,unsly,unsmart,unsmoky,unsmote,unsnaky,unsnap,unsnare,unsnarl,unsneck,unsnib,unsnow,unsober,unsoft,unsoggy,unsoil,unsolar,unsold,unsole,unsoled,unsolid,unsome,unson,unsonsy,unsooty,unsore,unsorry,unsort,unsoul,unsound,unsour,unsowed,unsown,unspan,unspar,unspeak,unsped,unspeed,unspell,unspelt,unspent,unspicy,unspied,unspike,unspin,unspit,unsplit,unspoil,unspot,unspun,unstack,unstagy,unstaid,unstain,unstar,unstate,unsteck,unsteel,unsteep,unstep,unstern,unstick,unstill,unsting,unstock,unstoic,unstone,unstony,unstop,unstore,unstout,unstow,unstrap,unstrip,unstuck,unstuff,unstung,unsty,unsued,unsuit,unsulky,unsun,unsung,unsunk,unsunny,unsure,unswear,unsweat,unsweet,unswell,unswept,unswing,unsworn,unswung,untack,untaint,untaken,untall,untame,untamed,untap,untaped,untar,untaste,untasty,untaut,untawed,untax,untaxed,unteach,unteam,unteem,untell,untense,untent,untenty,untewed,unthank,unthaw,unthick,unthink,unthorn,unthrid,unthrob,untidal,untidy,untie,untied,untight,until,untile,untiled,untill,untilt,untimed,untin,untinct,untine,untipt,untire,untired,unto,untold,untomb,untone,untoned,untooth,untop,untorn,untouch,untough,untown,untrace,untrain,untread,untreed,untress,untried,untrig,untrill,untrim,untripe,untrite,untrod,untruck,untrue,untruly,untruss,untrust,untruth,untuck,untumid,untune,untuned,unturf,unturn,untwine,untwirl,untwist,untying,untz,unugly,unultra,unupset,unurban,unurged,unurn,unurned,unuse,unused,unusual,unvain,unvalid,unvalue,unveil,unvenom,unvest,unvexed,unvicar,unvisor,unvital,unvivid,unvocal,unvoice,unvote,unvoted,unvowed,unwaded,unwaged,unwaked,unwall,unwan,unware,unwarm,unwarn,unwarp,unwary,unwater,unwaved,unwax,unwaxed,unwayed,unweal,unweary,unweave,unweb,unwed,unwedge,unweel,unweft,unweld,unwell,unwept,unwet,unwheel,unwhig,unwhip,unwhite,unwield,unwifed,unwig,unwild,unwill,unwily,unwind,unwindy,unwiped,unwire,unwired,unwise,unwish,unwist,unwitch,unwitty,unwive,unwived,unwoful,unwoman,unwomb,unwon,unwooed,unwoof,unwooly,unwordy,unwork,unworld,unwormy,unworn,unworth,unwound,unwoven,unwrap,unwrit,unwrite,unwrung,unyoke,unyoked,unyoung,unze,unzen,unzone,unzoned,up,upaisle,upalley,upalong,uparch,uparise,uparm,uparna,upas,upattic,upbank,upbar,upbay,upbear,upbeat,upbelch,upbelt,upbend,upbid,upbind,upblast,upblaze,upblow,upboil,upbolt,upboost,upborne,upbotch,upbound,upbrace,upbraid,upbray,upbreak,upbred,upbreed,upbrim,upbring,upbrook,upbrow,upbuild,upbuoy,upburn,upburst,upbuy,upcall,upcanal,upcarry,upcast,upcatch,upchoke,upchuck,upcity,upclimb,upclose,upcoast,upcock,upcoil,upcome,upcover,upcrane,upcrawl,upcreek,upcreep,upcrop,upcrowd,upcry,upcurl,upcurve,upcut,updart,update,updeck,updelve,updive,updo,updome,updraft,updrag,updraw,updrink,updry,upeat,upend,upeygan,upfeed,upfield,upfill,upflame,upflare,upflash,upflee,upfling,upfloat,upflood,upflow,upflung,upfly,upfold,upframe,upfurl,upgale,upgang,upgape,upgaze,upget,upgird,upgirt,upgive,upglean,upglide,upgo,upgorge,upgrade,upgrave,upgrow,upgully,upgush,uphand,uphang,uphasp,upheal,upheap,upheave,upheld,uphelm,uphelya,upher,uphill,uphoard,uphoist,uphold,uphung,uphurl,upjerk,upjet,upkeep,upknell,upknit,upla,uplaid,uplake,upland,uplane,uplay,uplead,upleap,upleg,uplick,uplift,uplight,uplimb,upline,uplock,uplong,uplook,uploom,uploop,uplying,upmast,upmix,upmost,upmount,upmove,upness,upo,upon,uppard,uppent,upper,upperch,upperer,uppers,uppile,upping,uppish,uppity,upplow,uppluck,uppoint,uppoise,uppop,uppour,uppowoc,upprick,upprop,uppuff,uppull,uppush,upraise,upreach,uprear,uprein,uprend,uprest,uprid,upridge,upright,uprip,uprisal,uprise,uprisen,upriser,uprist,uprive,upriver,uproad,uproar,uproom,uproot,uprose,uprouse,uproute,uprun,uprush,upscale,upscrew,upseal,upseek,upseize,upsend,upset,upsey,upshaft,upshear,upshoot,upshore,upshot,upshove,upshut,upside,upsides,upsilon,upsit,upslant,upslip,upslope,upsmite,upsoak,upsoar,upsolve,upspeak,upspear,upspeed,upspew,upspin,upspire,upspout,upspurt,upstaff,upstage,upstair,upstamp,upstand,upstare,upstart,upstate,upstay,upsteal,upsteam,upstem,upstep,upstick,upstir,upsuck,upsun,upsup,upsurge,upswarm,upsway,upsweep,upswell,upswing,uptable,uptake,uptaker,uptear,uptend,upthrow,uptide,uptie,uptill,uptilt,uptorn,uptoss,uptower,uptown,uptrace,uptrack,uptrail,uptrain,uptree,uptrend,uptrill,uptrunk,uptruss,uptube,uptuck,upturn,uptwist,upupoid,upvomit,upwaft,upwall,upward,upwards,upwarp,upwax,upway,upways,upwell,upwent,upwheel,upwhelm,upwhir,upwhirl,upwind,upwith,upwork,upwound,upwrap,upwring,upyard,upyoke,ur,ura,urachal,urachus,uracil,uraemic,uraeus,ural,urali,uraline,uralite,uralium,uramido,uramil,uramino,uran,uranate,uranic,uraniid,uranin,uranine,uranion,uranism,uranist,uranite,uranium,uranous,uranyl,urao,urare,urari,urase,urate,uratic,uratoma,urazine,urazole,urban,urbane,urbian,urbic,urbify,urceole,urceoli,urceus,urchin,urd,urde,urdee,ure,urea,ureal,urease,uredema,uredine,uredo,ureic,ureid,ureide,ureido,uremia,uremic,urent,uresis,uretal,ureter,urethan,urethra,uretic,urf,urge,urgence,urgency,urgent,urger,urging,urheen,urial,uric,urinal,urinant,urinary,urinate,urine,urinose,urinous,urite,urlar,urled,urling,urluch,urman,urn,urna,urnae,urnal,urnful,urning,urnism,urnlike,urocele,urocyst,urodele,urogram,urohyal,urolith,urology,uromere,uronic,uropod,urosis,urosome,urostea,urotoxy,uroxin,ursal,ursine,ursoid,ursolic,urson,ursone,ursuk,urtica,urtite,urubu,urucu,urucuri,uruisg,urunday,urus,urushi,urushic,urva,us,usable,usage,usager,usance,usar,usara,usaron,usation,use,used,usedly,usednt,usee,useful,usehold,useless,usent,user,ush,ushabti,usher,usherer,usings,usitate,usnea,usneoid,usnic,usninic,usque,usself,ussels,ust,uster,ustion,usual,usually,usuary,usucapt,usure,usurer,usuress,usurp,usurper,usurpor,usury,usward,uswards,ut,uta,utahite,utai,utas,utch,utchy,utees,utensil,uteri,uterine,uterus,utick,utile,utility,utilize,utinam,utmost,utopia,utopian,utopism,utopist,utricle,utricul,utrubi,utrum,utsuk,utter,utterer,utterly,utu,utum,uva,uval,uvalha,uvanite,uvate,uvea,uveal,uveitic,uveitis,uveous,uvic,uvid,uviol,uvitic,uvito,uvrou,uvula,uvulae,uvular,uvver,uxorial,uzan,uzara,uzarin,uzaron,v,vaagmer,vaalite,vacancy,vacant,vacate,vacatur,vaccary,vaccina,vaccine,vache,vacoa,vacona,vacoua,vacouf,vacual,vacuate,vacuefy,vacuist,vacuity,vacuole,vacuome,vacuous,vacuum,vacuuma,vade,vadium,vadose,vady,vag,vagal,vagary,vagas,vage,vagile,vagina,vaginal,vagitus,vagrant,vagrate,vagrom,vague,vaguely,vaguish,vaguity,vagus,vahine,vail,vain,vainful,vainly,vair,vairagi,vaire,vairy,vaivode,vajra,vakass,vakia,vakil,valance,vale,valence,valency,valent,valeral,valeric,valerin,valeryl,valet,valeta,valetry,valeur,valgoid,valgus,valhall,vali,valiant,valid,validly,valine,valise,vall,vallar,vallary,vallate,valley,vallis,vallum,valonia,valor,valse,valsoid,valuate,value,valued,valuer,valuta,valva,valval,valvate,valve,valved,valvula,valvule,valyl,vamfont,vamoose,vamp,vamped,vamper,vampire,van,vanadic,vanadyl,vane,vaned,vanfoss,vang,vangee,vangeli,vanglo,vanilla,vanille,vanish,vanity,vanman,vanmost,vanner,vannet,vansire,vantage,vanward,vapid,vapidly,vapor,vapored,vaporer,vapory,vara,varahan,varan,varanid,vardy,vare,varec,vareuse,vari,variant,variate,varical,varices,varied,varier,variety,variola,variole,various,varisse,varix,varlet,varment,varna,varnish,varsha,varsity,varus,varve,varved,vary,vas,vasa,vasal,vase,vaseful,vaselet,vassal,vast,vastate,vastily,vastity,vastly,vasty,vasu,vat,vatful,vatic,vatman,vatter,vau,vaudy,vault,vaulted,vaulter,vaulty,vaunt,vaunted,vaunter,vaunty,vauxite,vavasor,vaward,veal,vealer,vealy,vection,vectis,vector,vecture,vedana,vedette,vedika,vedro,veduis,vee,veen,veep,veer,veery,vegetal,vegete,vehicle,vei,veigle,veil,veiled,veiler,veiling,veily,vein,veinage,veinal,veined,veiner,veinery,veining,veinlet,veinous,veinule,veiny,vejoces,vela,velal,velamen,velar,velaric,velary,velate,velated,veldman,veldt,velic,veliger,vell,vellala,velleda,vellon,vellum,vellumy,velo,velours,velte,velum,velumen,velure,velvet,velvety,venada,venal,venally,venatic,venator,vencola,vend,vendace,vendee,vender,vending,vendor,vendue,veneer,venene,veneral,venerer,venery,venesia,venger,venial,venie,venin,venison,vennel,venner,venom,venomed,venomer,venomly,venomy,venosal,venose,venous,vent,ventage,ventail,venter,ventil,ventose,ventrad,ventral,ventric,venture,venue,venula,venular,venule,venust,vera,veranda,verb,verbal,verbate,verbena,verbene,verbid,verbify,verbile,verbose,verbous,verby,verchok,verd,verdant,verdea,verdet,verdict,verdin,verdoy,verdun,verdure,verek,verge,vergent,verger,vergery,vergi,verglas,veri,veridic,verify,verily,verine,verism,verist,verite,verity,vermeil,vermian,vermin,verminy,vermis,vermix,vernal,vernant,vernier,vernile,vernin,vernine,verre,verrel,verruca,verruga,versal,versant,versate,verse,versed,verser,verset,versify,versine,version,verso,versor,verst,versta,versual,versus,vert,vertex,vertigo,veruled,vervain,verve,vervel,vervet,very,vesania,vesanic,vesbite,vesicae,vesical,vesicle,veskit,vespal,vesper,vespers,vespery,vespid,vespine,vespoid,vessel,vest,vestal,vestee,vester,vestige,vesting,vestlet,vestral,vestry,vesture,vet,veta,vetanda,vetch,vetchy,veteran,vetiver,veto,vetoer,vetoism,vetoist,vetust,vetusty,veuve,vex,vexable,vexed,vexedly,vexer,vexful,vexil,vext,via,viable,viaduct,viagram,viajaca,vial,vialful,viand,viander,viatic,viatica,viator,vibex,vibgyor,vibix,vibrant,vibrate,vibrato,vibrion,vicar,vicarly,vice,viceroy,vicety,vicilin,vicinal,vicine,vicious,vicoite,victim,victor,victory,victrix,victual,vicuna,viddui,video,vidette,vidonia,vidry,viduage,vidual,viduate,viduine,viduity,viduous,vidya,vie,vielle,vier,viertel,view,viewer,viewly,viewy,vifda,viga,vigia,vigil,vignin,vigonia,vigor,vihara,vihuela,vijao,viking,vila,vilayet,vile,vilely,vilify,vility,vill,villa,village,villain,villar,villate,ville,villein,villoid,villose,villous,villus,vim,vimana,vimen,vimful,viminal,vina,vinage,vinal,vinasse,vinata,vincent,vindex,vine,vinea,vineal,vined,vinegar,vineity,vinelet,viner,vinery,vinic,vinny,vino,vinose,vinous,vint,vinta,vintage,vintem,vintner,vintry,viny,vinyl,vinylic,viol,viola,violal,violate,violent,violer,violet,violety,violin,violina,violine,violist,violon,violone,viper,viperan,viperid,vipery,viqueen,viragin,virago,viral,vire,virelay,viremia,viremic,virent,vireo,virga,virgal,virgate,virgin,virgula,virgule,virial,virid,virific,virify,virile,virl,virole,viroled,viron,virose,virosis,virous,virtu,virtual,virtue,virtued,viruela,virus,vis,visa,visage,visaged,visarga,viscera,viscid,viscin,viscose,viscous,viscus,vise,viseman,visible,visibly,visie,visile,vision,visit,visita,visite,visitee,visiter,visitor,visive,visne,vison,visor,vista,vistaed,vistal,visto,visual,vita,vital,vitalic,vitally,vitals,vitamer,vitamin,vitasti,vitiate,vitium,vitrage,vitrail,vitrain,vitraux,vitreal,vitrean,vitreum,vitric,vitrics,vitrify,vitrine,vitriol,vitrite,vitrous,vitta,vittate,vitular,viuva,viva,vivary,vivax,vive,vively,vivency,viver,vivers,vives,vivid,vividly,vivific,vivify,vixen,vixenly,vizard,vizier,vlei,voar,vocable,vocably,vocal,vocalic,vocally,vocate,vocular,vocule,vodka,voe,voet,voeten,vog,voglite,vogue,voguey,voguish,voice,voiced,voicer,voicing,void,voided,voidee,voider,voiding,voidly,voile,voivode,vol,volable,volage,volant,volar,volata,volatic,volcan,volcano,vole,volency,volent,volery,volet,volley,volost,volt,voltage,voltaic,voltize,voluble,volubly,volume,volumed,volupt,volupty,voluta,volute,voluted,volutin,volva,volvate,volvent,vomer,vomica,vomit,vomiter,vomito,vomitus,voodoo,vorago,vorant,vorhand,vorpal,vortex,vota,votable,votal,votally,votary,vote,voteen,voter,voting,votive,votress,vouch,vouchee,voucher,vouge,vow,vowed,vowel,vowely,vower,vowess,vowless,voyage,voyager,voyance,voyeur,vraic,vrbaite,vriddhi,vrother,vug,vuggy,vulgar,vulgare,vulgate,vulgus,vuln,vulnose,vulpic,vulpine,vulture,vulturn,vulva,vulval,vulvar,vulvate,vum,vying,vyingly,w,wa,waag,waapa,waar,wab,wabber,wabble,wabbly,wabby,wabe,wabeno,wabster,wacago,wace,wachna,wack,wacke,wacken,wacker,wacky,wad,waddent,wadder,wadding,waddler,waddly,waddy,wade,wader,wadi,wading,wadlike,wadmal,wadmeal,wadna,wadset,wae,waeg,waer,waesome,waesuck,wafer,waferer,wafery,waff,waffle,waffly,waft,waftage,wafter,wafture,wafty,wag,wagaun,wage,waged,wagedom,wager,wagerer,wages,waggel,wagger,waggery,waggie,waggish,waggle,waggly,waggy,waglike,wagling,wagon,wagoner,wagonry,wagsome,wagtail,wagwag,wagwit,wah,wahahe,wahine,wahoo,waiata,waif,waik,waikly,wail,wailer,wailful,waily,wain,wainage,wainer,wainful,wainman,waipiro,wairch,waird,wairepo,wairsh,waise,waist,waisted,waister,wait,waiter,waiting,waive,waiver,waivery,waivod,waiwode,wajang,waka,wakan,wake,wakeel,wakeful,waken,wakener,waker,wakes,wakf,wakif,wakiki,waking,wakiup,wakken,wakon,wakonda,waky,walahee,wale,waled,waler,wali,waling,walk,walker,walking,walkist,walkout,walkway,wall,wallaba,wallaby,wallah,walled,waller,wallet,walleye,wallful,walling,wallise,wallman,walloon,wallop,wallow,wally,walnut,walrus,walsh,walt,walter,walth,waltz,waltzer,wamara,wambais,wamble,wambly,wame,wamefou,wamel,wamp,wampee,wample,wampum,wampus,wamus,wan,wand,wander,wandery,wandle,wandoo,wandy,wane,waned,wang,wanga,wangala,wangan,wanghee,wangle,wangler,wanhope,wanhorn,wanigan,waning,wankle,wankly,wanle,wanly,wanner,wanness,wannish,wanny,wanrufe,want,wantage,wanter,wantful,wanting,wanton,wantwit,wanty,wany,wap,wapacut,wapatoo,wapiti,wapp,wapper,wapping,war,warabi,waratah,warble,warbled,warbler,warblet,warbly,warch,ward,wardage,warday,warded,warden,warder,warding,wardite,wardman,ware,warehou,wareman,warf,warfare,warful,warily,warish,warison,wark,warl,warless,warlike,warlock,warluck,warly,warm,warman,warmed,warmer,warmful,warming,warmish,warmly,warmth,warmus,warn,warnel,warner,warning,warnish,warnoth,warnt,warp,warpage,warped,warper,warping,warple,warran,warrand,warrant,warree,warren,warrer,warrin,warrior,warrok,warsaw,warse,warsel,warship,warsle,warsler,warst,wart,warted,wartern,warth,wartime,wartlet,warty,warve,warwolf,warworn,wary,was,wasabi,wase,wasel,wash,washday,washed,washen,washer,washery,washin,washing,washman,washoff,washout,washpot,washrag,washtub,washway,washy,wasnt,wasp,waspen,waspily,waspish,waspy,wassail,wassie,wast,wastage,waste,wasted,wastel,waster,wasting,wastrel,wasty,wat,watap,watch,watched,watcher,water,watered,waterer,waterie,watery,wath,watt,wattage,wattape,wattle,wattled,wattman,wauble,wauch,wauchle,waucht,wauf,waugh,waughy,wauken,waukit,waul,waumle,wauner,wauns,waup,waur,wauve,wavable,wavably,wave,waved,wavelet,waver,waverer,wavery,waveson,wavey,wavicle,wavily,waving,wavy,waw,wawa,wawah,wax,waxbill,waxbird,waxbush,waxen,waxer,waxily,waxing,waxlike,waxman,waxweed,waxwing,waxwork,waxy,way,wayaka,wayang,wayback,waybill,waybird,waybook,waybung,wayfare,waygang,waygate,waygone,waying,waylaid,waylay,wayless,wayman,waymark,waymate,waypost,ways,wayside,wayward,waywode,wayworn,waywort,we,weak,weaken,weakish,weakly,weaky,weal,weald,wealth,wealthy,weam,wean,weanel,weaner,weanyer,weapon,wear,wearer,wearied,wearier,wearily,wearing,wearish,weary,weasand,weasel,weaser,weason,weather,weave,weaved,weaver,weaving,weazen,weazeny,web,webbed,webber,webbing,webby,weber,webeye,webfoot,webless,weblike,webster,webwork,webworm,wecht,wed,wedana,wedbed,wedded,wedder,wedding,wede,wedge,wedged,wedger,wedging,wedgy,wedlock,wedset,wee,weeble,weed,weeda,weedage,weeded,weeder,weedery,weedful,weedish,weedow,weedy,week,weekday,weekend,weekly,weekwam,weel,weemen,ween,weeness,weening,weenong,weeny,weep,weeper,weepful,weeping,weeps,weepy,weesh,weeshy,weet,weever,weevil,weevily,weewow,weeze,weft,weftage,wefted,wefty,weigh,weighed,weigher,weighin,weight,weighty,weir,weird,weirdly,weiring,weism,wejack,weka,wekau,wekeen,weki,welcome,weld,welder,welding,weldor,welfare,welk,welkin,well,wellat,welling,wellish,wellman,welly,wels,welsh,welsher,welsium,welt,welted,welter,welting,wem,wemless,wen,wench,wencher,wend,wende,wene,wennish,wenny,went,wenzel,wept,wer,were,werefox,werent,werf,wergil,weri,wert,wervel,wese,weskit,west,weste,wester,western,westing,westy,wet,weta,wetback,wetbird,wetched,wetchet,wether,wetly,wetness,wetted,wetter,wetting,wettish,weve,wevet,wey,wha,whabby,whack,whacker,whacky,whale,whaler,whalery,whaling,whalish,whally,whalm,whalp,whaly,wham,whamble,whame,whammle,whamp,whampee,whample,whan,whand,whang,whangam,whangee,whank,whap,whappet,whapuka,whapuku,whar,whare,whareer,wharf,wharl,wharp,wharry,whart,wharve,whase,whasle,what,whata,whatkin,whatna,whatnot,whats,whatso,whatten,whau,whauk,whaup,whaur,whauve,wheal,whealy,wheam,wheat,wheaten,wheaty,whedder,whee,wheedle,wheel,wheeled,wheeler,wheely,wheem,wheen,wheenge,wheep,wheeple,wheer,wheesht,wheetle,wheeze,wheezer,wheezle,wheezy,wheft,whein,whekau,wheki,whelk,whelked,whelker,whelky,whelm,whelp,whelve,whemmel,when,whenas,whence,wheneer,whenso,where,whereas,whereat,whereby,whereer,wherein,whereof,whereon,whereso,whereto,whereup,wherret,wherrit,wherry,whet,whether,whetile,whetter,whew,whewer,whewl,whewt,whey,wheyey,wheyish,whiba,which,whick,whicken,whicker,whid,whidah,whidder,whiff,whiffer,whiffet,whiffle,whiffy,whift,whig,while,whileen,whilere,whiles,whilie,whilk,whill,whilly,whilock,whilom,whils,whilst,whilter,whim,whimble,whimmy,whimper,whimsey,whimsic,whin,whincow,whindle,whine,whiner,whing,whinge,whinger,whinnel,whinner,whinny,whiny,whip,whipcat,whipman,whippa,whipped,whipper,whippet,whippy,whipsaw,whipt,whir,whirken,whirl,whirled,whirler,whirley,whirly,whirret,whirrey,whirroo,whirry,whirtle,whish,whisk,whisker,whiskey,whisky,whisp,whisper,whissle,whist,whister,whistle,whistly,whit,white,whited,whitely,whiten,whites,whither,whiting,whitish,whitlow,whits,whittaw,whitten,whitter,whittle,whity,whiz,whizgig,whizzer,whizzle,who,whoa,whoever,whole,wholly,whom,whomble,whomso,whone,whoo,whoof,whoop,whoopee,whooper,whoops,whoosh,whop,whopper,whorage,whore,whorish,whorl,whorled,whorly,whort,whortle,whose,whosen,whud,whuff,whuffle,whulk,whulter,whummle,whun,whup,whush,whuskie,whussle,whute,whuther,whutter,whuz,why,whyever,whyfor,whyness,whyo,wi,wice,wicht,wichtje,wick,wicked,wicken,wicker,wicket,wicking,wickiup,wickup,wicky,wicopy,wid,widbin,widder,widdle,widdy,wide,widegab,widely,widen,widener,widgeon,widish,widow,widowed,widower,widowly,widowy,width,widu,wield,wielder,wieldy,wiener,wienie,wife,wifedom,wifeism,wifekin,wifelet,wifely,wifie,wifish,wifock,wig,wigan,wigdom,wigful,wigged,wiggen,wigger,wiggery,wigging,wiggish,wiggism,wiggle,wiggler,wiggly,wiggy,wight,wightly,wigless,wiglet,wiglike,wigtail,wigwag,wigwam,wiikite,wild,wildcat,wilded,wilder,wilding,wildish,wildly,wile,wileful,wilga,wilgers,wilily,wilk,wilkin,will,willawa,willed,willer,willet,willey,willful,willie,willier,willies,willing,willock,willow,willowy,willy,willyer,wilsome,wilt,wilter,wily,wim,wimble,wimbrel,wime,wimick,wimple,win,wince,wincer,wincey,winch,wincher,wincing,wind,windage,windbag,winddog,winded,winder,windigo,windily,winding,windle,windles,windlin,windock,windore,window,windowy,windrow,windup,windway,windy,wine,wined,winemay,winepot,winer,winery,winesop,winevat,winful,wing,wingcut,winged,winger,wingle,winglet,wingman,wingy,winish,wink,winkel,winker,winking,winkle,winklet,winly,winna,winnard,winnel,winner,winning,winnle,winnow,winrace,winrow,winsome,wint,winter,wintle,wintry,winy,winze,wipe,wiper,wippen,wips,wir,wirable,wirble,wird,wire,wirebar,wired,wireman,wirer,wireway,wirily,wiring,wirl,wirling,wirr,wirra,wirrah,wiry,wis,wisdom,wise,wisely,wiseman,wisen,wisent,wiser,wish,wisha,wished,wisher,wishful,wishing,wishly,wishmay,wisht,wisket,wisp,wispish,wispy,wiss,wisse,wissel,wist,wiste,wistful,wistit,wistiti,wit,witan,witch,witched,witchen,witchet,witchy,wite,witess,witful,with,withal,withe,withen,wither,withers,withery,within,without,withy,witjar,witless,witlet,witling,witloof,witness,witney,witship,wittal,witted,witter,wittily,witting,wittol,witty,witwall,wive,wiver,wivern,wiz,wizard,wizen,wizened,wizier,wizzen,wloka,wo,woad,woader,woadman,woady,woak,woald,woan,wob,wobble,wobbler,wobbly,wobster,wod,woddie,wode,wodge,wodgy,woe,woeful,woesome,woevine,woeworn,woffler,woft,wog,wogiet,woibe,wokas,woke,wokowi,wold,woldy,wolf,wolfdom,wolfen,wolfer,wolfish,wolfkin,wolfram,wollop,wolter,wolve,wolver,woman,womanly,womb,wombat,wombed,womble,womby,womera,won,wonder,wone,wonegan,wong,wonga,wongen,wongshy,wongsky,woning,wonky,wonna,wonned,wonner,wonning,wonnot,wont,wonted,wonting,woo,wooable,wood,woodbin,woodcut,wooded,wooden,woodeny,woodine,wooding,woodish,woodlet,woodly,woodman,woodrow,woodsy,woodwax,woody,wooer,woof,woofed,woofell,woofer,woofy,woohoo,wooing,wool,woold,woolder,wooled,woolen,wooler,woolert,woolly,woolman,woolsey,woom,woomer,woon,woons,woorali,woorari,woosh,wootz,woozle,woozy,wop,woppish,wops,worble,word,wordage,worded,worder,wordily,wording,wordish,wordle,wordman,wordy,wore,work,workbag,workbox,workday,worked,worker,working,workman,workout,workpan,works,worky,world,worlded,worldly,worldy,worm,wormed,wormer,wormil,worming,wormy,worn,wornil,worral,worried,worrier,worrit,worry,worse,worsen,worser,worset,worship,worst,worsted,wort,worth,worthy,wosbird,wot,wote,wots,wottest,wotteth,woubit,wouch,wouf,wough,would,wouldnt,wouldst,wound,wounded,wounder,wounds,woundy,wourali,wourari,wournil,wove,woven,wow,wowser,wowsery,wowt,woy,wrack,wracker,wraggle,wraith,wraithe,wraithy,wraitly,wramp,wran,wrang,wrangle,wranny,wrap,wrapped,wrapper,wrasse,wrastle,wrath,wrathy,wraw,wrawl,wrawler,wraxle,wreak,wreat,wreath,wreathe,wreathy,wreck,wrecker,wrecky,wren,wrench,wrenlet,wrest,wrester,wrestle,wretch,wricht,wrick,wride,wried,wrier,wriest,wrig,wriggle,wriggly,wright,wring,wringer,wrinkle,wrinkly,wrist,wristed,wrister,writ,write,writee,writer,writh,writhe,writhed,writhen,writher,writhy,writing,written,writter,wrive,wro,wrocht,wroke,wroken,wrong,wronged,wronger,wrongly,wrossle,wrote,wroth,wrothly,wrothy,wrought,wrox,wrung,wry,wrybill,wryly,wryneck,wryness,wrytail,wud,wuddie,wudge,wudu,wugg,wulk,wull,wullcat,wulliwa,wumble,wumman,wummel,wun,wungee,wunna,wunner,wunsome,wup,wur,wurley,wurmal,wurrus,wurset,wurzel,wush,wusp,wuss,wusser,wust,wut,wuther,wuzu,wuzzer,wuzzle,wuzzy,wy,wyde,wye,wyke,wyle,wymote,wyn,wynd,wyne,wynn,wype,wyson,wyss,wyve,wyver,x,xanthic,xanthin,xanthyl,xarque,xebec,xenia,xenial,xenian,xenium,xenon,xenyl,xerafin,xerarch,xerasia,xeric,xeriff,xerogel,xeroma,xeronic,xerosis,xerotes,xerotic,xi,xiphias,xiphiid,xiphoid,xoana,xoanon,xurel,xyla,xylan,xylate,xylem,xylene,xylenol,xylenyl,xyletic,xylic,xylidic,xylinid,xylite,xylitol,xylogen,xyloid,xylol,xyloma,xylon,xylonic,xylose,xyloyl,xylyl,xylylic,xyphoid,xyrid,xyst,xyster,xysti,xystos,xystum,xystus,y,ya,yaba,yabber,yabbi,yabble,yabby,yabu,yacal,yacca,yachan,yacht,yachter,yachty,yad,yade,yaff,yaffle,yagger,yagi,yagua,yaguaza,yah,yahan,yahoo,yair,yaird,yaje,yajeine,yak,yakalo,yakamik,yakin,yakka,yakman,yalb,yale,yali,yalla,yallaer,yallow,yam,yamamai,yamanai,yamen,yamilke,yammer,yamp,yampa,yamph,yamshik,yan,yander,yang,yangtao,yank,yanking,yanky,yaoort,yaourti,yap,yapa,yaply,yapness,yapok,yapp,yapped,yapper,yapping,yappish,yappy,yapster,yar,yarak,yaray,yarb,yard,yardage,yardang,yardarm,yarder,yardful,yarding,yardman,yare,yareta,yark,yarke,yarl,yarly,yarm,yarn,yarnen,yarner,yarpha,yarr,yarran,yarrow,yarth,yarthen,yarwhip,yas,yashiro,yashmak,yat,yate,yati,yatter,yaud,yauld,yaupon,yautia,yava,yaw,yawl,yawler,yawn,yawner,yawney,yawnful,yawnily,yawning,yawnups,yawny,yawp,yawper,yawroot,yaws,yawweed,yawy,yaxche,yaya,ycie,yday,ye,yea,yeah,yealing,yean,year,yeara,yeard,yearday,yearful,yearly,yearn,yearock,yearth,yeast,yeasty,yeat,yeather,yed,yede,yee,yeel,yees,yegg,yeggman,yeguita,yeld,yeldrin,yelk,yell,yeller,yelling,yelloch,yellow,yellows,yellowy,yelm,yelmer,yelp,yelper,yelt,yen,yender,yeni,yenite,yeo,yeoman,yep,yer,yerb,yerba,yercum,yerd,yere,yerga,yerk,yern,yerth,yes,yese,yeso,yesso,yest,yester,yestern,yesty,yet,yeta,yetapa,yeth,yether,yetlin,yeuk,yeuky,yeven,yew,yex,yez,yezzy,ygapo,yield,yielden,yielder,yieldy,yigh,yill,yilt,yin,yince,yinst,yip,yird,yirk,yirm,yirn,yirr,yirth,yis,yite,ym,yn,ynambu,yo,yobi,yocco,yochel,yock,yockel,yodel,yodeler,yodh,yoe,yoga,yogh,yoghurt,yogi,yogin,yogism,yogist,yogoite,yohimbe,yohimbi,yoi,yoick,yoicks,yojan,yojana,yok,yoke,yokeage,yokel,yokelry,yoker,yoking,yoky,yolden,yolk,yolked,yolky,yom,yomer,yon,yond,yonder,yonner,yonside,yont,yook,yoop,yor,yore,york,yorker,yot,yote,you,youd,youden,youdith,youff,youl,young,younger,youngly,youngun,younker,youp,your,yourn,yours,yoursel,youse,youth,youthen,youthy,youve,youward,youze,yoven,yow,yowie,yowl,yowler,yowley,yowt,yox,yoy,yperite,yr,yttria,yttric,yttrium,yuan,yuca,yucca,yuck,yuckel,yucker,yuckle,yucky,yuft,yugada,yuh,yukkel,yulan,yule,yummy,yungan,yurt,yurta,yus,yusdrum,yutu,yuzlik,yuzluk,z,za,zabeta,zabra,zabti,zabtie,zac,zacate,zacaton,zachun,zad,zadruga,zaffar,zaffer,zafree,zag,zagged,zain,zak,zakkeu,zaman,zamang,zamarra,zamarro,zambo,zamorin,zamouse,zander,zanella,zant,zante,zany,zanyish,zanyism,zanze,zapas,zaphara,zapota,zaptiah,zaptieh,zapupe,zaqqum,zar,zareba,zarf,zarnich,zarp,zat,zati,zattare,zax,zayat,zayin,zeal,zealful,zealot,zealous,zebra,zebraic,zebrass,zebrine,zebroid,zebrula,zebrule,zebu,zebub,zeburro,zechin,zed,zedoary,zee,zeed,zehner,zein,zeism,zeist,zel,zelator,zemeism,zemi,zemmi,zemni,zemstvo,zenana,zendik,zenick,zenith,zenu,zeolite,zephyr,zephyry,zequin,zer,zerda,zero,zeroize,zest,zestful,zesty,zeta,zetetic,zeugma,ziamet,ziara,ziarat,zibet,zibetum,ziega,zieger,ziffs,zig,ziganka,zigzag,zihar,zikurat,zillah,zimarra,zimb,zimbi,zimme,zimmi,zimmis,zimocca,zinc,zincate,zincic,zincide,zincify,zincing,zincite,zincize,zincke,zincky,zinco,zincous,zincum,zing,zingel,zink,zinsang,zip,ziphian,zipper,zipping,zippy,zira,zirai,zircite,zircon,zither,zizz,zloty,zo,zoa,zoacum,zoaria,zoarial,zoarium,zobo,zocco,zoccolo,zodiac,zoea,zoeal,zoeform,zoetic,zogan,zogo,zoic,zoid,zoisite,zoism,zoist,zoistic,zokor,zoll,zolle,zombi,zombie,zonal,zonally,zonar,zonary,zonate,zonated,zone,zoned,zonelet,zonic,zoning,zonite,zonitid,zonoid,zonular,zonule,zonulet,zonure,zonurid,zoo,zoocarp,zoocyst,zooecia,zoogamy,zoogene,zoogeny,zoogony,zooid,zooidal,zooks,zoolite,zoolith,zoology,zoom,zoon,zoonal,zoonic,zoonist,zoonite,zoonomy,zoons,zoonule,zoopery,zoopsia,zoosis,zootaxy,zooter,zootic,zootomy,zootype,zoozoo,zorgite,zoril,zorilla,zorillo,zorro,zoster,zounds,zowie,zudda,zuisin,zumatic,zunyite,zuza,zwitter,zyga,zygal,zygion,zygite,zygoma,zygon,zygose,zygosis,zygote,zygotic,zygous,zymase,zyme,zymic,zymin,zymite,zymogen,zymoid,zymome,zymomin,zymosis,zymotic,zymurgy,zythem,zythum" +words = """a +aa +aal +aalii +aam +aba +abac +abaca +abacate +abacay +abacist +aback +abactor +abacus +abaff +abaft +abaiser +abalone +abandon +abas +abase +abased +abaser +abash +abashed +abasia +abasic +abask +abate +abater +abatis +abaton +abator +abature +abave +abaxial +abaxile +abaze +abb +abbacy +abbas +abbasi +abbassi +abbess +abbey +abbot +abbotcy +abdal +abdat +abdest +abdomen +abduce +abduct +abeam +abear +abed +abeigh +abele +abelite +abet +abettal +abettor +abey +abeyant +abfarad +abhenry +abhor +abidal +abide +abider +abidi +abiding +abietic +abietin +abigail +abigeat +abigeus +abilao +ability +abilla +abilo +abiosis +abiotic +abir +abiston +abiuret +abject +abjoint +abjudge +abjure +abjurer +abkar +abkari +ablach +ablare +ablate +ablator +ablaut +ablaze +able +ableeze +abler +ablest +ablins +abloom +ablow +ablude +abluent +ablush +ably +abmho +abnet +aboard +abode +abody +abohm +aboil +abolish +abolla +aboma +abomine +aboon +aborad +aboral +abord +abort +aborted +abortin +abortus +abound +about +abouts +above +abox +abrade +abrader +abraid +abrasax +abrase +abrash +abraum +abraxas +abreact +abreast +abret +abrico +abridge +abrim +abrin +abroach +abroad +abrook +abrupt +abscess +abscind +abscise +absciss +abscond +absence +absent +absit +absmho +absohm +absolve +absorb +absorpt +abstain +absume +absurd +absvolt +abthain +abu +abucco +abulia +abulic +abuna +abura +aburban +aburst +aburton +abuse +abusee +abuser +abusion +abusive +abut +abuttal +abutter +abuzz +abvolt +abwab +aby +abysm +abysmal +abyss +abyssal +acaciin +acacin +academe +academy +acajou +acaleph +acana +acanth +acantha +acapnia +acapu +acara +acardia +acari +acarian +acarid +acarine +acaroid +acarol +acate +acatery +acaudal +acca +accede +acceder +accend +accent +accept +accerse +access +accidia +accidie +accinge +accite +acclaim +accloy +accoast +accoil +accolle +accompt +accord +accost +account +accoy +accrete +accrual +accrue +accruer +accurse +accusal +accuse +accused +accuser +ace +acedia +acedy +acephal +acerate +acerb +acerbic +acerdol +acerin +acerose +acerous +acerra +aceship +acetal +acetate +acetic +acetify +acetin +acetize +acetoin +acetol +acetone +acetose +acetous +acetum +acetyl +ach +achage +achar +achate +ache +achene +acher +achete +achieve +achigan +achill +achime +aching +achira +acholia +acholic +achor +achree +achroma +achtel +achy +achylia +achymia +acicula +acid +acider +acidic +acidify +acidite +acidity +acidize +acidly +acidoid +acidyl +acier +aciform +acinar +acinary +acinic +acinose +acinous +acinus +aciurgy +acker +ackey +ackman +acknow +acle +aclinal +aclinic +acloud +aclys +acmatic +acme +acmic +acmite +acne +acnemia +acnodal +acnode +acock +acocotl +acoin +acoine +acold +acology +acolous +acolyte +acoma +acomia +acomous +acone +aconic +aconin +aconine +aconite +acopic +acopon +acor +acorea +acoria +acorn +acorned +acosmic +acouasm +acouchi +acouchy +acoupa +acquest +acquire +acquist +acquit +acracy +acraein +acrasia +acratia +acrawl +acraze +acre +acreage +acreak +acream +acred +acreman +acrid +acridan +acridic +acridly +acridyl +acrinyl +acrisia +acritan +acrite +acritol +acroama +acrobat +acrogen +acron +acronyc +acronym +acronyx +acrook +acrose +across +acrotic +acryl +acrylic +acrylyl +act +acta +actable +actify +actin +actinal +actine +acting +actinic +actinon +action +active +activin +actless +acton +actor +actress +actu +actual +actuary +acture +acuate +acuity +aculea +aculeus +acumen +acushla +acutate +acute +acutely +acutish +acyclic +acyesis +acyetic +acyl +acylate +acyloin +acyloxy +acystia +ad +adactyl +adad +adage +adagial +adagio +adamant +adamas +adamine +adamite +adance +adangle +adapid +adapt +adapter +adaptor +adarme +adat +adati +adatom +adaunt +adaw +adawe +adawlut +adawn +adaxial +aday +adays +adazzle +adcraft +add +adda +addable +addax +added +addedly +addend +addenda +adder +addible +addict +addle +addlins +address +addrest +adduce +adducer +adduct +ade +adead +adeem +adeep +adeling +adelite +adenase +adenia +adenine +adenoid +adenoma +adenose +adenyl +adept +adermia +adermin +adet +adevism +adfix +adhaka +adharma +adhere +adherer +adhibit +adiate +adicity +adieu +adieux +adinole +adion +adipate +adipic +adipoid +adipoma +adipose +adipous +adipsia +adipsic +adipsy +adipyl +adit +adital +aditus +adjag +adject +adjiger +adjoin +adjoint +adjourn +adjudge +adjunct +adjure +adjurer +adjust +adlay +adless +adlet +adman +admi +admiral +admire +admired +admirer +admit +admix +adnate +adnex +adnexal +adnexed +adnoun +ado +adobe +adonin +adonite +adonize +adopt +adopted +adoptee +adopter +adoral +adorant +adore +adorer +adorn +adorner +adossed +adoulie +adown +adoxy +adoze +adpao +adpress +adread +adream +adreamt +adrenal +adrenin +adrift +adrip +adroit +adroop +adrop +adrowse +adrue +adry +adsbud +adsmith +adsorb +adtevac +adular +adulate +adult +adulter +adunc +adusk +adust +advance +advene +adverb +adverse +advert +advice +advisal +advise +advised +advisee +adviser +advisor +advowee +ady +adynamy +adyta +adyton +adytum +adz +adze +adzer +adzooks +ae +aecial +aecium +aedile +aedilic +aefald +aefaldy +aefauld +aegis +aenach +aenean +aeneous +aeolid +aeolina +aeoline +aeon +aeonial +aeonian +aeonist +aer +aerage +aerate +aerator +aerial +aeric +aerical +aerie +aeried +aerify +aero +aerobe +aerobic +aerobus +aerogel +aerogen +aerogun +aeronat +aeronef +aerose +aerosol +aerugo +aery +aes +aevia +aface +afaint +afar +afara +afear +afeard +afeared +afernan +afetal +affa +affable +affably +affair +affaite +affect +affeer +affeir +affiant +affinal +affine +affined +affirm +affix +affixal +affixer +afflict +afflux +afforce +afford +affray +affront +affuse +affy +afghani +afield +afire +aflame +aflare +aflat +aflaunt +aflight +afloat +aflow +aflower +aflush +afoam +afoot +afore +afoul +afraid +afreet +afresh +afret +afront +afrown +aft +aftaba +after +aftergo +aftmost +aftosa +aftward +aga +again +against +agal +agalaxy +agalite +agallop +agalma +agama +agamete +agami +agamian +agamic +agamid +agamoid +agamont +agamous +agamy +agape +agapeti +agar +agaric +agarita +agarwal +agasp +agate +agathin +agatine +agatize +agatoid +agaty +agavose +agaze +agazed +age +aged +agedly +agee +ageless +agelong +agen +agency +agenda +agendum +agent +agentry +ager +ageusia +ageusic +agger +aggrade +aggrate +aggress +aggroup +aggry +aggur +agha +aghanee +aghast +agile +agilely +agility +aging +agio +agist +agistor +agitant +agitate +agla +aglance +aglare +agleaf +agleam +aglet +agley +aglint +aglow +aglucon +agnail +agname +agnamed +agnate +agnatic +agnel +agnize +agnomen +agnosia +agnosis +agnosy +agnus +ago +agog +agoge +agogic +agogics +agoho +agoing +agon +agonal +agone +agonic +agonied +agonist +agonium +agonize +agony +agora +agouara +agouta +agouti +agpaite +agrah +agral +agre +agree +agreed +agreer +agrege +agria +agrin +agrise +agrito +agroan +agrom +agroof +agrope +aground +agrufe +agruif +agsam +agua +ague +aguey +aguish +agunah +agush +agust +agy +agynary +agynous +agyrate +agyria +ah +aha +ahaaina +ahaunch +ahead +aheap +ahem +ahey +ahimsa +ahind +ahint +ahmadi +aho +ahong +ahorse +ahoy +ahsan +ahu +ahuatle +ahull +ahum +ahungry +ahunt +ahura +ahush +ahwal +ahypnia +ai +aid +aidable +aidance +aidant +aide +aider +aidful +aidless +aiel +aiglet +ail +ailanto +aile +aileron +ailette +ailing +aillt +ailment +ailsyte +ailuro +ailweed +aim +aimara +aimer +aimful +aiming +aimless +ainaleh +ainhum +ainoi +ainsell +aint +aion +aionial +air +airable +airampo +airan +aircrew +airdock +airdrop +aire +airer +airfoil +airhead +airily +airing +airish +airless +airlift +airlike +airmail +airman +airmark +airpark +airport +airship +airsick +airt +airward +airway +airy +aisle +aisled +aisling +ait +aitch +aitesis +aition +aiwan +aizle +ajaja +ajangle +ajar +ajari +ajava +ajhar +ajivika +ajog +ajoint +ajowan +ak +aka +akala +akaroa +akasa +akazga +akcheh +ake +akeake +akebi +akee +akeki +akeley +akepiro +akerite +akey +akhoond +akhrot +akhyana +akia +akimbo +akin +akindle +akinete +akmudar +aknee +ako +akoasm +akoasma +akonge +akov +akpek +akra +aku +akule +akund +al +ala +alacha +alack +alada +alaihi +alaite +alala +alalite +alalus +alameda +alamo +alamoth +alan +aland +alangin +alani +alanine +alannah +alantic +alantin +alantol +alanyl +alar +alares +alarm +alarmed +alarum +alary +alas +alate +alated +alatern +alation +alb +alba +alban +albarco +albata +albe +albedo +albee +albeit +albetad +albify +albinal +albinic +albino +albite +albitic +albugo +album +albumen +albumin +alburn +albus +alcaide +alcalde +alcanna +alcazar +alchemy +alchera +alchimy +alchymy +alcine +alclad +alco +alcoate +alcogel +alcohol +alcosol +alcove +alcyon +aldane +aldazin +aldehol +alder +aldern +aldim +aldime +aldine +aldol +aldose +ale +aleak +alec +alecize +alecost +alecup +alee +alef +aleft +alegar +alehoof +alem +alemana +alembic +alemite +alemmal +alen +aleph +alephs +alepole +alepot +alerce +alerse +alert +alertly +alesan +aletap +alette +alevin +alewife +alexia +alexic +alexin +aleyard +alf +alfa +alfaje +alfalfa +alfaqui +alfet +alfiona +alfonso +alforja +alga +algae +algal +algalia +algate +algebra +algedo +algesia +algesic +algesis +algetic +algic +algid +algific +algin +algine +alginic +algist +algoid +algor +algosis +algous +algum +alhenna +alias +alibi +alible +alichel +alidade +alien +aliency +alienee +aliener +alienor +alif +aliform +alight +align +aligner +aliipoe +alike +alima +aliment +alimony +alin +aliofar +alipata +aliped +aliptes +aliptic +aliquot +alish +alisier +alismad +alismal +aliso +alison +alisp +alist +alit +alite +aliunde +alive +aliyah +alizari +aljoba +alk +alkali +alkalic +alkamin +alkane +alkanet +alkene +alkenna +alkenyl +alkide +alkine +alkool +alkoxy +alkoxyl +alky +alkyd +alkyl +alkylic +alkyne +all +allan +allay +allayer +allbone +allege +alleger +allegro +allele +allelic +allene +aller +allergy +alley +alleyed +allgood +allheal +allice +allied +allies +allness +allonym +alloquy +allose +allot +allotee +allover +allow +allower +alloxan +alloy +allseed +alltud +allude +allure +allurer +alluvia +allwork +ally +allyl +allylic +alma +almadia +almadie +almagra +almanac +alme +almemar +almique +almirah +almoign +almon +almond +almondy +almoner +almonry +almost +almous +alms +almsful +almsman +almuce +almud +almude +almug +almuten +aln +alnage +alnager +alnein +alnico +alnoite +alnuin +alo +alochia +alod +alodial +alodian +alodium +alody +aloe +aloed +aloesol +aloetic +aloft +alogia +alogism +alogy +aloid +aloin +aloma +alone +along +alongst +aloof +aloofly +aloose +alop +alopeke +alose +aloud +alow +alowe +alp +alpaca +alpeen +alpha +alphol +alphorn +alphos +alphyl +alpieu +alpine +alpist +alquier +alraun +already +alright +alroot +alruna +also +alsoon +alt +altaite +altar +altared +alter +alterer +altern +alterne +althea +althein +altho +althorn +altilik +altin +alto +altoun +altrose +altun +aludel +alula +alular +alulet +alum +alumic +alumina +alumine +alumish +alumite +alumium +alumna +alumnae +alumnal +alumni +alumnus +alunite +alupag +alure +aluta +alvar +alveary +alveloz +alveola +alveole +alveoli +alveus +alvine +alvite +alvus +alway +always +aly +alypin +alysson +am +ama +amaas +amadou +amaga +amah +amain +amakebe +amala +amalaka +amalgam +amaltas +amamau +amandin +amang +amani +amania +amanori +amanous +amapa +amar +amarin +amarine +amarity +amaroid +amass +amasser +amastia +amasty +amateur +amative +amatol +amatory +amaze +amazed +amazia +amazing +amba +ambage +ambalam +amban +ambar +ambaree +ambary +ambash +ambassy +ambatch +ambay +ambeer +amber +ambery +ambiens +ambient +ambier +ambit +ambital +ambitty +ambitus +amble +ambler +ambling +ambo +ambon +ambos +ambrain +ambrein +ambrite +ambroid +ambrose +ambry +ambsace +ambury +ambush +amchoor +ame +ameed +ameen +amelia +amellus +amelu +amelus +amen +amend +amende +amender +amends +amene +amenia +amenity +ament +amental +amentia +amentum +amerce +amercer +amerism +amesite +ametria +amgarn +amhar +amhran +ami +amiable +amiably +amianth +amic +amical +amice +amiced +amicron +amid +amidase +amidate +amide +amidic +amidid +amidide +amidin +amidine +amido +amidol +amidon +amidoxy +amidst +amil +amimia +amimide +amin +aminate +amine +amini +aminic +aminity +aminize +amino +aminoid +amir +amiray +amiss +amity +amixia +amla +amli +amlikar +amlong +amma +amman +ammelin +ammer +ammeter +ammine +ammo +ammonal +ammonia +ammonic +ammono +ammu +amnesia +amnesic +amnesty +amnia +amniac +amnic +amnion +amniote +amober +amobyr +amoeba +amoebae +amoeban +amoebic +amoebid +amok +amoke +amole +amomal +amomum +among +amongst +amor +amorado +amoraic +amoraim +amoral +amoret +amorism +amorist +amoroso +amorous +amorphy +amort +amotion +amotus +amount +amour +amove +ampalea +amper +ampere +ampery +amphid +amphide +amphora +amphore +ample +amplify +amply +ampoule +ampul +ampulla +amputee +ampyx +amra +amreeta +amrita +amsath +amsel +amt +amtman +amuck +amuguis +amula +amulet +amulla +amunam +amurca +amuse +amused +amusee +amuser +amusia +amusing +amusive +amutter +amuyon +amuyong +amuze +amvis +amy +amyelia +amyelic +amygdal +amyl +amylan +amylase +amylate +amylene +amylic +amylin +amylo +amyloid +amylom +amylon +amylose +amylum +amyous +amyrin +amyrol +amyroot +an +ana +anabata +anabo +anabong +anacara +anacard +anacid +anadem +anadrom +anaemia +anaemic +anagap +anagep +anagoge +anagogy +anagram +anagua +anahau +anal +analav +analgen +analgia +analgic +anally +analogy +analyse +analyst +analyze +anam +anama +anamite +anan +anana +ananas +ananda +ananym +anaphia +anapnea +anapsid +anaqua +anarch +anarchy +anareta +anarya +anatase +anatifa +anatine +anatomy +anatox +anatron +anaudia +anaxial +anaxon +anaxone +anay +anba +anbury +anchor +anchovy +ancient +ancile +ancilla +ancon +anconad +anconal +ancone +ancony +ancora +ancoral +and +anda +andante +andirin +andiron +andric +android +androl +andron +anear +aneath +anele +anemia +anemic +anemone +anemony +anend +anenst +anent +anepia +anergia +anergic +anergy +anerly +aneroid +anes +anesis +aneuria +aneuric +aneurin +anew +angaria +angary +angekok +angel +angelet +angelic +angelin +angelot +anger +angerly +angeyok +angico +angild +angili +angina +anginal +angioid +angioma +angle +angled +angler +angling +angloid +ango +angolar +angor +angrily +angrite +angry +angst +angster +anguid +anguine +anguis +anguish +angula +angular +anguria +anhang +anhima +anhinga +ani +anicut +anidian +aniente +anigh +anight +anights +anil +anilao +anilau +anile +anilic +anilid +anilide +aniline +anility +anilla +anima +animal +animate +anime +animi +animism +animist +animize +animous +animus +anion +anionic +anis +anisal +anisate +anise +aniseed +anisic +anisil +anisoin +anisole +anisoyl +anisum +anisyl +anither +anjan +ankee +anker +ankh +ankle +anklet +anklong +ankus +ankusha +anlace +anlaut +ann +anna +annal +annale +annals +annat +annates +annatto +anneal +annelid +annet +annex +annexa +annexal +annexer +annite +annona +annoy +annoyer +annual +annuary +annuent +annuity +annul +annular +annulet +annulus +anoa +anodal +anode +anodic +anodize +anodos +anodyne +anoesia +anoesis +anoetic +anoil +anoine +anoint +anole +anoli +anolian +anolyte +anomaly +anomite +anomy +anon +anonang +anonol +anonym +anonyma +anopia +anopsia +anorak +anorexy +anormal +anorth +anosmia +anosmic +another +anotia +anotta +anotto +anotus +anounou +anoxia +anoxic +ansa +ansar +ansate +ansu +answer +ant +anta +antacid +antal +antapex +antdom +ante +anteact +anteal +antefix +antenna +antes +antewar +anthela +anthem +anthema +anthemy +anther +anthill +anthine +anthoid +anthood +anthrax +anthrol +anthryl +anti +antiae +antiar +antic +antical +anticly +anticor +anticum +antifat +antigen +antigod +antihum +antiqua +antique +antired +antirun +antisun +antitax +antiwar +antiwit +antler +antlia +antling +antoeci +antonym +antra +antral +antre +antrin +antrum +antship +antu +antwise +anubing +anuloma +anuran +anuria +anuric +anurous +anury +anus +anusim +anvil +anxiety +anxious +any +anybody +anyhow +anyone +anyway +anyways +anywhen +anywhy +anywise +aogiri +aonach +aorist +aorta +aortal +aortic +aortism +aosmic +aoudad +apa +apace +apache +apadana +apagoge +apaid +apalit +apandry +apar +aparejo +apart +apasote +apatan +apathic +apathy +apatite +ape +apeak +apedom +apehood +apeiron +apelet +apelike +apeling +apepsia +apepsy +apeptic +aper +aperch +aperea +apert +apertly +apery +apetaly +apex +apexed +aphagia +aphakia +aphakic +aphasia +aphasic +aphemia +aphemic +aphesis +apheta +aphetic +aphid +aphides +aphidid +aphodal +aphodus +aphonia +aphonic +aphony +aphoria +aphotic +aphrite +aphtha +aphthic +aphylly +aphyric +apian +apiary +apiator +apicad +apical +apices +apicula +apiece +apieces +apii +apiin +apilary +apinch +aping +apinoid +apio +apioid +apiole +apiolin +apionol +apiose +apish +apishly +apism +apitong +apitpat +aplanat +aplasia +aplenty +aplite +aplitic +aplomb +aplome +apnea +apneal +apneic +apocarp +apocha +apocope +apod +apodal +apodan +apodema +apodeme +apodia +apodous +apogamy +apogeal +apogean +apogee +apogeic +apogeny +apohyal +apoise +apojove +apokrea +apolar +apology +aponia +aponic +apoop +apoplex +apopyle +aporia +aporose +aport +aposia +aposoro +apostil +apostle +apothem +apotome +apotype +apout +apozem +apozema +appall +apparel +appay +appeal +appear +appease +append +appet +appete +applaud +apple +applied +applier +applot +apply +appoint +apport +appose +apposer +apprend +apprise +apprize +approof +approve +appulse +apraxia +apraxic +apricot +apriori +apron +apropos +apse +apsidal +apsides +apsis +apt +apteral +apteran +aptly +aptness +aptote +aptotic +apulse +apyonin +apyrene +apyrexy +apyrous +aqua +aquabib +aquage +aquaria +aquatic +aquavit +aqueous +aquifer +aquiver +aquo +aquose +ar +ara +araba +araban +arabana +arabin +arabit +arable +araca +aracari +arachic +arachin +arad +arado +arain +arake +araliad +aralie +aralkyl +aramina +araneid +aranein +aranga +arango +arar +arara +ararao +arariba +araroba +arati +aration +aratory +arba +arbacin +arbalo +arbiter +arbor +arboral +arbored +arboret +arbute +arbutin +arbutus +arc +arca +arcade +arcana +arcanal +arcane +arcanum +arcate +arch +archae +archaic +arche +archeal +arched +archer +archery +arches +archeus +archfoe +archgod +archil +arching +archive +archly +archon +archont +archsee +archsin +archspy +archwag +archway +archy +arcing +arcked +arcking +arctian +arctic +arctiid +arctoid +arcual +arcuale +arcuate +arcula +ardeb +ardella +ardency +ardent +ardish +ardoise +ardor +ardri +ardu +arduous +are +area +areach +aread +areal +arear +areaway +arecain +ared +areek +areel +arefact +areito +arena +arenae +arend +areng +arenoid +arenose +arent +areola +areolar +areole +areolet +arete +argal +argala +argali +argans +argasid +argeers +argel +argenol +argent +arghan +arghel +arghool +argil +argo +argol +argolet +argon +argosy +argot +argotic +argue +arguer +argufy +argute +argyria +argyric +arhar +arhat +aria +aribine +aricine +arid +aridge +aridian +aridity +aridly +ariel +arienzo +arietta +aright +arigue +aril +ariled +arillus +ariose +arioso +ariot +aripple +arisard +arise +arisen +arist +arista +arite +arjun +ark +arkite +arkose +arkosic +arles +arm +armada +armbone +armed +armer +armet +armful +armhole +armhoop +armied +armiger +armil +armilla +arming +armless +armlet +armload +armoire +armor +armored +armorer +armory +armpit +armrack +armrest +arms +armscye +armure +army +arn +arna +arnee +arni +arnica +arnotta +arnotto +arnut +aroar +aroast +arock +aroeira +aroid +aroint +arolium +arolla +aroma +aroon +arose +around +arousal +arouse +arouser +arow +aroxyl +arpen +arpent +arrack +arrah +arraign +arrame +arrange +arrant +arras +arrased +arratel +arrau +array +arrayal +arrayer +arrear +arrect +arrent +arrest +arriage +arriba +arride +arridge +arrie +arriere +arrimby +arris +arrish +arrival +arrive +arriver +arroba +arrope +arrow +arrowed +arrowy +arroyo +arse +arsenal +arsenic +arseno +arsenyl +arses +arsheen +arshin +arshine +arsine +arsinic +arsino +arsis +arsle +arsoite +arson +arsonic +arsono +arsyl +art +artaba +artabe +artal +artar +artel +arterin +artery +artful +artha +arthel +arthral +artiad +article +artisan +artist +artiste +artless +artlet +artlike +artware +arty +aru +arui +aruke +arumin +arupa +arusa +arusha +arustle +arval +arvel +arx +ary +aryl +arylate +arzan +arzun +as +asaddle +asak +asale +asana +asaphia +asaphid +asaprol +asarite +asaron +asarone +asbest +asbolin +ascan +ascare +ascarid +ascaron +ascend +ascent +ascetic +ascham +asci +ascian +ascii +ascites +ascitic +asclent +ascoma +ascon +ascot +ascribe +ascript +ascry +ascula +ascus +asdic +ase +asearch +aseethe +aseity +asem +asemia +asepsis +aseptic +aseptol +asexual +ash +ashake +ashame +ashamed +ashamnu +ashcake +ashen +asherah +ashery +ashes +ashet +ashily +ashine +ashiver +ashkoko +ashlar +ashless +ashling +ashman +ashore +ashpan +ashpit +ashraf +ashrafi +ashur +ashweed +ashwort +ashy +asialia +aside +asideu +asiento +asilid +asimen +asimmer +asinego +asinine +asitia +ask +askable +askance +askant +askar +askari +asker +askew +askip +asklent +askos +aslant +aslaver +asleep +aslop +aslope +asmack +asmalte +asmear +asmile +asmoke +asnort +asoak +asocial +asok +asoka +asonant +asonia +asop +asor +asouth +asp +aspace +aspect +aspen +asper +asperge +asperse +asphalt +asphyxy +aspic +aspire +aspirer +aspirin +aspish +asport +aspout +asprawl +aspread +aspring +asprout +asquare +asquat +asqueal +asquint +asquirm +ass +assacu +assagai +assai +assail +assapan +assart +assary +assate +assault +assaut +assay +assayer +assbaa +asse +assegai +asself +assent +assert +assess +asset +assets +assever +asshead +assi +assify +assign +assilag +assis +assise +assish +assist +assize +assizer +assizes +asslike +assman +assoil +assort +assuade +assuage +assume +assumed +assumer +assure +assured +assurer +assurge +ast +asta +astalk +astare +astart +astasia +astatic +astay +asteam +asteep +asteer +asteism +astelic +astely +aster +asteria +asterin +astern +astheny +asthma +asthore +astilbe +astint +astir +astite +astomia +astony +astoop +astor +astound +astrain +astral +astrand +astray +astream +astrer +astrict +astride +astrier +astrild +astroid +astrut +astute +astylar +asudden +asunder +aswail +aswarm +asway +asweat +aswell +aswim +aswing +aswirl +aswoon +asyla +asylum +at +atabal +atabeg +atabek +atactic +atafter +ataman +atangle +atap +ataraxy +ataunt +atavi +atavic +atavism +atavist +atavus +ataxia +ataxic +ataxite +ataxy +atazir +atbash +ate +atebrin +atechny +ateeter +atef +atelets +atelier +atelo +ates +ateuchi +athanor +athar +atheism +atheist +atheize +athelia +athenee +athenor +atheous +athing +athirst +athlete +athodyd +athort +athrill +athrive +athrob +athrong +athwart +athymia +athymic +athymy +athyria +athyrid +atilt +atimon +atinga +atingle +atinkle +atip +atis +atlas +atlatl +atle +atlee +atloid +atma +atman +atmid +atmo +atmos +atocha +atocia +atokal +atoke +atokous +atoll +atom +atomerg +atomic +atomics +atomism +atomist +atomity +atomize +atomy +atonal +atone +atoner +atonia +atonic +atony +atop +atophan +atopic +atopite +atopy +atour +atoxic +atoxyl +atrail +atrepsy +atresia +atresic +atresy +atretic +atria +atrial +atrip +atrium +atrocha +atropal +atrophy +atropia +atropic +atrous +atry +atta +attacco +attach +attache +attack +attacus +attagen +attain +attaint +attaleh +attar +attask +attempt +attend +attent +atter +attern +attery +attest +attic +attid +attinge +attire +attired +attirer +attorn +attract +attrap +attrist +attrite +attune +atule +atumble +atune +atwain +atweel +atween +atwin +atwirl +atwist +atwitch +atwixt +atwo +atypic +atypy +auantic +aube +aubrite +auburn +auca +auchlet +auction +aucuba +audible +audibly +audient +audile +audio +audion +audit +auditor +auge +augen +augend +auger +augerer +augh +aught +augite +augitic +augment +augur +augural +augury +august +auh +auhuhu +auk +auklet +aula +aulae +auld +auletai +aulete +auletes +auletic +aulic +auloi +aulos +aulu +aum +aumaga +aumail +aumbry +aumery +aumil +aumous +aumrie +auncel +aune +aunt +auntie +auntish +auntly +aupaka +aura +aurae +aural +aurally +aurar +aurate +aurated +aureate +aureity +aurelia +aureola +aureole +aureous +auresca +aureus +auric +auricle +auride +aurific +aurify +aurigal +aurin +aurir +aurist +aurite +aurochs +auronal +aurora +aurorae +auroral +aurore +aurous +aurum +aurure +auryl +auscult +auslaut +auspex +auspice +auspicy +austere +austral +ausu +ausubo +autarch +autarky +aute +autecy +autem +author +autism +autist +auto +autobus +autocab +autocar +autoecy +autoist +automa +automat +autonym +autopsy +autumn +auxesis +auxetic +auxin +auxinic +auxotox +ava +avadana +avahi +avail +aval +avalent +avania +avarice +avast +avaunt +ave +avellan +aveloz +avenage +avener +avenge +avenger +avenin +avenous +avens +avenue +aver +avera +average +averah +averil +averin +averral +averse +avert +averted +averter +avian +aviary +aviate +aviatic +aviator +avichi +avicide +avick +avid +avidity +avidly +avidous +avidya +avigate +avijja +avine +aviso +avital +avitic +avives +avo +avocado +avocate +avocet +avodire +avoid +avoider +avolate +avouch +avow +avowal +avowant +avowed +avower +avowry +avoyer +avulse +aw +awa +awabi +awaft +awag +await +awaiter +awake +awaken +awald +awalim +awalt +awane +awapuhi +award +awarder +aware +awash +awaste +awat +awatch +awater +awave +away +awber +awd +awe +aweary +aweband +awee +aweek +aweel +aweigh +awesome +awest +aweto +awfu +awful +awfully +awheel +awheft +awhet +awhile +awhir +awhirl +awide +awiggle +awin +awing +awink +awiwi +awkward +awl +awless +awlwort +awmous +awn +awned +awner +awning +awnless +awnlike +awny +awoke +awork +awreck +awrist +awrong +awry +ax +axal +axe +axed +axenic +axes +axfetch +axhead +axial +axially +axiate +axiform +axil +axile +axilla +axillae +axillar +axine +axinite +axiom +axion +axis +axised +axite +axle +axled +axmaker +axman +axogamy +axoid +axolotl +axon +axonal +axonost +axseed +axstone +axtree +axunge +axweed +axwise +axwort +ay +ayah +aye +ayelp +ayin +ayless +aylet +ayllu +ayond +ayont +ayous +ayu +azafrin +azalea +azarole +azelaic +azelate +azide +azilut +azimene +azimide +azimine +azimino +azimuth +azine +aziola +azo +azoch +azofier +azofy +azoic +azole +azon +azonal +azonic +azonium +azophen +azorite +azotate +azote +azoted +azoth +azotic +azotine +azotite +azotize +azotous +azox +azoxime +azoxine +azoxy +azteca +azulene +azulite +azulmic +azumbre +azure +azurean +azured +azurine +azurite +azurous +azury +azygos +azygous +azyme +azymite +azymous +b +ba +baa +baal +baar +baba +babai +babasco +babassu +babbitt +babble +babbler +babbly +babby +babe +babelet +babery +babiche +babied +babish +bablah +babloh +baboen +baboo +baboon +baboot +babroot +babu +babudom +babuina +babuism +babul +baby +babydom +babyish +babyism +bac +bacaba +bacach +bacalao +bacao +bacca +baccae +baccara +baccate +bacchar +bacchic +bacchii +bach +bache +bachel +bacilli +back +backage +backcap +backed +backen +backer +backet +backie +backing +backjaw +backlet +backlog +backrun +backsaw +backset +backup +backway +baclin +bacon +baconer +bacony +bacula +bacule +baculi +baculum +baculus +bacury +bad +badan +baddish +baddock +bade +badge +badger +badiaga +badian +badious +badland +badly +badness +bae +baetuli +baetyl +bafaro +baff +baffeta +baffle +baffler +baffy +baft +bafta +bag +baga +bagani +bagasse +bagel +bagful +baggage +baggala +bagged +bagger +baggie +baggily +bagging +baggit +baggy +baglike +bagman +bagnio +bagnut +bago +bagonet +bagpipe +bagre +bagreef +bagroom +bagwig +bagworm +bagwyn +bah +bahan +bahar +bahay +bahera +bahisti +bahnung +baho +bahoe +bahoo +baht +bahur +bahut +baignet +baikie +bail +bailage +bailee +bailer +bailey +bailie +bailiff +bailor +bain +bainie +baioc +baiocco +bairagi +bairn +bairnie +bairnly +baister +bait +baiter +baith +baittle +baize +bajada +bajan +bajra +bajree +bajri +bajury +baka +bakal +bake +baked +baken +bakepan +baker +bakerly +bakery +bakie +baking +bakli +baktun +baku +bakula +bal +balafo +balagan +balai +balance +balanic +balanid +balao +balas +balata +balboa +balcony +bald +balden +balder +baldish +baldly +baldrib +baldric +baldy +bale +baleen +baleful +balei +baleise +baler +balete +bali +baline +balita +balk +balker +balky +ball +ballad +ballade +ballam +ballan +ballant +ballast +ballata +ballate +balldom +balled +baller +ballet +balli +ballist +ballium +balloon +ballot +ballow +ballup +bally +balm +balmily +balmony +balmy +balneal +balonea +baloney +baloo +balow +balsa +balsam +balsamo +balsamy +baltei +balter +balteus +balu +balut +balza +bam +bamban +bambini +bambino +bamboo +bamoth +ban +banaba +banago +banak +banal +banally +banana +banat +banc +banca +bancal +banchi +banco +bancus +band +banda +bandage +bandaka +bandala +bandar +bandbox +bande +bandeau +banded +bander +bandhu +bandi +bandie +banding +bandit +bandle +bandlet +bandman +bando +bandog +bandore +bandrol +bandy +bane +baneful +bang +banga +bange +banger +banghy +banging +bangkok +bangle +bangled +bani +banian +banig +banilad +banish +baniwa +baniya +banjo +banjore +banjuke +bank +banked +banker +bankera +banket +banking +bankman +banky +banner +bannet +banning +bannock +banns +bannut +banquet +banshee +bant +bantam +bantay +banteng +banter +bantery +banty +banuyo +banya +banyan +banzai +baobab +bap +baptism +baptize +bar +bara +barad +barauna +barb +barbal +barbary +barbas +barbate +barbe +barbed +barbel +barber +barbet +barbion +barblet +barbone +barbudo +barbule +bard +bardane +bardash +bardel +bardess +bardic +bardie +bardily +barding +bardish +bardism +bardlet +bardo +bardy +bare +bareca +barefit +barely +barer +baresma +baretta +barff +barfish +barfly +barful +bargain +barge +bargee +bargeer +barger +bargh +bargham +bari +baria +baric +barid +barie +barile +barilla +baring +baris +barish +barit +barite +barium +bark +barken +barker +barkery +barkey +barkhan +barking +barkle +barky +barless +barley +barling +barlock +barlow +barm +barmaid +barman +barmkin +barmote +barmy +barn +barnard +barney +barnful +barnman +barny +baroi +barolo +baron +baronet +barong +baronry +barony +baroque +baroto +barpost +barra +barrack +barrad +barrage +barras +barred +barrel +barren +barrer +barret +barrico +barrier +barring +barrio +barroom +barrow +barruly +barry +barse +barsom +barter +barth +barton +baru +baruria +barvel +barwal +barway +barways +barwise +barwood +barye +baryta +barytes +barytic +baryton +bas +basal +basale +basalia +basally +basalt +basaree +bascule +steembase +based +basely +baseman +basenji +bases +bash +bashaw +bashful +bashlyk +basial +basiate +basic +basidia +basify +basil +basilar +basilic +basin +basined +basinet +basion +basis +bask +basker +basket +basoid +bason +basos +basote +basque +basqued +bass +bassan +bassara +basset +bassie +bassine +bassist +basso +bassoon +bassus +bast +basta +bastard +baste +basten +baster +bastide +basting +bastion +bastite +basto +baston +bat +bataan +batad +batakan +batara +batata +batch +batcher +bate +batea +bateau +bateaux +bated +batel +bateman +bater +batfish +batfowl +bath +bathe +bather +bathic +bathing +bathman +bathmic +bathos +bathtub +bathyal +batik +batiker +bating +batino +batiste +batlan +batlike +batling +batlon +batman +batoid +baton +batonne +bats +batsman +batster +batt +batta +battel +batten +batter +battery +battik +batting +battish +battle +battled +battler +battue +batty +batule +batwing +batz +batzen +bauble +bauch +bauchle +bauckie +baud +baul +bauleah +baun +bauno +bauson +bausond +bauta +bauxite +bavaroy +bavary +bavian +baviere +bavin +bavoso +baw +bawbee +bawcock +bawd +bawdily +bawdry +bawl +bawler +bawley +bawn +bawtie +baxter +baxtone +bay +baya +bayal +bayamo +bayard +baybolt +baybush +baycuru +bayed +bayeta +baygall +bayhead +bayish +baylet +baylike +bayman +bayness +bayok +bayonet +bayou +baywood +bazaar +baze +bazoo +bazooka +bazzite +bdellid +be +beach +beached +beachy +beacon +bead +beaded +beader +beadily +beading +beadle +beadlet +beadman +beadrow +beady +beagle +beak +beaked +beaker +beakful +beaky +beal +beala +bealing +beam +beamage +beamed +beamer +beamful +beamily +beaming +beamish +beamlet +beamman +beamy +bean +beanbag +beancod +beanery +beanie +beano +beant +beany +bear +beard +bearded +bearder +beardie +beardom +beardy +bearer +bearess +bearing +bearish +bearlet +bearm +beast +beastie +beastly +beat +beata +beatae +beatee +beaten +beater +beath +beatify +beating +beatus +beau +beaufin +beauish +beauism +beauti +beauty +beaux +beaver +beavery +beback +bebait +bebang +bebar +bebaron +bebaste +bebat +bebathe +bebay +bebeast +bebed +bebeeru +bebilya +bebite +beblain +beblear +bebled +bebless +beblood +bebloom +bebog +bebop +beboss +bebotch +bebrave +bebrine +bebrush +bebump +bebusy +becall +becalm +becap +becard +becarve +becater +because +becense +bechalk +becharm +bechase +becheck +becher +bechern +bechirp +becivet +beck +becker +becket +beckon +beclad +beclang +beclart +beclasp +beclaw +becloak +beclog +becloud +beclout +beclown +becolme +becolor +become +becomes +becomma +becoom +becost +becovet +becram +becramp +becrawl +becreep +becrime +becroak +becross +becrowd +becrown +becrush +becrust +becry +becuiba +becuna +becurl +becurry +becurse +becut +bed +bedad +bedamn +bedamp +bedare +bedark +bedash +bedaub +bedawn +beday +bedaze +bedbug +bedcap +bedcase +bedcord +bedded +bedder +bedding +bedead +bedeaf +bedebt +bedeck +bedel +beden +bedene +bedevil +bedew +bedewer +bedfast +bedfoot +bedgery +bedgoer +bedgown +bedight +bedikah +bedim +bedin +bedip +bedirt +bedirty +bedizen +bedkey +bedlam +bedlar +bedless +bedlids +bedman +bedmate +bedog +bedolt +bedot +bedote +bedouse +bedown +bedoyo +bedpan +bedpost +bedrail +bedral +bedrape +bedress +bedrid +bedrift +bedrip +bedrock +bedroll +bedroom +bedrop +bedrown +bedrug +bedsick +bedside +bedsite +bedsock +bedsore +bedtick +bedtime +bedub +beduck +beduke +bedull +bedumb +bedunce +bedunch +bedung +bedur +bedusk +bedust +bedwarf +bedway +bedways +bedwell +bedye +bee +beearn +beech +beechen +beechy +beedged +beedom +beef +beefer +beefily +beefin +beefish +beefy +beehead +beeherd +beehive +beeish +beek +beekite +beelbow +beelike +beeline +beelol +beeman +been +beennut +beer +beerage +beerily +beerish +beery +bees +beest +beeswax +beet +beeth +beetle +beetled +beetler +beety +beeve +beevish +beeware +beeway +beeweed +beewise +beewort +befall +befame +befan +befancy +befavor +befilch +befile +befilth +befire +befist +befit +beflag +beflap +beflea +befleck +beflour +beflout +beflum +befoam +befog +befool +befop +before +befoul +befret +befrill +befriz +befume +beg +begad +begall +begani +begar +begari +begash +begat +begaud +begaudy +begay +begaze +begeck +begem +beget +beggar +beggary +begging +begift +begild +begin +begird +beglad +beglare +beglic +beglide +begloom +begloze +begluc +beglue +begnaw +bego +begob +begobs +begohm +begone +begonia +begorra +begorry +begoud +begowk +begrace +begrain +begrave +begray +begreen +begrett +begrim +begrime +begroan +begrown +beguard +beguess +beguile +beguine +begulf +begum +begun +begunk +begut +behale +behalf +behap +behave +behead +behear +behears +behedge +beheld +behelp +behen +behenic +behest +behind +behint +behn +behold +behoney +behoof +behoot +behoove +behorn +behowl +behung +behymn +beice +beige +being +beinked +beira +beisa +bejade +bejan +bejant +bejazz +bejel +bejewel +bejig +bekah +bekick +beking +bekiss +bekko +beknave +beknit +beknow +beknown +bel +bela +belabor +belaced +beladle +belady +belage +belah +belam +belanda +belar +belard +belash +belate +belated +belaud +belay +belayer +belch +belcher +beld +beldam +beleaf +beleap +beleave +belee +belfry +belga +belibel +belick +belie +belief +belier +believe +belight +beliked +belion +belite +belive +bell +bellboy +belle +belled +bellhop +bellied +belling +bellite +bellman +bellote +bellow +bellows +belly +bellyer +beloam +beloid +belong +belonid +belord +belout +belove +beloved +below +belsire +belt +belted +belter +beltie +beltine +belting +beltman +belton +beluga +belute +belve +bely +belying +bema +bemad +bemadam +bemail +bemaim +beman +bemar +bemask +bemat +bemata +bemaul +bemazed +bemeal +bemean +bemercy +bemire +bemist +bemix +bemoan +bemoat +bemock +bemoil +bemole +bemolt +bemoon +bemotto +bemoult +bemouth +bemuck +bemud +bemuddy +bemuse +bemused +bemusk +ben +bena +benab +bename +benami +benasty +benben +bench +bencher +benchy +bencite +bend +benda +bended +bender +bending +bendlet +bendy +bene +beneath +benefic +benefit +benempt +benet +beng +beni +benight +benign +benison +benj +benjy +benmost +benn +benne +bennel +bennet +benny +beno +benorth +benote +bensel +bensh +benshea +benshee +benshi +bent +bentang +benthal +benthic +benthon +benthos +benting +benty +benumb +benward +benweed +benzal +benzein +benzene +benzil +benzine +benzo +benzoic +benzoid +benzoin +benzol +benzole +benzoxy +benzoyl +benzyl +beode +bepaid +bepale +bepaper +beparch +beparse +bepart +bepaste +bepat +bepaw +bepearl +bepelt +bepen +bepewed +bepiece +bepile +bepill +bepinch +bepity +beprank +bepray +bepress +bepride +beprose +bepuff +bepun +bequalm +bequest +bequote +ber +berain +berakah +berake +berapt +berat +berate +beray +bere +bereave +bereft +berend +beret +berg +berger +berglet +bergut +bergy +bergylt +berhyme +beride +berinse +berith +berley +berlin +berline +berm +berne +berobed +beroll +beround +berret +berri +berried +berrier +berry +berseem +berserk +berth +berthed +berther +bertram +bertrum +berust +bervie +berycid +beryl +bes +besa +besagne +besaiel +besaint +besan +besauce +bescab +bescarf +bescent +bescorn +bescour +bescurf +beseam +besee +beseech +beseem +beseen +beset +beshade +beshag +beshake +beshame +beshear +beshell +beshine +beshlik +beshod +beshout +beshow +beshrew +beside +besides +besiege +besigh +besin +besing +besiren +besit +beslab +beslap +beslash +beslave +beslime +beslow +beslur +besmear +besmell +besmile +besmoke +besmut +besnare +besneer +besnow +besnuff +besogne +besoil +besom +besomer +besoot +besot +besoul +besour +bespate +bespawl +bespeak +besped +bespeed +bespell +bespend +bespete +bespew +bespice +bespill +bespin +bespit +besplit +bespoke +bespot +bespout +bespray +bespy +besquib +besra +best +bestab +bestain +bestamp +bestar +bestare +bestay +bestead +besteer +bester +bestial +bestick +bestill +bestink +bestir +bestock +bestore +bestorm +bestove +bestow +bestraw +bestrew +bestuck +bestud +besugar +besuit +besully +beswarm +beswim +bet +beta +betag +betail +betaine +betalk +betask +betaxed +betear +beteela +beteem +betel +beth +bethel +bethink +bethumb +bethump +betide +betimes +betinge +betire +betis +betitle +betoil +betoken +betone +betony +betoss +betowel +betrace +betrail +betrap +betray +betread +betrend +betrim +betroth +betrunk +betso +betted +better +betters +betting +bettong +bettor +betty +betulin +betutor +between +betwine +betwit +betwixt +beveil +bevel +beveled +beveler +bevenom +bever +beverse +beveto +bevined +bevomit +bevue +bevy +bewail +bewall +beware +bewash +bewaste +bewater +beweary +beweep +bewept +bewest +bewet +bewhig +bewhite +bewidow +bewig +bewired +bewitch +bewith +bework +beworm +beworn +beworry +bewrap +bewray +bewreck +bewrite +bey +beydom +beylic +beyond +beyship +bezant +bezanty +bezel +bezetta +bezique +bezoar +bezzi +bezzle +bezzo +bhabar +bhakta +bhakti +bhalu +bhandar +bhang +bhangi +bhara +bharal +bhat +bhava +bheesty +bhikku +bhikshu +bhoosa +bhoy +bhungi +bhut +biabo +biacid +biacuru +bialate +biallyl +bianco +biarchy +bias +biaxal +biaxial +bib +bibasic +bibb +bibber +bibble +bibbler +bibbons +bibcock +bibi +bibiri +bibless +biblus +bice +biceps +bicetyl +bichir +bichord +bichy +bick +bicker +bickern +bicolor +bicone +biconic +bicorn +bicorne +bicron +bicycle +bicyclo +bid +bidar +bidarka +bidcock +bidder +bidding +biddy +bide +bident +bider +bidet +biding +bidri +biduous +bield +bieldy +bien +bienly +biennia +bier +bietle +bifara +bifer +biff +biffin +bifid +bifidly +bifilar +biflex +bifocal +bifoil +bifold +bifolia +biform +bifront +big +biga +bigamic +bigamy +bigener +bigeye +bigg +biggah +biggen +bigger +biggest +biggin +biggish +bigha +bighead +bighorn +bight +biglot +bigness +bignou +bigot +bigoted +bigotry +bigotty +bigroot +bigwig +bija +bijasal +bijou +bijoux +bike +bikh +bikini +bilabe +bilalo +bilbie +bilbo +bilby +bilch +bilcock +bildar +bilders +bile +bilge +bilgy +biliary +biliate +bilic +bilify +bilimbi +bilio +bilious +bilith +bilk +bilker +bill +billa +billbug +billed +biller +billet +billety +billian +billing +billion +billman +billon +billot +billow +billowy +billy +billyer +bilo +bilobe +bilobed +bilsh +bilsted +biltong +bimalar +bimanal +bimane +bimasty +bimbil +bimeby +bimodal +bin +binal +binary +binate +bind +binder +bindery +binding +bindle +bindlet +bindweb +bine +bing +binge +bingey +binghi +bingle +bingo +bingy +binh +bink +binman +binna +binning +binnite +bino +binocle +binodal +binode +binotic +binous +bint +binukau +biod +biodyne +biogen +biogeny +bioherm +biolith +biology +biome +bion +bionomy +biopsic +biopsy +bioral +biorgan +bios +biose +biosis +biota +biotaxy +biotic +biotics +biotin +biotite +biotome +biotomy +biotope +biotype +bioxide +bipack +biparty +biped +bipedal +biphase +biplane +bipod +bipolar +biprism +biprong +birch +birchen +bird +birddom +birdeen +birder +birdie +birding +birdlet +birdman +birdy +bireme +biretta +biri +biriba +birk +birken +birkie +birl +birle +birler +birlie +birlinn +birma +birn +birny +birr +birse +birsle +birsy +birth +birthy +bis +bisabol +bisalt +biscuit +bisect +bisexed +bisext +bishop +bismar +bismite +bismuth +bisnaga +bison +bispore +bisque +bissext +bisson +bistate +bister +bisti +bistort +bistro +bit +bitable +bitch +bite +biter +biti +biting +bitless +bito +bitolyl +bitt +bitted +bitten +bitter +bittern +bitters +bittie +bittock +bitty +bitume +bitumed +bitumen +bitwise +bityite +bitypic +biune +biunial +biunity +biurate +biurea +biuret +bivalve +bivinyl +bivious +bivocal +bivouac +biwa +bixin +biz +bizarre +bizet +bizonal +bizone +bizz +blab +blabber +black +blacken +blacker +blackey +blackie +blackit +blackly +blacky +blad +bladder +blade +bladed +blader +blading +bladish +blady +blae +blaff +blaflum +blah +blain +blair +blake +blame +blamed +blamer +blaming +blan +blanc +blanca +blanch +blanco +bland +blanda +blandly +blank +blanked +blanket +blankly +blanky +blanque +blare +blarney +blarnid +blarny +blart +blas +blase +blash +blashy +blast +blasted +blaster +blastid +blastie +blasty +blat +blatant +blate +blately +blather +blatta +blatter +blatti +blattid +blaubok +blaver +blaw +blawort +blay +blaze +blazer +blazing +blazon +blazy +bleach +bleak +bleakly +bleaky +blear +bleared +bleary +bleat +bleater +bleaty +bleb +blebby +bleck +blee +bleed +bleeder +bleery +bleeze +bleezy +blellum +blemish +blench +blend +blende +blended +blender +blendor +blenny +blent +bleo +blesbok +bless +blessed +blesser +blest +blet +blewits +blibe +blick +blickey +blight +blighty +blimp +blimy +blind +blinded +blinder +blindly +blink +blinked +blinker +blinks +blinky +blinter +blintze +blip +bliss +blissom +blister +blite +blithe +blithen +blither +blitter +blitz +blizz +blo +bloat +bloated +bloater +blob +blobbed +blobber +blobby +bloc +block +blocked +blocker +blocky +blodite +bloke +blolly +blonde +blood +blooded +bloody +blooey +bloom +bloomer +bloomy +bloop +blooper +blore +blosmy +blossom +blot +blotch +blotchy +blotter +blotto +blotty +blouse +bloused +blout +blow +blowen +blower +blowfly +blowgun +blowing +blown +blowoff +blowout +blowth +blowup +blowy +blowze +blowzed +blowzy +blub +blubber +blucher +blue +bluecap +bluecup +blueing +blueleg +bluely +bluer +blues +bluet +bluetop +bluey +bluff +bluffer +bluffly +bluffy +bluggy +bluing +bluish +bluism +blunder +blunge +blunger +blunk +blunker +blunks +blunnen +blunt +blunter +bluntie +bluntly +blup +blur +blurb +blurred +blurrer +blurry +blurt +blush +blusher +blushy +bluster +blype +bo +boa +boagane +boar +board +boarder +boardly +boardy +boarish +boast +boaster +boat +boatage +boater +boatful +boatie +boating +boatlip +boatly +boatman +bob +boba +bobac +bobbed +bobber +bobbery +bobbin +bobbing +bobbish +bobble +bobby +bobcat +bobcoat +bobeche +bobfly +bobo +bobotie +bobsled +bobstay +bobtail +bobwood +bocal +bocardo +bocca +boccale +boccaro +bocce +boce +bocher +bock +bocking +bocoy +bod +bodach +bode +bodeful +bodega +boden +boder +bodge +bodger +bodgery +bodhi +bodice +bodiced +bodied +bodier +bodikin +bodily +boding +bodkin +bodle +bodock +body +bog +boga +bogan +bogard +bogart +bogey +boggart +boggin +boggish +boggle +boggler +boggy +boghole +bogie +bogier +bogland +bogle +boglet +bogman +bogmire +bogo +bogong +bogtrot +bogue +bogum +bogus +bogway +bogwood +bogwort +bogy +bogydom +bogyism +bohawn +bohea +boho +bohor +bohunk +boid +boil +boiled +boiler +boilery +boiling +boily +boist +bojite +bojo +bokadam +bokard +bokark +boke +bokom +bola +bolar +bold +bolden +boldine +boldly +boldo +bole +boled +boleite +bolero +bolete +bolide +bolimba +bolis +bolivar +bolivia +bolk +boll +bollard +bolled +boller +bolling +bollock +bolly +bolo +boloman +boloney +bolson +bolster +bolt +boltage +boltant +boltel +bolter +bolti +bolting +bolus +bom +boma +bomb +bombard +bombast +bombed +bomber +bombo +bombola +bombous +bon +bonaci +bonagh +bonaght +bonair +bonally +bonang +bonanza +bonasus +bonbon +bonce +bond +bondage +bondar +bonded +bonder +bonding +bondman +bonduc +bone +boned +bonedog +bonelet +boner +boneset +bonfire +bong +bongo +boniata +bonify +bonito +bonk +bonnaz +bonnet +bonnily +bonny +bonsai +bonus +bonxie +bony +bonze +bonzer +bonzery +bonzian +boo +boob +boobery +boobily +boobook +booby +bood +boodie +boodle +boodler +boody +boof +booger +boohoo +boojum +book +bookdom +booked +booker +bookery +bookful +bookie +booking +bookish +bookism +booklet +bookman +booky +bool +booly +boolya +boom +boomage +boomah +boomdas +boomer +booming +boomlet +boomy +boon +boonk +boopis +boor +boorish +boort +boose +boost +booster +boosy +boot +bootboy +booted +bootee +booter +bootery +bootful +booth +boother +bootied +booting +bootleg +boots +booty +booze +boozed +boozer +boozily +boozy +bop +bopeep +boppist +bopyrid +bor +bora +borable +boracic +borage +borak +boral +borasca +borate +borax +bord +bordage +bordar +bordel +border +bordure +bore +boread +boreal +borean +boredom +boree +boreen +boregat +boreism +borele +borer +borg +borgh +borh +boric +boride +borine +boring +borish +borism +bority +borize +borlase +born +borne +borneol +borning +bornite +bornyl +boro +boron +boronic +borough +borrel +borrow +borsch +borscht +borsht +bort +bortsch +borty +bortz +borwort +boryl +borzoi +boscage +bosch +bose +boser +bosh +bosher +bosk +bosker +bosket +bosky +bosn +bosom +bosomed +bosomer +bosomy +boss +bossage +bossdom +bossed +bosser +bosset +bossing +bossism +bosslet +bossy +boston +bostryx +bosun +bot +bota +botanic +botany +botargo +botch +botched +botcher +botchka +botchy +bote +botella +boterol +botfly +both +bother +bothros +bothway +bothy +botonee +botong +bott +bottine +bottle +bottled +bottler +bottom +botulin +bouchal +bouche +boucher +boud +boudoir +bougar +bouge +bouget +bough +boughed +bought +boughy +bougie +bouk +boukit +boulder +boule +boultel +boulter +boun +bounce +bouncer +bound +bounded +bounden +bounder +boundly +bounty +bouquet +bourbon +bourd +bourder +bourdon +bourg +bourn +bourock +bourse +bouse +bouser +bousy +bout +boutade +bouto +bouw +bovate +bovid +bovine +bovoid +bow +bowable +bowback +bowbent +bowboy +bowed +bowel +boweled +bowels +bower +bowery +bowet +bowfin +bowhead +bowie +bowing +bowk +bowkail +bowker +bowknot +bowl +bowla +bowleg +bowler +bowless +bowlful +bowlike +bowline +bowling +bowls +bowly +bowman +bowpin +bowshot +bowwood +bowwort +bowwow +bowyer +boxbush +boxcar +boxen +boxer +boxfish +boxful +boxhaul +boxhead +boxing +boxlike +boxman +boxty +boxwood +boxwork +boxy +boy +boyang +boyar +boyard +boycott +boydom +boyer +boyhood +boyish +boyism +boyla +boylike +boyship +boza +bozal +bozo +bozze +bra +brab +brabant +brabble +braca +braccia +braccio +brace +braced +bracer +bracero +braces +brach +brachet +bracing +brack +bracken +bracker +bracket +bracky +bract +bractea +bracted +brad +bradawl +bradsot +brae +braeman +brag +braggat +bragger +bragget +bragite +braid +braided +braider +brail +brain +brainer +brainge +brains +brainy +braird +brairo +braise +brake +braker +brakie +braky +bramble +brambly +bran +branch +branchi +branchy +brand +branded +brander +brandy +brangle +branial +brank +brankie +branle +branner +branny +bransle +brant +brash +brashy +brasque +brass +brasse +brasser +brasset +brassic +brassie +brassy +brat +brattie +brattle +brauna +bravade +bravado +brave +bravely +braver +bravery +braving +bravish +bravo +bravura +braw +brawl +brawler +brawly +brawlys +brawn +brawned +brawner +brawny +braws +braxy +bray +brayer +brayera +braza +braze +brazen +brazer +brazera +brazier +brazil +breach +breachy +bread +breaden +breadth +breaghe +break +breakax +breaker +breakup +bream +breards +breast +breath +breathe +breathy +breba +breccia +brecham +breck +brecken +bred +brede +bredi +bree +breech +breed +breeder +breedy +breek +breeze +breezy +bregma +brehon +brei +brekkle +brelaw +breme +bremely +brent +brephic +bret +breth +brett +breva +breve +brevet +brevier +brevit +brevity +brew +brewage +brewer +brewery +brewing +brewis +brewst +brey +briar +bribe +bribee +briber +bribery +brichen +brick +brickel +bricken +brickle +brickly +bricky +bricole +bridal +bridale +bride +bridely +bridge +bridged +bridger +bridle +bridled +bridler +bridoon +brief +briefly +briefs +brier +briered +briery +brieve +brig +brigade +brigand +bright +brill +brills +brim +brimful +briming +brimmed +brimmer +brin +brine +briner +bring +bringal +bringer +brinish +brinjal +brink +briny +brioche +brique +brisk +brisken +brisket +briskly +brisque +briss +bristle +bristly +brisure +brit +brith +brither +britska +britten +brittle +brizz +broach +broad +broadax +broaden +broadly +brob +brocade +brocard +broch +brochan +broche +brocho +brock +brocked +brocket +brockle +brod +brodder +brog +brogan +brogger +broggle +brogue +broguer +broider +broigne +broil +broiler +brokage +broke +broken +broker +broking +brolga +broll +brolly +broma +bromal +bromate +brome +bromic +bromide +bromine +bromism +bromite +bromize +bromoil +bromol +bromous +bronc +bronchi +bronco +bronk +bronze +bronzed +bronzen +bronzer +bronzy +broo +brooch +brood +brooder +broody +brook +brooked +brookie +brooky +brool +broom +broomer +broomy +broon +broose +brose +brosot +brosy +brot +brotan +brotany +broth +brothel +brother +brothy +brough +brought +brow +browden +browed +browis +browman +brown +browner +brownie +brownly +browny +browse +browser +browst +bruang +brucia +brucina +brucine +brucite +bruckle +brugh +bruin +bruise +bruiser +bruit +bruiter +bruke +brulee +brulyie +brumal +brumby +brume +brumous +brunch +brunet +brunt +bruscus +brush +brushed +brusher +brushes +brushet +brushy +brusque +brustle +brut +brutage +brutal +brute +brutely +brutify +bruting +brutish +brutism +brutter +bruzz +bryonin +bryony +bu +bual +buaze +bub +buba +bubal +bubalis +bubble +bubbler +bubbly +bubby +bubinga +bubo +buboed +bubonic +bubukle +bucare +bucca +buccal +buccan +buccate +buccina +buccula +buchite +buchu +buck +bucked +buckeen +bucker +bucket +buckety +buckeye +buckie +bucking +buckish +buckle +buckled +buckler +bucklum +bucko +buckpot +buckra +buckram +bucksaw +bucky +bucolic +bucrane +bud +buda +buddage +budder +buddhi +budding +buddle +buddler +buddy +budge +budger +budget +budless +budlet +budlike +budmash +budtime +budwood +budworm +budzat +bufagin +buff +buffalo +buffed +buffer +buffet +buffing +buffle +buffont +buffoon +buffy +bufidin +bufo +bug +bugaboo +bugan +bugbane +bugbear +bugbite +bugdom +bugfish +bugger +buggery +buggy +bughead +bugle +bugled +bugler +buglet +bugloss +bugre +bugseed +bugweed +bugwort +buhl +buhr +build +builder +buildup +built +buirdly +buisson +buist +bukh +bukshi +bulak +bulb +bulbar +bulbed +bulbil +bulblet +bulbose +bulbous +bulbul +bulbule +bulby +bulchin +bulge +bulger +bulgy +bulimia +bulimic +bulimy +bulk +bulked +bulker +bulkily +bulkish +bulky +bull +bulla +bullace +bullan +bullary +bullate +bullbat +bulldog +buller +bullet +bullety +bulling +bullion +bullish +bullism +bullit +bullnut +bullock +bullous +bullule +bully +bulrush +bulse +bult +bulter +bultey +bultong +bultow +bulwand +bulwark +bum +bumbaze +bumbee +bumble +bumbler +bumbo +bumboat +bumicky +bummalo +bummed +bummer +bummie +bumming +bummler +bummock +bump +bumpee +bumper +bumpily +bumping +bumpkin +bumpy +bumtrap +bumwood +bun +buna +buncal +bunce +bunch +buncher +bunchy +bund +bunder +bundle +bundler +bundlet +bundook +bundy +bung +bungee +bungey +bungfu +bungle +bungler +bungo +bungy +bunion +bunk +bunker +bunkery +bunkie +bunko +bunkum +bunnell +bunny +bunt +buntal +bunted +bunter +bunting +bunton +bunty +bunya +bunyah +bunyip +buoy +buoyage +buoyant +bur +buran +burao +burbank +burbark +burble +burbler +burbly +burbot +burbush +burd +burden +burdie +burdock +burdon +bure +bureau +bureaux +burel +burele +buret +burette +burfish +burg +burgage +burgall +burgee +burgeon +burgess +burgh +burghal +burgher +burglar +burgle +burgoo +burgul +burgus +burhead +buri +burial +burian +buried +burier +burin +burion +buriti +burka +burke +burker +burl +burlap +burled +burler +burlet +burlily +burly +burmite +burn +burned +burner +burnet +burnie +burning +burnish +burnous +burnout +burnt +burnut +burny +buro +burp +burr +burrah +burred +burrel +burrer +burring +burrish +burrito +burro +burrow +burry +bursa +bursal +bursar +bursary +bursate +burse +burseed +burst +burster +burt +burton +burucha +burweed +bury +burying +bus +busby +buscarl +bush +bushed +bushel +busher +bushful +bushi +bushily +bushing +bushlet +bushwa +bushy +busied +busily +busine +busk +busked +busker +busket +buskin +buskle +busky +busman +buss +busser +bussock +bussu +bust +bustard +busted +bustee +buster +bustic +bustle +bustled +bustler +busy +busying +busyish +but +butanal +butane +butanol +butch +butcher +butein +butene +butenyl +butic +butine +butler +butlery +butment +butoxy +butoxyl +butt +butte +butter +buttery +butting +buttle +buttock +button +buttons +buttony +butty +butyl +butylic +butyne +butyr +butyral +butyric +butyrin +butyryl +buxerry +buxom +buxomly +buy +buyable +buyer +buzane +buzz +buzzard +buzzer +buzzies +buzzing +buzzle +buzzwig +buzzy +by +bycoket +bye +byee +byeman +byepath +byerite +bygane +bygo +bygoing +bygone +byhand +bylaw +byname +byon +byous +byously +bypass +bypast +bypath +byplay +byre +byreman +byrlaw +byrnie +byroad +byrrus +bysen +byspell +byssal +byssin +byssine +byssoid +byssus +byth +bytime +bywalk +byway +bywoner +byword +bywork +c +ca +caam +caama +caaming +caapeba +cab +caba +cabaan +caback +cabaho +cabal +cabala +cabalic +caban +cabana +cabaret +cabas +cabbage +cabbagy +cabber +cabble +cabbler +cabby +cabda +caber +cabezon +cabin +cabinet +cabio +cable +cabled +cabler +cablet +cabling +cabman +cabob +cabocle +cabook +caboose +cabot +cabree +cabrit +cabuya +cacam +cacao +cachaza +cache +cachet +cachexy +cachou +cachrys +cacique +cack +cackle +cackler +cacodyl +cacoepy +caconym +cacoon +cacti +cactoid +cacur +cad +cadamba +cadaver +cadbait +cadbit +cadbote +caddice +caddie +caddis +caddish +caddle +caddow +caddy +cade +cadelle +cadence +cadency +cadent +cadenza +cader +caderas +cadet +cadetcy +cadette +cadew +cadge +cadger +cadgily +cadgy +cadi +cadism +cadjan +cadlock +cadmia +cadmic +cadmide +cadmium +cados +cadrans +cadre +cadua +caduac +caduca +cadus +cadweed +caeca +caecal +caecum +caeoma +caesura +cafeneh +cafenet +caffa +caffeic +caffeol +caffiso +caffle +caffoy +cafh +cafiz +caftan +cag +cage +caged +cageful +cageman +cager +cagey +caggy +cagily +cagit +cagmag +cahiz +cahoot +cahot +cahow +caickle +caid +caiman +caimito +cain +caique +caird +cairn +cairned +cairny +caisson +caitiff +cajeput +cajole +cajoler +cajuela +cajun +cajuput +cake +cakebox +caker +cakette +cakey +caky +cal +calaba +calaber +calade +calais +calalu +calamus +calash +calcar +calced +calcic +calcify +calcine +calcite +calcium +calculi +calden +caldron +calean +calends +calepin +calf +calfish +caliber +calibre +calices +calicle +calico +calid +caliga +caligo +calinda +calinut +calipee +caliper +caliph +caliver +calix +calk +calkage +calker +calkin +calking +call +callant +callboy +caller +callet +calli +callid +calling +callo +callose +callous +callow +callus +calm +calmant +calmer +calmly +calmy +calomba +calomel +calool +calor +caloric +calorie +caloris +calotte +caloyer +calp +calpac +calpack +caltrap +caltrop +calumba +calumet +calumny +calve +calved +calver +calves +calvish +calvity +calvous +calx +calyces +calycle +calymma +calypso +calyx +cam +camaca +camagon +camail +caman +camansi +camara +camass +camata +camb +cambaye +camber +cambial +cambism +cambist +cambium +cambrel +cambuca +came +cameist +camel +camelry +cameo +camera +cameral +camilla +camion +camise +camisia +camlet +cammed +cammock +camoodi +camp +campana +campane +camper +campho +camphol +camphor +campion +cample +campo +campody +campoo +campus +camus +camused +camwood +can +canaba +canada +canadol +canal +canamo +canape +canard +canari +canarin +canary +canasta +canaut +cancan +cancel +cancer +canch +cancrum +cand +candela +candent +candid +candied +candier +candify +candiru +candle +candler +candock +candor +candroy +candy +candys +cane +canel +canella +canelo +caner +canette +canful +cangan +cangia +cangle +cangler +cangue +canhoop +canid +canille +caninal +canine +caninus +canions +canjac +cank +canker +cankery +canman +canna +cannach +canned +cannel +canner +cannery +cannet +cannily +canning +cannon +cannot +cannula +canny +canoe +canon +canonic +canonry +canopic +canopy +canroy +canso +cant +cantala +cantar +cantara +cantaro +cantata +canted +canteen +canter +canthal +canthus +cantic +cantico +cantily +cantina +canting +cantion +cantish +cantle +cantlet +canto +canton +cantoon +cantor +cantred +cantref +cantrip +cantus +canty +canun +canvas +canvass +cany +canyon +canzon +caoba +cap +capable +capably +capanna +capanne +capax +capcase +cape +caped +capel +capelet +capelin +caper +caperer +capes +capful +caph +caphar +caphite +capias +capicha +capital +capitan +capivi +capkin +capless +caplin +capman +capmint +capomo +capon +caporal +capot +capote +capped +capper +cappie +capping +capple +cappy +caprate +capreol +capric +caprice +caprid +caprin +caprine +caproic +caproin +caprone +caproyl +capryl +capsa +capsid +capsize +capstan +capsula +capsule +captain +caption +captive +captor +capture +capuche +capulet +capulin +car +carabao +carabid +carabin +carabus +caracal +caracol +caract +carafe +caraibe +caraipi +caramba +caramel +caranda +carane +caranna +carapax +carapo +carat +caratch +caravan +caravel +caraway +carbarn +carbeen +carbene +carbide +carbine +carbo +carbon +carbona +carbora +carboxy +carboy +carbro +carbure +carbyl +carcake +carcass +carceag +carcel +carcoon +card +cardecu +carded +cardel +carder +cardia +cardiac +cardial +cardin +carding +cardo +cardol +cardon +cardona +cardoon +care +careen +career +careful +carene +carer +caress +carest +caret +carfare +carfax +carful +carga +cargo +carhop +cariama +caribou +carid +caries +carina +carinal +cariole +carious +cark +carking +carkled +carl +carless +carlet +carlie +carlin +carline +carling +carlish +carload +carlot +carls +carman +carmele +carmine +carmot +carnage +carnal +carnate +carneol +carney +carnic +carnify +carnose +carnous +caroa +carob +caroba +caroche +carol +caroler +caroli +carolin +carolus +carom +carone +caronic +caroome +caroon +carotic +carotid +carotin +carouse +carp +carpal +carpale +carpel +carpent +carper +carpet +carpid +carping +carpium +carport +carpos +carpus +carr +carrack +carrel +carrick +carried +carrier +carrion +carrizo +carroch +carrot +carroty +carrow +carry +carse +carshop +carsick +cart +cartage +carte +cartel +carter +cartful +cartman +carton +cartoon +cartway +carty +carua +carucal +carval +carve +carvel +carven +carvene +carver +carving +carvol +carvone +carvyl +caryl +casaba +casabe +casal +casalty +casate +casaun +casava +casave +casavi +casbah +cascade +cascado +cascara +casco +cascol +case +casease +caseate +casebox +cased +caseful +casefy +caseic +casein +caseose +caseous +caser +casern +caseum +cash +casha +cashaw +cashbox +cashboy +cashel +cashew +cashier +casing +casino +casiri +cask +casket +casking +casque +casqued +casquet +cass +cassady +casse +cassena +cassia +cassie +cassina +cassine +cassino +cassis +cassock +casson +cassoon +cast +caste +caster +castice +casting +castle +castled +castlet +castock +castoff +castor +castory +castra +castral +castrum +castuli +casual +casuary +casuist +casula +cat +catalpa +catan +catapan +cataria +catarrh +catasta +catbird +catboat +catcall +catch +catcher +catchup +catchy +catclaw +catdom +cate +catechu +catella +catena +catenae +cater +cateran +caterer +caterva +cateye +catface +catfall +catfish +catfoot +catgut +cathead +cathect +catheti +cathin +cathine +cathion +cathode +cathole +cathood +cathop +cathro +cation +cativo +catjang +catkin +catlap +catlike +catlin +catling +catmint +catnip +catpipe +catskin +catstep +catsup +cattabu +cattail +cattalo +cattery +cattily +catting +cattish +cattle +catty +catvine +catwalk +catwise +catwood +catwort +caubeen +cauboge +cauch +caucho +caucus +cauda +caudad +caudae +caudal +caudata +caudate +caudex +caudle +caught +cauk +caul +cauld +caules +cauline +caulis +caulome +caulote +caum +cauma +caunch +caup +caupo +caurale +causal +causate +cause +causer +causey +causing +causse +causson +caustic +cautel +cauter +cautery +caution +cautivo +cava +cavae +caval +cavalla +cavalry +cavate +cave +caveat +cavel +cavelet +cavern +cavetto +caviar +cavie +cavil +caviler +caving +cavings +cavish +cavity +caviya +cavort +cavus +cavy +caw +cawk +cawky +cawney +cawquaw +caxiri +caxon +cay +cayenne +cayman +caza +cazimi +ce +cearin +cease +ceasmic +cebell +cebian +cebid +cebil +cebine +ceboid +cebur +cecils +cecity +cedar +cedared +cedarn +cedary +cede +cedent +ceder +cedilla +cedrat +cedrate +cedre +cedrene +cedrin +cedrine +cedrium +cedrol +cedron +cedry +cedula +cee +ceibo +ceil +ceile +ceiler +ceilidh +ceiling +celadon +celemin +celery +celesta +celeste +celiac +celite +cell +cella +cellae +cellar +celled +cellist +cello +celloid +cellose +cellule +celsian +celt +celtium +celtuce +cembalo +cement +cenacle +cendre +cenoby +cense +censer +censive +censor +censual +censure +census +cent +centage +cental +centare +centaur +centavo +centena +center +centiar +centile +centime +centimo +centner +cento +centrad +central +centric +centrum +centry +centum +century +ceorl +cep +cepa +cepe +cephid +ceps +ceptor +cequi +cerago +ceral +ceramal +ceramic +ceras +cerasin +cerata +cerate +cerated +cercal +cerci +cercus +cere +cereal +cerebra +cered +cereous +cerer +ceresin +cerevis +ceria +ceric +ceride +cerillo +ceriman +cerin +cerine +ceriops +cerise +cerite +cerium +cermet +cern +cero +ceroma +cerote +cerotic +cerotin +cerous +cerrero +cerrial +cerris +certain +certie +certify +certis +certy +cerule +cerumen +ceruse +cervid +cervine +cervix +cervoid +ceryl +cesious +cesium +cess +cesser +cession +cessor +cesspit +cest +cestode +cestoid +cestrum +cestus +cetane +cetene +ceti +cetic +cetin +cetyl +cetylic +cevine +cha +chaa +chab +chabot +chabouk +chabuk +chacate +chack +chacker +chackle +chacma +chacona +chacte +chad +chaeta +chafe +chafer +chafery +chaff +chaffer +chaffy +chaft +chafted +chagan +chagrin +chaguar +chagul +chahar +chai +chain +chained +chainer +chainon +chair +chairer +chais +chaise +chaitya +chaja +chaka +chakar +chakari +chakazi +chakdar +chakobu +chakra +chakram +chaksi +chal +chalaco +chalana +chalaza +chalaze +chalcid +chalcon +chalcus +chalder +chalet +chalice +chalk +chalker +chalky +challah +challie +challis +chalmer +chalon +chalone +chalque +chalta +chalutz +cham +chamal +chamar +chamber +chambul +chamfer +chamiso +chamite +chamma +chamois +champ +champac +champer +champy +chance +chancel +chancer +chanche +chanco +chancre +chancy +chandam +chandi +chandoo +chandu +chandul +chang +changa +changar +change +changer +chank +channel +channer +chanson +chanst +chant +chanter +chantey +chantry +chao +chaos +chaotic +chap +chapah +chape +chapeau +chaped +chapel +chapin +chaplet +chapman +chapped +chapper +chappie +chappin +chappow +chappy +chaps +chapt +chapter +char +charac +charade +charas +charbon +chard +chare +charer +charet +charge +chargee +charger +charier +charily +chariot +charism +charity +chark +charka +charkha +charm +charmel +charmer +charnel +charpit +charpoy +charqui +charr +charry +chart +charter +charuk +chary +chase +chaser +chasing +chasm +chasma +chasmal +chasmed +chasmic +chasmy +chasse +chassis +chaste +chasten +chat +chataka +chateau +chati +chatta +chattel +chatter +chatty +chauk +chaus +chaute +chauth +chavish +chaw +chawan +chawer +chawk +chawl +chay +chaya +chayote +chazan +che +cheap +cheapen +cheaply +cheat +cheatee +cheater +chebec +chebel +chebog +chebule +check +checked +checker +checkup +checky +cheder +chee +cheecha +cheek +cheeker +cheeky +cheep +cheeper +cheepy +cheer +cheered +cheerer +cheerio +cheerly +cheery +cheese +cheeser +cheesy +cheet +cheetah +cheeter +cheetie +chef +chegoe +chegre +cheir +chekan +cheke +cheki +chekmak +chela +chelate +chelem +chelide +chello +chelone +chelp +chelys +chemic +chemis +chemise +chemism +chemist +chena +chende +cheng +chenica +cheque +cherem +cherish +cheroot +cherry +chert +cherte +cherty +cherub +chervil +cheson +chess +chessel +chesser +chest +chester +chesty +cheth +chettik +chetty +chevage +cheval +cheve +cheven +chevin +chevise +chevon +chevron +chevy +chew +chewer +chewink +chewy +cheyney +chhatri +chi +chia +chiasm +chiasma +chiaus +chibouk +chibrit +chic +chicane +chichi +chick +chicken +chicker +chicky +chicle +chico +chicory +chicot +chicote +chid +chidden +chide +chider +chiding +chidra +chief +chiefly +chield +chien +chiffer +chiffon +chiggak +chigger +chignon +chigoe +chih +chihfu +chikara +chil +child +childe +childed +childly +chile +chili +chiliad +chill +chilla +chilled +chiller +chillo +chillum +chilly +chiloma +chilver +chimble +chime +chimer +chimera +chimney +chin +china +chinar +chinch +chincha +chinche +chine +chined +ching +chingma +chinik +chinin +chink +chinker +chinkle +chinks +chinky +chinnam +chinned +chinny +chino +chinoa +chinol +chinse +chint +chintz +chip +chiplet +chipped +chipper +chippy +chips +chiral +chirata +chiripa +chirk +chirm +chiro +chirp +chirper +chirpy +chirr +chirrup +chisel +chit +chitak +chital +chitin +chiton +chitose +chitra +chitter +chitty +chive +chivey +chkalik +chlamyd +chlamys +chlor +chloral +chlore +chloric +chloryl +cho +choana +choate +choaty +chob +choca +chocard +chocho +chock +chocker +choel +choenix +choffer +choga +chogak +chogset +choice +choicy +choil +choiler +choir +chokage +choke +choker +choking +chokra +choky +chol +chola +cholane +cholate +chold +choleic +choler +cholera +choli +cholic +choline +cholla +choller +cholum +chomp +chondre +chonta +choop +choose +chooser +choosy +chop +chopa +chopin +chopine +chopped +chopper +choppy +choragy +choral +chord +chorda +chordal +chorded +chore +chorea +choreal +choree +choregy +choreic +choreus +chorial +choric +chorine +chorion +chorism +chorist +chorogi +choroid +chorook +chort +chorten +chortle +chorus +choryos +chose +chosen +chott +chough +chouka +choup +chous +chouse +chouser +chow +chowder +chowk +chowry +choya +chria +chrism +chrisma +chrisom +chroma +chrome +chromic +chromid +chromo +chromy +chromyl +chronal +chronic +chrotta +chrysal +chrysid +chrysin +chub +chubbed +chubby +chuck +chucker +chuckle +chucky +chuddar +chufa +chuff +chuffy +chug +chugger +chuhra +chukar +chukker +chukor +chulan +chullpa +chum +chummer +chummy +chump +chumpy +chun +chunari +chunga +chunk +chunky +chunner +chunnia +chunter +chupak +chupon +church +churchy +churel +churl +churled +churly +churm +churn +churr +churrus +chut +chute +chuter +chutney +chyack +chyak +chyle +chylify +chyloid +chylous +chymase +chyme +chymia +chymic +chymify +chymous +chypre +chytra +chytrid +cibol +cibory +ciboule +cicad +cicada +cicadid +cicala +cicely +cicer +cichlid +cidarid +cidaris +cider +cig +cigala +cigar +cigua +cilia +ciliary +ciliate +cilice +cilium +cimbia +cimelia +cimex +cimicid +cimline +cinch +cincher +cinclis +cinct +cinder +cindery +cine +cinel +cinema +cinene +cineole +cinerea +cingle +cinnyl +cinque +cinter +cinuran +cion +cipher +cipo +cipolin +cippus +circa +circle +circled +circler +circlet +circuit +circus +circusy +cirque +cirrate +cirri +cirrose +cirrous +cirrus +cirsoid +ciruela +cisco +cise +cisele +cissing +cissoid +cist +cista +cistae +cisted +cistern +cistic +cit +citable +citadel +citator +cite +citee +citer +citess +cithara +cither +citied +citify +citizen +citole +citral +citrate +citrean +citrene +citric +citril +citrin +citrine +citron +citrous +citrus +cittern +citua +city +citydom +cityful +cityish +cive +civet +civic +civics +civil +civilly +civism +civvy +cixiid +clabber +clachan +clack +clacker +clacket +clad +cladine +cladode +cladose +cladus +clag +claggum +claggy +claim +claimer +clairce +claith +claiver +clam +clamant +clamb +clamber +clame +clamer +clammed +clammer +clammy +clamor +clamp +clamper +clan +clang +clangor +clank +clanned +clap +clapnet +clapped +clapper +clapt +claque +claquer +clarain +claret +clarify +clarin +clarion +clarity +clark +claro +clart +clarty +clary +clash +clasher +clashy +clasp +clasper +claspt +class +classed +classer +classes +classic +classis +classy +clastic +clat +clatch +clatter +clatty +claught +clausal +clause +claut +clava +claval +clavate +clave +clavel +claver +clavial +clavier +claviol +clavis +clavola +clavus +clavy +claw +clawed +clawer +clawk +clawker +clay +clayen +clayer +clayey +clayish +clayman +claypan +cleach +clead +cleaded +cleam +cleamer +clean +cleaner +cleanly +cleanse +cleanup +clear +clearer +clearly +cleat +cleave +cleaver +cleche +cleck +cled +cledge +cledgy +clee +cleek +cleeked +cleeky +clef +cleft +clefted +cleg +clem +clement +clench +cleoid +clep +clergy +cleric +clerid +clerisy +clerk +clerkly +cleruch +cletch +cleuch +cleve +clever +clevis +clew +cliack +cliche +click +clicker +clicket +clicky +cliency +client +cliff +cliffed +cliffy +clift +clifty +clima +climata +climate +climath +climax +climb +climber +clime +clinal +clinch +cline +cling +clinger +clingy +clinia +clinic +clinium +clink +clinker +clinkum +clinoid +clint +clinty +clip +clipei +clipeus +clipped +clipper +clips +clipse +clipt +clique +cliquy +clisere +clit +clitch +clite +clites +clithe +clitia +clition +clitter +clival +clive +clivers +clivis +clivus +cloaca +cloacal +cloak +cloaked +cloam +cloamen +cloamer +clobber +clochan +cloche +clocher +clock +clocked +clocker +clod +clodder +cloddy +clodlet +cloff +clog +clogger +cloggy +cloghad +clogwyn +cloit +clomb +clomben +clonal +clone +clonic +clonism +clonus +cloof +cloop +cloot +clootie +clop +close +closed +closely +closen +closer +closet +closh +closish +closter +closure +clot +clotbur +clote +cloth +clothe +clothes +clothy +clotter +clotty +cloture +cloud +clouded +cloudy +clough +clour +clout +clouted +clouter +clouty +clove +cloven +clovene +clover +clovery +clow +clown +cloy +cloyer +cloying +club +clubbed +clubber +clubby +clubdom +clubman +cluck +clue +cluff +clump +clumpy +clumse +clumsy +clunch +clung +clunk +clupeid +cluster +clutch +cluther +clutter +cly +clyer +clype +clypeal +clypeus +clysis +clysma +clysmic +clyster +cnemial +cnemis +cnicin +cnida +coabode +coach +coachee +coacher +coachy +coact +coactor +coadapt +coadmit +coadore +coaged +coagent +coagula +coaid +coaita +coak +coakum +coal +coalbag +coalbin +coalbox +coaler +coalify +coalize +coalpit +coaly +coaming +coannex +coapt +coarb +coarse +coarsen +coast +coastal +coaster +coat +coated +coatee +coater +coati +coatie +coating +coax +coaxal +coaxer +coaxial +coaxing +coaxy +cob +cobaea +cobalt +cobang +cobbed +cobber +cobbing +cobble +cobbler +cobbly +cobbra +cobby +cobcab +cobego +cobhead +cobia +cobiron +coble +cobless +cobloaf +cobnut +cobola +cobourg +cobra +coburg +cobweb +cobwork +coca +cocaine +cocash +cocause +coccal +cocci +coccid +cocco +coccoid +coccous +coccule +coccus +coccyx +cochal +cochief +cochlea +cock +cockade +cockal +cocked +cocker +cocket +cockeye +cockily +cocking +cockish +cockle +cockled +cockler +cocklet +cockly +cockney +cockpit +cockshy +cockup +cocky +coco +cocoa +cocoach +coconut +cocoon +cocotte +coctile +coction +cocuisa +cocullo +cocuyo +cod +coda +codbank +codder +codding +coddle +coddler +code +codeine +coder +codex +codfish +codger +codhead +codical +codices +codicil +codify +codilla +codille +codist +codling +codman +codo +codol +codon +codworm +coe +coecal +coecum +coed +coelar +coelder +coelect +coelho +coelia +coeliac +coelian +coelin +coeline +coelom +coeloma +coempt +coenact +coenjoy +coenobe +coequal +coerce +coercer +coetus +coeval +coexert +coexist +coff +coffee +coffer +coffin +coffle +coffret +coft +cog +cogence +cogency +cogener +cogent +cogged +cogger +coggie +cogging +coggle +coggly +coghle +cogman +cognac +cognate +cognize +cogon +cogonal +cograil +cogroad +cogue +cogway +cogwood +cohabit +coheir +cohere +coherer +cohibit +coho +cohoba +cohol +cohort +cohosh +cohune +coif +coifed +coign +coigue +coil +coiled +coiler +coiling +coin +coinage +coiner +coinfer +coining +cointer +coiny +coir +coital +coition +coiture +coitus +cojudge +cojuror +coke +cokeman +coker +cokery +coking +coky +col +cola +colane +colarin +colate +colauxe +colback +cold +colder +coldish +coldly +cole +coletit +coleur +coli +colibri +colic +colical +colicky +colima +colin +coling +colitic +colitis +colk +coll +collage +collar +collard +collare +collate +collaud +collect +colleen +college +collery +collet +colley +collide +collie +collied +collier +collin +colline +colling +collins +collock +colloid +collop +collude +collum +colly +collyba +colmar +colobin +colon +colonel +colonic +colony +color +colored +colorer +colorin +colors +colory +coloss +colossi +colove +colp +colpeo +colport +colpus +colt +colter +coltish +colugo +columbo +column +colunar +colure +coly +colyone +colytic +colyum +colza +coma +comaker +comal +comamie +comanic +comart +comate +comb +combat +combed +comber +combine +combing +comble +comboy +combure +combust +comby +come +comedic +comedo +comedy +comely +comenic +comer +comes +comet +cometic +comfit +comfort +comfrey +comfy +comic +comical +comicry +coming +comino +comism +comital +comitia +comity +comma +command +commend +comment +commie +commit +commix +commixt +commode +common +commons +commot +commove +communa +commune +commute +comoid +comose +comourn +comous +compact +company +compare +compart +compass +compear +compeer +compel +compend +compete +compile +complex +complin +complot +comply +compo +compoer +compole +compone +compony +comport +compos +compose +compost +compote +compreg +compter +compute +comrade +con +conacre +conal +conamed +conatus +concave +conceal +concede +conceit +concent +concept +concern +concert +conch +concha +conchal +conche +conched +concher +conchy +concile +concise +concoct +concord +concupy +concur +concuss +cond +condemn +condign +condite +condole +condone +condor +conduce +conduct +conduit +condyle +cone +coned +coneen +coneine +conelet +coner +cones +confab +confact +confect +confess +confide +confine +confirm +confix +conflow +conflux +conform +confuse +confute +conga +congeal +congee +conger +congest +congius +congou +conic +conical +conicle +conics +conidia +conifer +conima +conin +conine +conject +conjoin +conjure +conjury +conk +conker +conkers +conky +conn +connach +connate +connect +conner +connex +conning +connive +connote +conoid +conopid +conquer +conred +consent +consign +consist +consol +console +consort +conspue +constat +consul +consult +consume +consute +contact +contain +conte +contect +contemn +content +conter +contest +context +contise +conto +contort +contour +contra +control +contund +contuse +conure +conus +conusee +conusor +conuzee +conuzor +convect +convene +convent +convert +conveth +convex +convey +convict +convive +convoke +convoy +cony +coo +cooba +coodle +cooee +cooer +coof +cooing +cooja +cook +cookdom +cookee +cooker +cookery +cooking +cookish +cookout +cooky +cool +coolant +coolen +cooler +coolie +cooling +coolish +coolly +coolth +coolung +cooly +coom +coomb +coomy +coon +cooncan +coonily +coontie +coony +coop +cooper +coopery +cooree +coorie +cooser +coost +coot +cooter +coothay +cootie +cop +copa +copable +copaene +copaiba +copaiye +copal +copalm +copart +coparty +cope +copei +copeman +copen +copepod +coper +coperta +copied +copier +copilot +coping +copious +copis +copist +copita +copolar +copped +copper +coppery +coppet +coppice +coppin +copping +copple +coppled +coppy +copr +copra +coprose +copse +copsing +copsy +copter +copula +copular +copus +copy +copycat +copyism +copyist +copyman +coque +coquet +coquina +coquita +coquito +cor +cora +corach +coracle +corah +coraise +coral +coraled +coram +coranto +corban +corbeau +corbeil +corbel +corbie +corbula +corcass +corcir +cord +cordage +cordant +cordate +cordax +corded +cordel +corder +cordial +cordies +cording +cordite +cordoba +cordon +cordy +cordyl +core +corebel +cored +coreid +coreign +corella +corer +corf +corge +corgi +corial +coriin +coring +corinne +corium +cork +corkage +corke +corked +corker +corking +corkish +corkite +corky +corm +cormel +cormoid +cormous +cormus +corn +cornage +cornbin +corncob +cornea +corneal +cornein +cornel +corner +cornet +corneum +cornic +cornice +cornin +corning +cornu +cornual +cornule +cornute +cornuto +corny +coroa +corody +corol +corolla +corona +coronad +coronae +coronal +coroner +coronet +corozo +corp +corpora +corps +corpse +corpus +corrade +corral +correal +correct +corrie +corrige +corrode +corrupt +corsac +corsage +corsair +corse +corset +corsie +corsite +corta +cortege +cortex +cortez +cortin +cortina +coruco +coruler +corupay +corver +corvina +corvine +corvoid +coryl +corylin +corymb +coryza +cos +cosaque +coscet +coseat +cosec +cosech +coseism +coset +cosh +cosher +coshery +cosily +cosine +cosmic +cosmism +cosmist +cosmos +coss +cossas +cosse +cosset +cossid +cost +costa +costal +costar +costard +costate +costean +coster +costing +costive +costly +costrel +costula +costume +cosy +cot +cotch +cote +coteful +coterie +coth +cothe +cothish +cothon +cothurn +cothy +cotidal +cotise +cotland +cotman +coto +cotoin +cotoro +cotrine +cotset +cotta +cottage +cotte +cotted +cotter +cottid +cottier +cottoid +cotton +cottony +cotty +cotuit +cotula +cotutor +cotwin +cotwist +cotyla +cotylar +cotype +couac +coucal +couch +couched +couchee +coucher +couchy +coude +coudee +coue +cougar +cough +cougher +cougnar +coul +could +coulee +coulomb +coulure +couma +coumara +council +counite +counsel +count +counter +countor +country +county +coup +coupage +coupe +couped +coupee +couper +couple +coupled +coupler +couplet +coupon +coupure +courage +courant +courap +courb +courge +courida +courier +couril +courlan +course +coursed +courser +court +courter +courtin +courtly +cousin +cousiny +coutel +couter +couth +couthie +coutil +couvade +couxia +covado +cove +coved +covent +cover +covered +coverer +covert +covet +coveter +covey +covid +covin +coving +covisit +covite +cow +cowal +coward +cowardy +cowbane +cowbell +cowbind +cowbird +cowboy +cowdie +coween +cower +cowfish +cowgate +cowgram +cowhage +cowheel +cowherb +cowherd +cowhide +cowhorn +cowish +cowitch +cowl +cowle +cowled +cowlick +cowlike +cowling +cowman +cowpath +cowpea +cowpen +cowpock +cowpox +cowrie +cowroid +cowshed +cowskin +cowslip +cowtail +cowweed +cowy +cowyard +cox +coxa +coxal +coxcomb +coxite +coxitis +coxy +coy +coyan +coydog +coyish +coyly +coyness +coynye +coyo +coyol +coyote +coypu +coyure +coz +coze +cozen +cozener +cozier +cozily +cozy +crab +crabbed +crabber +crabby +craber +crablet +crabman +crack +cracked +cracker +crackle +crackly +cracky +craddy +cradge +cradle +cradler +craft +crafty +crag +craggan +cragged +craggy +craichy +crain +craisey +craizey +crajuru +crake +crakow +cram +crambe +crambid +cramble +crambly +crambo +crammer +cramp +cramped +cramper +crampet +crampon +crampy +cran +cranage +crance +crane +craner +craney +crania +craniad +cranial +cranian +cranic +cranium +crank +cranked +cranker +crankle +crankly +crankum +cranky +crannog +cranny +crants +crap +crapaud +crape +crappie +crappin +crapple +crappo +craps +crapy +crare +crash +crasher +crasis +crass +crassly +cratch +crate +crater +craunch +cravat +crave +craven +craver +craving +cravo +craw +crawdad +crawful +crawl +crawler +crawley +crawly +crawm +crawtae +crayer +crayon +craze +crazed +crazily +crazy +crea +creagh +creaght +creak +creaker +creaky +cream +creamer +creamy +creance +creant +crease +creaser +creasy +creat +create +creatic +creator +creche +credent +credit +cree +creed +creedal +creeded +creek +creeker +creeky +creel +creeler +creem +creen +creep +creeper +creepie +creepy +creese +creesh +creeshy +cremate +cremone +cremor +cremule +crena +crenate +crenel +crenele +crenic +crenula +creole +creosol +crepe +crepine +crepon +crept +crepy +cresol +cresoxy +cress +cressed +cresset +cresson +cressy +crest +crested +cresyl +creta +cretic +cretify +cretin +cretion +crevice +crew +crewel +crewer +crewman +crib +cribber +cribble +cribo +cribral +cric +crick +cricket +crickey +crickle +cricoid +cried +crier +criey +crig +crile +crime +crimine +crimp +crimper +crimple +crimpy +crimson +crin +crinal +crine +crined +crinet +cringe +cringer +cringle +crinite +crink +crinkle +crinkly +crinoid +crinose +crinula +cripes +cripple +cripply +crises +crisic +crisis +crisp +crisped +crisper +crisply +crispy +criss +crissal +crissum +crista +critch +crith +critic +crizzle +cro +croak +croaker +croaky +croc +crocard +croceic +crocein +croche +crochet +croci +crocin +crock +crocker +crocket +crocky +crocus +croft +crofter +crome +crone +cronet +cronish +cronk +crony +crood +croodle +crook +crooked +crooken +crookle +crool +croon +crooner +crop +cropman +croppa +cropper +croppie +croppy +croquet +crore +crosa +crosier +crosnes +cross +crosse +crossed +crosser +crossly +crotal +crotalo +crotch +crotchy +crotin +crottle +crotyl +crouch +croup +croupal +croupe +croupy +crouse +crout +croute +crouton +crow +crowbar +crowd +crowded +crowder +crowdy +crower +crowhop +crowing +crowl +crown +crowned +crowner +crowtoe +croy +croyden +croydon +croze +crozer +crozzle +crozzly +crubeen +cruce +cruces +cruche +crucial +crucian +crucify +crucily +cruck +crude +crudely +crudity +cruel +cruelly +cruels +cruelty +cruent +cruet +cruety +cruise +cruiser +cruive +cruller +crum +crumb +crumber +crumble +crumbly +crumby +crumen +crumlet +crummie +crummy +crump +crumper +crumpet +crumple +crumply +crumpy +crunch +crunchy +crunk +crunkle +crunode +crunt +cruor +crupper +crural +crureus +crus +crusade +crusado +cruse +crush +crushed +crusher +crusie +crusily +crust +crusta +crustal +crusted +cruster +crusty +crutch +cruth +crutter +crux +cry +cryable +crybaby +crying +cryogen +cryosel +crypt +crypta +cryptal +crypted +cryptic +crystal +crystic +csardas +ctene +ctenoid +cuadra +cuarta +cub +cubage +cubbing +cubbish +cubby +cubdom +cube +cubeb +cubelet +cuber +cubhood +cubi +cubic +cubica +cubical +cubicle +cubicly +cubism +cubist +cubit +cubital +cubited +cubito +cubitus +cuboid +cuck +cuckold +cuckoo +cuculla +cud +cudava +cudbear +cudden +cuddle +cuddly +cuddy +cudgel +cudweed +cue +cueball +cueca +cueist +cueman +cuerda +cuesta +cuff +cuffer +cuffin +cuffy +cuinage +cuir +cuirass +cuisine +cuisse +cuissen +cuisten +cuke +culbut +culebra +culet +culeus +culgee +culicid +cull +culla +cullage +culler +cullet +culling +cullion +cullis +cully +culm +culmen +culmy +culotte +culpa +culpose +culprit +cult +cultch +cultic +cultish +cultism +cultist +cultual +culture +cultus +culver +culvert +cum +cumal +cumay +cumbent +cumber +cumbha +cumbly +cumbre +cumbu +cumene +cumenyl +cumhal +cumic +cumidin +cumin +cuminal +cuminic +cuminol +cuminyl +cummer +cummin +cumol +cump +cumshaw +cumular +cumuli +cumulus +cumyl +cuneal +cuneate +cunette +cuneus +cunila +cunjah +cunjer +cunner +cunning +cunye +cuorin +cup +cupay +cupcake +cupel +cupeler +cupful +cuphead +cupidon +cupless +cupman +cupmate +cupola +cupolar +cupped +cupper +cupping +cuppy +cuprene +cupric +cupride +cuprite +cuproid +cuprose +cuprous +cuprum +cupseed +cupula +cupule +cur +curable +curably +curacao +curacy +curare +curate +curatel +curatic +curator +curb +curber +curbing +curby +curcas +curch +curd +curdle +curdler +curdly +curdy +cure +curer +curette +curfew +curial +curiate +curie +curin +curine +curing +curio +curiosa +curioso +curious +curite +curium +curl +curled +curler +curlew +curlike +curlily +curling +curly +curn +curney +curnock +curple +curr +currach +currack +curragh +currant +current +curried +currier +currish +curry +cursal +curse +cursed +curser +curship +cursive +cursor +cursory +curst +curstly +cursus +curt +curtail +curtain +curtal +curtate +curtesy +curtly +curtsy +curua +curuba +curule +cururo +curvant +curvate +curve +curved +curver +curvet +curvity +curvous +curvy +cuscus +cusec +cush +cushag +cushat +cushaw +cushion +cushy +cusie +cusk +cusp +cuspal +cuspate +cusped +cuspid +cuspule +cuss +cussed +cusser +cusso +custard +custody +custom +customs +cut +cutaway +cutback +cutch +cutcher +cute +cutely +cutheal +cuticle +cutie +cutin +cutis +cutitis +cutlass +cutler +cutlery +cutlet +cutling +cutlips +cutoff +cutout +cutover +cuttage +cuttail +cutted +cutter +cutting +cuttle +cuttler +cuttoo +cutty +cutup +cutweed +cutwork +cutworm +cuvette +cuvy +cuya +cwierc +cwm +cyan +cyanate +cyanean +cyanic +cyanide +cyanin +cyanine +cyanite +cyanize +cyanol +cyanole +cyanose +cyanus +cyath +cyathos +cyathus +cycad +cyclane +cyclar +cyclas +cycle +cyclene +cycler +cyclian +cyclic +cyclide +cycling +cyclism +cyclist +cyclize +cycloid +cyclone +cyclope +cyclopy +cyclose +cyclus +cyesis +cygnet +cygnine +cyke +cylix +cyma +cymar +cymba +cymbal +cymbalo +cymbate +cyme +cymelet +cymene +cymling +cymoid +cymose +cymous +cymule +cynebot +cynic +cynical +cynipid +cynism +cynoid +cyp +cypre +cypres +cypress +cyprine +cypsela +cyrus +cyst +cystal +cysted +cystic +cystid +cystine +cystis +cystoid +cystoma +cystose +cystous +cytase +cytasic +cytitis +cytode +cytoid +cytoma +cyton +cytost +cytula +czar +czardas +czardom +czarian +czaric +czarina +czarish +czarism +czarist +d +da +daalder +dab +dabb +dabba +dabber +dabble +dabbler +dabby +dablet +daboia +daboya +dabster +dace +dacite +dacitic +dacker +dacoit +dacoity +dacryon +dactyl +dad +dada +dadap +dadder +daddle +daddock +daddy +dade +dado +dae +daedal +daemon +daemony +daer +daff +daffery +daffing +daffish +daffle +daffy +daft +daftly +dag +dagaba +dagame +dagassa +dagesh +dagga +dagger +daggers +daggle +daggly +daggy +daghesh +daglock +dagoba +dags +dah +dahoon +daidle +daidly +daiker +daikon +daily +daimen +daimio +daimon +dain +daincha +dainty +daira +dairi +dairy +dais +daisied +daisy +daitya +daiva +dak +daker +dakir +dal +dalar +dale +daleman +daler +daleth +dali +dalk +dallack +dalle +dalles +dallier +dally +dalt +dalteen +dalton +dam +dama +damage +damager +damages +daman +damask +damasse +dambose +dambrod +dame +damiana +damie +damier +damine +damlike +dammar +damme +dammer +dammish +damn +damned +damner +damnify +damning +damnous +damp +dampang +damped +dampen +damper +damping +dampish +damply +dampy +damsel +damson +dan +danaid +danaide +danaine +danaite +dance +dancer +dancery +dancing +dand +danda +dander +dandify +dandily +dandle +dandler +dandy +dang +danger +dangle +dangler +danglin +danio +dank +dankish +dankly +danli +danner +dannock +dansant +danta +danton +dao +daoine +dap +daphnin +dapicho +dapico +dapifer +dapper +dapple +dappled +dar +darac +daraf +darat +darbha +darby +dardaol +dare +dareall +dareful +darer +daresay +darg +dargah +darger +dargue +dari +daribah +daric +daring +dariole +dark +darken +darkful +darkish +darkle +darkly +darky +darling +darn +darned +darnel +darner +darnex +darning +daroga +daroo +darr +darrein +darst +dart +dartars +darter +darting +dartle +dartman +dartoic +dartoid +dartos +dartre +darts +darzee +das +dash +dashed +dashee +dasheen +dasher +dashing +dashpot +dashy +dasi +dasnt +dassie +dassy +dastard +dastur +dasturi +dasyure +data +datable +datably +dataria +datary +datch +datcha +date +dater +datil +dating +dation +datival +dative +dattock +datum +daturic +daub +daube +dauber +daubery +daubing +dauby +daud +daunch +dauncy +daunt +daunter +daunton +dauphin +daut +dautie +dauw +davach +daven +daver +daverdy +davit +davoch +davy +davyne +daw +dawdle +dawdler +dawdy +dawish +dawkin +dawn +dawning +dawny +dawtet +dawtit +dawut +day +dayal +daybeam +daybook +daydawn +dayfly +dayless +daylit +daylong +dayman +daymare +daymark +dayroom +days +daysman +daystar +daytale +daytide +daytime +dayward +daywork +daywrit +daze +dazed +dazedly +dazy +dazzle +dazzler +de +deacon +dead +deaden +deader +deadeye +deading +deadish +deadly +deadman +deadpan +deadpay +deaf +deafen +deafish +deafly +deair +deal +dealate +dealer +dealing +dealt +dean +deaner +deanery +deaness +dear +dearie +dearly +dearth +deary +deash +deasil +death +deathin +deathly +deathy +deave +deavely +deb +debacle +debadge +debar +debark +debase +debaser +debate +debater +debauch +debby +debeige +deben +debile +debind +debit +debord +debosh +debouch +debride +debrief +debris +debt +debtee +debtful +debtor +debunk +debus +debut +decad +decadal +decade +decadic +decafid +decagon +decal +decamp +decan +decanal +decane +decani +decant +decap +decapod +decarch +decare +decart +decast +decate +decator +decatyl +decay +decayed +decayer +decease +deceit +deceive +decence +decency +decene +decent +decenyl +decern +decess +deciare +decibel +decide +decided +decider +decidua +decil +decile +decima +decimal +deck +decke +decked +deckel +decker +deckie +decking +deckle +declaim +declare +declass +decline +declive +decoat +decoct +decode +decoic +decoke +decolor +decorum +decoy +decoyer +decream +decree +decreer +decreet +decrete +decrew +decrial +decried +decrier +decrown +decry +decuman +decuple +decuria +decurve +decury +decus +decyl +decylic +decyne +dedimus +dedo +deduce +deduct +dee +deed +deedbox +deedeed +deedful +deedily +deedy +deem +deemer +deemie +deep +deepen +deeping +deepish +deeply +deer +deerdog +deerlet +deevey +deface +defacer +defalk +defame +defamed +defamer +defassa +defat +default +defease +defeat +defect +defence +defend +defense +defer +defial +defiant +defiber +deficit +defier +defile +defiled +defiler +define +defined +definer +deflate +deflect +deflesh +deflex +defog +deforce +deform +defoul +defraud +defray +defrock +defrost +deft +deftly +defunct +defuse +defy +deg +degas +degauss +degerm +degged +degger +deglaze +degorge +degrade +degrain +degree +degu +degum +degust +dehair +dehisce +dehorn +dehors +dehort +dehull +dehusk +deice +deicer +deicide +deictic +deific +deifier +deiform +deify +deign +deink +deinos +deiseal +deism +deist +deistic +deity +deject +dejecta +dejeune +dekko +dekle +delaine +delapse +delate +delater +delator +delawn +delay +delayer +dele +delead +delenda +delete +delf +delft +delible +delict +delight +delime +delimit +delint +deliver +dell +deloul +delouse +delta +deltaic +deltal +deltic +deltoid +delude +deluder +deluge +deluxe +delve +delver +demagog +demal +demand +demarch +demark +demast +deme +demean +demency +dement +demerit +demesne +demi +demibob +demidog +demigod +demihag +demiman +demiowl +demiox +demiram +demirep +demise +demiss +demit +demivol +demob +demoded +demoid +demon +demonic +demonry +demos +demote +demotic +demount +demulce +demure +demy +den +denaro +denary +denat +denda +dendral +dendric +dendron +dene +dengue +denial +denier +denim +denizen +dennet +denote +dense +densely +densen +densher +densify +density +dent +dental +dentale +dentary +dentata +dentate +dentel +denter +dentex +dentil +dentile +dentin +dentine +dentist +dentoid +denture +denty +denude +denuder +deny +deodand +deodara +deota +depa +depaint +depark +depart +depas +depass +depend +depeter +dephase +depict +deplane +deplete +deplore +deploy +deplume +deplump +depoh +depone +deport +deposal +depose +deposer +deposit +depot +deprave +depress +deprint +deprive +depside +depth +depthen +depute +deputy +dequeen +derah +deraign +derail +derange +derat +derate +derater +deray +derby +dere +dereism +deric +deride +derider +derival +derive +derived +deriver +derm +derma +dermad +dermal +dermic +dermis +dermoid +dermol +dern +dernier +derout +derrick +derride +derries +derry +dertrum +derust +dervish +desalt +desand +descale +descant +descend +descent +descort +descry +deseed +deseret +desert +deserve +desex +desi +desight +design +desire +desired +desirer +desist +desize +desk +deslime +desma +desman +desmic +desmid +desmine +desmoid +desmoma +desmon +despair +despect +despise +despite +despoil +despond +despot +dess +dessa +dessert +dessil +destain +destine +destiny +destour +destroy +desuete +desugar +desyl +detach +detail +detain +detar +detax +detect +detent +deter +deterge +detest +detin +detinet +detinue +detour +detract +detrain +detrude +detune +detur +deuce +deuced +deul +deuton +dev +deva +devall +devalue +devance +devast +devata +develin +develop +devest +deviant +deviate +device +devil +deviled +deviler +devilet +devilry +devily +devious +devisal +devise +devisee +deviser +devisor +devoice +devoid +devoir +devolve +devote +devoted +devotee +devoter +devour +devout +devow +devvel +dew +dewan +dewanee +dewater +dewax +dewbeam +dewclaw +dewcup +dewdamp +dewdrop +dewer +dewfall +dewily +dewlap +dewless +dewlike +dewool +deworm +dewret +dewtry +dewworm +dewy +dexter +dextrad +dextral +dextran +dextrin +dextro +dey +deyship +dezinc +dha +dhabb +dhai +dhak +dhamnoo +dhan +dhangar +dhanuk +dhanush +dharana +dharani +dharma +dharna +dhaura +dhauri +dhava +dhaw +dheri +dhobi +dhole +dhoni +dhoon +dhoti +dhoul +dhow +dhu +dhunchi +dhurra +dhyal +dhyana +di +diabase +diacid +diacle +diacope +diact +diactin +diadem +diaderm +diaene +diagram +dial +dialect +dialer +dialin +dialing +dialist +dialkyl +diallel +diallyl +dialyze +diamb +diambic +diamide +diamine +diamond +dian +diander +dianite +diapase +diapasm +diaper +diaplex +diapsid +diarch +diarchy +diarial +diarian +diarist +diarize +diary +diastem +diaster +diasyrm +diatom +diaulic +diaulos +diaxial +diaxon +diazide +diazine +diazoic +diazole +diazoma +dib +dibase +dibasic +dibatag +dibber +dibble +dibbler +dibbuk +dibhole +dibrach +dibrom +dibs +dicast +dice +dicebox +dicecup +diceman +dicer +dicetyl +dich +dichas +dichord +dicing +dick +dickens +dicker +dickey +dicky +dicolic +dicolon +dicot +dicotyl +dicta +dictate +dictic +diction +dictum +dicycle +did +didder +diddle +diddler +diddy +didelph +didie +didine +didle +didna +didnt +didromy +didst +didym +didymia +didymus +die +dieb +dieback +diedral +diedric +diehard +dielike +diem +diene +dier +diesel +diesis +diet +dietal +dietary +dieter +diethyl +dietic +dietics +dietine +dietist +diewise +diffame +differ +diffide +difform +diffuse +dig +digamma +digamy +digenic +digeny +digest +digger +digging +dight +dighter +digit +digital +digitus +diglot +diglyph +digmeat +dignify +dignity +digram +digraph +digress +digs +dihalo +diiamb +diiodo +dika +dikage +dike +diker +diketo +dikkop +dilate +dilated +dilater +dilator +dildo +dilemma +dilker +dill +dilli +dillier +dilling +dillue +dilluer +dilly +dilo +dilogy +diluent +dilute +diluted +dilutee +diluter +dilutor +diluvia +dim +dimber +dimble +dime +dimer +dimeran +dimeric +dimeter +dimiss +dimit +dimity +dimly +dimmed +dimmer +dimmest +dimmet +dimmish +dimness +dimoric +dimorph +dimple +dimply +dimps +dimpsy +din +dinar +dinder +dindle +dine +diner +dineric +dinero +dinette +ding +dingar +dingbat +dinge +dingee +dinghee +dinghy +dingily +dingle +dingly +dingo +dingus +dingy +dinic +dinical +dining +dinitro +dink +dinkey +dinkum +dinky +dinmont +dinner +dinnery +dinomic +dinsome +dint +dinus +diobely +diobol +diocese +diode +diodont +dioecy +diol +dionise +dionym +diopter +dioptra +dioptry +diorama +diorite +diose +diosmin +diota +diotic +dioxane +dioxide +dioxime +dioxy +dip +dipetto +diphase +diphead +diplex +diploe +diploic +diploid +diplois +diploma +diplont +diplopy +dipnoan +dipnoid +dipode +dipodic +dipody +dipolar +dipole +diporpa +dipped +dipper +dipping +dipsas +dipsey +dipter +diptote +diptych +dipware +dipygus +dipylon +dipyre +dird +dirdum +dire +direct +direful +direly +dirempt +dirge +dirgler +dirhem +dirk +dirl +dirndl +dirt +dirten +dirtily +dirty +dis +disable +disagio +disally +disarm +disavow +disawa +disazo +disband +disbar +disbark +disbody +disbud +disbury +disc +discage +discal +discard +discase +discept +discern +discerp +discoid +discord +discous +discus +discuss +disdain +disdub +disease +disedge +diseme +disemic +disfame +disfen +disgig +disglut +disgood +disgown +disgulf +disgust +dish +dished +dishelm +disher +dishful +dishome +dishorn +dishpan +dishrag +disject +disjoin +disjune +disk +disleaf +dislike +dislimn +dislink +dislip +disload +dislove +dismain +dismal +disman +dismark +dismask +dismast +dismay +disme +dismiss +disna +disnest +disnew +disobey +disodic +disomic +disomus +disorb +disown +dispark +dispart +dispel +dispend +display +dispone +dispope +disport +dispose +dispost +dispulp +dispute +disrank +disrate +disring +disrobe +disroof +disroot +disrump +disrupt +diss +disseat +dissect +dissent +dissert +dissoul +dissuit +distad +distaff +distain +distal +distale +distant +distend +distent +distich +distill +distome +distort +distune +disturb +disturn +disuse +diswood +disyoke +dit +dita +dital +ditch +ditcher +dite +diter +dither +dithery +dithion +ditolyl +ditone +dittamy +dittany +dittay +dittied +ditto +ditty +diurnal +diurne +div +diva +divan +divata +dive +divel +diver +diverge +divers +diverse +divert +divest +divide +divided +divider +divine +diviner +diving +divinyl +divisor +divorce +divot +divoto +divulge +divulse +divus +divvy +diwata +dixie +dixit +dixy +dizain +dizen +dizoic +dizzard +dizzily +dizzy +djave +djehad +djerib +djersa +do +doab +doable +doarium +doat +doated +doater +doating +doatish +dob +dobbed +dobber +dobbin +dobbing +dobby +dobe +dobla +doblon +dobra +dobrao +dobson +doby +doc +docent +docible +docile +docity +dock +dockage +docken +docker +docket +dockize +dockman +docmac +doctor +doctrix +dod +dodd +doddart +dodded +dodder +doddery +doddie +dodding +doddle +doddy +dodecyl +dodge +dodger +dodgery +dodgily +dodgy +dodkin +dodlet +dodman +dodo +dodoism +dodrans +doe +doebird +doeglic +doer +does +doeskin +doesnt +doest +doff +doffer +dog +dogal +dogate +dogbane +dogbite +dogblow +dogboat +dogbolt +dogbush +dogcart +dogdom +doge +dogedom +dogface +dogfall +dogfish +dogfoot +dogged +dogger +doggery +doggess +doggish +doggo +doggone +doggrel +doggy +doghead +doghole +doghood +dogie +dogless +doglike +dogly +dogma +dogman +dogmata +dogs +dogship +dogskin +dogtail +dogtie +dogtrot +dogvane +dogwood +dogy +doigt +doiled +doily +doina +doing +doings +doit +doited +doitkin +doke +dokhma +dola +dolabra +dolcan +dolcian +dolcino +doldrum +dole +doleful +dolent +doless +doli +dolia +dolina +doline +dolium +doll +dollar +dolldom +dollier +dollish +dollop +dolly +dolman +dolmen +dolor +dolose +dolous +dolphin +dolt +doltish +dom +domain +domal +domba +dome +doment +domer +domett +domic +domical +domine +dominie +domino +dominus +domite +domitic +domn +domnei +domoid +dompt +domy +don +donable +donary +donate +donated +donatee +donator +donax +done +donee +doney +dong +donga +dongon +donjon +donkey +donna +donnert +donnish +donnism +donnot +donor +donship +donsie +dont +donum +doob +doocot +doodab +doodad +doodle +doodler +dooja +dook +dooket +dookit +dool +doolee +dooley +dooli +doolie +dooly +doom +doomage +doomer +doomful +dooms +doon +door +doorba +doorboy +doored +doorman +doorway +dop +dopa +dopatta +dope +doper +dopey +dopper +doppia +dor +dorab +dorad +dorado +doree +dorhawk +doria +dorje +dorlach +dorlot +dorm +dormant +dormer +dormie +dormy +dorn +dorneck +dornic +dornick +dornock +dorp +dorsad +dorsal +dorsale +dorsel +dorser +dorsum +dorter +dorts +dorty +doruck +dory +dos +dosa +dosadh +dosage +dose +doser +dosis +doss +dossal +dossel +dosser +dossier +dossil +dossman +dot +dotage +dotal +dotard +dotardy +dotate +dotchin +dote +doted +doter +doting +dotish +dotkin +dotless +dotlike +dotted +dotter +dottily +dotting +dottle +dottler +dotty +doty +douar +double +doubled +doubler +doublet +doubly +doubt +doubter +douc +douce +doucely +doucet +douche +doucin +doucine +doudle +dough +dought +doughty +doughy +doum +doup +douping +dour +dourine +dourly +douse +douser +dout +douter +doutous +dove +dovecot +dovekey +dovekie +dovelet +dover +dovish +dow +dowable +dowager +dowcet +dowd +dowdily +dowdy +dowed +dowel +dower +doweral +dowery +dowf +dowie +dowily +dowitch +dowl +dowlas +dowless +down +downby +downcry +downcut +downer +downily +downlie +downset +downway +downy +dowp +dowry +dowse +dowser +dowset +doxa +doxy +doze +dozed +dozen +dozener +dozenth +dozer +dozily +dozy +dozzled +drab +drabbet +drabble +drabby +drably +drachm +drachma +dracma +draff +draffy +draft +draftee +drafter +drafty +drag +dragade +dragbar +dragged +dragger +draggle +draggly +draggy +dragman +dragnet +drago +dragon +dragoon +dragsaw +drail +drain +draine +drained +drainer +drake +dram +drama +dramm +dramme +drammed +drammer +drang +drank +drant +drape +draper +drapery +drassid +drastic +drat +drate +dratted +draught +dravya +draw +drawarm +drawbar +drawboy +drawcut +drawee +drawer +drawers +drawing +drawk +drawl +drawler +drawly +drawn +drawnet +drawoff +drawout +drawrod +dray +drayage +drayman +drazel +dread +dreader +dreadly +dream +dreamer +dreamsy +dreamt +dreamy +drear +drearly +dreary +dredge +dredger +dree +dreep +dreepy +dreg +dreggy +dregs +drench +dreng +dress +dressed +dresser +dressy +drest +drew +drewite +drias +drib +dribble +driblet +driddle +dried +drier +driest +drift +drifter +drifty +drill +driller +drillet +dringle +drink +drinker +drinn +drip +dripper +dripple +drippy +drisk +drivage +drive +drivel +driven +driver +driving +drizzle +drizzly +droddum +drogh +drogher +drogue +droit +droll +drolly +drome +dromic +dromond +dromos +drona +dronage +drone +droner +drongo +dronish +drony +drool +droop +drooper +droopt +droopy +drop +droplet +dropman +dropout +dropper +droppy +dropsy +dropt +droshky +drosky +dross +drossel +drosser +drossy +drostdy +droud +drought +drouk +drove +drover +drovy +drow +drown +drowner +drowse +drowsy +drub +drubber +drubbly +drucken +drudge +drudger +druery +drug +drugger +drugget +druggy +drugman +druid +druidic +druidry +druith +drum +drumble +drumlin +drumly +drummer +drummy +drung +drungar +drunk +drunken +drupal +drupe +drupel +druse +drusy +druxy +dry +dryad +dryadic +dryas +drycoal +dryfoot +drying +dryish +dryly +dryness +dryster +dryth +duad +duadic +dual +duali +dualin +dualism +dualist +duality +dualize +dually +duarch +duarchy +dub +dubash +dubb +dubba +dubbah +dubber +dubbing +dubby +dubiety +dubious +dubs +ducal +ducally +ducape +ducat +ducato +ducdame +duces +duchess +duchy +duck +ducker +duckery +duckie +ducking +duckpin +duct +ducted +ductile +duction +ductor +ductule +dud +dudaim +dudder +duddery +duddies +dude +dudeen +dudgeon +dudine +dudish +dudism +dudler +dudley +dudman +due +duel +dueler +dueling +duelist +duello +dueness +duenna +duer +duet +duff +duffel +duffer +duffing +dufoil +dufter +duftery +dug +dugal +dugdug +duggler +dugong +dugout +dugway +duhat +duiker +duim +duit +dujan +duke +dukedom +dukely +dukery +dukhn +dukker +dulbert +dulcet +dulcian +dulcify +dulcose +duledge +duler +dulia +dull +dullard +duller +dullery +dullify +dullish +dullity +dully +dulosis +dulotic +dulse +dult +dultie +duly +dum +duma +dumaist +dumb +dumba +dumbcow +dumbly +dumdum +dummel +dummy +dumose +dump +dumpage +dumper +dumpily +dumping +dumpish +dumple +dumpoke +dumpy +dumsola +dun +dunair +dunal +dunbird +dunce +duncery +dunch +duncify +duncish +dunder +dune +dunfish +dung +dungeon +dunger +dungol +dungon +dungy +dunite +dunk +dunker +dunlin +dunnage +dunne +dunner +dunness +dunnish +dunnite +dunnock +dunny +dunst +dunt +duntle +duny +duo +duodena +duodene +duole +duopod +duopoly +duotone +duotype +dup +dupable +dupe +dupedom +duper +dupery +dupion +dupla +duple +duplet +duplex +duplify +duplone +duppy +dura +durable +durably +durain +dural +duramen +durance +durant +durax +durbar +dure +durene +durenol +duress +durgan +durian +during +durity +durmast +durn +duro +durra +durrie +durrin +durry +durst +durwaun +duryl +dusack +duscle +dush +dusio +dusk +dusken +duskily +duskish +duskly +dusky +dust +dustbin +dustbox +dustee +duster +dustily +dusting +dustman +dustpan +dustuck +dusty +dutch +duteous +dutied +dutiful +dutra +duty +duumvir +duvet +duvetyn +dux +duyker +dvaita +dvandva +dwale +dwalm +dwang +dwarf +dwarfy +dwell +dwelled +dweller +dwelt +dwindle +dwine +dyad +dyadic +dyarchy +dyaster +dyce +dye +dyeable +dyeing +dyer +dyester +dyeware +dyeweed +dyewood +dying +dyingly +dyke +dyker +dynamic +dynamis +dynamo +dynast +dynasty +dyne +dyphone +dyslogy +dysnomy +dyspnea +dystome +dysuria +dysuric +dzeren +e +ea +each +eager +eagerly +eagle +eagless +eaglet +eagre +ean +ear +earache +earbob +earcap +eardrop +eardrum +eared +earful +earhole +earing +earl +earlap +earldom +earless +earlet +earlike +earlish +earlock +early +earmark +earn +earner +earnest +earnful +earning +earpick +earplug +earring +earshot +earsore +eartab +earth +earthed +earthen +earthly +earthy +earwax +earwig +earworm +earwort +ease +easeful +easel +easer +easier +easiest +easily +easing +east +easter +eastern +easting +easy +eat +eatable +eatage +eaten +eater +eatery +eating +eats +eave +eaved +eaver +eaves +ebb +ebbman +eboe +ebon +ebonist +ebonite +ebonize +ebony +ebriate +ebriety +ebrious +ebulus +eburine +ecad +ecanda +ecarte +ecbatic +ecbole +ecbolic +ecdemic +ecderon +ecdysis +ecesic +ecesis +eche +echea +echelon +echidna +echinal +echinid +echinus +echo +echoer +echoic +echoism +echoist +echoize +ecize +ecklein +eclair +eclat +eclegm +eclegma +eclipse +eclogue +ecoid +ecole +ecology +economy +ecotone +ecotype +ecphore +ecru +ecstasy +ectad +ectal +ectally +ectasia +ectasis +ectatic +ectene +ecthyma +ectiris +ectopia +ectopic +ectopy +ectozoa +ectypal +ectype +eczema +edacity +edaphic +edaphon +edder +eddish +eddo +eddy +edea +edeagra +edeitis +edema +edemic +edenite +edental +edestan +edestin +edge +edged +edgeman +edger +edging +edgrew +edgy +edh +edible +edict +edictal +edicule +edifice +edifier +edify +edit +edital +edition +editor +educand +educate +educe +educive +educt +eductor +eegrass +eel +eelboat +eelbob +eelcake +eeler +eelery +eelfare +eelfish +eellike +eelpot +eelpout +eelshop +eelskin +eelware +eelworm +eely +eer +eerie +eerily +effable +efface +effacer +effect +effects +effendi +effete +effigy +efflate +efflux +efform +effort +effulge +effund +effuse +eft +eftest +egad +egality +egence +egeran +egest +egesta +egg +eggcup +egger +eggfish +egghead +egghot +egging +eggler +eggless +egglike +eggnog +eggy +egilops +egipto +egma +ego +egohood +egoism +egoist +egoity +egoize +egoizer +egol +egomism +egotism +egotist +egotize +egress +egret +eh +eheu +ehlite +ehuawa +eident +eider +eidetic +eidolic +eidolon +eight +eighth +eighty +eigne +eimer +einkorn +eisodic +either +eject +ejecta +ejector +ejoo +ekaha +eke +eker +ekerite +eking +ekka +ekphore +ektene +ektenes +el +elaidic +elaidin +elain +elaine +elance +eland +elanet +elapid +elapine +elapoid +elapse +elastic +elastin +elatcha +elate +elated +elater +elation +elative +elator +elb +elbow +elbowed +elbower +elbowy +elcaja +elchee +eld +elder +elderly +eldest +eldin +elding +eldress +elect +electee +electly +elector +electro +elegant +elegiac +elegist +elegit +elegize +elegy +eleidin +element +elemi +elemin +elench +elenchi +elenge +elevate +eleven +elevon +elf +elfhood +elfic +elfin +elfish +elfkin +elfland +elflike +elflock +elfship +elfwife +elfwort +elicit +elide +elision +elisor +elite +elixir +elk +elkhorn +elkslip +elkwood +ell +ellagic +elle +elleck +ellfish +ellipse +ellops +ellwand +elm +elmy +elocute +elod +eloge +elogium +eloign +elope +eloper +elops +els +else +elsehow +elsin +elt +eluate +elude +eluder +elusion +elusive +elusory +elute +elution +elutor +eluvial +eluvium +elvan +elver +elves +elvet +elvish +elysia +elytral +elytrin +elytron +elytrum +em +emanant +emanate +emanium +emarcid +emball +embalm +embank +embar +embargo +embark +embassy +embathe +embay +embed +embelic +ember +embind +embira +emblaze +emblem +emblema +emblic +embody +embog +embole +embolic +embolo +embolum +embolus +emboly +embosom +emboss +embound +embow +embowed +embowel +embower +embox +embrace +embrail +embroil +embrown +embryo +embryon +embuia +embus +embusk +emcee +eme +emeer +emend +emender +emerald +emerge +emerize +emerse +emersed +emery +emesis +emetic +emetine +emgalla +emigree +eminent +emir +emirate +emit +emitter +emma +emmenic +emmer +emmet +emodin +emoloa +emote +emotion +emotive +empall +empanel +empaper +empark +empasm +empathy +emperor +empery +empire +empiric +emplace +emplane +employ +emplume +emporia +empower +empress +emprise +empt +emptier +emptily +emptins +emption +emptor +empty +empyema +emu +emulant +emulate +emulous +emulsin +emulsor +emyd +emydian +en +enable +enabler +enact +enactor +enaena +enage +enalid +enam +enamber +enamdar +enamel +enamor +enapt +enarbor +enarch +enarm +enarme +enate +enatic +enation +enbrave +encage +encake +encamp +encase +encash +encauma +encave +encell +enchain +enchair +enchant +enchase +enchest +encina +encinal +encist +enclasp +enclave +encloak +enclose +encloud +encoach +encode +encoil +encolor +encomia +encomic +encoop +encore +encowl +encraal +encraty +encreel +encrisp +encrown +encrust +encrypt +encup +encurl +encyst +end +endable +endarch +endaze +endear +ended +endemic +ender +endere +enderon +endevil +endew +endgate +ending +endite +endive +endless +endlong +endmost +endogen +endome +endopod +endoral +endore +endorse +endoss +endotys +endow +endower +endozoa +endue +endura +endure +endurer +endways +endwise +endyma +endymal +endysis +enema +enemy +energic +energid +energy +eneuch +eneugh +enface +enfelon +enfeoff +enfever +enfile +enfiled +enflesh +enfoil +enfold +enforce +enfork +enfoul +enframe +enfree +engage +engaged +engager +engaol +engarb +engaud +engaze +engem +engild +engine +engird +engirt +englad +englobe +engloom +englory +englut +englyn +engobe +engold +engore +engorge +engrace +engraff +engraft +engrail +engrain +engram +engrasp +engrave +engreen +engross +enguard +engulf +enhalo +enhance +enhat +enhaunt +enheart +enhedge +enhelm +enherit +enhusk +eniac +enigma +enisle +enjail +enjamb +enjelly +enjewel +enjoin +enjoy +enjoyer +enkraal +enlace +enlard +enlarge +enleaf +enlief +enlife +enlight +enlink +enlist +enliven +enlock +enlodge +enmask +enmass +enmesh +enmist +enmity +enmoss +ennead +ennerve +enniche +ennoble +ennoic +ennomic +ennui +enocyte +enodal +enoil +enol +enolate +enolic +enolize +enomoty +enoplan +enorm +enough +enounce +enow +enplane +enquire +enquiry +enrace +enrage +enraged +enrange +enrank +enrapt +enray +enrib +enrich +enring +enrive +enrobe +enrober +enrol +enroll +enroot +enrough +enruin +enrut +ens +ensaint +ensand +ensate +enscene +ense +enseam +enseat +enseem +enserf +ensete +enshade +enshawl +enshell +ensign +ensile +ensky +enslave +ensmall +ensnare +ensnarl +ensnow +ensoul +enspell +enstamp +enstar +enstate +ensteel +enstool +enstore +ensuant +ensue +ensuer +ensure +ensurer +ensweep +entach +entad +entail +ental +entame +entasia +entasis +entelam +entente +enter +enteral +enterer +enteria +enteric +enteron +entheal +enthral +enthuse +entia +entice +enticer +entify +entire +entiris +entitle +entity +entoil +entomb +entomic +entone +entopic +entotic +entozoa +entrail +entrain +entrant +entrap +entreat +entree +entropy +entrust +entry +entwine +entwist +enure +enurny +envapor +envault +enveil +envelop +envenom +envied +envier +envious +environ +envoy +envy +envying +enwiden +enwind +enwisen +enwoman +enwomb +enwood +enwound +enwrap +enwrite +enzone +enzooty +enzym +enzyme +enzymic +eoan +eolith +eon +eonism +eophyte +eosate +eoside +eosin +eosinic +eozoon +epacme +epacrid +epact +epactal +epagoge +epanody +eparch +eparchy +epaule +epaulet +epaxial +epee +epeeist +epeiric +epeirid +epergne +epha +ephah +ephebe +ephebic +ephebos +ephebus +ephelis +ephetae +ephete +ephetic +ephod +ephor +ephoral +ephoric +ephorus +ephyra +epibole +epiboly +epic +epical +epicarp +epicede +epicele +epicene +epichil +epicism +epicist +epicly +epicure +epicyte +epidemy +epiderm +epidote +epigeal +epigean +epigeic +epigene +epigone +epigram +epigyne +epigyny +epihyal +epikeia +epilate +epilobe +epimer +epimere +epimyth +epinaos +epinine +epiotic +epipial +episode +epistle +epitaph +epitela +epithem +epithet +epitoke +epitome +epiural +epizoa +epizoal +epizoan +epizoic +epizoon +epoch +epocha +epochal +epode +epodic +eponym +eponymy +epopee +epopt +epoptes +epoptic +epos +epsilon +epulary +epulis +epulo +epuloid +epural +epurate +equable +equably +equal +equally +equant +equate +equator +equerry +equid +equine +equinia +equinox +equinus +equip +equiped +equison +equites +equity +equoid +er +era +erade +eral +eranist +erase +erased +eraser +erasion +erasure +erbia +erbium +erd +erdvark +ere +erect +erecter +erectly +erector +erelong +eremic +eremite +erenach +erenow +erepsin +erept +ereptic +erethic +erg +ergal +ergasia +ergates +ergodic +ergoism +ergon +ergot +ergoted +ergotic +ergotin +ergusia +eria +eric +ericad +erical +ericius +ericoid +erika +erikite +erineum +erinite +erinose +eristic +erizo +erlking +ermelin +ermine +ermined +erminee +ermines +erne +erode +eroded +erodent +erogeny +eros +erose +erosely +erosion +erosive +eroteme +erotic +erotica +erotism +err +errable +errancy +errand +errant +errata +erratic +erratum +errhine +erring +errite +error +ers +ersatz +erth +erthen +erthly +eruc +eruca +erucic +erucin +eruct +erudit +erudite +erugate +erupt +eryngo +es +esca +escalan +escalin +escalop +escape +escapee +escaper +escarp +eschar +eschara +escheat +eschew +escoba +escolar +escort +escribe +escrol +escrow +escudo +esculin +esere +eserine +esexual +eshin +esker +esne +esodic +esotery +espadon +esparto +espave +espial +espier +espinal +espino +esplees +espouse +espy +esquire +ess +essang +essay +essayer +essed +essence +essency +essling +essoin +estadal +estadio +estado +estamp +estate +esteem +ester +estevin +estival +estmark +estoc +estoile +estop +estrade +estray +estre +estreat +estrepe +estrin +estriol +estrone +estrous +estrual +estuary +estufa +estuous +estus +eta +etacism +etacist +etalon +etamine +etch +etcher +etching +eternal +etesian +ethal +ethanal +ethane +ethanol +ethel +ethene +ethenic +ethenol +ethenyl +ether +ethered +etheric +etherin +ethic +ethical +ethics +ethid +ethide +ethine +ethiops +ethmoid +ethnal +ethnic +ethnize +ethnos +ethos +ethoxyl +ethrog +ethyl +ethylic +ethylin +ethyne +ethynyl +etiolin +etna +ettle +etua +etude +etui +etym +etymic +etymon +etypic +eu +euaster +eucaine +euchre +euchred +euclase +eucone +euconic +eucrasy +eucrite +euge +eugenic +eugenol +eugeny +eulalia +eulogia +eulogic +eulogy +eumenid +eunicid +eunomy +eunuch +euonym +euonymy +euouae +eupad +eupathy +eupepsy +euphemy +euphon +euphone +euphony +euphory +euphroe +eupione +euploid +eupnea +eureka +euripus +eurite +eurobin +euryon +eusol +eustyle +eutaxic +eutaxy +eutexia +eutony +evacue +evacuee +evade +evader +evalue +evangel +evanish +evase +evasion +evasive +eve +evejar +evelong +even +evener +evening +evenly +evens +event +eveque +ever +evert +evertor +everwho +every +evestar +evetide +eveweed +evict +evictor +evident +evil +evilly +evince +evirate +evisite +evitate +evocate +evoe +evoke +evoker +evolute +evolve +evolver +evovae +evulse +evzone +ewder +ewe +ewer +ewerer +ewery +ewry +ex +exact +exacter +exactly +exactor +exalate +exalt +exalted +exalter +exam +examen +examine +example +exarate +exarch +exarchy +excamb +excave +exceed +excel +except +excerpt +excess +excide +exciple +excise +excisor +excite +excited +exciter +excitor +exclaim +exclave +exclude +excreta +excrete +excurse +excusal +excuse +excuser +excuss +excyst +exdie +exeat +execute +exedent +exedra +exegete +exempt +exequy +exergue +exert +exes +exeunt +exflect +exhale +exhaust +exhibit +exhort +exhume +exhumer +exigent +exile +exiler +exilian +exilic +exility +exist +exister +exit +exite +exition +exitus +exlex +exocarp +exocone +exode +exoderm +exodic +exodist +exodos +exodus +exody +exogamy +exogen +exogeny +exomion +exomis +exon +exoner +exopod +exordia +exormia +exosmic +exostra +exotic +exotism +expand +expanse +expect +expede +expel +expend +expense +expert +expiate +expire +expiree +expirer +expiry +explain +explant +explode +exploit +explore +expone +export +exposal +expose +exposed +exposer +exposit +expound +express +expugn +expulse +expunge +expurge +exradio +exscind +exsect +exsert +exship +exsurge +extant +extend +extense +extent +exter +extern +externe +extima +extinct +extine +extol +extoll +extort +extra +extract +extrait +extreme +extrude +extund +exudate +exude +exult +exultet +exuviae +exuvial +ey +eyah +eyalet +eyas +eye +eyeball +eyebalm +eyebar +eyebeam +eyebolt +eyebree +eyebrow +eyecup +eyed +eyedot +eyedrop +eyeflap +eyeful +eyehole +eyelash +eyeless +eyelet +eyelid +eyelike +eyeline +eyemark +eyen +eyepit +eyer +eyeroot +eyeseed +eyeshot +eyesome +eyesore +eyespot +eyewash +eyewear +eyewink +eyewort +eyey +eying +eyn +eyne +eyot +eyoty +eyra +eyre +eyrie +eyrir +ezba +f +fa +fabella +fabes +fable +fabled +fabler +fabliau +fabling +fabric +fabular +facadal +facade +face +faced +faceman +facer +facet +facete +faceted +facia +facial +faciend +facient +facies +facile +facing +fack +fackins +facks +fact +factful +faction +factish +factive +factor +factory +factrix +factual +factum +facture +facty +facula +facular +faculty +facund +facy +fad +fadable +faddish +faddism +faddist +faddle +faddy +fade +faded +fadedly +faden +fader +fadge +fading +fady +fae +faerie +faery +faff +faffle +faffy +fag +fagald +fage +fager +fagger +faggery +fagging +fagine +fagot +fagoter +fagoty +faham +fahlerz +fahlore +faience +fail +failing +faille +failure +fain +fainly +fains +faint +fainter +faintly +faints +fainty +faipule +fair +fairer +fairily +fairing +fairish +fairly +fairm +fairway +fairy +faith +faitour +fake +faker +fakery +fakir +faky +falbala +falcade +falcate +falcer +falces +falcial +falcon +falcula +faldage +faldfee +fall +fallace +fallacy +fallage +fallen +faller +falling +fallow +fallway +fally +falsary +false +falsely +falsen +falser +falsie +falsify +falsism +faltche +falter +falutin +falx +fam +famble +fame +fameful +familia +family +famine +famish +famous +famulus +fan +fana +fanal +fanam +fanatic +fanback +fancied +fancier +fancify +fancy +fand +fandom +fanega +fanfare +fanfoot +fang +fanged +fangle +fangled +fanglet +fangot +fangy +fanion +fanlike +fanman +fannel +fanner +fannier +fanning +fanon +fant +fantail +fantast +fantasy +fantod +fanweed +fanwise +fanwork +fanwort +faon +far +farad +faraday +faradic +faraway +farce +farcer +farcial +farcied +farcify +farcing +farcist +farcy +farde +fardel +fardh +fardo +fare +farer +farfara +farfel +fargood +farina +faring +farish +farl +farleu +farm +farmage +farmer +farmery +farming +farmost +farmy +farness +faro +farrago +farrand +farrier +farrow +farruca +farse +farseer +farset +farther +fasces +fascet +fascia +fascial +fascine +fascis +fascism +fascist +fash +fasher +fashery +fashion +fass +fast +fasten +faster +fasting +fastish +fastus +fat +fatal +fatally +fatbird +fate +fated +fateful +fathead +father +fathmur +fathom +fatidic +fatigue +fatiha +fatil +fatless +fatling +fatly +fatness +fatsia +fatten +fatter +fattily +fattish +fatty +fatuism +fatuity +fatuoid +fatuous +fatwood +faucal +fauces +faucet +faucial +faucre +faugh +fauld +fault +faulter +faulty +faun +faunal +faunish +faunist +faunule +fause +faust +fautor +fauve +favella +favilla +favism +favissa +favn +favor +favored +favorer +favose +favous +favus +fawn +fawner +fawnery +fawning +fawny +fay +fayles +faze +fazenda +fe +feague +feak +feal +fealty +fear +feared +fearer +fearful +feasor +feast +feasten +feaster +feat +feather +featly +featous +feature +featy +feaze +febrile +fecal +feces +feck +feckful +feckly +fecula +fecund +fed +feddan +federal +fee +feeable +feeble +feebly +feed +feedbin +feedbox +feeder +feeding +feedman +feedway +feedy +feel +feeler +feeless +feeling +feer +feere +feering +feetage +feeze +fegary +fei +feif +feigher +feign +feigned +feigner +feil +feint +feis +feist +feisty +felid +feline +fell +fellage +fellah +fellen +feller +fellic +felling +felloe +fellow +felly +feloid +felon +felonry +felony +fels +felsite +felt +felted +felter +felting +felty +felucca +felwort +female +feme +femic +feminal +feminie +feminin +femora +femoral +femur +fen +fenbank +fence +fencer +fenchyl +fencing +fend +fender +fendy +fenite +fenks +fenland +fenman +fennec +fennel +fennig +fennish +fenny +fensive +fent +fenter +feod +feodal +feodary +feoff +feoffee +feoffor +feower +feral +feralin +ferash +ferdwit +ferfet +feria +ferial +feridgi +ferie +ferine +ferity +ferk +ferling +ferly +fermail +ferme +ferment +fermery +fermila +fern +ferned +fernery +ferny +feroher +ferrado +ferrate +ferrean +ferret +ferrety +ferri +ferric +ferrier +ferrite +ferrous +ferrule +ferrum +ferry +fertile +feru +ferula +ferule +ferulic +fervent +fervid +fervor +fescue +fess +fessely +fest +festal +fester +festine +festive +festoon +festuca +fet +fetal +fetch +fetched +fetcher +fetial +fetid +fetidly +fetish +fetlock +fetlow +fetor +fetter +fettle +fettler +fetus +feu +feuage +feuar +feucht +feud +feudal +feudee +feudist +feued +feuille +fever +feveret +few +fewness +fewsome +fewter +fey +feyness +fez +fezzed +fezzy +fi +fiacre +fiance +fiancee +fiar +fiard +fiasco +fiat +fib +fibber +fibbery +fibdom +fiber +fibered +fibril +fibrin +fibrine +fibroid +fibroin +fibroma +fibrose +fibrous +fibry +fibster +fibula +fibulae +fibular +ficary +fice +ficelle +fiche +fichu +fickle +fickly +fico +ficoid +fictile +fiction +fictive +fid +fidalgo +fidate +fiddle +fiddler +fiddley +fide +fideism +fideist +fidfad +fidge +fidget +fidgety +fiducia +fie +fiefdom +field +fielded +fielder +fieldy +fiend +fiendly +fient +fierce +fiercen +fierily +fiery +fiesta +fife +fifer +fifie +fifish +fifo +fifteen +fifth +fifthly +fifty +fig +figaro +figbird +figent +figged +figgery +figging +figgle +figgy +fight +fighter +figless +figlike +figment +figural +figure +figured +figurer +figury +figworm +figwort +fike +fikie +filace +filacer +filao +filar +filaria +filasse +filate +filator +filbert +filch +filcher +file +filemot +filer +filet +filial +filiate +filibeg +filical +filicic +filicin +filiety +filing +filings +filippo +filite +fill +filled +filler +fillet +filleul +filling +fillip +fillock +filly +film +filmdom +filmet +filmic +filmily +filmish +filmist +filmize +filmy +filo +filose +fils +filter +filth +filthy +fimble +fimbria +fin +finable +finagle +final +finale +finally +finance +finback +finch +finched +find +findal +finder +finding +findjan +fine +fineish +finely +finer +finery +finesse +finetop +finfish +finfoot +fingent +finger +fingery +finial +finical +finick +finific +finify +finikin +fining +finis +finish +finite +finity +finjan +fink +finkel +finland +finless +finlet +finlike +finnac +finned +finner +finnip +finny +fiord +fiorded +fiorin +fiorite +fip +fipenny +fipple +fique +fir +firca +fire +firearm +firebox +fireboy +firebug +fired +firedog +firefly +firelit +fireman +firer +firetop +firing +firk +firker +firkin +firlot +firm +firman +firmer +firmly +firn +firring +firry +first +firstly +firth +fisc +fiscal +fise +fisetin +fish +fishbed +fished +fisher +fishery +fishet +fisheye +fishful +fishgig +fishify +fishily +fishing +fishlet +fishman +fishpot +fishway +fishy +fisnoga +fissate +fissile +fission +fissive +fissure +fissury +fist +fisted +fister +fistful +fistic +fistify +fisting +fistuca +fistula +fistule +fisty +fit +fitch +fitched +fitchee +fitcher +fitchet +fitchew +fitful +fitly +fitment +fitness +fitout +fitroot +fittage +fitted +fitten +fitter +fitters +fittily +fitting +fitty +fitweed +five +fivebar +fiver +fives +fix +fixable +fixage +fixate +fixatif +fixator +fixed +fixedly +fixer +fixing +fixity +fixture +fixure +fizgig +fizz +fizzer +fizzle +fizzy +fjeld +flabby +flabrum +flaccid +flack +flacked +flacker +flacket +flaff +flaffer +flag +flagger +flaggy +flaglet +flagman +flagon +flail +flair +flaith +flak +flakage +flake +flaker +flakily +flaky +flam +flamant +flamb +flame +flamed +flamen +flamer +flamfew +flaming +flamy +flan +flanch +flandan +flane +flange +flanger +flank +flanked +flanker +flanky +flannel +flanque +flap +flapper +flare +flaring +flary +flaser +flash +flasher +flashet +flashly +flashy +flask +flasker +flasket +flasque +flat +flatcap +flatcar +flatdom +flated +flathat +flatlet +flatly +flatman +flatten +flatter +flattie +flattop +flatus +flatway +flaught +flaunt +flaunty +flavedo +flavic +flavid +flavin +flavine +flavo +flavone +flavor +flavory +flavour +flaw +flawed +flawful +flawn +flawy +flax +flaxen +flaxman +flaxy +flay +flayer +flea +fleam +fleay +flebile +fleche +fleck +flecken +flecker +flecky +flector +fled +fledge +fledgy +flee +fleece +fleeced +fleecer +fleech +fleecy +fleer +fleerer +fleet +fleeter +fleetly +flemish +flench +flense +flenser +flerry +flesh +fleshed +fleshen +flesher +fleshly +fleshy +flet +fletch +flether +fleuret +fleury +flew +flewed +flewit +flews +flex +flexed +flexile +flexion +flexor +flexure +fley +flick +flicker +flicky +flidder +flier +fligger +flight +flighty +flimmer +flimp +flimsy +flinch +flinder +fling +flinger +flingy +flint +flinter +flinty +flioma +flip +flipe +flipper +flirt +flirter +flirty +flisk +flisky +flit +flitch +flite +fliting +flitter +flivver +flix +float +floater +floaty +flob +flobby +floc +floccus +flock +flocker +flocky +flocoon +flodge +floe +floey +flog +flogger +flokite +flong +flood +flooded +flooder +floody +floor +floorer +floozy +flop +flopper +floppy +flora +floral +floran +florate +floreal +florent +flores +floret +florid +florin +florist +floroon +florula +flory +flosh +floss +flosser +flossy +flot +flota +flotage +flotant +flotsam +flounce +flour +floury +flouse +flout +flouter +flow +flowage +flower +flowery +flowing +flown +flowoff +flu +fluate +fluavil +flub +flubdub +flucan +flue +flued +flueman +fluency +fluent +fluer +fluey +fluff +fluffer +fluffy +fluible +fluid +fluidal +fluidic +fluidly +fluke +fluked +flukily +fluking +fluky +flume +flummer +flummox +flump +flung +flunk +flunker +flunky +fluor +fluoran +fluoric +fluoryl +flurn +flurr +flurry +flush +flusher +flushy +flusk +flusker +fluster +flute +fluted +fluter +flutina +fluting +flutist +flutter +fluty +fluvial +flux +fluxer +fluxile +fluxion +fly +flyable +flyaway +flyback +flyball +flybane +flybelt +flyblow +flyboat +flyboy +flyer +flyflap +flying +flyleaf +flyless +flyman +flyness +flype +flytail +flytier +flytrap +flyway +flywort +foal +foaly +foam +foambow +foamer +foamily +foaming +foamy +fob +focal +focally +foci +focoids +focsle +focus +focuser +fod +fodda +fodder +foder +fodge +fodgel +fodient +foe +foehn +foeish +foeless +foelike +foeman +foeship +fog +fogbow +fogdog +fogdom +fogey +foggage +fogged +fogger +foggily +foggish +foggy +foghorn +fogle +fogless +fogman +fogo +fogon +fogou +fogram +fogus +fogy +fogydom +fogyish +fogyism +fohat +foible +foil +foiler +foiling +foining +foison +foist +foister +foisty +foiter +fold +foldage +folded +folden +folder +folding +foldure +foldy +fole +folia +foliage +folial +foliar +foliary +foliate +folie +folio +foliole +foliose +foliot +folious +folium +folk +folkmot +folksy +folkway +folky +folles +follis +follow +folly +foment +fomes +fomites +fondak +fondant +fondish +fondle +fondler +fondly +fondu +fondue +fonduk +fonly +fonnish +fono +fons +font +fontal +fonted +fontful +fontlet +foo +food +fooder +foodful +foody +fool +fooldom +foolery +fooless +fooling +foolish +fooner +fooster +foot +footage +footboy +footed +footer +footful +foothot +footing +footle +footler +footman +footpad +foots +footway +footy +foozle +foozler +fop +fopling +foppery +foppish +foppy +fopship +for +fora +forage +forager +foramen +forane +foray +forayer +forb +forbade +forbar +forbear +forbid +forbit +forbled +forblow +forbore +forbow +forby +force +forced +forceps +forcer +forche +forcing +ford +fordays +fording +fordo +fordone +fordy +fore +foreact +forearm +forebay +forecar +foreday +forefin +forefit +forego +foreign +forel +forelay +foreleg +foreman +forepad +forepaw +foreran +forerib +forerun +foresay +foresee +foreset +foresin +forest +foresty +foretop +foreuse +forever +forevow +forfar +forfare +forfars +forfeit +forfend +forge +forged +forger +forgery +forget +forgie +forging +forgive +forgo +forgoer +forgot +forgrow +forhoo +forhooy +forhow +forint +fork +forked +forker +forkful +forkman +forky +forleft +forlet +forlorn +form +formal +formant +format +formate +forme +formed +formee +formel +formene +former +formful +formic +formin +forming +formose +formula +formule +formy +formyl +fornent +fornix +forpet +forpine +forpit +forrad +forrard +forride +forrit +forrue +forsake +forset +forslow +fort +forte +forth +forthgo +forthy +forties +fortify +fortin +fortis +fortlet +fortune +forty +forum +forward +forwean +forwent +fosh +fosie +fossa +fossage +fossane +fosse +fossed +fossick +fossil +fossor +fossula +fossule +fostell +foster +fot +fotch +fother +fotmal +fotui +fou +foud +fouette +fougade +fought +foughty +foujdar +foul +foulage +foulard +fouler +fouling +foulish +foully +foumart +foun +found +founder +foundry +fount +four +fourble +fourche +fourer +fourre +fourth +foussa +foute +fouter +fouth +fovea +foveal +foveate +foveola +foveole +fow +fowk +fowl +fowler +fowlery +fowling +fox +foxbane +foxchop +foxer +foxery +foxfeet +foxfish +foxhole +foxily +foxing +foxish +foxlike +foxship +foxskin +foxtail +foxwood +foxy +foy +foyaite +foyboat +foyer +fozy +fra +frab +frabbit +frabous +fracas +frache +frack +fracted +frae +fraghan +fragile +fraid +fraik +frail +frailly +frailty +fraise +fraiser +frame +framea +framed +framer +framing +frammit +franc +franco +frank +franker +frankly +frantic +franzy +frap +frappe +frasco +frase +frasier +frass +frat +fratch +fratchy +frater +fratery +fratry +fraud +fraught +frawn +fraxin +fray +frayed +fraying +frayn +fraze +frazer +frazil +frazzle +freak +freaky +fream +freath +freck +frecken +frecket +freckle +freckly +free +freed +freedom +freeing +freeish +freely +freeman +freer +freet +freety +freeway +freeze +freezer +freight +freir +freit +freity +fremd +fremdly +frenal +frenate +frenum +frenzy +fresco +fresh +freshen +freshet +freshly +fresnel +fresno +fret +fretful +frett +frette +fretted +fretter +fretty +fretum +friable +friand +friar +friarly +friary +frib +fribble +fribby +fried +friend +frier +frieze +friezer +friezy +frig +frigate +friggle +fright +frighty +frigid +frijol +frike +frill +frilled +friller +frilly +frim +fringe +fringed +fringy +frisca +frisk +frisker +frisket +frisky +frison +frist +frisure +frit +frith +fritt +fritter +frivol +frixion +friz +frize +frizer +frizz +frizzer +frizzle +frizzly +frizzy +fro +frock +froe +frog +frogbit +frogeye +frogged +froggy +frogleg +froglet +frogman +froise +frolic +from +frond +fronded +front +frontad +frontal +fronted +fronter +froom +frore +frory +frosh +frost +frosted +froster +frosty +frot +froth +frother +frothy +frotton +frough +froughy +frounce +frow +froward +frower +frowl +frown +frowner +frowny +frowst +frowsty +frowy +frowze +frowzly +frowzy +froze +frozen +fructed +frugal +fruggan +fruit +fruited +fruiter +fruity +frump +frumple +frumpy +frush +frustum +frutify +fry +fryer +fu +fub +fubby +fubsy +fucate +fuchsin +fuci +fucoid +fucosan +fucose +fucous +fucus +fud +fuddle +fuddler +fuder +fudge +fudger +fudgy +fuel +fueler +fuerte +fuff +fuffy +fugal +fugally +fuggy +fugient +fugle +fugler +fugu +fugue +fuguist +fuidhir +fuji +fulcral +fulcrum +fulfill +fulgent +fulgid +fulgide +fulgor +fulham +fulk +full +fullam +fuller +fullery +fulling +fullish +fullom +fully +fulmar +fulmine +fulsome +fulth +fulvene +fulvid +fulvous +fulwa +fulyie +fulzie +fum +fumado +fumage +fumaric +fumaryl +fumble +fumbler +fume +fumer +fumet +fumette +fumily +fuming +fumose +fumous +fumy +fun +fund +fundal +funded +funder +fundi +fundic +funds +fundus +funeral +funest +fungal +fungate +fungi +fungian +fungic +fungin +fungo +fungoid +fungose +fungous +fungus +fungusy +funicle +funis +funk +funker +funky +funnel +funnily +funny +funori +funt +fur +fural +furan +furazan +furbish +furca +furcal +furcate +furcula +furdel +furfur +furiant +furied +furify +furil +furilic +furiosa +furioso +furious +furison +furl +furler +furless +furlong +furnace +furnage +furner +furnish +furoic +furoid +furoin +furole +furor +furore +furphy +furred +furrier +furrily +furring +furrow +furrowy +furry +further +furtive +fury +furyl +furze +furzed +furzery +furzy +fusain +fusate +fusc +fuscin +fuscous +fuse +fused +fusee +fusht +fusible +fusibly +fusil +fusilly +fusion +fusoid +fuss +fusser +fussify +fussily +fussock +fussy +fust +fustee +fustet +fustian +fustic +fustily +fustin +fustle +fusty +fusuma +fusure +fut +futchel +fute +futhorc +futile +futtock +futural +future +futuric +futwa +fuye +fuze +fuzz +fuzzily +fuzzy +fyke +fylfot +fyrd +g +ga +gab +gabbard +gabber +gabble +gabbler +gabbro +gabby +gabelle +gabgab +gabi +gabion +gable +gablet +gablock +gaby +gad +gadbee +gadbush +gadded +gadder +gaddi +gadding +gaddish +gade +gadfly +gadge +gadger +gadget +gadid +gadling +gadman +gadoid +gadroon +gadsman +gaduin +gadwall +gaen +gaet +gaff +gaffe +gaffer +gaffle +gag +gagate +gage +gagee +gageite +gager +gagger +gaggery +gaggle +gaggler +gagman +gagor +gagroot +gahnite +gaiassa +gaiety +gaily +gain +gainage +gaine +gainer +gainful +gaining +gainly +gains +gainsay +gainset +gainst +gair +gait +gaited +gaiter +gaiting +gaize +gaj +gal +gala +galah +galanas +galanga +galant +galany +galatea +galaxy +galban +gale +galea +galeage +galeate +galee +galeeny +galeid +galena +galenic +galeoid +galera +galerum +galerus +galet +galey +galgal +gali +galilee +galiot +galipot +gall +galla +gallah +gallant +gallate +galled +gallein +galleon +galler +gallery +gallet +galley +gallfly +gallic +galline +galling +gallium +gallnut +gallon +galloon +gallop +gallous +gallows +gally +galoot +galop +galore +galosh +galp +galt +galumph +galuth +galyac +galyak +gam +gamahe +gamasid +gamb +gamba +gambade +gambado +gambang +gambeer +gambet +gambia +gambier +gambist +gambit +gamble +gambler +gamboge +gambol +gambrel +game +gamebag +gameful +gamely +gamene +gametal +gamete +gametic +gamic +gamily +gamin +gaming +gamma +gammer +gammick +gammock +gammon +gammy +gamont +gamori +gamp +gamut +gamy +gan +ganam +ganch +gander +gandul +gandum +gane +ganef +gang +ganga +gangan +gangava +gangdom +gange +ganger +ganging +gangism +ganglia +gangly +gangman +gangrel +gangue +gangway +ganja +ganner +gannet +ganoid +ganoin +ganosis +gansel +gansey +gansy +gant +ganta +gantang +gantlet +ganton +gantry +gantsl +ganza +ganzie +gaol +gaoler +gap +gapa +gape +gaper +gapes +gaping +gapo +gappy +gapy +gar +gara +garad +garage +garance +garava +garawi +garb +garbage +garbel +garbell +garbill +garble +garbler +garboil +garbure +garce +gardant +gardeen +garden +gardeny +gardy +gare +gareh +garetta +garfish +garget +gargety +gargle +gargol +garial +gariba +garish +garland +garle +garlic +garment +garn +garnel +garner +garnet +garnets +garnett +garnetz +garnice +garniec +garnish +garoo +garrafa +garran +garret +garrot +garrote +garrupa +garse +garsil +garston +garten +garter +garth +garum +garvey +garvock +gas +gasbag +gaseity +gaseous +gash +gashes +gashful +gashly +gashy +gasify +gasket +gaskin +gasking +gaskins +gasless +gaslit +gaslock +gasman +gasp +gasper +gasping +gaspy +gasser +gassing +gassy +gast +gaster +gastral +gastric +gastrin +gat +gata +gatch +gate +gateado +gateage +gated +gateman +gater +gateway +gather +gating +gator +gatter +gau +gaub +gauby +gauche +gaud +gaudery +gaudful +gaudily +gaudy +gaufer +gauffer +gauffre +gaufre +gauge +gauger +gauging +gaulin +gault +gaulter +gaum +gaumish +gaumy +gaun +gaunt +gaunted +gauntly +gauntry +gaunty +gaup +gaupus +gaur +gaus +gauss +gauster +gaut +gauze +gauzily +gauzy +gavall +gave +gavel +gaveler +gavial +gavotte +gavyuti +gaw +gawby +gawcie +gawk +gawkily +gawkish +gawky +gawm +gawn +gawney +gawsie +gay +gayal +gayatri +gaybine +gaycat +gayish +gayment +gayness +gaysome +gayyou +gaz +gazabo +gaze +gazebo +gazee +gazel +gazelle +gazer +gazette +gazi +gazing +gazon +gazy +ge +geal +gean +gear +gearbox +geared +gearing +gearman +gearset +gease +geason +geat +gebang +gebanga +gebbie +gebur +geck +gecko +geckoid +ged +gedackt +gedder +gedeckt +gedrite +gee +geebong +geebung +geejee +geek +geelbec +geerah +geest +geet +geezer +gegg +geggee +gegger +geggery +gein +geira +geisha +geison +geitjie +gel +gelable +gelada +gelatin +geld +geldant +gelder +gelding +gelid +gelidly +gelilah +gell +gelly +gelong +gelose +gelosin +gelt +gem +gemauve +gemel +gemeled +gemless +gemlike +gemma +gemmae +gemmate +gemmer +gemmily +gemmoid +gemmula +gemmule +gemmy +gemot +gemsbok +gemul +gemuti +gemwork +gen +gena +genal +genapp +genarch +gender +gene +genear +geneat +geneki +genep +genera +general +generic +genesic +genesis +genet +genetic +geneva +genial +genian +genic +genie +genii +genin +genion +genip +genipa +genipap +genista +genital +genitor +genius +genizah +genoese +genom +genome +genomic +genos +genre +genro +gens +genson +gent +genteel +gentes +gentian +gentile +gentle +gently +gentman +gentry +genty +genu +genua +genual +genuine +genus +genys +geo +geobios +geodal +geode +geodesy +geodete +geodic +geodist +geoduck +geoform +geogeny +geogony +geoid +geoidal +geology +geomaly +geomant +geomyid +geonoma +geopony +georama +georgic +geosid +geoside +geotaxy +geotic +geoty +ger +gerah +geranic +geranyl +gerate +gerated +geratic +geraty +gerb +gerbe +gerbil +gercrow +gerefa +gerenda +gerent +gerenuk +gerim +gerip +germ +germal +german +germane +germen +germin +germina +germing +germon +germule +germy +gernitz +geront +geronto +gers +gersum +gerund +gerusia +gervao +gesith +gesning +gesso +gest +gestant +gestate +geste +gested +gesten +gestic +gestion +gesture +get +geta +getah +getaway +gether +getling +getter +getting +getup +geum +gewgaw +gewgawy +gey +geyan +geyser +gez +ghafir +ghaist +ghalva +gharial +gharnao +gharry +ghastly +ghat +ghatti +ghatwal +ghazi +ghazism +ghebeta +ghee +gheleem +gherkin +ghetti +ghetto +ghizite +ghoom +ghost +ghoster +ghostly +ghosty +ghoul +ghrush +ghurry +giant +giantly +giantry +giardia +giarra +giarre +gib +gibaro +gibbals +gibbed +gibber +gibbet +gibbles +gibbon +gibbose +gibbous +gibbus +gibby +gibe +gibel +giber +gibing +gibleh +giblet +giblets +gibus +gid +giddap +giddea +giddify +giddily +giddy +gidgee +gie +gied +gien +gif +gift +gifted +giftie +gig +gigback +gigeria +gigful +gigger +giggish +giggit +giggle +giggler +giggly +giglet +giglot +gigman +gignate +gigolo +gigot +gigsman +gigster +gigtree +gigunu +gilbert +gild +gilded +gilden +gilder +gilding +gilguy +gilia +gilim +gill +gilled +giller +gillie +gilling +gilly +gilo +gilpy +gilse +gilt +giltcup +gim +gimbal +gimble +gimel +gimlet +gimlety +gimmal +gimmer +gimmick +gimp +gimped +gimper +gimping +gin +ging +ginger +gingery +gingham +gingili +gingiva +gink +ginkgo +ginned +ginner +ginners +ginnery +ginney +ginning +ginnle +ginny +ginseng +ginward +gio +gip +gipon +gipper +gipser +gipsire +giraffe +girasol +girba +gird +girder +girding +girdle +girdler +girl +girleen +girlery +girlie +girling +girlish +girlism +girly +girn +girny +giro +girr +girse +girsh +girsle +girt +girth +gisarme +gish +gisla +gisler +gist +git +gitalin +gith +gitonin +gitoxin +gittern +gittith +give +given +giver +givey +giving +gizz +gizzard +gizzen +gizzern +glace +glaceed +glacial +glacier +glacis +glack +glad +gladden +gladdon +gladdy +glade +gladeye +gladful +gladify +gladii +gladius +gladly +glady +glaga +glaieul +glaik +glaiket +glair +glairy +glaive +glaived +glaked +glaky +glam +glamour +glance +glancer +gland +glandes +glans +glar +glare +glarily +glaring +glarry +glary +glashan +glass +glassen +glasser +glasses +glassie +glassy +glaucin +glaum +glaur +glaury +glaver +glaze +glazed +glazen +glazer +glazier +glazily +glazing +glazy +gleam +gleamy +glean +gleaner +gleary +gleba +glebal +glebe +glebous +glede +gledy +glee +gleed +gleeful +gleek +gleeman +gleet +gleety +gleg +glegly +glen +glenoid +glent +gleyde +glia +gliadin +glial +glib +glibly +glidder +glide +glider +gliding +gliff +glime +glimmer +glimpse +glink +glint +glioma +gliosa +gliosis +glirine +glisk +glisky +glisten +glister +glitter +gloam +gloat +gloater +global +globate +globe +globed +globin +globoid +globose +globous +globule +globy +glochid +glochis +gloea +gloeal +glom +glome +glommox +glomus +glonoin +gloom +gloomth +gloomy +glop +gloppen +glor +glore +glorify +glory +gloss +glossa +glossal +glossed +glosser +glossic +glossy +glost +glottal +glottic +glottid +glottis +glout +glove +glover +glovey +gloving +glow +glower +glowfly +glowing +gloy +gloze +glozing +glub +glucase +glucid +glucide +glucina +glucine +gluck +glucose +glue +glued +gluepot +gluer +gluey +glug +gluish +glum +gluma +glumal +glume +glumly +glummy +glumose +glump +glumpy +glunch +glusid +gluside +glut +glutch +gluteal +gluten +gluteus +glutin +glutoid +glutose +glutter +glutton +glycid +glycide +glycine +glycol +glycose +glycyl +glyoxal +glyoxim +glyoxyl +glyph +glyphic +glyptic +glyster +gnabble +gnar +gnarl +gnarled +gnarly +gnash +gnat +gnathal +gnathic +gnatter +gnatty +gnaw +gnawer +gnawing +gnawn +gneiss +gneissy +gnome +gnomed +gnomic +gnomide +gnomish +gnomist +gnomon +gnosis +gnostic +gnu +go +goa +goad +goaf +goal +goalage +goalee +goalie +goanna +goat +goatee +goateed +goatish +goatly +goaty +goave +gob +goback +goban +gobang +gobbe +gobber +gobbet +gobbin +gobbing +gobble +gobbler +gobby +gobelin +gobi +gobiid +gobioid +goblet +goblin +gobline +gobo +gobony +goburra +goby +gocart +god +goddard +godded +goddess +goddize +gode +godet +godhead +godhood +godkin +godless +godlet +godlike +godlily +godling +godly +godown +godpapa +godsend +godship +godson +godwit +goeduck +goel +goelism +goer +goes +goetia +goetic +goety +goff +goffer +goffle +gog +gogga +goggan +goggle +goggled +goggler +goggly +goglet +gogo +goi +going +goitcho +goiter +goitral +gol +gola +golach +goladar +gold +goldbug +goldcup +golden +golder +goldie +goldin +goldish +goldtit +goldy +golee +golem +golf +golfdom +golfer +goli +goliard +goliath +golland +gollar +golly +goloe +golpe +gomari +gomart +gomavel +gombay +gombeen +gomer +gomeral +gomlah +gomuti +gon +gonad +gonadal +gonadic +gonagra +gonakie +gonal +gonapod +gondang +gondite +gondola +gone +goner +gong +gongman +gonia +goniac +gonial +goniale +gonid +gonidia +gonidic +gonimic +gonion +gonitis +gonium +gonne +gony +gonys +goo +goober +good +gooding +goodish +goodly +goodman +goods +goody +goof +goofer +goofily +goofy +googly +googol +googul +gook +gool +goolah +gools +gooma +goon +goondie +goonie +goose +goosery +goosish +goosy +gopher +gopura +gor +gora +goracco +goral +goran +gorb +gorbal +gorbet +gorble +gorce +gorcock +gorcrow +gore +gorer +gorevan +gorfly +gorge +gorged +gorger +gorget +gorglin +gorhen +goric +gorilla +gorily +goring +gorlin +gorlois +gormaw +gormed +gorra +gorraf +gorry +gorse +gorsedd +gorsy +gory +gos +gosain +goschen +gosh +goshawk +goslet +gosling +gosmore +gospel +gosport +gossan +gossard +gossip +gossipy +gossoon +gossy +got +gotch +gote +gothite +gotra +gotraja +gotten +gouaree +gouge +gouger +goujon +goulash +goumi +goup +gourami +gourd +gourde +gourdy +gourmet +gousty +gout +goutify +goutily +goutish +goutte +gouty +gove +govern +gowan +gowdnie +gowf +gowfer +gowk +gowked +gowkit +gowl +gown +gownlet +gowpen +goy +goyim +goyin +goyle +gozell +gozzard +gra +grab +grabber +grabble +graben +grace +gracer +gracile +grackle +grad +gradal +gradate +graddan +grade +graded +gradely +grader +gradin +gradine +grading +gradual +gradus +graff +graffer +graft +grafted +grafter +graham +grail +grailer +grain +grained +grainer +grainy +graip +graisse +graith +grallic +gram +grama +grame +grammar +gramme +gramp +grampa +grampus +granada +granage +granary +granate +granch +grand +grandam +grandee +grandly +grandma +grandpa +grane +grange +granger +granite +grank +grannom +granny +grano +granose +grant +grantee +granter +grantor +granula +granule +granza +grape +graped +grapery +graph +graphic +graphy +graping +grapnel +grappa +grapple +grapy +grasp +grasper +grass +grassed +grasser +grasset +grassy +grat +grate +grater +grather +gratify +grating +gratis +gratten +graupel +grave +graved +gravel +gravely +graven +graver +gravic +gravid +graving +gravity +gravure +gravy +grawls +gray +grayfly +grayish +graylag +grayly +graze +grazer +grazier +grazing +grease +greaser +greasy +great +greaten +greater +greatly +greave +greaved +greaves +grebe +grece +gree +greed +greedy +green +greener +greeney +greenly +greenth +greenuk +greeny +greet +greeter +gregal +gregale +grege +greggle +grego +greige +grein +greisen +gremial +gremlin +grenade +greund +grew +grey +greyly +gribble +grice +grid +griddle +gride +griece +grieced +grief +grieve +grieved +griever +griff +griffe +griffin +griffon +grift +grifter +grig +grignet +grigri +grike +grill +grille +grilled +griller +grilse +grim +grimace +grime +grimful +grimily +grimly +grimme +grimp +grimy +grin +grinch +grind +grinder +grindle +gringo +grinner +grinny +grip +gripe +griper +griping +gripman +grippal +grippe +gripper +gripple +grippy +gripy +gris +grisard +griskin +grisly +grison +grist +grister +gristle +gristly +gristy +grit +grith +grits +gritten +gritter +grittle +gritty +grivet +grivna +grizzle +grizzly +groan +groaner +groat +groats +grobian +grocer +grocery +groff +grog +groggy +grogram +groin +groined +grommet +groom +groomer +groomy +groop +groose +groot +grooty +groove +groover +groovy +grope +groper +groping +gropple +gros +groser +groset +gross +grossen +grosser +grossly +grosso +grosz +groszy +grot +grotto +grouch +grouchy +grouf +grough +ground +grounds +groundy +group +grouped +grouper +grouse +grouser +grousy +grout +grouter +grouts +grouty +grouze +grove +groved +grovel +grovy +grow +growan +growed +grower +growing +growl +growler +growly +grown +grownup +growse +growth +growthy +grozart +grozet +grr +grub +grubbed +grubber +grubby +grubs +grudge +grudger +grue +gruel +grueler +gruelly +gruff +gruffly +gruffs +gruffy +grufted +grugru +gruine +grum +grumble +grumbly +grume +grumly +grummel +grummet +grumose +grumous +grump +grumph +grumphy +grumpy +grun +grundy +grunion +grunt +grunter +gruntle +grush +grushie +gruss +grutch +grutten +gryde +grylli +gryllid +gryllos +gryllus +grysbok +guaba +guacimo +guacin +guaco +guaiac +guaiol +guaka +guama +guan +guana +guanaco +guanase +guanay +guango +guanine +guanize +guano +guanyl +guao +guapena +guar +guara +guarabu +guarana +guarani +guard +guarded +guarder +guardo +guariba +guarri +guasa +guava +guavina +guayaba +guayabi +guayabo +guayule +guaza +gubbo +gucki +gud +gudame +guddle +gude +gudge +gudgeon +gudget +gudok +gue +guebucu +guemal +guenepe +guenon +guepard +guerdon +guereza +guess +guesser +guest +guesten +guester +gufa +guff +guffaw +guffer +guffin +guffy +gugal +guggle +gugglet +guglet +guglia +guglio +gugu +guhr +guib +guiba +guidage +guide +guider +guidman +guidon +guige +guignol +guijo +guild +guilder +guildic +guildry +guile +guilery +guilt +guilty +guily +guimpe +guinea +guipure +guisard +guise +guiser +guising +guitar +gul +gula +gulae +gulaman +gular +gularis +gulch +gulden +gule +gules +gulf +gulfy +gulgul +gulix +gull +gullery +gullet +gullion +gullish +gully +gulonic +gulose +gulp +gulper +gulpin +gulping +gulpy +gulsach +gum +gumbo +gumboil +gumby +gumdrop +gumihan +gumless +gumlike +gumly +gumma +gummage +gummata +gummed +gummer +gumming +gummite +gummose +gummous +gummy +gump +gumpus +gumshoe +gumweed +gumwood +gun +guna +gunate +gunboat +gundi +gundy +gunebo +gunfire +gunge +gunite +gunj +gunk +gunl +gunless +gunlock +gunman +gunnage +gunne +gunnel +gunner +gunnery +gunnies +gunning +gunnung +gunny +gunong +gunplay +gunrack +gunsel +gunshop +gunshot +gunsman +gunster +gunter +gunwale +gunyah +gunyang +gunyeh +gup +guppy +gur +gurdle +gurge +gurgeon +gurges +gurgle +gurglet +gurgly +gurjun +gurk +gurl +gurly +gurnard +gurnet +gurniad +gurr +gurrah +gurry +gurt +guru +gush +gusher +gushet +gushily +gushing +gushy +gusla +gusle +guss +gusset +gussie +gust +gustful +gustily +gusto +gusty +gut +gutless +gutlike +gutling +gutt +gutta +guttate +gutte +gutter +guttery +gutti +guttide +guttie +guttle +guttler +guttula +guttule +guttus +gutty +gutweed +gutwise +gutwort +guy +guydom +guyer +guz +guze +guzzle +guzzler +gwag +gweduc +gweed +gweeon +gwely +gwine +gwyniad +gyle +gym +gymel +gymnast +gymnic +gymnics +gymnite +gymnure +gympie +gyn +gyne +gynecic +gynic +gynics +gyp +gype +gypper +gyps +gypsine +gypsite +gypsous +gypster +gypsum +gypsy +gypsyfy +gypsyry +gyral +gyrally +gyrant +gyrate +gyrator +gyre +gyrene +gyri +gyric +gyrinid +gyro +gyrocar +gyroma +gyron +gyronny +gyrose +gyrous +gyrus +gyte +gytling +gyve +h +ha +haab +haaf +habble +habeas +habena +habenal +habenar +habile +habille +habit +habitan +habitat +habited +habitue +habitus +habnab +haboob +habu +habutai +hache +hachure +hack +hackbut +hacked +hackee +hacker +hackery +hackin +hacking +hackle +hackler +hacklog +hackly +hackman +hackney +hacksaw +hacky +had +hadbot +hadden +haddie +haddo +haddock +hade +hading +hadj +hadji +hadland +hadrome +haec +haem +haemony +haet +haff +haffet +haffle +hafiz +hafnium +hafnyl +haft +hafter +hag +hagboat +hagborn +hagbush +hagdon +hageen +hagfish +haggada +haggard +hagged +hagger +haggis +haggish +haggle +haggler +haggly +haggy +hagi +hagia +haglet +haglike +haglin +hagride +hagrope +hagseed +hagship +hagweed +hagworm +hah +haik +haikai +haikal +haikwan +hail +hailer +hailse +haily +hain +haine +hair +haircut +hairdo +haire +haired +hairen +hairif +hairlet +hairpin +hairup +hairy +haje +hajib +hajilij +hak +hakam +hakdar +hake +hakeem +hakim +hako +haku +hala +halakah +halakic +halal +halberd +halbert +halch +halcyon +hale +halebi +haler +halerz +half +halfer +halfman +halfway +halibiu +halibut +halide +halidom +halite +halitus +hall +hallage +hallah +hallan +hallel +hallex +halling +hallman +halloo +hallow +hallux +hallway +halma +halo +halogen +haloid +hals +halse +halsen +halt +halter +halting +halurgy +halutz +halvans +halve +halved +halver +halves +halyard +ham +hamal +hamald +hamate +hamated +hamatum +hamble +hame +hameil +hamel +hamfat +hami +hamlah +hamlet +hammada +hammam +hammer +hammock +hammy +hamose +hamous +hamper +hamsa +hamster +hamular +hamule +hamulus +hamus +hamza +han +hanaper +hanbury +hance +hanced +hanch +hand +handbag +handbow +handcar +handed +hander +handful +handgun +handily +handle +handled +handler +handout +handsaw +handsel +handset +handy +hangar +hangby +hangdog +hange +hangee +hanger +hangie +hanging +hangle +hangman +hangout +hangul +hanif +hank +hanker +hankie +hankle +hanky +hanna +hansa +hanse +hansel +hansom +hant +hantle +hao +haole +haoma +haori +hap +hapless +haplite +haploid +haploma +haplont +haply +happen +happier +happify +happily +happing +happy +hapten +haptene +haptere +haptic +haptics +hapu +hapuku +harass +haratch +harbi +harbor +hard +harden +harder +hardily +hardim +hardish +hardly +hardock +hardpan +hardy +hare +harebur +harelip +harem +harfang +haricot +harish +hark +harka +harl +harling +harlock +harlot +harm +harmal +harmala +harman +harmel +harmer +harmful +harmine +harmony +harmost +harn +harness +harnpan +harp +harpago +harper +harpier +harpist +harpoon +harpula +harr +harrier +harrow +harry +harsh +harshen +harshly +hart +hartal +hartin +hartite +harvest +hasan +hash +hashab +hasher +hashish +hashy +hask +hasky +haslet +haslock +hasp +hassar +hassel +hassle +hassock +hasta +hastate +hastati +haste +hasten +haster +hastily +hastish +hastler +hasty +hat +hatable +hatband +hatbox +hatbrim +hatch +hatchel +hatcher +hatchet +hate +hateful +hater +hatful +hath +hathi +hatless +hatlike +hatpin +hatrack +hatrail +hatred +hatress +hatt +hatted +hatter +hattery +hatting +hattock +hatty +hau +hauberk +haugh +haught +haughty +haul +haulage +hauld +hauler +haulier +haulm +haulmy +haunch +haunchy +haunt +haunter +haunty +hause +hausen +hausse +hautboy +hauteur +havage +have +haveage +havel +haven +havener +havenet +havent +haver +haverel +haverer +havers +havier +havoc +haw +hawbuck +hawer +hawk +hawkbit +hawked +hawker +hawkery +hawkie +hawking +hawkish +hawknut +hawky +hawm +hawok +hawse +hawser +hay +haya +hayband +haybird +haybote +haycap +haycart +haycock +hayey +hayfork +haylift +hayloft +haymow +hayrack +hayrake +hayrick +hayseed +haysel +haysuck +haytime +hayward +hayweed +haywire +hayz +hazard +haze +hazel +hazeled +hazelly +hazen +hazer +hazily +hazing +hazle +hazy +hazzan +he +head +headcap +headed +header +headful +headily +heading +headman +headset +headway +heady +heaf +heal +heald +healder +healer +healful +healing +health +healthy +heap +heaper +heaps +heapy +hear +hearer +hearing +hearken +hearsay +hearse +hearst +heart +hearted +hearten +hearth +heartly +hearts +hearty +heat +heater +heatful +heath +heathen +heather +heathy +heating +heaume +heaumer +heave +heaven +heavens +heaver +heavies +heavily +heaving +heavity +heavy +hebamic +hebenon +hebete +hebetic +hech +heck +heckle +heckler +hectare +hecte +hectic +hector +heddle +heddler +hedebo +heder +hederic +hederin +hedge +hedger +hedging +hedgy +hedonic +heed +heeder +heedful +heedily +heedy +heehaw +heel +heelcap +heeled +heeler +heeltap +heer +heeze +heezie +heezy +heft +hefter +heftily +hefty +hegari +hegemon +hegira +hegumen +hei +heiau +heifer +heigh +height +heii +heimin +heinous +heir +heirdom +heiress +heitiki +hekteus +helbeh +helcoid +helder +hele +helenin +heliast +helical +heliced +helices +helicin +helicon +helide +heling +helio +helioid +helium +helix +hell +hellbox +hellcat +helldog +heller +helleri +hellhag +hellier +hellion +hellish +hello +helluo +helly +helm +helmage +helmed +helmet +helodes +heloe +heloma +helonin +helosis +helotry +help +helper +helpful +helping +helply +helve +helvell +helver +helvite +hem +hemad +hemal +hemapod +hemase +hematal +hematic +hematid +hematin +heme +hemen +hemera +hemiamb +hemic +hemin +hemina +hemine +heminee +hemiope +hemipic +heml +hemlock +hemmel +hemmer +hemocry +hemoid +hemol +hemopod +hemp +hempen +hempy +hen +henad +henbane +henbill +henbit +hence +hencoop +hencote +hend +hendly +henfish +henism +henlike +henna +hennery +hennin +hennish +henny +henotic +henpeck +henpen +henry +hent +henter +henware +henwife +henwise +henyard +hep +hepar +heparin +hepatic +hepcat +heppen +hepper +heptace +heptad +heptal +heptane +heptene +heptine +heptite +heptoic +heptose +heptyl +heptyne +her +herald +herb +herbage +herbal +herbane +herbary +herbish +herbist +herblet +herbman +herbose +herbous +herby +herd +herdboy +herder +herdic +herding +here +hereat +hereby +herein +herem +hereof +hereon +heresy +heretic +hereto +herile +heriot +heritor +herl +herling +herma +hermaic +hermit +hern +hernani +hernant +herne +hernia +hernial +hero +heroess +heroic +heroid +heroify +heroin +heroine +heroism +heroize +heron +heroner +heronry +herpes +herring +hers +herse +hersed +herself +hership +hersir +hertz +hessite +hest +hestern +het +hetaera +hetaery +heteric +hetero +hething +hetman +hetter +heuau +heugh +heumite +hevi +hew +hewable +hewel +hewer +hewhall +hewn +hewt +hex +hexa +hexace +hexacid +hexact +hexad +hexadic +hexagon +hexagyn +hexane +hexaped +hexapla +hexapod +hexarch +hexene +hexer +hexerei +hexeris +hexine +hexis +hexitol +hexode +hexogen +hexoic +hexone +hexonic +hexosan +hexose +hexyl +hexylic +hexyne +hey +heyday +hi +hia +hiant +hiatal +hiate +hiation +hiatus +hibbin +hic +hicatee +hiccup +hick +hickey +hickory +hidable +hidage +hidalgo +hidated +hidden +hide +hided +hideous +hider +hidling +hie +hieder +hield +hiemal +hieron +hieros +higdon +higgle +higgler +high +highboy +higher +highest +highish +highly +highman +hight +hightop +highway +higuero +hijack +hike +hiker +hilch +hilding +hill +hiller +hillet +hillman +hillock +hilltop +hilly +hilsa +hilt +hilum +hilus +him +himp +himself +himward +hin +hinau +hinch +hind +hinder +hing +hinge +hinger +hingle +hinney +hinny +hinoid +hinoki +hint +hinter +hiodont +hip +hipbone +hipe +hiper +hiphalt +hipless +hipmold +hipped +hippen +hippian +hippic +hipping +hippish +hipple +hippo +hippoid +hippus +hippy +hipshot +hipwort +hirable +hircine +hire +hired +hireman +hirer +hirmos +hiro +hirple +hirse +hirsel +hirsle +hirsute +his +hish +hisn +hispid +hiss +hisser +hissing +hist +histie +histoid +histon +histone +history +histrio +hit +hitch +hitcher +hitchy +hithe +hither +hitless +hitter +hive +hiver +hives +hizz +ho +hoar +hoard +hoarder +hoarily +hoarish +hoarse +hoarsen +hoary +hoast +hoatzin +hoax +hoaxee +hoaxer +hob +hobber +hobbet +hobbil +hobble +hobbler +hobbly +hobby +hoblike +hobnail +hobnob +hobo +hoboism +hocco +hock +hocker +hocket +hockey +hocky +hocus +hod +hodden +hodder +hoddle +hoddy +hodful +hodman +hoe +hoecake +hoedown +hoeful +hoer +hog +hoga +hogan +hogback +hogbush +hogfish +hogged +hogger +hoggery +hogget +hoggie +hoggin +hoggish +hoggism +hoggy +hogherd +hoghide +hoghood +hoglike +hogling +hogmace +hognose +hognut +hogpen +hogship +hogskin +hogsty +hogward +hogwash +hogweed +hogwort +hogyard +hoi +hoick +hoin +hoise +hoist +hoister +hoit +hoju +hokey +hokum +holard +holcad +hold +holdall +holden +holder +holding +holdout +holdup +hole +holeman +holer +holey +holia +holiday +holily +holing +holism +holl +holla +holler +hollin +hollo +hollock +hollong +hollow +holly +holm +holmia +holmic +holmium +holmos +holour +holster +holt +holy +holyday +homage +homager +home +homelet +homely +homelyn +homeoid +homer +homey +homily +hominal +hominid +hominy +homish +homo +homodox +homogen +homonym +homrai +homy +honda +hondo +hone +honest +honesty +honey +honeyed +hong +honied +honily +honk +honker +honor +honoree +honorer +hontish +hontous +hooch +hood +hoodcap +hooded +hoodful +hoodie +hoodlum +hoodman +hoodoo +hoodshy +hooey +hoof +hoofed +hoofer +hoofish +hooflet +hoofrot +hoofs +hoofy +hook +hookah +hooked +hooker +hookers +hookish +hooklet +hookman +hooktip +hookum +hookup +hooky +hoolock +hooly +hoon +hoop +hooped +hooper +hooping +hoopla +hoople +hoopman +hoopoe +hoose +hoosh +hoot +hootay +hooter +hoove +hooven +hoovey +hop +hopbine +hopbush +hope +hoped +hopeful +hopeite +hoper +hopi +hoplite +hopoff +hopped +hopper +hoppers +hoppet +hoppity +hopple +hoppy +hoptoad +hopvine +hopyard +hora +horal +horary +hordary +horde +hordein +horizon +horme +hormic +hormigo +hormion +hormist +hormone +hormos +horn +horned +horner +hornet +hornety +hornful +hornify +hornily +horning +hornish +hornist +hornito +hornlet +horntip +horny +horrent +horreum +horrid +horrify +horror +horse +horser +horsify +horsily +horsing +horst +horsy +hortite +hory +hosanna +hose +hosed +hosel +hoseman +hosier +hosiery +hospice +host +hostage +hostel +hoster +hostess +hostie +hostile +hosting +hostler +hostly +hostry +hot +hotbed +hotbox +hotch +hotel +hotfoot +hothead +hoti +hotly +hotness +hotspur +hotter +hottery +hottish +houbara +hough +hougher +hounce +hound +hounder +houndy +hour +hourful +houri +hourly +housage +housal +house +housel +houser +housing +housty +housy +houtou +houvari +hove +hovel +hoveler +hoven +hover +hoverer +hoverly +how +howadji +howbeit +howdah +howder +howdie +howdy +howe +howel +however +howff +howish +howk +howkit +howl +howler +howlet +howling +howlite +howso +hox +hoy +hoyden +hoyle +hoyman +huaca +huaco +huarizo +hub +hubb +hubba +hubber +hubble +hubbly +hubbub +hubby +hubshi +huchen +hucho +huck +huckle +hud +huddle +huddler +huddock +huddup +hue +hued +hueful +hueless +huer +huff +huffier +huffily +huffish +huffle +huffler +huffy +hug +huge +hugely +hugeous +hugger +hugging +huggle +hugsome +huh +huia +huipil +huitain +huke +hula +huldee +hulk +hulkage +hulking +hulky +hull +huller +hullock +hulloo +hulsite +hulster +hulu +hulver +hum +human +humane +humanly +humate +humble +humbler +humblie +humbly +humbo +humbug +humbuzz +humdrum +humect +humeral +humeri +humerus +humet +humetty +humhum +humic +humid +humidly +humidor +humific +humify +humin +humite +humlie +hummel +hummer +hummie +humming +hummock +humor +humoral +humous +hump +humped +humph +humpty +humpy +humus +hunch +hunchet +hunchy +hundi +hundred +hung +hunger +hungry +hunh +hunk +hunker +hunkers +hunkies +hunks +hunky +hunt +hunting +hup +hura +hurdies +hurdis +hurdle +hurdler +hurds +hure +hureek +hurgila +hurkle +hurl +hurled +hurler +hurley +hurling +hurlock +hurly +huron +hurr +hurrah +hurried +hurrier +hurrock +hurroo +hurry +hurst +hurt +hurted +hurter +hurtful +hurting +hurtle +hurty +husband +huse +hush +hushaby +husheen +hushel +husher +hushful +hushing +hushion +husho +husk +husked +husker +huskily +husking +husky +huso +huspil +huss +hussar +hussy +husting +hustle +hustler +hut +hutch +hutcher +hutchet +huthold +hutia +hutlet +hutment +huvelyk +huzoor +huzz +huzza +huzzard +hyaena +hyaline +hyalite +hyaloid +hybosis +hybrid +hydatid +hydnoid +hydrant +hydrate +hydrazo +hydria +hydric +hydride +hydro +hydroa +hydroid +hydrol +hydrome +hydrone +hydrops +hydrous +hydroxy +hydrula +hyena +hyenic +hyenine +hyenoid +hyetal +hygeist +hygiene +hygric +hygrine +hygroma +hying +hyke +hyle +hyleg +hylic +hylism +hylist +hyloid +hymen +hymenal +hymenic +hymn +hymnal +hymnary +hymner +hymnic +hymnist +hymnode +hymnody +hynde +hyne +hyoid +hyoidal +hyoidan +hyoides +hyp +hypate +hypaton +hyper +hypha +hyphal +hyphema +hyphen +hypho +hypnody +hypnoid +hypnone +hypo +hypogee +hypoid +hyponym +hypopus +hyporit +hyppish +hypural +hyraces +hyracid +hyrax +hyson +hyssop +i +iamb +iambi +iambic +iambist +iambize +iambus +iao +iatric +iba +iberite +ibex +ibices +ibid +ibidine +ibis +ibolium +ibota +icaco +ice +iceberg +iceboat +icebone +icebox +icecap +iced +icefall +icefish +iceland +iceleaf +iceless +icelike +iceman +iceroot +icework +ich +ichnite +icho +ichor +ichthus +ichu +icica +icicle +icicled +icily +iciness +icing +icon +iconic +iconism +icosian +icotype +icteric +icterus +ictic +ictuate +ictus +icy +id +idalia +idant +iddat +ide +idea +ideaed +ideaful +ideal +ideally +ideate +ideist +identic +ides +idgah +idiasm +idic +idiocy +idiom +idiot +idiotcy +idiotic +idiotry +idite +iditol +idle +idleful +idleman +idler +idleset +idlety +idlish +idly +idol +idola +idolify +idolism +idolist +idolize +idolous +idolum +idoneal +idorgan +idose +idryl +idyl +idyler +idylism +idylist +idylize +idyllic +ie +if +ife +iffy +igloo +ignatia +ignavia +igneous +ignify +ignite +igniter +ignitor +ignoble +ignobly +ignore +ignorer +ignote +iguana +iguanid +ihi +ihleite +ihram +iiwi +ijma +ijolite +ikat +ikey +ikona +ikra +ileac +ileitis +ileon +ilesite +ileum +ileus +ilex +ilia +iliac +iliacus +iliahi +ilial +iliau +ilicic +ilicin +ilima +ilium +ilk +ilka +ilkane +ill +illapse +illeck +illegal +illeism +illeist +illess +illfare +illicit +illish +illium +illness +illocal +illogic +illoyal +illth +illude +illuder +illume +illumer +illupi +illure +illusor +illy +ilot +ilvaite +image +imager +imagery +imagine +imagism +imagist +imago +imam +imamah +imamate +imamic +imaret +imban +imband +imbarge +imbark +imbarn +imbased +imbat +imbauba +imbe +imbed +imber +imbibe +imbiber +imbondo +imbosom +imbower +imbrex +imbrue +imbrute +imbue +imburse +imi +imide +imidic +imine +imino +imitant +imitate +immane +immask +immense +immerd +immerge +immerit +immerse +immew +immi +immit +immix +immoral +immound +immund +immune +immure +immute +imonium +imp +impack +impact +impages +impaint +impair +impala +impale +impaler +impall +impalm +impalsy +impane +impanel +impar +impark +imparl +impart +impasse +impaste +impasto +impave +impavid +impawn +impeach +impearl +impede +impeder +impel +impen +impend +impent +imperia +imperil +impest +impetre +impetus +imphee +impi +impiety +impinge +impious +impish +implant +implate +implead +implete +implex +implial +impling +implode +implore +implume +imply +impofo +impone +impoor +import +imposal +impose +imposer +impost +impot +impound +impreg +impregn +impresa +imprese +impress +imprest +imprime +imprint +improof +improve +impship +impubic +impugn +impulse +impure +impute +imputer +impy +imshi +imsonic +imu +in +inachid +inadept +inagile +inaja +inane +inanely +inanga +inanity +inapt +inaptly +inarch +inarm +inaugur +inaxon +inbe +inbeing +inbent +inbirth +inblow +inblown +inboard +inbond +inborn +inbound +inbread +inbreak +inbred +inbreed +inbring +inbuilt +inburnt +inburst +inby +incarn +incase +incast +incense +incept +incest +inch +inched +inchpin +incide +incisal +incise +incisor +incite +inciter +incivic +incline +inclip +inclose +include +inclusa +incluse +incog +income +incomer +inconnu +incrash +increep +increst +incross +incrust +incubi +incubus +incudal +incudes +incult +incur +incurse +incurve +incus +incuse +incut +indaba +indan +indane +indart +indazin +indazol +inde +indebt +indeed +indeedy +indene +indent +index +indexed +indexer +indic +indican +indices +indicia +indict +indign +indigo +indite +inditer +indium +indogen +indole +indoles +indolyl +indoor +indoors +indorse +indoxyl +indraft +indrawn +indri +induce +induced +inducer +induct +indue +indulge +indult +indulto +induna +indwell +indy +indyl +indylic +inearth +inept +ineptly +inequal +inerm +inert +inertia +inertly +inesite +ineunt +inexact +inexist +inface +infall +infame +infamy +infancy +infand +infang +infant +infanta +infante +infarct +infare +infaust +infect +infeed +infeft +infelt +infer +infern +inferno +infest +infidel +infield +infill +infilm +infirm +infit +infix +inflame +inflate +inflect +inflex +inflict +inflood +inflow +influx +infold +inform +infra +infract +infula +infuse +infuser +ing +ingate +ingenit +ingenue +ingest +ingesta +ingiver +ingle +inglobe +ingoing +ingot +ingraft +ingrain +ingrate +ingress +ingross +ingrow +ingrown +inguen +ingulf +inhabit +inhale +inhaler +inhaul +inhaust +inhere +inherit +inhiate +inhibit +inhuman +inhume +inhumer +inial +iniome +inion +initial +initis +initive +inject +injelly +injunct +injure +injured +injurer +injury +ink +inkbush +inken +inker +inket +inkfish +inkhorn +inkish +inkle +inkless +inklike +inkling +inknot +inkosi +inkpot +inkroot +inks +inkshed +inkweed +inkwell +inkwood +inky +inlaid +inlaik +inlake +inland +inlaut +inlaw +inlawry +inlay +inlayer +inleak +inlet +inlier +inlook +inly +inlying +inmate +inmeats +inmost +inn +innate +inneity +inner +innerly +innerve +inness +innest +innet +inning +innless +innyard +inocyte +inogen +inoglia +inolith +inoma +inone +inopine +inorb +inosic +inosin +inosite +inower +inphase +inport +inpour +inpush +input +inquest +inquiet +inquire +inquiry +inring +inro +inroad +inroll +inrub +inrun +inrush +insack +insane +insculp +insea +inseam +insect +insee +inseer +insense +insert +inset +inshave +inshell +inship +inshoe +inshoot +inshore +inside +insider +insight +insigne +insipid +insist +insnare +insofar +insole +insolid +insooth +insorb +insoul +inspan +inspeak +inspect +inspire +inspoke +install +instant +instar +instate +instead +insteam +insteep +instep +instill +insula +insular +insulin +insulse +insult +insunk +insure +insured +insurer +insurge +inswamp +inswell +inswept +inswing +intact +intake +intaker +integer +inteind +intend +intense +intent +inter +interim +intern +intext +inthrow +intil +intima +intimal +intine +into +intoed +intone +intoner +intort +intown +intrada +intrait +intrant +intreat +intrine +introit +intrude +intruse +intrust +intube +intue +intuent +intuit +inturn +intwist +inula +inulase +inulin +inuloid +inunct +inure +inured +inurn +inutile +invade +invader +invalid +inveigh +inveil +invein +invent +inverse +invert +invest +invigor +invised +invital +invite +invitee +inviter +invivid +invoice +invoke +invoker +involve +inwale +inwall +inward +inwards +inweave +inweed +inwick +inwind +inwit +inwith +inwood +inwork +inworn +inwound +inwoven +inwrap +inwrit +inyoite +inyoke +io +iodate +iodic +iodide +iodine +iodism +iodite +iodize +iodizer +iodo +iodol +iodoso +iodous +iodoxy +iolite +ion +ionic +ionium +ionize +ionizer +ionogen +ionone +iota +iotize +ipecac +ipid +ipil +ipomea +ipseand +ipseity +iracund +irade +irate +irately +ire +ireful +ireless +irene +irenic +irenics +irian +irid +iridal +iridate +irides +iridial +iridian +iridic +iridin +iridine +iridite +iridium +iridize +iris +irised +irisin +iritic +iritis +irk +irksome +irok +iroko +iron +irone +ironer +ironice +ironish +ironism +ironist +ironize +ironly +ironman +irony +irrisor +irrupt +is +isagoge +isagon +isamine +isatate +isatic +isatide +isatin +isazoxy +isba +ischiac +ischial +ischium +ischury +iserine +iserite +isidium +isidoid +island +islandy +islay +isle +islet +isleted +islot +ism +ismal +ismatic +ismdom +ismy +iso +isoamyl +isobar +isobare +isobase +isobath +isochor +isocola +isocrat +isodont +isoflor +isogamy +isogen +isogeny +isogon +isogram +isohel +isohyet +isolate +isology +isomer +isomere +isomery +isoneph +isonomy +isonym +isonymy +isopag +isopod +isopoly +isoptic +isopyre +isotac +isotely +isotome +isotony +isotope +isotopy +isotron +isotype +isoxime +issei +issite +issuant +issue +issuer +issuing +ist +isthmi +isthmic +isthmus +istle +istoke +isuret +isuroid +it +itacism +itacist +italics +italite +itch +itching +itchy +itcze +item +iteming +itemize +itemy +iter +iterant +iterate +ither +itmo +itoubou +its +itself +iturite +itzebu +iva +ivied +ivin +ivoried +ivorine +ivorist +ivory +ivy +ivylike +ivyweed +ivywood +ivywort +iwa +iwaiwa +iwis +ixodian +ixodic +ixodid +iyo +izar +izard +izle +izote +iztle +izzard +j +jab +jabbed +jabber +jabbing +jabble +jabers +jabia +jabiru +jabot +jabul +jacal +jacamar +jacami +jacamin +jacana +jacare +jacate +jacchus +jacent +jacinth +jack +jackal +jackass +jackbox +jackboy +jackdaw +jackeen +jacker +jacket +jackety +jackleg +jackman +jacko +jackrod +jacksaw +jacktan +jacobus +jacoby +jaconet +jactant +jacu +jacuaru +jadder +jade +jaded +jadedly +jadeite +jadery +jadish +jady +jaeger +jag +jagat +jager +jagged +jagger +jaggery +jaggy +jagir +jagla +jagless +jagong +jagrata +jagua +jaguar +jail +jailage +jaildom +jailer +jailish +jajman +jake +jakes +jako +jalap +jalapa +jalapin +jalkar +jalopy +jalouse +jam +jama +jaman +jamb +jambeau +jambo +jambone +jambool +jambosa +jamdani +jami +jamlike +jammer +jammy +jampan +jampani +jamwood +janapa +janapan +jane +jangada +jangkar +jangle +jangler +jangly +janitor +jank +janker +jann +jannock +jantu +janua +jaob +jap +japan +jape +japer +japery +japing +japish +jaquima +jar +jara +jaragua +jarbird +jarble +jarbot +jarfly +jarful +jarg +jargon +jarkman +jarl +jarldom +jarless +jarnut +jarool +jarra +jarrah +jarring +jarry +jarvey +jasey +jaseyed +jasmine +jasmone +jasper +jaspery +jaspis +jaspoid +jass +jassid +jassoid +jatha +jati +jato +jaudie +jauk +jaun +jaunce +jaunder +jaunt +jauntie +jaunty +jaup +javali +javelin +javer +jaw +jawab +jawbone +jawed +jawfall +jawfish +jawfoot +jawless +jawy +jay +jayhawk +jaypie +jaywalk +jazz +jazzer +jazzily +jazzy +jealous +jean +jeans +jecoral +jecorin +jed +jedcock +jedding +jeddock +jeel +jeep +jeer +jeerer +jeering +jeery +jeff +jehu +jehup +jejunal +jejune +jejunum +jelab +jelick +jell +jellica +jellico +jellied +jellify +jellily +jelloid +jelly +jemadar +jemmily +jemmy +jenkin +jenna +jennet +jennier +jenny +jeofail +jeopard +jerboa +jereed +jerez +jerib +jerk +jerker +jerkily +jerkin +jerkish +jerky +jerl +jerm +jerque +jerquer +jerry +jersey +jert +jervia +jervina +jervine +jess +jessamy +jessant +jessed +jessur +jest +jestee +jester +jestful +jesting +jet +jetbead +jete +jetsam +jettage +jetted +jetter +jettied +jetton +jetty +jetware +jewbird +jewbush +jewel +jeweler +jewelry +jewely +jewfish +jezail +jeziah +jharal +jheel +jhool +jhow +jib +jibbah +jibber +jibby +jibe +jibhead +jibi +jibman +jiboa +jibstay +jicama +jicara +jiff +jiffle +jiffy +jig +jigger +jiggers +jigget +jiggety +jiggish +jiggle +jiggly +jiggy +jiglike +jigman +jihad +jikungu +jillet +jilt +jiltee +jilter +jiltish +jimbang +jimjam +jimmy +jimp +jimply +jina +jing +jingal +jingle +jingled +jingler +jinglet +jingly +jingo +jinja +jinjili +jink +jinker +jinket +jinkle +jinks +jinn +jinni +jinny +jinriki +jinx +jipper +jiqui +jirble +jirga +jiti +jitneur +jitney +jitro +jitter +jitters +jittery +jiva +jive +jixie +jo +job +jobade +jobarbe +jobber +jobbery +jobbet +jobbing +jobbish +jobble +jobless +jobman +jobo +joch +jock +jocker +jockey +jocko +jocoque +jocose +jocote +jocu +jocular +jocum +jocuma +jocund +jodel +jodelr +joe +joebush +joewood +joey +jog +jogger +joggle +joggler +joggly +johnin +join +joinant +joinder +joiner +joinery +joining +joint +jointed +jointer +jointly +jointy +joist +jojoba +joke +jokelet +joker +jokish +jokist +jokul +joky +joll +jollier +jollify +jollily +jollity +jollop +jolly +jolt +jolter +jolting +jolty +jonque +jonquil +joola +joom +jordan +joree +jorum +joseite +josh +josher +joshi +josie +joskin +joss +josser +jostle +jostler +jot +jota +jotisi +jotter +jotting +jotty +joubarb +joug +jough +jouk +joule +joulean +jounce +journal +journey +jours +joust +jouster +jovial +jow +jowar +jowari +jowel +jower +jowery +jowl +jowler +jowlish +jowlop +jowly +jowpy +jowser +jowter +joy +joyance +joyancy +joyant +joyful +joyhop +joyleaf +joyless +joylet +joyous +joysome +joyweed +juba +jubate +jubbah +jubbe +jube +jubilee +jubilus +juck +juckies +jud +judcock +judex +judge +judger +judices +judo +jufti +jug +jugal +jugale +jugate +jugated +juger +jugerum +jugful +jugger +juggins +juggle +juggler +juglone +jugular +jugulum +jugum +juice +juicily +juicy +jujitsu +juju +jujube +jujuism +jujuist +juke +jukebox +julep +julid +julidan +julio +juloid +julole +julolin +jumart +jumba +jumble +jumbler +jumbly +jumbo +jumbuck +jumby +jumelle +jument +jumfru +jumma +jump +jumper +jumpy +juncite +juncous +june +jungle +jungled +jungli +jungly +juniata +junior +juniper +junk +junker +junket +junking +junkman +junt +junta +junto +jupati +jupe +jupon +jural +jurally +jurant +jurara +jurat +jurator +jure +jurel +juridic +juring +jurist +juror +jury +juryman +jussel +jussion +jussive +jussory +just +justen +justice +justify +justly +justo +jut +jute +jutka +jutting +jutty +juvenal +juvia +juvite +jyngine +jynx +k +ka +kabaya +kabel +kaberu +kabiet +kabuki +kachin +kadaya +kadein +kados +kaffir +kafir +kafirin +kafiz +kafta +kago +kagu +kaha +kahar +kahau +kahili +kahu +kahuna +kai +kaid +kaik +kaikara +kail +kainga +kainite +kainsi +kainyn +kairine +kaiser +kaitaka +kaiwi +kajawah +kaka +kakapo +kakar +kaki +kakkak +kakke +kala +kalasie +kale +kalema +kalends +kali +kalian +kalium +kallah +kallege +kalo +kalon +kalong +kalpis +kamahi +kamala +kamansi +kamao +kamas +kamassi +kambal +kamboh +kame +kamerad +kamias +kamichi +kamik +kampong +kan +kana +kanae +kanagi +kanap +kanara +kanari +kanat +kanchil +kande +kandol +kaneh +kang +kanga +kangani +kankie +kannume +kanoon +kans +kantele +kanten +kaolin +kapa +kapai +kapeika +kapok +kapp +kappa +kappe +kapur +kaput +karagan +karaka +karakul +karamu +karaoke +karate +karaya +karbi +karch +kareao +kareeta +karela +karite +karma +karmic +karo +kaross +karou +karree +karri +karroo +karsha +karst +karstic +kartel +kartos +karwar +karyon +kasa +kasbah +kasbeke +kasher +kashga +kashi +kashima +kasida +kasm +kassu +kastura +kat +katar +katcina +kath +katha +kathal +katipo +katmon +katogle +katsup +katuka +katun +katurai +katydid +kauri +kava +kavaic +kavass +kawaka +kawika +kay +kayak +kayaker +kayles +kayo +kazi +kazoo +kea +keach +keacorn +keawe +keb +kebab +kebbie +kebbuck +kechel +keck +keckle +kecksy +kecky +ked +keddah +kedge +kedger +kedlock +keech +keek +keeker +keel +keelage +keeled +keeler +keelfat +keelie +keeling +keelman +keelson +keen +keena +keened +keener +keenly +keep +keeper +keeping +keest +keet +keeve +kef +keffel +kefir +kefiric +keg +kegler +kehaya +keita +keitloa +kekuna +kelchin +keld +kele +kelebe +keleh +kelek +kelep +kelk +kell +kella +kellion +kelly +keloid +kelp +kelper +kelpie +kelpy +kelt +kelter +kelty +kelvin +kemb +kemp +kempite +kemple +kempt +kempy +ken +kenaf +kenareh +kench +kend +kendir +kendyr +kenlore +kenmark +kennel +kenner +kenning +kenno +keno +kenosis +kenotic +kenspac +kent +kenyte +kep +kepi +kept +kerana +kerasin +kerat +keratin +keratto +kerchoo +kerchug +kerel +kerf +kerflap +kerflop +kermes +kermis +kern +kernel +kerner +kernish +kernite +kernos +kerogen +kerrie +kerril +kerrite +kerry +kersey +kerslam +kerugma +kerwham +kerygma +kestrel +ket +keta +ketal +ketch +ketchup +keten +ketene +ketipic +keto +ketogen +ketol +ketole +ketone +ketonic +ketose +ketosis +kette +ketting +kettle +kettler +ketty +ketuba +ketupa +ketyl +keup +kevalin +kevel +kewpie +kex +kexy +key +keyage +keyed +keyhole +keyless +keylet +keylock +keynote +keyway +khaddar +khadi +khahoon +khaiki +khair +khaja +khajur +khaki +khakied +khalifa +khalsa +khamsin +khan +khanate +khanda +khanjar +khanjee +khankah +khanum +khar +kharaj +kharua +khass +khat +khatib +khatri +khediva +khedive +khepesh +khet +khilat +khir +khirka +khoja +khoka +khot +khu +khubber +khula +khutbah +khvat +kiack +kiaki +kialee +kiang +kiaugh +kibber +kibble +kibbler +kibe +kibei +kibitka +kibitz +kiblah +kibosh +kiby +kick +kickee +kicker +kicking +kickish +kickoff +kickout +kickup +kidder +kiddier +kiddish +kiddush +kiddy +kidhood +kidlet +kidling +kidnap +kidney +kidskin +kidsman +kiekie +kiel +kier +kieye +kikar +kike +kiki +kiku +kikuel +kikumon +kil +kiladja +kilah +kilan +kildee +kileh +kilerg +kiley +kilhig +kiliare +kilim +kill +killas +killcu +killeen +killer +killick +killing +killy +kiln +kilneye +kilnman +kilnrib +kilo +kilobar +kiloton +kilovar +kilp +kilt +kilter +kiltie +kilting +kim +kimbang +kimnel +kimono +kin +kina +kinah +kinase +kinbote +kinch +kinchin +kincob +kind +kindle +kindler +kindly +kindred +kinepox +kinesic +kinesis +kinetic +king +kingcob +kingcup +kingdom +kinglet +kingly +kingpin +kingrow +kink +kinkhab +kinkily +kinkle +kinkled +kinkly +kinky +kinless +kino +kinship +kinsman +kintar +kioea +kiosk +kiotome +kip +kipage +kipe +kippeen +kipper +kippy +kipsey +kipskin +kiri +kirimon +kirk +kirker +kirkify +kirking +kirkman +kirmew +kirn +kirombo +kirsch +kirtle +kirtled +kirve +kirver +kischen +kish +kishen +kishon +kishy +kismet +kisra +kiss +kissage +kissar +kisser +kissing +kissy +kist +kistful +kiswa +kit +kitab +kitabis +kitar +kitcat +kitchen +kite +kith +kithe +kitish +kitling +kittel +kitten +kitter +kittle +kittles +kittly +kittock +kittul +kitty +kiva +kiver +kivu +kiwi +kiyas +kiyi +klafter +klam +klavern +klaxon +klepht +kleptic +klicket +klip +klipbok +klipdas +klippe +klippen +klister +klom +klop +klops +klosh +kmet +knab +knabble +knack +knacker +knacky +knag +knagged +knaggy +knap +knape +knappan +knapper +knar +knark +knarred +knarry +knave +knavery +knavess +knavish +knawel +knead +kneader +knee +kneecap +kneed +kneel +kneeler +kneelet +kneepad +kneepan +knell +knelt +knet +knew +knez +knezi +kniaz +kniazi +knick +knicker +knife +knifer +knight +knit +knitch +knitted +knitter +knittle +knived +knivey +knob +knobbed +knobber +knobble +knobbly +knobby +knock +knocker +knockup +knoll +knoller +knolly +knop +knopite +knopped +knopper +knoppy +knosp +knosped +knot +knotted +knotter +knotty +knout +know +knowe +knower +knowing +known +knub +knubbly +knubby +knublet +knuckle +knuckly +knur +knurl +knurled +knurly +knut +knutty +knyaz +knyazi +ko +koa +koae +koala +koali +kob +koban +kobi +kobird +kobold +kobong +kobu +koda +kodak +kodaker +kodakry +kodro +koel +koff +koft +koftgar +kohemp +kohl +kohua +koi +koil +koila +koilon +koine +koinon +kojang +kokako +kokam +kokan +kokil +kokio +koklas +koklass +koko +kokoon +kokowai +kokra +koku +kokum +kokumin +kola +kolach +kolea +kolhoz +kolkhos +kolkhoz +kollast +koller +kolo +kolobus +kolsun +komatik +kombu +kommos +kompeni +kon +kona +konak +kongoni +kongu +konini +konjak +kooka +kookery +kookri +koolah +koombar +koomkie +kootcha +kop +kopeck +koph +kopi +koppa +koppen +koppite +kor +kora +koradji +korait +korakan +korari +kore +korec +koreci +korero +kori +korin +korona +korova +korrel +koruna +korzec +kos +kosher +kosin +kosong +koswite +kotal +koto +kotuku +kotwal +kotyle +kotylos +kou +koulan +kouza +kovil +kowhai +kowtow +koyan +kozo +kra +kraal +kraft +krait +kraken +kral +krama +kran +kras +krasis +krausen +kraut +kreis +krelos +kremlin +krems +kreng +krieker +krimmer +krina +krocket +krome +krona +krone +kronen +kroner +kronor +kronur +kroon +krosa +krypsis +kryptic +kryptol +krypton +kuan +kuba +kubba +kuchen +kudize +kudos +kudu +kudzu +kuei +kuge +kugel +kuichua +kukri +kuku +kukui +kukupa +kula +kulack +kulah +kulaite +kulak +kulang +kulimit +kulm +kulmet +kumbi +kumhar +kumiss +kummel +kumquat +kumrah +kunai +kung +kunk +kunkur +kunzite +kuphar +kupper +kurbash +kurgan +kuruma +kurung +kurus +kurvey +kusa +kusam +kusha +kuskite +kuskos +kuskus +kusti +kusum +kutcha +kuttab +kuttar +kuttaur +kuvasz +kvass +kvint +kvinter +kwamme +kwan +kwarta +kwazoku +kyack +kyah +kyar +kyat +kyaung +kyl +kyle +kylite +kylix +kyrine +kyte +l +la +laager +laang +lab +labara +labarum +labba +labber +labefy +label +labeler +labella +labia +labial +labiate +labile +labiose +labis +labium +lablab +labor +labored +laborer +labour +labra +labral +labret +labroid +labrose +labrum +labrys +lac +lacca +laccaic +laccase +laccol +lace +laced +laceman +lacepod +lacer +lacery +lacet +lache +laches +lachsa +lacily +lacing +lacinia +lacis +lack +lacker +lackey +lackwit +lacmoid +lacmus +laconic +lacquer +lacrym +lactam +lactant +lactary +lactase +lactate +lacteal +lactean +lactic +lactid +lactide +lactify +lactim +lacto +lactoid +lactol +lactone +lactose +lactyl +lacuna +lacunae +lacunal +lacunar +lacune +lacwork +lacy +lad +ladakin +ladanum +ladder +laddery +laddess +laddie +laddish +laddock +lade +lademan +laden +lader +ladhood +ladies +ladify +lading +ladkin +ladle +ladler +ladrone +lady +ladybug +ladydom +ladyfly +ladyfy +ladyish +ladyism +ladykin +ladyly +laet +laeti +laetic +lag +lagan +lagarto +lagen +lagena +lagend +lager +lagetto +laggar +laggard +lagged +laggen +lagger +laggin +lagging +laglast +lagna +lagoon +lagwort +lai +laic +laical +laich +laicism +laicity +laicize +laid +laigh +lain +laine +laiose +lair +lairage +laird +lairdie +lairdly +lairman +lairy +laity +lak +lakatoi +lake +lakelet +laker +lakie +laking +lakish +lakism +lakist +laky +lalang +lall +lalling +lalo +lam +lama +lamaic +lamany +lamb +lamba +lambale +lambda +lambeau +lambent +lamber +lambert +lambie +lambish +lambkin +lambly +lamboys +lamby +lame +lamedh +lamel +lamella +lamely +lament +lameter +lametta +lamia +lamiger +lamiid +lamin +lamina +laminae +laminar +lamish +lamiter +lammas +lammer +lammock +lammy +lamnid +lamnoid +lamp +lampad +lampas +lamper +lampern +lampers +lampfly +lampful +lamping +lampion +lampist +lamplet +lamplit +lampman +lampoon +lamprey +lan +lanas +lanate +lanated +lanaz +lance +lanced +lancely +lancer +lances +lancet +lancha +land +landau +landed +lander +landing +landman +landmil +lane +lanete +laneway +laney +langaha +langca +langi +langite +langle +langoon +langsat +langued +languet +languid +languor +langur +laniary +laniate +lanific +lanioid +lanista +lank +lanket +lankily +lankish +lankly +lanky +lanner +lanolin +lanose +lansat +lanseh +lanson +lant +lantaca +lantern +lantum +lanugo +lanum +lanx +lanyard +lap +lapacho +lapcock +lapel +lapeler +lapful +lapillo +lapon +lappage +lapped +lapper +lappet +lapping +lapse +lapsed +lapser +lapsi +lapsing +lapwing +lapwork +laquear +laqueus +lar +larceny +larch +larchen +lard +larder +lardite +lardon +lardy +large +largely +largen +largess +largish +largo +lari +lariat +larick +larid +larigo +larigot +lariid +larin +larine +larixin +lark +larker +larking +larkish +larky +larmier +larnax +laroid +larrup +larry +larva +larvae +larval +larvate +larve +larvule +larynx +las +lasa +lascar +laser +lash +lasher +lask +lasket +lasque +lass +lasset +lassie +lasso +lassock +lassoer +last +lastage +laster +lasting +lastly +lastre +lasty +lat +lata +latah +latch +latcher +latchet +late +latebra +lated +lateen +lately +laten +latence +latency +latent +later +latera +laterad +lateral +latest +latex +lath +lathe +lathee +lathen +lather +lathery +lathing +lathy +latices +latigo +lation +latish +latitat +latite +latomy +latrant +latria +latrine +latro +latrobe +latron +latten +latter +lattice +latus +lauan +laud +lauder +laudist +laugh +laughee +laugher +laughy +lauia +laun +launce +launch +laund +launder +laundry +laur +laura +laurate +laurel +lauric +laurin +laurite +laurone +lauryl +lava +lavable +lavabo +lavacre +lavage +lavanga +lavant +lavaret +lavatic +lave +laveer +laver +lavic +lavish +lavolta +law +lawbook +lawful +lawing +lawish +lawk +lawless +lawlike +lawman +lawn +lawned +lawner +lawnlet +lawny +lawsuit +lawter +lawyer +lawyery +lawzy +lax +laxate +laxism +laxist +laxity +laxly +laxness +lay +layaway +layback +layboy +layer +layered +layery +layette +laying +layland +layman +layne +layoff +layout +layover +layship +laystow +lazar +lazaret +lazarly +laze +lazily +lazule +lazuli +lazy +lazyish +lea +leach +leacher +leachy +lead +leadage +leaded +leaden +leader +leadin +leading +leadman +leadoff +leadout +leadway +leady +leaf +leafage +leafboy +leafcup +leafdom +leafed +leafen +leafer +leafery +leafit +leaflet +leafy +league +leaguer +leak +leakage +leaker +leaky +leal +lealand +leally +lealty +leam +leamer +lean +leaner +leaning +leanish +leanly +leant +leap +leaper +leaping +leapt +lear +learn +learned +learner +learnt +lease +leaser +leash +leasing +leasow +least +leat +leath +leather +leatman +leave +leaved +leaven +leaver +leaves +leaving +leavy +leawill +leban +lebbek +lecama +lech +lecher +lechery +lechwe +leck +lecker +lectern +lection +lector +lectual +lecture +lecyth +led +lede +leden +ledge +ledged +ledger +ledging +ledgy +ledol +lee +leech +leecher +leeches +leed +leefang +leek +leekish +leeky +leep +leepit +leer +leerily +leerish +leery +lees +leet +leetman +leewan +leeward +leeway +leewill +left +leftish +leftism +leftist +leg +legacy +legal +legally +legate +legatee +legato +legator +legend +legenda +leger +leges +legged +legger +legging +leggy +leghorn +legible +legibly +legific +legion +legist +legit +legitim +leglen +legless +leglet +leglike +legman +legoa +legpull +legrope +legua +leguan +legume +legumen +legumin +lehr +lehrman +lehua +lei +leister +leisure +lek +lekach +lekane +lekha +leman +lemel +lemma +lemmata +lemming +lemnad +lemon +lemony +lempira +lemur +lemures +lemurid +lenad +lenard +lench +lend +lendee +lender +lene +length +lengthy +lenient +lenify +lenis +lenitic +lenity +lennow +leno +lens +lensed +lent +lenth +lentigo +lentil +lentisc +lentisk +lento +lentoid +lentor +lentous +lenvoi +lenvoy +leonine +leonite +leopard +leotard +lepa +leper +lepered +leporid +lepra +lepric +leproid +leproma +leprose +leprosy +leprous +leptid +leptite +leptome +lepton +leptus +lerot +lerp +lerret +lesche +lesion +lesiy +less +lessee +lessen +lesser +lessive +lessn +lesson +lessor +lest +lestrad +let +letch +letchy +letdown +lete +lethal +letoff +letten +letter +lettrin +lettuce +letup +leu +leuch +leucine +leucism +leucite +leuco +leucoid +leucoma +leucon +leucous +leucyl +leud +leuk +leuma +lev +levance +levant +levator +levee +level +leveler +levelly +lever +leverer +leveret +levers +levier +levin +levir +levity +levo +levulic +levulin +levy +levyist +lew +lewd +lewdly +lewis +lewth +lexia +lexical +lexicon +ley +leyland +leysing +li +liable +liaison +liana +liang +liar +liard +libant +libate +libber +libbet +libbra +libel +libelee +libeler +liber +liberal +liberty +libido +libken +libra +libral +library +librate +licca +license +lich +licham +lichen +licheny +lichi +licit +licitly +lick +licker +licking +licorn +licorne +lictor +lid +lidded +lidder +lidgate +lidless +lie +lied +lief +liege +liegely +lieger +lien +lienal +lienee +lienic +lienor +lier +lierne +lierre +liesh +lieu +lieue +lieve +life +lifeday +lifeful +lifelet +lifer +lifey +lifo +lift +lifter +lifting +liftman +ligable +ligas +ligate +ligator +ligger +light +lighten +lighter +lightly +ligne +lignify +lignin +lignite +lignone +lignose +lignum +ligula +ligular +ligule +ligulin +ligure +liin +lija +likable +like +likely +liken +liker +likin +liking +liknon +lilac +lilacin +lilacky +lile +lilied +lill +lilt +lily +lilyfy +lim +limacel +limacon +liman +limb +limbal +limbat +limbate +limbeck +limbed +limber +limbers +limbic +limbie +limbo +limbous +limbus +limby +lime +limeade +limeman +limen +limer +limes +limetta +limey +liminal +liming +limit +limital +limited +limiter +limma +limmer +limmock +limmu +limn +limner +limnery +limniad +limnite +limoid +limonin +limose +limous +limp +limper +limpet +limpid +limpily +limpin +limping +limpish +limpkin +limply +limpsy +limpy +limsy +limu +limulid +limy +lin +lina +linable +linaga +linage +linaloa +linalol +linch +linchet +linctus +lindane +linden +linder +lindo +line +linea +lineage +lineal +linear +lineate +linecut +lined +linelet +lineman +linen +liner +ling +linga +linge +lingel +linger +lingo +lingtow +lingua +lingual +linguet +lingula +lingy +linha +linhay +linie +linin +lining +linitis +liniya +linja +linje +link +linkage +linkboy +linked +linker +linking +linkman +links +linky +linn +linnet +lino +linolic +linolin +linon +linous +linoxin +linoxyn +linpin +linseed +linsey +lint +lintel +linten +linter +lintern +lintie +linty +linwood +liny +lion +lioncel +lionel +lioness +lionet +lionism +lionize +lionly +lip +lipa +liparid +lipase +lipemia +lipide +lipin +lipless +liplet +liplike +lipoid +lipoma +lipopod +liposis +lipped +lippen +lipper +lipping +lippy +lipuria +lipwork +liquate +liquefy +liqueur +liquid +liquidy +liquor +lira +lirate +lire +lirella +lis +lisere +lish +lisk +lisle +lisp +lisper +lispund +liss +lissom +lissome +list +listed +listel +listen +lister +listing +listred +lit +litany +litas +litch +litchi +lite +liter +literal +lith +lithe +lithely +lithi +lithia +lithic +lithify +lithite +lithium +litho +lithoid +lithous +lithy +litmus +litotes +litra +litster +litten +litter +littery +little +lituite +liturgy +litus +lituus +litz +livable +live +lived +livedo +lively +liven +liver +livered +livery +livid +lividly +livier +living +livor +livre +liwan +lixive +lizard +llama +llano +llautu +llyn +lo +loa +loach +load +loadage +loaded +loaden +loader +loading +loaf +loafer +loafing +loaflet +loam +loamily +loaming +loamy +loan +loaner +loanin +loath +loathe +loather +loathly +loave +lob +lobal +lobar +lobate +lobated +lobber +lobbish +lobby +lobbyer +lobcock +lobe +lobed +lobelet +lobelin +lobfig +lobing +lobiped +lobo +lobola +lobose +lobster +lobtail +lobular +lobule +lobworm +loca +locable +local +locale +locally +locanda +locate +locator +loch +lochage +lochan +lochia +lochial +lochus +lochy +loci +lock +lockage +lockbox +locked +locker +locket +lockful +locking +lockjaw +locklet +lockman +lockout +lockpin +lockram +lockup +locky +loco +locoism +locular +locule +loculus +locum +locus +locust +locusta +locutor +lod +lode +lodge +lodged +lodger +lodging +loess +loessal +loessic +lof +loft +lofter +loftily +lofting +loftman +lofty +log +loganin +logbook +logcock +loge +logeion +logeum +loggat +logged +logger +loggia +loggin +logging +loggish +loghead +logia +logic +logical +logie +login +logion +logium +loglet +loglike +logman +logoi +logos +logroll +logway +logwise +logwood +logwork +logy +lohan +lohoch +loimic +loin +loined +loir +loiter +loka +lokao +lokaose +loke +loket +lokiec +loll +loller +lollop +lollopy +lolly +loma +lombard +lomboy +loment +lomita +lommock +lone +lonely +long +longa +longan +longbow +longe +longear +longer +longfin +longful +longing +longish +longjaw +longly +longs +longue +longway +lontar +loo +looby +lood +loof +loofah +loofie +look +looker +looking +lookout +lookum +loom +loomer +loomery +looming +loon +loonery +looney +loony +loop +looper +loopful +looping +loopist +looplet +loopy +loose +loosely +loosen +looser +loosing +loosish +loot +looten +looter +lootie +lop +lope +loper +lophiid +lophine +loppard +lopper +loppet +lopping +loppy +lopseed +loquat +loquent +lora +loral +loran +lorate +lorcha +lord +lording +lordkin +lordlet +lordly +lordy +lore +loreal +lored +lori +loric +lorica +lorilet +lorimer +loriot +loris +lormery +lorn +loro +lorry +lors +lorum +lory +losable +lose +losel +loser +losh +losing +loss +lost +lot +lota +lotase +lote +lotic +lotion +lotment +lotrite +lots +lotter +lottery +lotto +lotus +lotusin +louch +loud +louden +loudish +loudly +louey +lough +louk +loukoum +loulu +lounder +lounge +lounger +loungy +loup +loupe +lour +lourdy +louse +lousily +louster +lousy +lout +louter +louther +loutish +louty +louvar +louver +lovable +lovably +lovage +love +loveful +lovely +loveman +lover +lovered +loverly +loving +low +lowa +lowan +lowbell +lowborn +lowboy +lowbred +lowdah +lowder +loweite +lower +lowerer +lowery +lowish +lowland +lowlily +lowly +lowmen +lowmost +lown +lowness +lownly +lowth +lowwood +lowy +lox +loxia +loxic +loxotic +loy +loyal +loyally +loyalty +lozenge +lozengy +lubber +lube +lubra +lubric +lubrify +lucanid +lucarne +lucban +luce +lucence +lucency +lucent +lucern +lucerne +lucet +lucible +lucid +lucida +lucidly +lucifee +lucific +lucigen +lucivee +luck +lucken +luckful +luckie +luckily +lucky +lucre +lucrify +lucule +lucumia +lucy +ludden +ludibry +ludo +lue +lues +luetic +lufbery +luff +lug +luge +luger +luggage +luggar +lugged +lugger +luggie +lugmark +lugsail +lugsome +lugworm +luhinga +luigino +luke +lukely +lulab +lull +lullaby +luller +lulu +lum +lumbago +lumbang +lumbar +lumber +lumen +luminal +lumine +lummox +lummy +lump +lumper +lumpet +lumpily +lumping +lumpish +lumpkin +lumpman +lumpy +luna +lunacy +lunar +lunare +lunary +lunate +lunatic +lunatum +lunch +luncher +lune +lunes +lunette +lung +lunge +lunged +lunger +lungful +lungi +lungie +lungis +lungy +lunn +lunoid +lunt +lunula +lunular +lunule +lunulet +lupe +lupeol +lupeose +lupine +lupinin +lupis +lupoid +lupous +lupulic +lupulin +lupulus +lupus +lura +lural +lurch +lurcher +lurdan +lure +lureful +lurer +lurg +lurid +luridly +lurk +lurker +lurky +lurrier +lurry +lush +lusher +lushly +lushy +lusk +lusky +lusory +lust +luster +lustful +lustily +lustra +lustral +lustrum +lusty +lut +lutany +lute +luteal +lutecia +lutein +lutelet +luteo +luteoma +luteous +luter +luteway +lutfisk +luthern +luthier +luting +lutist +lutose +lutrin +lutrine +lux +luxate +luxe +luxury +luxus +ly +lyam +lyard +lyceal +lyceum +lycid +lycopin +lycopod +lycosid +lyctid +lyddite +lydite +lye +lyery +lygaeid +lying +lyingly +lymph +lymphad +lymphy +lyncean +lynch +lyncher +lyncine +lynx +lyra +lyrate +lyrated +lyraway +lyre +lyreman +lyric +lyrical +lyrism +lyrist +lys +lysate +lyse +lysin +lysine +lysis +lysogen +lyssa +lyssic +lytic +lytta +lyxose +m +ma +maam +mabi +mabolo +mac +macabre +macaco +macadam +macan +macana +macao +macaque +macaw +macco +mace +maceman +macer +machan +machar +machete +machi +machila +machin +machine +machree +macies +mack +mackins +mackle +macle +macled +maco +macrame +macro +macron +macuca +macula +macular +macule +macuta +mad +madam +madame +madcap +madden +madder +madding +maddish +maddle +made +madefy +madhuca +madid +madling +madly +madman +madnep +madness +mado +madoqua +madrier +madrona +madship +maduro +madweed +madwort +mae +maenad +maestri +maestro +maffia +maffick +maffle +mafflin +mafic +mafoo +mafura +mag +magadis +magani +magas +mage +magenta +magged +maggle +maggot +maggoty +magi +magic +magical +magiric +magma +magnate +magnes +magnet +magneta +magneto +magnify +magnum +magot +magpie +magpied +magsman +maguari +maguey +maha +mahaleb +mahalla +mahant +mahar +maharao +mahatma +mahmal +mahmudi +mahoe +maholi +mahone +mahout +mahseer +mahua +mahuang +maid +maidan +maiden +maidish +maidism +maidkin +maidy +maiefic +maigre +maiid +mail +mailbag +mailbox +mailed +mailer +mailie +mailman +maim +maimed +maimer +maimon +main +mainly +mainour +mainpin +mains +maint +maintop +maioid +maire +maize +maizer +majagua +majesty +majo +majoon +major +makable +make +makedom +maker +makhzan +maki +making +makluk +mako +makuk +mal +mala +malacia +malacon +malady +malagma +malaise +malakin +malambo +malanga +malapi +malar +malaria +malarin +malate +malati +malax +malduck +male +malease +maleate +maleic +malella +maleo +malfed +mali +malic +malice +malicho +malign +malik +maline +malines +malism +malison +malist +malkin +mall +mallard +malleal +mallear +mallee +mallein +mallet +malleus +mallow +mallum +mallus +malm +malmsey +malmy +malo +malodor +malonic +malonyl +malouah +malpais +malt +maltase +malter +maltha +malting +maltman +maltose +malty +mamba +mambo +mamma +mammal +mammary +mammate +mammee +mammer +mammock +mammon +mammoth +mammula +mammy +mamo +man +mana +manacle +manage +managee +manager +manaism +manakin +manal +manas +manatee +manavel +manbird +manbot +manche +manchet +mancono +mancus +mand +mandala +mandant +mandate +mandil +mandola +mandom +mandora +mandore +mandra +mandrel +mandrin +mandua +mandyas +mane +maned +manege +manei +manent +manes +maness +maney +manful +mang +manga +mangal +mange +mangeao +mangel +manger +mangi +mangily +mangle +mangler +mango +mangona +mangue +mangy +manhead +manhole +manhood +mani +mania +maniac +manic +manid +manify +manikin +manila +manilla +manille +manioc +maniple +manism +manist +manito +maniu +manjak +mank +mankin +mankind +manless +manlet +manlike +manlily +manling +manly +manna +mannan +manner +manners +manness +mannide +mannie +mannify +manning +mannish +mannite +mannose +manny +mano +manoc +manomin +manor +manque +manred +manrent +manroot +manrope +mansard +manse +manship +mansion +manso +mant +manta +mantal +manteau +mantel +manter +mantes +mantic +mantid +mantis +mantle +mantled +mantlet +manto +mantoid +mantra +mantrap +mantua +manual +manuao +manuka +manul +manuma +manumea +manumit +manure +manurer +manus +manward +manway +manweed +manwise +many +manzana +manzil +mao +maomao +map +mapach +mapau +mapland +maple +mapo +mapper +mappist +mappy +mapwise +maqui +maquis +mar +marabou +maraca +maracan +marae +maral +marang +marara +mararie +marasca +maraud +marble +marbled +marbler +marbles +marbly +marc +marcel +march +marcher +marcid +marco +marconi +marcor +mardy +mare +maremma +marengo +marfire +margay +marge +margent +margin +margosa +marhala +maria +marid +marimba +marina +marine +mariner +mariola +maris +marish +marital +mark +marka +marked +marker +market +markhor +marking +markka +markman +markup +marl +marled +marler +marli +marlin +marline +marlite +marlock +marlpit +marly +marm +marmit +marmite +marmose +marmot +maro +marok +maroon +marplot +marque +marquee +marquis +marrano +marree +marrer +married +marrier +marron +marrot +marrow +marrowy +marry +marryer +marsh +marshal +marshy +marsoon +mart +martel +marten +martext +martial +martin +martite +martlet +martyr +martyry +maru +marvel +marver +mary +marybud +mas +masa +mascara +mascled +mascot +masculy +masdeu +mash +masha +mashal +masher +mashie +mashing +mashman +mashru +mashy +masjid +mask +masked +masker +maskoid +maslin +mason +masoned +masoner +masonic +masonry +masooka +masoola +masque +masquer +mass +massa +massage +masse +massel +masser +masseur +massier +massif +massily +massive +massoy +massula +massy +mast +mastaba +mastage +mastax +masted +master +mastery +mastful +mastic +mastiff +masting +mastman +mastoid +masty +masu +mat +mataco +matador +matai +matalan +matanza +matapan +matapi +matara +matax +match +matcher +matchy +mate +mately +mater +matey +math +mathes +matico +matin +matinal +matinee +mating +matins +matipo +matka +matless +matlow +matra +matral +matrass +matreed +matric +matris +matrix +matron +matross +matsu +matsuri +matta +mattaro +matte +matted +matter +mattery +matti +matting +mattock +mattoid +mattoir +mature +maturer +matweed +maty +matzo +matzoon +matzos +matzoth +mau +maud +maudle +maudlin +mauger +maugh +maul +mauler +mauley +mauling +maumet +maun +maund +maunder +maundy +maunge +mauther +mauve +mauvine +maux +mavis +maw +mawk +mawkish +mawky +mawp +maxilla +maxim +maxima +maximal +maximed +maximum +maximus +maxixe +maxwell +may +maya +maybe +maybush +maycock +mayday +mayfish +mayhap +mayhem +maynt +mayor +mayoral +maypop +maysin +mayten +mayweed +maza +mazame +mazard +maze +mazed +mazedly +mazeful +mazer +mazic +mazily +mazuca +mazuma +mazurka +mazut +mazy +mazzard +mbalolo +mbori +me +meable +mead +meader +meadow +meadowy +meager +meagre +meak +meal +mealer +mealies +mealily +mealman +mealy +mean +meander +meaned +meaner +meaning +meanish +meanly +meant +mease +measle +measled +measles +measly +measure +meat +meatal +meated +meatily +meatman +meatus +meaty +mecate +mecon +meconic +meconin +medal +medaled +medalet +meddle +meddler +media +mediacy +mediad +medial +median +mediant +mediate +medic +medical +medico +mediety +medimn +medimno +medino +medio +medium +medius +medlar +medley +medrick +medulla +medusal +medusan +meebos +meece +meed +meek +meeken +meekly +meered +meerkat +meese +meet +meeten +meeter +meeting +meetly +megabar +megaerg +megafog +megapod +megaron +megaton +megerg +megilp +megmho +megohm +megrim +mehalla +mehari +mehtar +meile +mein +meinie +meio +meiobar +meiosis +meiotic +meith +mel +mela +melada +melagra +melam +melamed +melange +melanic +melanin +melano +melasma +melch +meld +melder +meldrop +mele +melee +melena +melene +melenic +melic +melilot +meline +melisma +melitis +mell +mellate +mellay +meller +mellit +mellite +mellon +mellow +mellowy +melodia +melodic +melody +meloe +meloid +melon +melonry +melos +melosa +melt +meltage +melted +melter +melters +melting +melton +mem +member +membral +memento +meminna +memo +memoir +memoria +memory +men +menace +menacer +menacme +menage +menald +mend +mendee +mender +mending +mendole +mends +menfolk +meng +menhir +menial +meninx +menkind +mennom +mensa +mensal +mense +menses +mensk +mensual +mental +mentary +menthol +menthyl +mention +mentor +mentum +menu +meny +menyie +menzie +merbaby +mercal +mercer +mercery +merch +merchet +mercy +mere +merel +merely +merfold +merfolk +merge +merger +mergh +meriah +merice +meril +merism +merist +merit +merited +meriter +merk +merkhet +merkin +merl +merle +merlin +merlon +mermaid +merman +mero +merop +meropia +meros +merrily +merrow +merry +merse +mesa +mesad +mesail +mesal +mesally +mesange +mesarch +mescal +mese +mesem +mesenna +mesh +meshed +meshy +mesiad +mesial +mesian +mesic +mesilla +mesion +mesityl +mesne +meso +mesobar +mesode +mesodic +mesole +meson +mesonic +mesopic +mespil +mess +message +messan +messe +messer +messet +messily +messin +messing +messman +messor +messrs +messtin +messy +mestee +mester +mestiza +mestizo +mestome +met +meta +metad +metage +metal +metaler +metamer +metanym +metate +metayer +mete +metel +meteor +meter +methane +methene +mether +methid +methide +methine +method +methyl +metic +metier +metis +metochy +metonym +metope +metopic +metopon +metra +metreta +metrete +metria +metric +metrics +metrify +metrist +mettar +mettle +mettled +metusia +metze +meuse +meute +mew +meward +mewer +mewl +mewler +mezcal +mezuzah +mezzo +mho +mi +miamia +mian +miaow +miaower +mias +miasm +miasma +miasmal +miasmic +miaul +miauler +mib +mica +micate +mice +micelle +miche +micher +miching +micht +mick +mickle +mico +micrify +micro +microbe +microhm +micron +miction +mid +midday +midden +middle +middler +middy +mide +midge +midget +midgety +midgy +midiron +midland +midleg +midmain +midmorn +midmost +midnoon +midpit +midrash +midrib +midriff +mids +midship +midst +midtap +midvein +midward +midway +midweek +midwife +midwise +midyear +mien +miff +miffy +mig +might +mightnt +mighty +miglio +mignon +migrant +migrate +mihrab +mijl +mikado +mike +mikie +mil +mila +milady +milch +milcher +milchy +mild +milden +milder +mildew +mildewy +mildish +mildly +mile +mileage +miler +mileway +milfoil +milha +miliary +milieu +militia +milium +milk +milken +milker +milkily +milking +milkman +milksop +milky +mill +milla +millage +milldam +mille +milled +miller +millet +millful +milliad +millile +milline +milling +million +millman +milner +milo +milord +milpa +milreis +milsey +milsie +milt +milter +milty +milvine +mim +mima +mimbar +mimble +mime +mimeo +mimer +mimesis +mimetic +mimic +mimical +mimicry +mimine +mimly +mimmest +mimmock +mimmood +mimmoud +mimosis +mimp +mimsey +min +mina +minable +minar +minaret +minaway +mince +mincer +mincing +mind +minded +minder +mindful +minding +mine +miner +mineral +minery +mines +minette +ming +minge +mingle +mingler +mingy +minhag +minhah +miniate +minibus +minicam +minify +minikin +minim +minima +minimal +minimum +minimus +mining +minion +minish +minium +miniver +minivet +mink +minkery +minkish +minnie +minning +minnow +minny +mino +minoize +minor +minot +minster +mint +mintage +minter +mintman +minty +minuend +minuet +minus +minute +minuter +minutia +minx +minxish +miny +minyan +miqra +mir +mirach +miracle +mirador +mirage +miragy +mirate +mirbane +mird +mirdaha +mire +mirid +mirific +mirish +mirk +miro +mirror +mirrory +mirth +miry +mirza +misact +misadd +misaim +misally +misbias +misbill +misbind +misbode +misborn +misbusy +miscall +miscast +mischio +miscoin +miscook +miscrop +miscue +miscut +misdate +misdaub +misdeal +misdeed +misdeem +misdiet +misdo +misdoer +misdraw +mise +misease +misedit +miser +miserly +misery +misfare +misfile +misfire +misfit +misfond +misform +misgive +misgo +misgrow +mishap +mishmee +misjoin +miskeep +misken +miskill +misknow +misky +mislay +mislead +mislear +misled +mislest +mislike +mislive +mismade +mismake +mismate +mismove +misname +misobey +mispage +mispart +mispay +mispick +misplay +misput +misrate +misread +misrule +miss +missal +missay +misseem +missel +misset +missile +missing +mission +missis +missish +missive +misstay +misstep +missy +mist +mistake +mistbow +misted +mistell +mistend +mister +misterm +mistful +mistic +mistide +mistify +mistily +mistime +mistle +mistone +mistook +mistral +mistry +misturn +misty +misura +misuse +misuser +miswed +miswish +misword +misyoke +mite +miter +mitered +miterer +mitis +mitome +mitosis +mitotic +mitra +mitral +mitrate +mitre +mitrer +mitt +mitten +mitty +mity +miurus +mix +mixable +mixed +mixedly +mixen +mixer +mixhill +mixible +mixite +mixtion +mixture +mixy +mizmaze +mizzen +mizzle +mizzler +mizzly +mizzy +mneme +mnemic +mnesic +mnestic +mnioid +mo +moan +moanful +moaning +moat +mob +mobable +mobber +mobbish +mobbism +mobbist +mobby +mobcap +mobed +mobile +moble +moblike +mobship +mobsman +mobster +mocha +mochras +mock +mockado +mocker +mockery +mockful +mocmain +mocuck +modal +modally +mode +model +modeler +modena +modern +modest +modesty +modicum +modify +modish +modist +modiste +modius +modular +module +modulo +modulus +moellon +mofette +moff +mog +mogador +mogdad +moggan +moggy +mogo +moguey +moha +mohabat +mohair +mohar +mohel +moho +mohr +mohur +moider +moidore +moieter +moiety +moil +moiler +moiles +moiley +moiling +moineau +moio +moire +moise +moist +moisten +moistly +moisty +moit +moity +mojarra +mojo +moke +moki +moko +moksha +mokum +moky +mola +molal +molar +molary +molassy +molave +mold +molder +moldery +molding +moldy +mole +moleism +moler +molest +molimen +moline +molka +molland +molle +mollie +mollify +mollusk +molly +molman +moloid +moloker +molompi +molosse +molpe +molt +molten +molter +moly +mombin +momble +mome +moment +momenta +momism +momme +mommet +mommy +momo +mon +mona +monad +monadic +monaene +monal +monarch +monas +monase +monaxon +mone +monel +monepic +moner +moneral +moneran +moneric +moneron +monesia +money +moneyed +moneyer +mong +monger +mongery +mongler +mongrel +mongst +monial +moniker +monism +monist +monitor +monk +monkdom +monkery +monkess +monkey +monkish +monkism +monkly +monny +mono +monoazo +monocle +monocot +monodic +monody +monoid +monomer +mononch +monont +mononym +monose +monotic +monsoon +monster +montage +montana +montane +montant +monte +montem +month +monthly +monthon +montjoy +monton +monture +moo +mooch +moocha +moocher +mood +mooder +moodily +moodish +moodle +moody +mooing +mool +moolet +mools +moolum +moon +moonack +mooned +mooner +moonery +mooneye +moonily +mooning +moonish +moonite +moonja +moonjah +moonlet +moonlit +moonman +moonset +moonway +moony +moop +moor +moorage +mooring +moorish +moorman +moorn +moorpan +moors +moorup +moory +moosa +moose +moosey +moost +moot +mooter +mooth +mooting +mootman +mop +mopane +mope +moper +moph +mophead +moping +mopish +mopla +mopper +moppet +moppy +mopsy +mopus +mor +mora +moraine +moral +morale +morally +morals +morass +morassy +morat +morate +moray +morbid +morbify +mordant +mordent +mordore +more +moreen +moreish +morel +morella +morello +mores +morfrey +morg +morga +morgan +morgay +morgen +morglay +morgue +moric +moriche +morin +morinel +morion +morkin +morlop +mormaor +mormo +mormon +mormyr +mormyre +morn +morne +morned +morning +moro +moroc +morocco +moron +moroncy +morong +moronic +moronry +morose +morosis +morph +morphea +morphew +morphia +morphic +morphon +morris +morrow +morsal +morse +morsel +morsing +morsure +mort +mortal +mortar +mortary +morth +mortier +mortify +mortise +morula +morular +morule +morvin +morwong +mosaic +mosaist +mosette +mosey +mosker +mosque +moss +mossed +mosser +mossery +mossful +mossy +most +moste +mostly +mot +mote +moted +motel +moter +motet +motey +moth +mothed +mother +mothery +mothy +motif +motific +motile +motion +motive +motley +motmot +motor +motored +motoric +motory +mott +motte +mottle +mottled +mottler +motto +mottoed +motyka +mou +mouche +moud +moudie +moudy +mouflon +mouille +moujik +moul +mould +moulded +moule +moulin +mouls +moulter +mouly +mound +moundy +mount +mounted +mounter +moup +mourn +mourner +mouse +mouser +mousery +mousey +mousily +mousing +mousle +mousmee +mousse +moustoc +mousy +mout +moutan +mouth +mouthed +mouther +mouthy +mouton +mouzah +movable +movably +movant +move +mover +movie +moving +mow +mowable +mowana +mowburn +mowch +mowcht +mower +mowha +mowie +mowing +mowland +mown +mowra +mowrah +mowse +mowt +mowth +moxa +moy +moyen +moyenne +moyite +moyle +moyo +mozing +mpret +mu +muang +mubarat +mucago +mucaro +mucedin +much +muchly +mucic +mucid +mucific +mucigen +mucin +muck +mucker +mucket +muckite +muckle +muckman +muckna +mucksy +mucky +mucluc +mucoid +muconic +mucopus +mucor +mucosa +mucosal +mucose +mucous +mucro +mucus +mucusin +mud +mudar +mudbank +mudcap +mudd +mudde +mudden +muddify +muddily +mudding +muddish +muddle +muddler +muddy +mudee +mudfish +mudflow +mudhead +mudhole +mudir +mudiria +mudland +mudlark +mudless +mudra +mudsill +mudweed +mudwort +muermo +muezzin +muff +muffed +muffet +muffin +muffish +muffle +muffled +muffler +mufflin +muffy +mufti +mufty +mug +muga +mugful +mugg +mugger +mugget +muggily +muggins +muggish +muggles +muggy +mugient +mugweed +mugwort +mugwump +muid +muir +muist +mukluk +muktar +mukti +mulatta +mulatto +mulch +mulcher +mulct +mulder +mule +muleman +muleta +muletta +muley +mulga +mulier +mulish +mulism +mulita +mulk +mull +mulla +mullah +mullar +mullein +muller +mullet +mullets +mulley +mullid +mullion +mullite +mullock +mulloid +mulmul +mulse +mulsify +mult +multum +multure +mum +mumble +mumbler +mummer +mummery +mummick +mummied +mummify +mumming +mummy +mumness +mump +mumper +mumpish +mumps +mun +munch +muncher +munchet +mund +mundane +mundic +mundify +mundil +mundle +mung +munga +munge +mungey +mungo +mungofa +munguba +mungy +munific +munity +munj +munjeet +munnion +munshi +munt +muntin +muntjac +mura +murage +mural +muraled +murally +murchy +murder +murdrum +mure +murex +murexan +murga +murgavi +murgeon +muriate +muricid +murid +murine +murinus +muriti +murium +murk +murkily +murkish +murkly +murky +murlin +murly +murmur +murphy +murra +murrain +murre +murrey +murrina +murshid +muruxi +murva +murza +musal +musang +musar +muscade +muscat +muscid +muscle +muscled +muscly +muscoid +muscone +muscose +muscot +muscovy +muscule +muse +mused +museful +museist +muser +musery +musette +museum +mush +musha +mushaa +mushed +musher +mushily +mushla +mushru +mushy +music +musical +musico +musie +musily +musimon +musing +musk +muskat +muskeg +musket +muskie +muskish +muskrat +musky +muslin +musnud +musquaw +musrol +muss +mussal +mussel +mussily +mussuk +mussy +must +mustang +mustard +mustee +muster +mustify +mustily +mustnt +musty +muta +mutable +mutably +mutage +mutant +mutase +mutate +mutch +mute +mutedly +mutely +muth +mutic +mutiny +mutism +mutist +mutive +mutsje +mutt +mutter +mutton +muttony +mutual +mutuary +mutule +mutuum +mux +muyusa +muzhik +muzz +muzzily +muzzle +muzzler +muzzy +my +myal +myalgia +myalgic +myalism +myall +myarian +myatony +mycele +mycelia +mycoid +mycose +mycosin +mycosis +mycotic +mydine +myelic +myelin +myeloic +myeloid +myeloma +myelon +mygale +mygalid +myiasis +myiosis +myitis +mykiss +mymarid +myna +myocele +myocyte +myogen +myogram +myoid +myology +myoma +myomere +myoneme +myope +myophan +myopia +myopic +myops +myopy +myosin +myosis +myosote +myotic +myotome +myotomy +myotony +myowun +myoxine +myrcene +myrcia +myriad +myriare +myrica +myricin +myricyl +myringa +myron +myronic +myrosin +myrrh +myrrhed +myrrhic +myrrhol +myrrhy +myrtal +myrtle +myrtol +mysel +myself +mysell +mysid +mysoid +mysost +myst +mystax +mystery +mystes +mystic +mystify +myth +mythify +mythism +mythist +mythize +mythos +mythus +mytilid +myxa +myxemia +myxo +myxoid +myxoma +myxopod +myzont +n +na +naa +naam +nab +nabak +nabber +nabk +nabla +nable +nabob +nabobry +nabs +nacarat +nace +nacelle +nach +nachani +nacket +nacre +nacred +nacrine +nacrite +nacrous +nacry +nadder +nadir +nadiral +nae +naebody +naegate +nael +naether +nag +naga +nagaika +nagana +nagara +nagger +naggin +nagging +naggish +naggle +naggly +naggy +naght +nagmaal +nagman +nagnag +nagnail +nagor +nagsman +nagster +nagual +naiad +naiant +naid +naif +naifly +naig +naigie +naik +nail +nailbin +nailer +nailery +nailing +nailrod +naily +nain +nainsel +naio +naipkin +nairy +nais +naish +naither +naive +naively +naivete +naivety +nak +nake +naked +nakedly +naker +nakhod +nakhoda +nako +nakong +nakoo +nallah +nam +namable +namaqua +namaz +namda +name +namely +namer +naming +nammad +nan +nana +nancy +nandi +nandine +nandow +nandu +nane +nanes +nanga +nanism +nankeen +nankin +nanny +nanoid +nanpie +nant +nantle +naology +naos +nap +napa +napal +napalm +nape +napead +naperer +napery +naphtha +naphtho +naphtol +napkin +napless +napoo +nappe +napped +napper +napping +nappy +napron +napu +nar +narcism +narcist +narcoma +narcose +narcous +nard +nardine +nardoo +nares +nargil +narial +naric +narica +narine +nark +narky +narr +narra +narras +narrate +narrow +narrowy +narthex +narwhal +nary +nasab +nasal +nasalis +nasally +nasard +nascent +nasch +nash +nashgab +nashgob +nasi +nasial +nasion +nasitis +nasrol +nast +nastic +nastika +nastily +nasty +nasus +nasute +nasutus +nat +nataka +natal +natals +natant +natator +natch +nates +nathe +nather +nation +native +natr +natrium +natron +natter +nattily +nattle +natty +natuary +natural +nature +naucrar +nauger +naught +naughty +naumk +naunt +nauntle +nausea +naut +nautch +nauther +nautic +nautics +naval +navally +navar +navarch +nave +navel +naveled +navet +navette +navew +navite +navvy +navy +naw +nawab +nawt +nay +nayaur +naysay +nayward +nayword +naze +nazim +nazir +ne +nea +neal +neanic +neap +neaped +nearby +nearest +nearish +nearly +neat +neaten +neath +neatify +neatly +neb +neback +nebbed +nebbuck +nebbuk +nebby +nebel +nebris +nebula +nebulae +nebular +nebule +neck +neckar +necked +necker +neckful +necking +necklet +necktie +necrose +nectar +nectary +nedder +neddy +nee +neebor +neebour +need +needer +needful +needham +needily +needing +needle +needled +needler +needles +needly +needs +needy +neeger +neeld +neele +neem +neep +neepour +neer +neese +neet +neetup +neeze +nef +nefast +neffy +neftgil +negate +negator +neger +neglect +negrine +negro +negus +nei +neif +neigh +neigher +neiper +neist +neither +nekton +nelson +nema +nematic +nemeses +nemesic +nemoral +nenta +neo +neocyte +neogamy +neolith +neology +neon +neonate +neorama +neossin +neoteny +neotype +neoza +nep +neper +nephele +nephesh +nephew +nephria +nephric +nephron +nephros +nepman +nepotal +nepote +nepotic +nereite +nerine +neritic +nerval +nervate +nerve +nerver +nervid +nervily +nervine +nerving +nervish +nervism +nervose +nervous +nervule +nervure +nervy +nese +nesh +neshly +nesiote +ness +nest +nestage +nester +nestful +nestle +nestler +nesty +net +netball +netbush +netcha +nete +neter +netful +neth +nether +neti +netleaf +netlike +netman +netop +netsman +netsuke +netted +netter +netting +nettle +nettler +nettly +netty +netwise +network +neuma +neume +neumic +neurad +neural +neurale +neuric +neurin +neurine +neurism +neurite +neuroid +neuroma +neuron +neurone +neurula +neuter +neutral +neutron +neve +nevel +never +nevo +nevoid +nevoy +nevus +new +newcal +newcome +newel +newelty +newing +newings +newish +newly +newness +news +newsboy +newsful +newsman +newsy +newt +newtake +newton +nexal +next +nextly +nexum +nexus +neyanda +ngai +ngaio +ngapi +ni +niacin +niata +nib +nibbana +nibbed +nibber +nibble +nibbler +nibby +niblick +niblike +nibong +nibs +nibsome +nice +niceish +nicely +nicety +niche +nicher +nick +nickel +nicker +nickey +nicking +nickle +nicky +nicolo +nicotia +nicotic +nictate +nid +nidal +nidana +niddick +niddle +nide +nidge +nidget +nidgety +nidi +nidify +niding +nidor +nidulus +nidus +niece +nielled +niello +niepa +nieve +nieveta +nife +niffer +nific +nifle +nifling +nifty +nig +niggard +nigger +niggery +niggle +niggler +niggly +nigh +nighly +night +nighted +nightie +nightly +nights +nignay +nignye +nigori +nigre +nigrify +nigrine +nigrous +nigua +nikau +nil +nilgai +nim +nimb +nimbed +nimbi +nimble +nimbly +nimbose +nimbus +nimiety +niminy +nimious +nimmer +nimshi +nincom +nine +ninepin +nineted +ninety +ninny +ninon +ninth +ninthly +nintu +ninut +niobate +niobic +niobite +niobium +niobous +niog +niota +nip +nipa +nipper +nippers +nippily +nipping +nipple +nippy +nipter +nirles +nirvana +nisei +nishiki +nisnas +nispero +nisse +nisus +nit +nitch +nitency +niter +nitered +nither +nithing +nitid +nito +niton +nitrate +nitric +nitride +nitrify +nitrile +nitrite +nitro +nitrous +nitryl +nitter +nitty +nitwit +nival +niveous +nix +nixie +niyoga +nizam +nizamut +nizy +njave +no +noa +nob +nobber +nobbily +nobble +nobbler +nobbut +nobby +noble +nobley +nobly +nobody +nobs +nocake +nocent +nock +nocket +nocktat +noctuid +noctule +nocturn +nocuity +nocuous +nod +nodal +nodated +nodder +nodding +noddle +noddy +node +noded +nodi +nodiak +nodical +nodose +nodous +nodular +nodule +noduled +nodulus +nodus +noel +noetic +noetics +nog +nogada +nogal +noggen +noggin +nogging +noghead +nohow +noil +noilage +noiler +noily +noint +noir +noise +noisily +noisome +noisy +nokta +noll +nolle +nolo +noma +nomad +nomadic +nomancy +nomarch +nombril +nome +nomial +nomic +nomina +nominal +nominee +nominy +nomism +nomisma +nomos +non +nonacid +nonact +nonage +nonagon +nonaid +nonair +nonane +nonary +nonbase +nonce +noncock +noncom +noncome +noncon +nonda +nondo +none +nonego +nonene +nonent +nonepic +nones +nonet +nonevil +nonfact +nonfarm +nonfat +nonfood +nonform +nonfrat +nongas +nongod +nongold +nongray +nongrey +nonhero +nonic +nonion +nonius +nonjury +nonlife +nonly +nonnant +nonnat +nonoic +nonoily +nonomad +nonpaid +nonpar +nonpeak +nonplus +nonpoet +nonport +nonrun +nonsale +nonsane +nonself +nonsine +nonskid +nonslip +nonstop +nonsuit +nontan +nontax +nonterm +nonuple +nonuse +nonuser +nonwar +nonya +nonyl +nonylic +nonzero +noodle +nook +nooked +nookery +nooking +nooklet +nooky +noology +noon +noonday +nooning +noonlit +noop +noose +nooser +nopal +nopalry +nope +nor +norard +norate +noreast +norelin +norgine +nori +noria +norie +norimon +norite +norland +norm +norma +normal +norsel +north +norther +norward +norwest +nose +nosean +nosed +nosegay +noser +nosey +nosine +nosing +nosism +nostic +nostril +nostrum +nosy +not +notable +notably +notaeal +notaeum +notal +notan +notary +notate +notator +notch +notched +notchel +notcher +notchy +note +noted +notedly +notekin +notelet +noter +nother +nothing +nothous +notice +noticer +notify +notion +notitia +notour +notself +notum +nougat +nought +noun +nounal +nounize +noup +nourice +nourish +nous +nouther +nova +novalia +novate +novator +novcic +novel +novelet +novella +novelly +novelry +novelty +novem +novena +novene +novice +novity +now +nowaday +noway +noways +nowed +nowel +nowhat +nowhen +nowhere +nowhit +nowise +nowness +nowt +nowy +noxa +noxal +noxally +noxious +noy +noyade +noyau +nozzle +nozzler +nth +nu +nuance +nub +nubbin +nubble +nubbly +nubby +nubia +nubile +nucal +nucha +nuchal +nucin +nucleal +nuclear +nuclei +nuclein +nucleon +nucleus +nuclide +nucule +nuculid +nudate +nuddle +nude +nudely +nudge +nudger +nudiped +nudish +nudism +nudist +nudity +nugator +nuggar +nugget +nuggety +nugify +nuke +nul +null +nullah +nullify +nullism +nullity +nullo +numb +number +numbing +numble +numbles +numbly +numda +numdah +numen +numeral +numero +nummary +nummi +nummus +numud +nun +nunatak +nunbird +nunch +nuncio +nuncle +nundine +nunhood +nunky +nunlet +nunlike +nunnari +nunnery +nunni +nunnify +nunnish +nunship +nuptial +nuque +nuraghe +nurhag +nurly +nurse +nurser +nursery +nursing +nursle +nursy +nurture +nusfiah +nut +nutant +nutate +nutcake +nutgall +nuthook +nutlet +nutlike +nutmeg +nutpick +nutria +nutrice +nutrify +nutseed +nutted +nutter +nuttery +nuttily +nutting +nuttish +nutty +nuzzer +nuzzle +nyanza +nye +nylast +nylon +nymil +nymph +nympha +nymphae +nymphal +nymphet +nymphic +nymphid +nymphly +nyxis +o +oadal +oaf +oafdom +oafish +oak +oaken +oaklet +oaklike +oakling +oakum +oakweb +oakwood +oaky +oam +oar +oarage +oarcock +oared +oarfish +oarhole +oarial +oaric +oaritic +oaritis +oarium +oarless +oarlike +oarlock +oarlop +oarman +oarsman +oarweed +oary +oasal +oasean +oases +oasis +oasitic +oast +oat +oatbin +oatcake +oatear +oaten +oatfowl +oath +oathay +oathed +oathful +oathlet +oatland +oatlike +oatmeal +oatseed +oaty +oban +obclude +obe +obeah +obeche +obeism +obelia +obeliac +obelial +obelion +obelisk +obelism +obelize +obelus +obese +obesely +obesity +obex +obey +obeyer +obi +obispo +obit +obitual +object +objure +oblate +obley +oblige +obliged +obligee +obliger +obligor +oblique +oblong +obloquy +oboe +oboist +obol +obolary +obole +obolet +obolus +oboval +obovate +obovoid +obscene +obscure +obsede +obsequy +observe +obsess +obtain +obtect +obtest +obtrude +obtund +obtuse +obverse +obvert +obviate +obvious +obvolve +ocarina +occamy +occiput +occlude +occluse +occult +occupy +occur +ocean +oceaned +oceanet +oceanic +ocellar +ocelli +ocellus +oceloid +ocelot +och +ochava +ochavo +ocher +ochery +ochone +ochrea +ochro +ochroid +ochrous +ocht +ock +oclock +ocote +ocque +ocracy +ocrea +ocreate +octad +octadic +octagon +octan +octane +octant +octapla +octarch +octary +octaval +octave +octavic +octavo +octene +octet +octic +octine +octoad +octoate +octofid +octoic +octoid +octonal +octoon +octoped +octopi +octopod +octopus +octose +octoyl +octroi +octroy +octuor +octuple +octuply +octyl +octyne +ocuby +ocular +oculary +oculate +oculist +oculus +od +oda +odacoid +odal +odalisk +odaller +odalman +odd +oddish +oddity +oddlegs +oddly +oddman +oddment +oddness +odds +oddsman +ode +odel +odelet +odeon +odeum +odic +odinite +odious +odist +odium +odology +odontic +odoom +odor +odorant +odorate +odored +odorful +odorize +odorous +odso +odum +odyl +odylic +odylism +odylist +odylize +oe +oecist +oecus +oenin +oenolin +oenomel +oer +oersted +oes +oestrid +oestrin +oestrum +oestrus +of +off +offal +offbeat +offcast +offcome +offcut +offend +offense +offer +offeree +offerer +offeror +offhand +office +officer +offing +offish +offlet +offlook +offscum +offset +offtake +offtype +offward +oflete +oft +often +oftens +ofter +oftest +oftly +oftness +ofttime +ogaire +ogam +ogamic +ogdoad +ogdoas +ogee +ogeed +ogham +oghamic +ogival +ogive +ogived +ogle +ogler +ogmic +ogre +ogreish +ogreism +ogress +ogrish +ogrism +ogtiern +ogum +oh +ohelo +ohia +ohm +ohmage +ohmic +oho +ohoy +oidioid +oii +oil +oilbird +oilcan +oilcoat +oilcup +oildom +oiled +oiler +oilery +oilfish +oilhole +oilily +oilless +oillet +oillike +oilman +oilseed +oilskin +oilway +oily +oilyish +oime +oinomel +oint +oisin +oitava +oka +okapi +okee +okenite +oket +oki +okia +okonite +okra +okrug +olam +olamic +old +olden +older +oldish +oldland +oldness +oldster +oldwife +oleana +olease +oleate +olefin +olefine +oleic +olein +olena +olenid +olent +oleo +oleose +oleous +olfact +olfacty +oliban +olid +oligist +olio +olitory +oliva +olivary +olive +olived +olivet +olivil +olivile +olivine +olla +ollamh +ollapod +ollock +olm +ologist +ology +olomao +olona +oloroso +olpe +oltonde +oltunna +olycook +olykoek +om +omagra +omalgia +omao +omasum +omber +omega +omegoid +omelet +omen +omened +omental +omentum +omer +omicron +omina +ominous +omit +omitis +omitter +omlah +omneity +omniana +omnibus +omnific +omnify +omnist +omnium +on +ona +onager +onagra +onanism +onanist +onca +once +oncetta +oncia +oncin +oncome +oncosis +oncost +ondatra +ondine +ondy +one +onefold +onegite +onehow +oneiric +oneism +onement +oneness +oner +onerary +onerous +onery +oneself +onetime +oneyer +onfall +onflow +ongaro +ongoing +onicolo +onion +onionet +oniony +onium +onkos +onlay +onlepy +onliest +onlook +only +onmarch +onrush +ons +onset +onshore +onside +onsight +onstand +onstead +onsweep +ontal +onto +onus +onward +onwards +onycha +onychia +onychin +onym +onymal +onymity +onymize +onymous +onymy +onyx +onyxis +onza +ooblast +oocyst +oocyte +oodles +ooecial +ooecium +oofbird +ooftish +oofy +oogamy +oogeny +ooglea +oogone +oograph +ooid +ooidal +oolak +oolemma +oolite +oolitic +oolly +oologic +oology +oolong +oomancy +oometer +oometry +oons +oont +oopak +oophore +oophyte +ooplasm +ooplast +oopod +oopodal +oorali +oord +ooscope +ooscopy +oosperm +oospore +ootheca +ootid +ootype +ooze +oozily +oozooid +oozy +opacate +opacify +opacite +opacity +opacous +opah +opal +opaled +opaline +opalish +opalize +opaloid +opaque +ope +opelet +open +opener +opening +openly +opera +operae +operand +operant +operate +opercle +operose +ophic +ophioid +ophite +ophitic +ophryon +opianic +opianyl +opiate +opiatic +opiism +opinant +opine +opiner +opinion +opium +opossum +oppidan +oppose +opposed +opposer +opposit +oppress +oppugn +opsonic +opsonin +opsy +opt +optable +optably +optant +optate +optic +optical +opticon +optics +optimal +optime +optimum +option +optive +opulent +opulus +opus +oquassa +or +ora +orach +oracle +orad +orage +oral +oraler +oralism +oralist +orality +oralize +orally +oralogy +orang +orange +oranger +orangey +orant +orarian +orarion +orarium +orary +orate +oration +orator +oratory +oratrix +orb +orbed +orbic +orbical +orbicle +orbific +orbit +orbital +orbitar +orbite +orbless +orblet +orby +orc +orcanet +orcein +orchard +orchat +orchel +orchic +orchid +orchil +orcin +orcinol +ordain +ordeal +order +ordered +orderer +orderly +ordinal +ordinar +ordinee +ordines +ordu +ordure +ore +oread +orectic +orellin +oreman +orenda +oreweed +orewood +orexis +orf +orfgild +organ +organal +organdy +organer +organic +organon +organry +organum +orgasm +orgeat +orgia +orgiac +orgiacs +orgiasm +orgiast +orgic +orgue +orgy +orgyia +oribi +oriel +oriency +orient +orifice +oriform +origan +origin +orignal +orihon +orillon +oriole +orison +oristic +orle +orlean +orlet +orlo +orlop +ormer +ormolu +orna +ornate +ornery +ornis +ornoite +oroanal +orogen +orogeny +oroide +orology +oronoco +orotund +orphan +orpheon +orpheum +orphrey +orpine +orrery +orrhoid +orris +orsel +orselle +ort +ortalid +ortet +orthal +orthian +orthic +orthid +orthite +ortho +orthose +orthron +ortiga +ortive +ortolan +ortygan +ory +oryssid +os +osamin +osamine +osazone +oscella +oscheal +oscin +oscine +oscnode +oscular +oscule +osculum +ose +osela +oshac +oside +osier +osiered +osiery +osmate +osmatic +osmesis +osmetic +osmic +osmin +osmina +osmious +osmium +osmose +osmosis +osmotic +osmous +osmund +osone +osophy +osprey +ossal +osse +ossein +osselet +osseous +ossicle +ossific +ossify +ossuary +osteal +ostein +ostemia +ostent +osteoid +osteoma +ostial +ostiary +ostiate +ostiole +ostitis +ostium +ostmark +ostosis +ostrich +otalgia +otalgic +otalgy +otarian +otarine +otary +otate +other +othmany +otiant +otiatry +otic +otidine +otidium +otiose +otitic +otitis +otkon +otocyst +otolite +otolith +otology +otosis +ototomy +ottar +otter +otterer +otto +oturia +ouabain +ouabaio +ouabe +ouakari +ouch +ouenite +ouf +ough +ought +oughtnt +oukia +oulap +ounce +ounds +ouphe +ouphish +our +ourie +ouroub +ours +ourself +oust +ouster +out +outact +outage +outarde +outask +outawe +outback +outbake +outban +outbar +outbark +outbawl +outbeam +outbear +outbeg +outbent +outbid +outblot +outblow +outbond +outbook +outborn +outbow +outbowl +outbox +outbrag +outbray +outbred +outbud +outbulk +outburn +outbuy +outbuzz +outby +outcant +outcase +outcast +outcity +outcome +outcrop +outcrow +outcry +outcull +outcure +outcut +outdare +outdate +outdo +outdoer +outdoor +outdraw +outdure +outeat +outecho +outed +outedge +outen +outer +outerly +outeye +outeyed +outface +outfall +outfame +outfast +outfawn +outfeat +outfish +outfit +outflow +outflue +outflux +outfly +outfold +outfool +outfoot +outform +outfort +outgain +outgame +outgang +outgas +outgate +outgaze +outgive +outglad +outglow +outgnaw +outgo +outgoer +outgone +outgrin +outgrow +outgun +outgush +outhaul +outhear +outheel +outher +outhire +outhiss +outhit +outhold +outhowl +outhue +outhunt +outhurl +outhut +outhymn +outing +outish +outjazz +outjest +outjet +outjinx +outjump +outjut +outkick +outkill +outking +outkiss +outknee +outlaid +outland +outlash +outlast +outlaw +outlay +outlean +outleap +outler +outlet +outlie +outlier +outlimb +outlimn +outline +outlip +outlive +outlook +outlord +outlove +outlung +outly +outman +outmate +outmode +outmost +outmove +outname +outness +outnook +outoven +outpace +outpage +outpart +outpass +outpath +outpay +outpeal +outpeep +outpeer +outpick +outpipe +outpity +outplan +outplay +outplod +outplot +outpoll +outpomp +outpop +outport +outpost +outpour +outpray +outpry +outpull +outpurl +outpush +output +outrace +outrage +outrail +outrank +outrant +outrap +outrate +outrave +outray +outre +outread +outrede +outrick +outride +outrig +outring +outroar +outroll +outroot +outrove +outrow +outrun +outrush +outsail +outsay +outsea +outseam +outsee +outseek +outsell +outsert +outset +outshot +outshow +outshut +outside +outsift +outsigh +outsin +outsing +outsit +outsize +outskip +outsoar +outsole +outspan +outspin +outspit +outspue +outstay +outstep +outsuck +outsulk +outsum +outswim +outtalk +outtask +outtear +outtell +outtire +outtoil +outtop +outtrot +outturn +outvie +outvier +outvote +outwait +outwake +outwale +outwalk +outwall +outwar +outward +outwash +outwave +outwear +outweed +outweep +outwell +outwent +outwick +outwile +outwill +outwind +outwing +outwish +outwit +outwith +outwoe +outwood +outword +outwore +outwork +outworn +outyard +outyell +outyelp +outzany +ouzel +ova +oval +ovalish +ovalize +ovally +ovaloid +ovant +ovarial +ovarian +ovarin +ovarium +ovary +ovate +ovated +ovately +ovation +oven +ovenful +ovenly +ovenman +over +overact +overage +overall +overapt +overarm +overawe +overawn +overbet +overbid +overbig +overbit +overbow +overbuy +overby +overcap +overcow +overcoy +overcry +overcup +overcut +overdo +overdry +overdue +overdye +overeat +overegg +overeye +overfag +overfar +overfat +overfed +overfee +overfew +overfit +overfix +overfly +overget +overgo +overgod +overgun +overhit +overhot +overink +overjob +overjoy +overlap +overlax +overlay +overleg +overlie +overlip +overlow +overly +overman +overmix +overnet +overnew +overpay +overpet +overply +overpot +overrim +overrun +oversad +oversea +oversee +overset +oversew +oversot +oversow +overt +overtax +overtip +overtly +overtoe +overtop +overuse +overway +overweb +overwet +overwin +ovest +ovey +ovicell +ovicide +ovicyst +oviduct +oviform +ovigerm +ovile +ovine +ovinia +ovipara +ovisac +ovism +ovist +ovistic +ovocyte +ovoid +ovoidal +ovolo +ovology +ovular +ovulary +ovulate +ovule +ovulist +ovum +ow +owd +owe +owelty +ower +owerby +owght +owing +owk +owl +owldom +owler +owlery +owlet +owlhead +owling +owlish +owlism +owllike +owly +own +owner +ownhood +ownness +ownself +owrehip +owrelay +owse +owsen +owser +owtchah +ox +oxacid +oxalan +oxalate +oxalic +oxalite +oxalyl +oxamate +oxamic +oxamid +oxamide +oxan +oxanate +oxane +oxanic +oxazine +oxazole +oxbane +oxberry +oxbird +oxbiter +oxblood +oxbow +oxboy +oxbrake +oxcart +oxcheek +oxea +oxeate +oxen +oxeote +oxer +oxetone +oxeye +oxfly +oxgang +oxgoad +oxhead +oxheal +oxheart +oxhide +oxhoft +oxhorn +oxhouse +oxhuvud +oxidant +oxidase +oxidate +oxide +oxidic +oxidize +oximate +oxime +oxland +oxlike +oxlip +oxman +oxonic +oxonium +oxozone +oxphony +oxreim +oxshoe +oxskin +oxtail +oxter +oxwort +oxy +oxyacid +oxygas +oxygen +oxyl +oxymel +oxyntic +oxyopia +oxysalt +oxytone +oyapock +oyer +oyster +ozena +ozonate +ozone +ozoned +ozonic +ozonide +ozonify +ozonize +ozonous +ozophen +ozotype +p +pa +paal +paar +paauw +pabble +pablo +pabouch +pabular +pabulum +pac +paca +pacable +pacate +pacay +pacaya +pace +paced +pacer +pachak +pachisi +pacific +pacify +pack +package +packer +packery +packet +packly +packman +packway +paco +pact +paction +pad +padder +padding +paddle +paddled +paddler +paddock +paddy +padella +padfoot +padge +padle +padlike +padlock +padnag +padre +padtree +paean +paegel +paegle +paenula +paeon +paeonic +paga +pagan +paganic +paganly +paganry +page +pageant +pagedom +pageful +pager +pagina +paginal +pagoda +pagrus +pagurid +pagus +pah +paha +pahi +pahlavi +pahmi +paho +pahutan +paigle +paik +pail +pailful +pailou +pain +pained +painful +paining +paint +painted +painter +painty +paip +pair +paired +pairer +pais +paisa +paiwari +pajama +pajock +pakchoi +pakeha +paktong +pal +palace +palaced +paladin +palaite +palama +palame +palanka +palar +palas +palatal +palate +palated +palatic +palaver +palay +palazzi +palch +pale +palea +paleate +paled +palely +paleola +paler +palet +paletot +palette +paletz +palfrey +palgat +pali +palikar +palila +palinal +paling +palisfy +palish +palkee +pall +palla +pallae +pallah +pallall +palled +pallet +palli +pallial +pallid +pallion +pallium +pallone +pallor +pally +palm +palma +palmad +palmar +palmary +palmate +palmed +palmer +palmery +palmful +palmist +palmite +palmito +palmo +palmula +palmus +palmy +palmyra +palolo +palp +palpal +palpate +palped +palpi +palpon +palpus +palsied +palster +palsy +palt +palter +paltry +paludal +paludic +palule +palulus +palus +paly +pam +pament +pamment +pampas +pampean +pamper +pampero +pampre +pan +panace +panacea +panache +panada +panade +panama +panaris +panary +panax +pancake +pand +panda +pandal +pandan +pandect +pandemy +pander +pandita +pandle +pandora +pandour +pandrop +pandura +pandy +pane +paned +paneity +panel +panela +paneler +panfil +panfish +panful +pang +pangamy +pangane +pangen +pangene +pangful +pangi +panhead +panic +panical +panicky +panicle +panisc +panisca +panisic +pank +pankin +panman +panmixy +panmug +pannade +pannage +pannam +panne +pannel +panner +pannery +pannier +panning +pannose +pannum +pannus +panocha +panoche +panoply +panoram +panse +panside +pansied +pansy +pant +pantas +panter +panther +pantie +panties +pantile +panting +pantle +pantler +panto +pantod +panton +pantoon +pantoum +pantry +pants +pantun +panty +panung +panurgy +panyar +paolo +paon +pap +papa +papable +papabot +papacy +papain +papal +papally +papalty +papane +papaw +papaya +papboat +pape +paper +papered +paperer +papern +papery +papess +papey +papilla +papion +papish +papism +papist +papize +papless +papmeat +papoose +pappi +pappose +pappox +pappus +pappy +papreg +paprica +paprika +papula +papular +papule +papyr +papyral +papyri +papyrin +papyrus +paquet +par +para +parable +paracme +parade +parader +parado +parados +paradox +parafle +parage +paragon +parah +paraiba +parale +param +paramo +parang +parao +parapet +paraph +parapod +pararek +parasol +paraspy +parate +paraxon +parbake +parboil +parcel +parch +parcher +parchy +parcook +pard +pardao +parded +pardesi +pardine +pardner +pardo +pardon +pare +parel +parella +paren +parent +parer +paresis +paretic +parfait +pargana +parge +parget +pargo +pari +pariah +parial +parian +paries +parify +parilla +parine +paring +parish +parisis +parison +parity +park +parka +parkee +parker +parkin +parking +parkish +parkway +parky +parlay +parle +parley +parling +parlish +parlor +parlous +parly +parma +parmak +parnas +parnel +paroch +parode +parodic +parodos +parody +paroecy +parol +parole +parolee +paroli +paronym +parotic +parotid +parotis +parous +parpal +parquet +parr +parrel +parrier +parrock +parrot +parroty +parry +parse +parsec +parser +parsley +parsnip +parson +parsony +part +partake +partan +parted +parter +partial +partile +partite +partlet +partly +partner +parto +partook +parture +party +parulis +parure +paruria +parvenu +parvis +parvule +pasan +pasang +paschal +pascual +pash +pasha +pashm +pasi +pasmo +pasquil +pasquin +pass +passade +passado +passage +passant +passe +passee +passen +passer +passewa +passing +passion +passir +passive +passkey +passman +passo +passout +passus +passway +past +paste +pasted +pastel +paster +pastern +pasteur +pastil +pastile +pastime +pasting +pastor +pastose +pastry +pasture +pasty +pasul +pat +pata +pataca +patacao +pataco +patagon +pataka +patamar +patao +patapat +pataque +patas +patball +patch +patcher +patchy +pate +patefy +patel +patella +paten +patency +patener +patent +pater +patera +patesi +path +pathed +pathema +pathic +pathlet +pathos +pathway +pathy +patible +patient +patina +patine +patined +patio +patly +patness +pato +patois +patola +patonce +patria +patrial +patrice +patrico +patrin +patriot +patrist +patrix +patrol +patron +patroon +patta +patte +pattee +patten +patter +pattern +pattu +patty +patu +patwari +paty +pau +paucify +paucity +paughty +paukpan +paular +paulie +paulin +paunch +paunchy +paup +pauper +pausal +pause +pauser +paussid +paut +pauxi +pavage +pavan +pavane +pave +paver +pavid +pavier +paving +pavior +paviour +pavis +paviser +pavisor +pavy +paw +pawdite +pawer +pawing +pawk +pawkery +pawkily +pawkrie +pawky +pawl +pawn +pawnage +pawnee +pawner +pawnie +pawnor +pawpaw +pax +paxilla +paxiuba +paxwax +pay +payable +payably +payday +payed +payee +payeny +payer +paying +payment +paynim +payoff +payong +payor +payroll +pea +peace +peach +peachen +peacher +peachy +peacoat +peacock +peacod +peafowl +peag +peage +peahen +peai +peaiism +peak +peaked +peaker +peakily +peaking +peakish +peaky +peal +pealike +pean +peanut +pear +pearl +pearled +pearler +pearlet +pearlin +pearly +peart +pearten +peartly +peasant +peasen +peason +peasy +peat +peatery +peatman +peaty +peavey +peavy +peba +pebble +pebbled +pebbly +pebrine +pecan +peccant +peccary +peccavi +pech +pecht +pecite +peck +pecked +pecker +pecket +peckful +peckish +peckle +peckled +peckly +pecky +pectase +pectate +pecten +pectic +pectin +pectize +pectora +pectose +pectous +pectus +ped +peda +pedage +pedagog +pedal +pedaler +pedant +pedary +pedate +pedated +pedder +peddle +peddler +pedee +pedes +pedesis +pedicab +pedicel +pedicle +pedion +pedlar +pedlary +pedocal +pedrail +pedrero +pedro +pedule +pedum +pee +peed +peek +peel +peele +peeled +peeler +peeling +peelman +peen +peenge +peeoy +peep +peeper +peepeye +peepy +peer +peerage +peerdom +peeress +peerie +peerly +peery +peesash +peeve +peeved +peever +peevish +peewee +peg +pega +pegall +pegasid +pegbox +pegged +pegger +pegging +peggle +peggy +pegless +peglet +peglike +pegman +pegwood +peho +peine +peisage +peise +peiser +peixere +pekan +pekin +pekoe +peladic +pelage +pelagic +pelamyd +pelanos +pelean +pelecan +pelf +pelican +pelick +pelike +peliom +pelioma +pelisse +pelite +pelitic +pell +pellage +pellar +pellard +pellas +pellate +peller +pellet +pellety +pellile +pellock +pelmet +pelon +peloria +peloric +pelorus +pelota +peloton +pelt +pelta +peltast +peltate +pelter +pelting +peltry +pelu +peludo +pelves +pelvic +pelvis +pembina +pemican +pen +penal +penally +penalty +penance +penang +penates +penbard +pence +pencel +pencil +pend +penda +pendant +pendent +pending +pendle +pendom +pendule +penfold +penful +pengo +penguin +penhead +penial +penide +penile +penis +penk +penlike +penman +penna +pennae +pennage +pennant +pennate +penner +pennet +penni +pennia +pennied +pennill +penning +pennon +penny +penrack +penship +pensile +pension +pensive +penster +pensum +pensy +pent +penta +pentace +pentad +pentail +pentane +pentene +pentine +pentit +pentite +pentode +pentoic +pentol +pentose +pentrit +pentyl +pentyne +penuchi +penult +penury +peon +peonage +peonism +peony +people +peopler +peoplet +peotomy +pep +pepful +pepino +peplos +peplum +peplus +pepo +pepper +peppery +peppily +peppin +peppy +pepsin +pepsis +peptic +peptide +peptize +peptone +per +peracid +peract +perbend +percale +percent +percept +perch +percha +percher +percid +percoct +percoid +percur +percuss +perdu +perdure +pereion +pereira +peres +perfect +perfidy +perform +perfume +perfumy +perfuse +pergola +perhaps +peri +periapt +peridot +perigee +perigon +peril +perine +period +periost +perique +perish +perit +perite +periwig +perjink +perjure +perjury +perk +perkily +perkin +perking +perkish +perky +perle +perlid +perlite +perloir +perm +permit +permute +pern +pernine +pernor +pernyi +peroba +peropod +peropus +peroral +perosis +perotic +peroxy +peroxyl +perpend +perpera +perplex +perrier +perron +perry +persalt +perse +persico +persis +persist +person +persona +pert +pertain +perten +pertish +pertly +perturb +pertuse +perty +peruke +perula +perule +perusal +peruse +peruser +pervade +pervert +pes +pesa +pesade +pesage +peseta +peshkar +peshwa +peskily +pesky +peso +pess +pessary +pest +peste +pester +pestful +pestify +pestle +pet +petal +petaled +petalon +petaly +petard +petary +petasos +petasus +petcock +pete +peteca +peteman +peter +petful +petiole +petit +petite +petitor +petkin +petling +peto +petrary +petre +petrean +petrel +petrie +petrify +petrol +petrosa +petrous +petted +petter +pettily +pettish +pettle +petty +petune +petwood +petzite +peuhl +pew +pewage +pewdom +pewee +pewful +pewing +pewit +pewless +pewmate +pewter +pewtery +pewy +peyote +peyotl +peyton +peytrel +pfennig +pfui +pfund +phacoid +phaeism +phaeton +phage +phalanx +phalera +phallic +phallin +phallus +phanic +phano +phantom +phare +pharmic +pharos +pharynx +phase +phaseal +phasemy +phases +phasic +phasis +phasm +phasma +phasmid +pheal +phellem +phemic +phenate +phene +phenene +phenic +phenin +phenol +phenyl +pheon +phew +phi +phial +phiale +philter +philtra +phit +phiz +phizes +phizog +phlegm +phlegma +phlegmy +phloem +phloxin +pho +phobiac +phobic +phobism +phobist +phoby +phoca +phocal +phocid +phocine +phocoid +phoebe +phoenix +phoh +pholad +pholcid +pholido +phon +phonal +phonate +phone +phoneme +phonic +phonics +phonism +phono +phony +phoo +phoresy +phoria +phorid +phorone +phos +phose +phosis +phospho +phossy +phot +photal +photic +photics +photism +photo +photoma +photon +phragma +phrasal +phrase +phraser +phrasy +phrator +phratry +phrenic +phrynid +phrynin +phthor +phu +phugoid +phulwa +phut +phycite +phyla +phyle +phylic +phyllin +phylon +phylum +phyma +phymata +physic +physics +phytase +phytic +phytin +phytoid +phytol +phytoma +phytome +phyton +phytyl +pi +pia +piaba +piacaba +piacle +piaffe +piaffer +pial +pialyn +pian +pianic +pianino +pianism +pianist +piannet +piano +pianola +piaster +piastre +piation +piazine +piazza +pibcorn +pibroch +pic +pica +picador +pical +picamar +picara +picarel +picaro +picary +piccolo +pice +picene +piceous +pichi +picine +pick +pickage +pickax +picked +pickee +pickeer +picker +pickery +picket +pickle +pickler +pickman +pickmaw +pickup +picky +picnic +pico +picoid +picot +picotah +picotee +picra +picrate +picric +picrite +picrol +picryl +pict +picture +pictury +picuda +picudo +picul +piculet +pidan +piddle +piddler +piddock +pidgin +pie +piebald +piece +piecen +piecer +piecing +pied +piedly +pieless +pielet +pielum +piemag +pieman +pien +piend +piepan +pier +pierage +pierce +pierced +piercel +piercer +pierid +pierine +pierrot +pieshop +piet +pietas +pietic +pietism +pietist +pietose +piety +piewife +piewipe +piezo +piff +piffle +piffler +pifine +pig +pigdan +pigdom +pigeon +pigface +pigfish +pigfoot +pigful +piggery +piggin +pigging +piggish +piggle +piggy +pighead +pigherd +pightle +pigless +piglet +pigling +pigly +pigman +pigment +pignon +pignus +pignut +pigpen +pigroot +pigskin +pigsney +pigsty +pigtail +pigwash +pigweed +pigyard +piitis +pik +pika +pike +piked +pikel +pikelet +pikeman +piker +pikey +piki +piking +pikle +piky +pilage +pilapil +pilar +pilary +pilau +pilaued +pilch +pilcher +pilcorn +pilcrow +pile +pileata +pileate +piled +pileous +piler +piles +pileus +pilfer +pilger +pilgrim +pili +pilifer +piligan +pilikai +pilin +piline +piling +pilkins +pill +pillage +pillar +pillary +pillas +pillbox +pilled +pillet +pilleus +pillion +pillory +pillow +pillowy +pilm +pilmy +pilon +pilori +pilose +pilosis +pilot +pilotee +pilotry +pilous +pilpul +piltock +pilula +pilular +pilule +pilum +pilus +pily +pimaric +pimelic +pimento +pimlico +pimola +pimp +pimpery +pimping +pimpish +pimple +pimpled +pimplo +pimploe +pimply +pin +pina +pinaces +pinacle +pinacol +pinang +pinax +pinball +pinbone +pinbush +pincase +pincer +pincers +pinch +pinche +pinched +pinchem +pincher +pind +pinda +pinder +pindy +pine +pineal +pined +pinene +piner +pinery +pinesap +pinetum +piney +pinfall +pinfish +pinfold +ping +pingle +pingler +pingue +pinguid +pinguin +pinhead +pinhold +pinhole +pinhook +pinic +pining +pinion +pinite +pinitol +pinjane +pinjra +pink +pinked +pinkeen +pinken +pinker +pinkeye +pinkie +pinkify +pinkily +pinking +pinkish +pinkly +pinky +pinless +pinlock +pinna +pinnace +pinnae +pinnal +pinnate +pinned +pinnel +pinner +pinnet +pinning +pinnock +pinnula +pinnule +pinny +pino +pinole +pinolia +pinolin +pinon +pinonic +pinrail +pinsons +pint +pinta +pintado +pintail +pintano +pinte +pintle +pinto +pintura +pinulus +pinweed +pinwing +pinwork +pinworm +piny +pinyl +pinyon +pioneer +pioted +piotine +piotty +pioury +pious +piously +pip +pipa +pipage +pipal +pipe +pipeage +piped +pipeful +pipeman +piper +piperic +piperly +piperno +pipery +pipet +pipette +pipi +piping +pipiri +pipit +pipkin +pipless +pipped +pipper +pippin +pippy +piprine +piproid +pipy +piquant +pique +piquet +piquia +piqure +pir +piracy +piragua +piranha +pirate +piraty +pirl +pirn +pirner +pirnie +pirny +pirogue +pirol +pirr +pirrmaw +pisaca +pisang +pisay +piscary +piscian +piscina +piscine +pisco +pise +pish +pishaug +pishu +pisk +pisky +pismire +piso +piss +pissant +pist +pistic +pistil +pistle +pistol +pistole +piston +pistrix +pit +pita +pitanga +pitapat +pitarah +pitau +pitaya +pitch +pitcher +pitchi +pitchy +piteous +pitfall +pith +pithful +pithily +pithole +pithos +pithy +pitier +pitiful +pitless +pitlike +pitman +pitmark +pitmirk +pitpan +pitpit +pitside +pitted +pitter +pittine +pitting +pittite +pittoid +pituite +pituri +pitwood +pitwork +pity +pitying +piuri +pivalic +pivot +pivotal +pivoter +pix +pixie +pixy +pize +pizza +pizzle +placard +placate +place +placebo +placer +placet +placid +plack +placket +placode +placoid +placula +plaga +plagal +plagate +plage +plagium +plagose +plague +plagued +plaguer +plaguy +plaice +plaid +plaided +plaidie +plaidy +plain +plainer +plainly +plaint +plait +plaited +plaiter +plak +plakat +plan +planaea +planar +planate +planch +plandok +plane +planer +planet +planeta +planful +plang +plangor +planish +planity +plank +planker +planky +planner +plant +planta +plantad +plantal +plantar +planter +planula +planury +planxty +plap +plaque +plash +plasher +plashet +plashy +plasm +plasma +plasmic +plasome +plass +plasson +plaster +plastic +plastid +plastin +plat +platan +platane +platano +platch +plate +platea +plateau +plated +platen +plater +platery +platic +platina +plating +platode +platoid +platoon +platted +platten +platter +platty +platy +plaud +plaudit +play +playa +playbox +playboy +playday +player +playful +playlet +playman +playock +playpen +plaza +plea +pleach +plead +pleader +please +pleaser +pleat +pleater +pleb +plebe +plebify +plebs +pleck +plectre +pled +pledge +pledgee +pledger +pledget +pledgor +pleion +plenary +plenipo +plenish +plenism +plenist +plenty +plenum +pleny +pleon +pleonal +pleonic +pleopod +pleroma +plerome +plessor +pleura +pleural +pleuric +pleuron +pleurum +plew +plex +plexal +plexor +plexure +plexus +pliable +pliably +pliancy +pliant +plica +plical +plicate +plied +plier +plies +pliers +plight +plim +plinth +pliskie +plisky +ploat +ploce +plock +plod +plodder +plodge +plomb +plook +plop +plosion +plosive +plot +plote +plotful +plotted +plotter +plotty +plough +plouk +plouked +plouky +plounce +plout +plouter +plover +plovery +plow +plowboy +plower +plowing +plowman +ploy +pluck +plucked +plucker +plucky +plud +pluff +pluffer +pluffy +plug +plugged +plugger +pluggy +plugman +plum +pluma +plumach +plumade +plumage +plumate +plumb +plumber +plumbet +plumbic +plumbog +plumbum +plumcot +plume +plumed +plumer +plumery +plumet +plumier +plumify +plumist +plumlet +plummer +plummet +plummy +plumose +plumous +plump +plumpen +plumper +plumply +plumps +plumpy +plumula +plumule +plumy +plunder +plunge +plunger +plunk +plup +plural +pluries +plurify +plus +plush +plushed +plushy +pluteal +plutean +pluteus +pluvial +pluvian +pluvine +ply +plyer +plying +plywood +pneuma +po +poach +poacher +poachy +poalike +pob +pobby +pobs +pochade +pochard +pochay +poche +pock +pocket +pockety +pockily +pocky +poco +pocosin +pod +podagra +podal +podalic +podatus +podded +podder +poddish +poddle +poddy +podeon +podesta +podex +podge +podger +podgily +podgy +podial +podical +podices +podite +poditic +poditti +podium +podler +podley +podlike +podogyn +podsol +poduran +podurid +podware +podzol +poe +poem +poemet +poemlet +poesie +poesis +poesy +poet +poetdom +poetess +poetic +poetics +poetito +poetize +poetly +poetry +pogge +poggy +pogonip +pogrom +pogy +poh +poha +pohna +poi +poietic +poignet +poil +poilu +poind +poinder +point +pointed +pointel +pointer +pointy +poise +poised +poiser +poison +poitrel +pokable +poke +poked +pokeful +pokeout +poker +pokey +pokily +poking +pokomoo +pokunt +poky +pol +polacca +polack +polacre +polar +polaric +polarly +polaxis +poldavy +polder +pole +polearm +poleax +poleaxe +polecat +poleman +polemic +polenta +poler +poley +poliad +police +policed +policy +poligar +polio +polis +polish +polite +politic +polity +polk +polka +poll +pollack +polladz +pollage +pollam +pollan +pollard +polled +pollen +pollent +poller +pollex +polling +pollock +polloi +pollute +pollux +polo +poloist +polony +polos +polska +polt +poltina +poly +polyact +polyad +polygam +polygon +polygyn +polymer +polyose +polyp +polyped +polypi +polypod +polypus +pom +pomace +pomade +pomane +pomate +pomato +pomatum +pombe +pombo +pome +pomelo +pomey +pomfret +pomme +pommee +pommel +pommet +pommey +pommy +pomonal +pomonic +pomp +pompa +pompal +pompano +pompey +pomphus +pompier +pompion +pompist +pompon +pompous +pomster +pon +ponce +ponceau +poncho +pond +pondage +ponder +pondful +pondlet +pondman +pondok +pondus +pondy +pone +ponent +ponerid +poney +pong +ponga +pongee +poniard +ponica +ponier +ponja +pont +pontage +pontal +pontee +pontes +pontic +pontiff +pontify +pontil +pontile +pontin +pontine +pontist +ponto +ponton +pontoon +pony +ponzite +pooa +pooch +pooder +poodle +poof +poogye +pooh +pook +pooka +pookaun +pookoo +pool +pooler +pooli +pooly +poon +poonac +poonga +poop +pooped +poor +poorish +poorly +poot +pop +popadam +popal +popcorn +popdock +pope +popedom +popeism +popeler +popely +popery +popess +popeye +popeyed +popgun +popify +popinac +popish +popjoy +poplar +poplin +popover +poppa +poppean +poppel +popper +poppet +poppied +poppin +popple +popply +poppy +popshop +popular +populin +popweed +poral +porcate +porch +porched +porcine +pore +pored +porer +porge +porger +porgy +poring +porism +porite +pork +porker +porkery +porket +porkish +porkman +porkpie +porky +porogam +poroma +poros +porose +porosis +porotic +porous +porr +porrect +porret +porrigo +porry +port +porta +portage +portail +portal +portass +ported +portend +portent +porter +portia +portico +portify +portio +portion +portlet +portly +portman +porto +portray +portway +porty +porule +porus +pory +posca +pose +poser +poseur +posey +posh +posing +posit +positor +positum +posnet +posole +poss +posse +possess +posset +possum +post +postage +postal +postbag +postbox +postboy +posted +posteen +poster +postern +postfix +postic +postil +posting +postman +posture +postwar +posy +pot +potable +potamic +potash +potass +potassa +potate +potato +potator +potbank +potboil +potboy +potch +potcher +potdar +pote +poteen +potence +potency +potent +poter +poteye +potful +potgirl +potgun +pothead +potheen +pother +potherb +pothery +pothole +pothook +pothunt +potifer +potion +potleg +potlid +potlike +potluck +potman +potong +potoo +potoroo +potpie +potrack +pott +pottage +pottagy +pottah +potted +potter +pottery +potting +pottle +pottled +potto +potty +potware +potwork +potwort +pouce +poucer +poucey +pouch +pouched +pouchy +pouf +poulard +poulp +poulpe +poult +poulter +poultry +pounamu +pounce +pounced +pouncer +pouncet +pound +poundal +pounder +pour +pourer +pourie +pouring +pouser +pout +pouter +poutful +pouting +pouty +poverty +pow +powder +powdery +powdike +powdry +power +powered +powitch +pownie +powwow +pox +poxy +poy +poyou +praam +prabble +prabhu +practic +prad +praecox +praetor +prairie +praise +praiser +prajna +praline +pram +prana +prance +prancer +prancy +prank +pranked +pranker +prankle +pranky +prase +prasine +prasoid +prastha +prat +pratal +prate +prater +pratey +prating +prattle +prattly +prau +pravity +prawn +prawner +prawny +praxis +pray +praya +prayer +prayful +praying +preach +preachy +preacid +preact +preaged +preally +preanal +prearm +preaver +prebake +prebend +prebid +prebill +preboil +preborn +preburn +precant +precary +precast +precava +precede +precent +precept +preces +precess +precipe +precis +precise +precite +precoil +precook +precool +precopy +precox +precure +precut +precyst +predamn +predark +predata +predate +predawn +preday +predefy +predeny +predial +predict +prediet +predine +predoom +predraw +predry +predusk +preen +preener +preeze +prefab +preface +prefect +prefer +prefine +prefix +prefool +preform +pregain +pregust +prehaps +preheal +preheat +prehend +preidea +preknit +preknow +prelacy +prelate +prelect +prelim +preloan +preloss +prelude +premake +premate +premial +premier +premise +premiss +premium +premix +premold +premove +prename +prender +prendre +preomit +preopen +preoral +prep +prepare +prepave +prepay +prepink +preplan +preplot +prepose +prepuce +prepupa +prerent +prerich +prerupt +presage +presay +preseal +presee +presell +present +preses +preset +preship +preshow +preside +presift +presign +prespur +press +pressel +presser +pressor +prest +prester +presto +presume +pretan +pretell +pretend +pretest +pretext +pretire +pretone +pretry +pretty +pretzel +prevail +prevene +prevent +preverb +preveto +previde +preview +previse +prevoid +prevote +prevue +prewar +prewarn +prewash +prewhip +prewire +prewrap +prexy +prey +preyer +preyful +prezone +price +priced +pricer +prich +prick +pricked +pricker +pricket +prickle +prickly +pricks +pricky +pride +pridian +priding +pridy +pried +prier +priest +prig +prigdom +prigger +prigman +prill +prim +prima +primacy +primage +primal +primar +primary +primate +prime +primely +primer +primero +primine +priming +primly +primost +primp +primsie +primula +primus +primy +prince +princox +prine +pringle +prink +prinker +prinkle +prinky +print +printed +printer +prion +prionid +prior +prioral +priorly +priory +prisage +prisal +priscan +prism +prismal +prismed +prismy +prison +priss +prissy +pritch +prithee +prius +privacy +privant +private +privet +privily +privity +privy +prize +prizer +prizery +pro +proa +proal +proarmy +prob +probabl +probal +probang +probant +probate +probe +probeer +prober +probity +problem +procarp +proceed +process +proctal +proctor +procure +prod +prodder +proddle +prodigy +produce +product +proem +proetid +prof +profane +profert +profess +proffer +profile +profit +profuse +prog +progeny +progger +progne +program +project +proke +proker +prolan +prolate +proleg +prolify +proline +prolix +prolong +prolyl +promic +promise +promote +prompt +pronaos +pronate +pronavy +prone +pronely +proneur +prong +pronged +pronger +pronic +pronoun +pronpl +pronto +pronuba +proo +proof +proofer +proofy +prop +propago +propale +propane +propend +propene +proper +prophet +propine +proplex +propone +propons +propose +propoxy +propper +props +propupa +propyl +propyne +prorata +prorate +prore +prorean +prorsad +prorsal +prosaic +prosar +prose +prosect +proser +prosify +prosily +prosing +prosish +prosist +proso +prosode +prosody +prosoma +prosper +pross +prossy +prosy +protax +prote +protea +protead +protean +protect +protege +proteic +protein +protend +protest +protext +prothyl +protide +protist +protium +proto +protoma +protome +proton +protone +protore +protyl +protyle +protype +proudly +provand +provant +prove +provect +proved +proven +prover +proverb +provide +provine +proving +proviso +provoke +provost +prow +prowar +prowed +prowess +prowl +prowler +proxeny +proximo +proxy +proxysm +prozone +prude +prudely +prudent +prudery +prudish +prudist +prudity +pruh +prunase +prune +prunell +pruner +pruning +prunt +prunted +prurigo +prussic +prut +prutah +pry +pryer +prying +pryler +pryse +prytany +psalis +psalm +psalmic +psalmy +psaloid +psalter +psaltes +pschent +pseudo +psha +pshaw +psi +psiloi +psoadic +psoas +psoatic +psocid +psocine +psoitis +psora +psoric +psoroid +psorous +pst +psych +psychal +psyche +psychic +psychid +psychon +psykter +psylla +psyllid +ptarmic +ptereal +pteric +pterion +pteroid +pteroma +pteryla +ptinid +ptinoid +ptisan +ptomain +ptosis +ptotic +ptyalin +ptyxis +pu +pua +puan +pub +pubal +pubble +puberal +puberty +pubes +pubian +pubic +pubis +public +publish +puccoon +puce +pucelle +puchero +puck +pucka +pucker +puckery +puckish +puckle +puckrel +pud +puddee +pudder +pudding +puddle +puddled +puddler +puddly +puddock +puddy +pudency +pudenda +pudent +pudge +pudgily +pudgy +pudiano +pudic +pudical +pudsey +pudsy +pudu +pueblo +puerer +puerile +puerman +puff +puffed +puffer +puffery +puffily +puffin +puffing +pufflet +puffwig +puffy +pug +pugged +pugger +puggi +pugging +puggish +puggle +puggree +puggy +pugh +pugil +pugman +pugmill +puisne +puist +puistie +puja +puka +pukatea +puke +pukeko +puker +pukish +pukras +puku +puky +pul +pulahan +pulasan +pule +pulegol +puler +puli +pulicat +pulicid +puling +pulish +pulk +pulka +pull +pulldoo +pullen +puller +pullery +pullet +pulley +pulli +pullus +pulp +pulpal +pulper +pulpify +pulpily +pulpit +pulpous +pulpy +pulque +pulsant +pulsate +pulse +pulsion +pulsive +pulton +pulu +pulvic +pulvil +pulvino +pulwar +puly +puma +pumice +pumiced +pumicer +pummel +pummice +pump +pumpage +pumper +pumpkin +pumple +pumpman +pun +puna +punaise +punalua +punatoo +punch +puncher +punchy +punct +punctal +punctum +pundit +pundita +pundum +puneca +pung +punga +pungar +pungent +punger +pungey +pungi +pungle +pungled +punicin +punily +punish +punjum +punk +punkah +punkie +punky +punless +punlet +punnage +punner +punnet +punnic +punster +punt +punta +puntal +puntel +punter +punti +puntil +puntist +punto +puntout +punty +puny +punyish +punyism +pup +pupa +pupal +pupate +pupelo +pupil +pupilar +pupiled +pupoid +puppet +puppify +puppily +puppy +pupulo +pupunha +pur +purana +puranic +puraque +purdah +purdy +pure +pured +puree +purely +purer +purfle +purfled +purfler +purfly +purga +purge +purger +purgery +purging +purify +purine +puriri +purism +purist +purity +purl +purler +purlieu +purlin +purlman +purloin +purpart +purple +purply +purport +purpose +purpura +purpure +purr +purre +purree +purreic +purrel +purrer +purring +purrone +purry +purse +pursed +purser +pursily +purslet +pursley +pursual +pursue +pursuer +pursuit +pursy +purusha +purvey +purview +purvoe +pus +push +pusher +pushful +pushing +pushpin +puss +pusscat +pussley +pussy +pustule +put +putage +putamen +putback +putchen +putcher +puteal +putelee +puther +puthery +putid +putidly +putlog +putois +putrefy +putrid +putt +puttee +putter +puttier +puttock +putty +puture +puxy +puzzle +puzzled +puzzler +pya +pyal +pyche +pycnia +pycnial +pycnid +pycnite +pycnium +pyelic +pyemia +pyemic +pygal +pygarg +pygidid +pygmoid +pygmy +pygofer +pygopod +pyic +pyin +pyjama +pyke +pyknic +pyla +pylar +pylic +pylon +pyloric +pylorus +pyocele +pyocyst +pyocyte +pyoid +pyosis +pyr +pyral +pyralid +pyralis +pyramid +pyran +pyranyl +pyre +pyrena +pyrene +pyrenic +pyrenin +pyretic +pyrex +pyrexia +pyrexic +pyrgom +pyridic +pyridyl +pyrite +pyrites +pyritic +pyro +pyrogen +pyroid +pyrone +pyrope +pyropen +pyropus +pyrosis +pyrotic +pyrrhic +pyrrol +pyrrole +pyrroyl +pyrryl +pyruvic +pyruvil +pyruvyl +python +pyuria +pyvuril +pyx +pyxides +pyxie +pyxis +q +qasida +qere +qeri +qintar +qoph +qua +quab +quabird +quachil +quack +quackle +quacky +quad +quadded +quaddle +quadra +quadral +quadrat +quadric +quadrum +quaedam +quaff +quaffer +quag +quagga +quaggle +quaggy +quahog +quail +quaily +quaint +quake +quaker +quaking +quaky +quale +qualify +quality +qualm +qualmy +quan +quandy +quannet +quant +quanta +quantic +quantum +quar +quare +quark +quarl +quarle +quarred +quarrel +quarry +quart +quartan +quarter +quartet +quartic +quarto +quartz +quartzy +quash +quashey +quashy +quasi +quasky +quassin +quat +quata +quatch +quatern +quaters +quatral +quatre +quatrin +quattie +quatuor +quauk +quave +quaver +quavery +quaw +quawk +quay +quayage +quayful +quayman +qubba +queach +queachy +queak +queal +quean +queasom +queasy +quedful +queechy +queen +queenly +queer +queerer +queerly +queery +queest +queet +queeve +quegh +quei +quelch +quell +queller +quemado +queme +quemely +quench +quercic +quercin +querent +querier +querist +querken +querl +quern +quernal +query +quest +quester +questor +quet +quetch +quetzal +queue +quey +quiapo +quib +quibble +quiblet +quica +quick +quicken +quickie +quickly +quid +quidder +quiddit +quiddle +quiesce +quiet +quieten +quieter +quietly +quietus +quiff +quila +quiles +quilkin +quill +quillai +quilled +quiller +quillet +quilly +quilt +quilted +quilter +quin +quina +quinary +quinate +quince +quinch +quinia +quinic +quinin +quinina +quinine +quinism +quinite +quinize +quink +quinnat +quinnet +quinoa +quinoid +quinol +quinone +quinova +quinoyl +quinse +quinsy +quint +quintad +quintal +quintan +quinte +quintet +quintic +quintin +quinto +quinton +quintus +quinyl +quinze +quip +quipful +quipo +quipper +quippy +quipu +quira +quire +quirk +quirky +quirl +quirt +quis +quisby +quiscos +quisle +quit +quitch +quite +quits +quitted +quitter +quittor +quiver +quivery +quiz +quizzee +quizzer +quizzy +quo +quod +quoin +quoined +quoit +quoiter +quoits +quondam +quoniam +quop +quorum +quot +quota +quote +quotee +quoter +quoth +quotha +quotity +quotum +r +ra +raad +raash +rab +raband +rabanna +rabat +rabatte +rabbet +rabbi +rabbin +rabbit +rabbity +rabble +rabbler +rabboni +rabic +rabid +rabidly +rabies +rabific +rabinet +rabitic +raccoon +raccroc +race +raceme +racemed +racemic +racer +raceway +rach +rache +rachial +rachis +racial +racily +racing +racism +racist +rack +rackan +racker +racket +rackett +rackety +rackful +racking +rackle +rackway +racloir +racon +racoon +racy +rad +rada +radar +raddle +radial +radiale +radian +radiant +radiate +radical +radicel +radices +radicle +radii +radio +radiode +radish +radium +radius +radix +radman +radome +radon +radula +raff +raffe +raffee +raffery +raffia +raffing +raffish +raffle +raffler +raft +raftage +rafter +raftman +rafty +rag +raga +rage +rageful +rageous +rager +ragfish +ragged +raggedy +raggee +ragger +raggery +raggety +raggil +raggily +ragging +raggle +raggled +raggy +raging +raglan +raglet +raglin +ragman +ragout +ragshag +ragtag +ragtime +ragule +raguly +ragweed +ragwort +rah +rahdar +raia +raid +raider +rail +railage +railer +railing +railly +railman +railway +raiment +rain +rainbow +rainer +rainful +rainily +rainy +raioid +rais +raise +raised +raiser +raisin +raising +raisiny +raj +raja +rajah +rakan +rake +rakeage +rakeful +raker +rakery +rakh +raki +rakily +raking +rakish +rakit +raku +rallier +ralline +rally +ralph +ram +ramada +ramage +ramal +ramanas +ramass +ramate +rambeh +ramble +rambler +rambong +rame +rameal +ramed +ramekin +rament +rameous +ramet +ramex +ramhead +ramhood +rami +ramie +ramify +ramlike +ramline +rammack +rammel +rammer +rammish +rammy +ramose +ramous +ramp +rampage +rampant +rampart +ramped +ramper +rampick +rampike +ramping +rampion +rampire +rampler +ramplor +ramrace +ramrod +ramsch +ramson +ramstam +ramtil +ramular +ramule +ramulus +ramus +ran +rana +ranal +rance +rancel +rancer +ranch +ranche +rancher +rancho +rancid +rancor +rand +randan +randem +rander +randing +randir +randle +random +randy +rane +rang +range +ranged +ranger +rangey +ranging +rangle +rangler +rangy +rani +ranid +ranine +rank +ranked +ranker +rankish +rankle +rankly +rann +rannel +ranny +ransack +ransel +ransom +rant +rantan +ranter +ranting +rantock +ranty +ranula +ranular +rap +rape +rapeful +raper +raphany +raphe +raphide +raphis +rapic +rapid +rapidly +rapier +rapillo +rapine +rapiner +raping +rapinic +rapist +raploch +rappage +rappe +rappel +rapper +rapping +rappist +rapport +rapt +raptly +raptor +raptril +rapture +raptury +raptus +rare +rarebit +rarefy +rarely +rarish +rarity +ras +rasa +rasant +rascal +rasceta +rase +rasen +raser +rasgado +rash +rasher +rashful +rashing +rashly +rasion +rasp +rasped +rasper +rasping +raspish +raspite +raspy +rasse +rassle +raster +rastik +rastle +rasure +rat +rata +ratable +ratably +ratafee +ratafia +ratal +ratbite +ratch +ratchel +ratcher +ratchet +rate +rated +ratel +rater +ratfish +rath +rathe +rathed +rathely +rather +rathest +rathite +rathole +ratify +ratine +rating +ratio +ration +ratite +ratlike +ratline +ratoon +rattage +rattail +rattan +ratteen +ratten +ratter +rattery +ratti +rattish +rattle +rattled +rattler +rattles +rattly +ratton +rattrap +ratty +ratwa +ratwood +raucid +raucity +raucous +raught +rauk +raukle +rauli +raun +raunge +raupo +rauque +ravage +ravager +rave +ravel +raveler +ravelin +ravelly +raven +ravener +ravenry +ravens +raver +ravin +ravine +ravined +raviney +raving +ravioli +ravish +ravison +raw +rawhead +rawhide +rawish +rawness +rax +ray +raya +rayage +rayed +rayful +rayless +raylet +rayon +raze +razee +razer +razoo +razor +razz +razzia +razzly +re +rea +reaal +reabuse +reach +reacher +reachy +react +reactor +read +readapt +readd +reader +readily +reading +readmit +readopt +readorn +ready +reagent +reagin +reagree +reak +real +realarm +reales +realest +realgar +realign +realism +realist +reality +realive +realize +reallot +reallow +really +realm +realter +realtor +realty +ream +reamage +reamass +reamend +reamer +reamuse +reamy +reannex +reannoy +reanvil +reap +reaper +reapply +rear +rearer +reargue +rearise +rearm +rearray +reask +reason +reassay +reasty +reasy +reatus +reaudit +reavail +reave +reaver +reavoid +reavow +reawait +reawake +reaward +reaware +reb +rebab +reback +rebag +rebait +rebake +rebale +reban +rebar +rebase +rebasis +rebate +rebater +rebathe +rebato +rebawl +rebear +rebeat +rebec +rebeck +rebed +rebeg +rebeget +rebegin +rebel +rebelly +rebend +rebeset +rebia +rebias +rebid +rebill +rebind +rebirth +rebite +reblade +reblame +reblast +reblend +rebless +reblock +rebloom +reblot +reblow +reblue +rebluff +reboant +reboard +reboast +rebob +reboil +reboise +rebold +rebolt +rebone +rebook +rebop +rebore +reborn +rebound +rebox +rebrace +rebraid +rebrand +rebreed +rebrew +rebribe +rebrick +rebring +rebrown +rebrush +rebud +rebuff +rebuild +rebuilt +rebuke +rebuker +rebulk +rebunch +rebuoy +reburn +reburst +rebury +rebus +rebush +rebusy +rebut +rebute +rebuy +recable +recage +recalk +recall +recant +recap +recarry +recart +recarve +recase +recash +recast +recatch +recce +recco +reccy +recede +receder +receipt +receive +recency +recense +recent +recept +recess +rechafe +rechain +rechal +rechant +rechaos +rechar +rechase +rechaw +recheat +recheck +recheer +rechew +rechip +rechuck +rechurn +recipe +recital +recite +reciter +reck +reckla +reckon +reclaim +reclama +reclang +reclasp +reclass +reclean +reclear +reclimb +recline +reclose +recluse +recoach +recoal +recoast +recoat +recock +recoct +recode +recoil +recoin +recoke +recolor +recomb +recon +recook +recool +recopy +record +recork +recount +recoup +recover +recramp +recrank +recrate +recrew +recroon +recrop +recross +recrowd +recrown +recruit +recrush +rect +recta +rectal +recti +rectify +rection +recto +rector +rectory +rectrix +rectum +rectus +recur +recure +recurl +recurse +recurve +recuse +recut +recycle +red +redact +redan +redare +redarn +redart +redate +redaub +redawn +redback +redbait +redbill +redbird +redbone +redbuck +redbud +redcap +redcoat +redd +redden +redder +redding +reddish +reddock +reddy +rede +redeal +redebit +redeck +redeed +redeem +redefer +redefy +redeify +redelay +redeny +redeye +redfin +redfish +redfoot +redhead +redhoop +redia +redient +redig +redip +redive +redleg +redlegs +redly +redness +redo +redock +redoom +redoubt +redound +redowa +redox +redpoll +redraft +redrag +redrape +redraw +redream +redress +redrill +redrive +redroot +redry +redsear +redskin +redtab +redtail +redtop +redub +reduce +reduced +reducer +reduct +redue +redux +redward +redware +redweed +redwing +redwood +redye +ree +reechy +reed +reeded +reeden +reeder +reedily +reeding +reedish +reedman +reedy +reef +reefer +reefing +reefy +reek +reeker +reeky +reel +reeled +reeler +reem +reeming +reemish +reen +reenge +reeper +reese +reeshle +reesk +reesle +reest +reester +reestle +reesty +reet +reetam +reetle +reeve +ref +reface +refall +refan +refavor +refect +refeed +refeel +refeign +refel +refence +refer +referee +refetch +refight +refill +refilm +refind +refine +refined +refiner +refire +refit +refix +reflag +reflame +reflash +reflate +reflect +reflee +reflex +refling +refloat +reflog +reflood +refloor +reflow +reflush +reflux +refly +refocus +refold +refont +refool +refoot +reforce +reford +reforge +reform +refound +refract +refrain +reframe +refresh +refront +reft +refuel +refuge +refugee +refulge +refund +refurl +refusal +refuse +refuser +refutal +refute +refuter +reg +regain +regal +regale +regaler +regalia +regally +regard +regatta +regauge +regency +regent +reges +reget +regia +regift +regild +regill +regime +regimen +regin +reginal +region +regive +reglair +reglaze +regle +reglet +regloss +reglove +reglow +reglue +regma +regnal +regnant +regorge +regrade +regraft +regrant +regrasp +regrass +regrate +regrede +regreen +regreet +regress +regret +regrind +regrip +regroup +regrow +reguard +reguide +regula +regular +reguli +regulus +regur +regurge +regush +reh +rehair +rehale +rehang +reharm +rehash +rehaul +rehead +reheal +reheap +rehear +reheat +rehedge +reheel +rehoe +rehoist +rehonor +rehood +rehook +rehoop +rehouse +rehung +reif +reify +reign +reim +reimage +reimpel +reimply +rein +reina +reincur +reindue +reinfer +reins +reinter +reis +reissue +reit +reitbok +reiter +reiver +rejail +reject +rejerk +rejoice +rejoin +rejolt +rejudge +rekick +rekill +reking +rekiss +reknit +reknow +rel +relabel +relace +relade +reladen +relais +relamp +reland +relap +relapse +relast +relata +relatch +relate +related +relater +relator +relatum +relax +relaxed +relaxer +relay +relbun +relead +releap +relearn +release +relend +relent +relet +relevel +relevy +reliant +relic +relick +relict +relief +relier +relieve +relievo +relift +relight +relime +relimit +reline +reliner +relink +relish +relishy +relist +relive +reload +reloan +relock +relodge +relook +relose +relost +relot +relove +relower +reluct +relume +rely +remade +remail +remain +remains +remake +remaker +reman +remand +remanet +remap +remarch +remark +remarry +remask +remass +remast +rematch +remble +remeant +remede +remedy +remeet +remelt +remend +remerge +remetal +remex +remica +remicle +remiges +remill +remimic +remind +remint +remiped +remise +remiss +remit +remix +remnant +remock +remodel +remold +remop +remora +remord +remorse +remote +remould +remount +removal +remove +removed +remover +renable +renably +renail +renal +rename +rend +render +reneg +renege +reneger +renegue +renerve +renes +renet +renew +renewal +renewer +renin +renish +renk +renky +renne +rennet +rennin +renown +rent +rentage +rental +rented +rentee +renter +renvoi +renvoy +reoccur +reoffer +reoil +reomit +reopen +reorder +reown +rep +repace +repack +repage +repaint +repair +repale +repand +repanel +repaper +repark +repass +repast +repaste +repatch +repave +repawn +repay +repayal +repeal +repeat +repeg +repel +repen +repent +repew +rephase +repic +repick +repiece +repile +repin +repine +repiner +repipe +repique +repitch +repkie +replace +replait +replan +replane +replant +replate +replay +replead +repleat +replete +replevy +replica +replier +replod +replot +replow +replum +replume +reply +repoint +repoll +repolon +repone +repope +report +reposal +repose +reposed +reposer +reposit +repost +repot +repound +repour +repp +repped +repray +repress +reprice +reprime +reprint +reprise +reproof +reprove +reprune +reps +reptant +reptile +repuff +repugn +repulse +repump +repurge +repute +reputed +requeen +request +requiem +requin +require +requit +requite +requiz +requote +rerack +rerail +reraise +rerake +rerank +rerate +reread +reredos +reree +rereel +rereeve +rereign +rerent +rerig +rering +rerise +rerival +rerivet +rerob +rerobe +reroll +reroof +reroot +rerope +reroute +rerow +rerub +rerun +resaca +resack +resail +resale +resalt +resaw +resawer +resay +rescan +rescind +rescore +rescrub +rescue +rescuer +reseal +reseam +reseat +resect +reseda +resee +reseed +reseek +reseise +reseize +reself +resell +resend +resene +resent +reserve +reset +resever +resew +resex +resh +reshake +reshape +reshare +reshave +reshear +reshift +reshine +reship +reshoe +reshoot +reshun +reshunt +reshut +reside +resider +residua +residue +resift +resigh +resign +resile +resin +resina +resiner +resing +resinic +resink +resinol +resiny +resist +resize +resizer +reskin +reslash +reslate +reslay +reslide +reslot +resmell +resmelt +resmile +resnap +resnub +resoak +resoap +resoil +resole +resolve +resorb +resort +resound +resow +resp +respace +respade +respan +respeak +respect +respell +respin +respire +respite +resplit +respoke +respond +respot +respray +respue +ressala +ressaut +rest +restack +restaff +restain +restake +restamp +restant +restart +restate +restaur +resteal +resteel +resteep +restem +restep +rester +restes +restful +restiad +restiff +resting +restir +restis +restive +restock +restore +restow +restrap +restrip +restudy +restuff +resty +restyle +resuck +resue +resuing +resuit +result +resume +resumer +resun +resup +resurge +reswage +resward +reswarm +reswear +resweat +resweep +reswell +reswill +reswim +ret +retable +retack +retag +retail +retain +retake +retaker +retalk +retama +retame +retan +retape +retard +retare +retaste +retax +retch +reteach +retell +retem +retempt +retene +retent +retest +rethank +rethaw +rethe +rethink +rethrow +retia +retial +retiary +reticle +retie +retier +retile +retill +retime +retin +retina +retinal +retinol +retinue +retip +retiral +retire +retired +retirer +retoast +retold +retomb +retook +retool +retooth +retort +retoss +retotal +retouch +retour +retrace +retrack +retract +retrad +retrade +retrain +retral +retramp +retread +retreat +retree +retrial +retrim +retrip +retrot +retrude +retrue +retrust +retry +retted +retter +rettery +retting +rettory +retube +retuck +retune +returf +return +retuse +retwine +retwist +retying +retype +retzian +reune +reunify +reunion +reunite +reurge +reuse +reutter +rev +revalue +revamp +revary +reve +reveal +reveil +revel +reveler +revelly +revelry +revend +revenge +revent +revenue +rever +reverb +revere +revered +reverer +reverie +revers +reverse +reversi +reverso +revert +revery +revest +revet +revete +revie +review +revile +reviler +revisal +revise +revisee +reviser +revisit +revisor +revival +revive +reviver +revivor +revoice +revoke +revoker +revolt +revolve +revomit +revote +revue +revuist +rewade +rewager +rewake +rewaken +rewall +reward +rewarm +rewarn +rewash +rewater +rewave +rewax +rewayle +rewear +reweave +rewed +reweigh +reweld +rewend +rewet +rewhelp +rewhirl +rewiden +rewin +rewind +rewire +rewish +rewood +reword +rework +rewound +rewove +rewoven +rewrap +rewrite +rex +rexen +reyield +reyoke +reyouth +rhabdom +rhabdos +rhabdus +rhagite +rhagon +rhagose +rhamn +rhamnal +rhason +rhatany +rhe +rhea +rhebok +rheeboc +rheebok +rheen +rheic +rhein +rheinic +rhema +rheme +rhenium +rheotan +rhesian +rhesus +rhetor +rheum +rheumed +rheumic +rheumy +rhexis +rhinal +rhine +rhinion +rhino +rhizine +rhizoid +rhizoma +rhizome +rhizote +rho +rhodic +rhoding +rhodite +rhodium +rhomb +rhombic +rhombos +rhombus +rhubarb +rhumb +rhumba +rhyme +rhymer +rhymery +rhymic +rhymist +rhymy +rhyptic +rhythm +rhyton +ria +rial +riancy +riant +riantly +riata +rib +ribald +riband +ribat +ribband +ribbed +ribber +ribbet +ribbing +ribble +ribbon +ribbony +ribby +ribe +ribless +riblet +riblike +ribonic +ribose +ribskin +ribwork +ribwort +rice +ricer +ricey +rich +richdom +richen +riches +richly +richt +ricin +ricine +ricinic +ricinus +rick +ricker +rickets +rickety +rickey +rickle +ricksha +ricrac +rictal +rictus +rid +ridable +ridably +riddam +riddel +ridden +ridder +ridding +riddle +riddler +ride +rideau +riden +rident +rider +ridered +ridge +ridged +ridgel +ridger +ridgil +ridging +ridgy +riding +ridotto +rie +riem +riempie +rier +rife +rifely +riff +riffle +riffler +rifle +rifler +riflery +rifling +rift +rifter +rifty +rig +rigbane +riggald +rigger +rigging +riggish +riggite +riggot +right +righten +righter +rightle +rightly +righto +righty +rigid +rigidly +rigling +rignum +rigol +rigor +rigsby +rikisha +rikk +riksha +rikshaw +rilawa +rile +riley +rill +rillet +rillett +rillock +rilly +rim +rima +rimal +rimate +rimbase +rime +rimer +rimfire +rimland +rimless +rimmed +rimmer +rimose +rimous +rimpi +rimple +rimrock +rimu +rimula +rimy +rinceau +rinch +rincon +rind +rinded +rindle +rindy +rine +ring +ringe +ringed +ringent +ringer +ringeye +ringing +ringite +ringle +ringlet +ringman +ringtaw +ringy +rink +rinka +rinker +rinkite +rinner +rinse +rinser +rinsing +rio +riot +rioter +rioting +riotist +riotous +riotry +rip +ripa +ripal +ripcord +ripe +ripely +ripen +ripener +riper +ripgut +ripieno +ripier +ripost +riposte +ripper +rippet +rippier +ripping +rippit +ripple +rippler +ripplet +ripply +rippon +riprap +ripsack +ripsaw +ripup +risala +risberm +rise +risen +riser +rishi +risible +risibly +rising +risk +risker +riskful +riskily +riskish +risky +risp +risper +risque +risquee +rissel +risser +rissle +rissoid +rist +ristori +rit +rita +rite +ritling +ritual +ritzy +riva +rivage +rival +rivalry +rive +rivel +rivell +riven +river +rivered +riverly +rivery +rivet +riveter +riving +rivose +rivulet +rix +rixy +riyal +rizzar +rizzle +rizzom +roach +road +roadbed +roaded +roader +roading +roadite +roadman +roadway +roam +roamage +roamer +roaming +roan +roanoke +roar +roarer +roaring +roast +roaster +rob +robalo +roband +robber +robbery +robbin +robbing +robe +rober +roberd +robin +robinet +robing +robinin +roble +robomb +robot +robotry +robur +robust +roc +rocher +rochet +rock +rockaby +rocker +rockery +rocket +rockety +rocking +rockish +rocklay +rocklet +rockman +rocky +rococo +rocta +rod +rodd +roddin +rodding +rode +rodent +rodeo +rodge +rodham +roding +rodless +rodlet +rodlike +rodman +rodney +rodsman +rodster +rodwood +roe +roebuck +roed +roelike +roer +roey +rog +rogan +roger +roggle +rogue +roguery +roguing +roguish +rohan +rohob +rohun +rohuna +roi +roid +roil +roily +roister +roit +roka +roke +rokeage +rokee +rokelay +roker +rokey +roky +role +roleo +roll +rolled +roller +rolley +rollick +rolling +rollix +rollmop +rollock +rollway +roloway +romaika +romaine +romal +romance +romancy +romanza +romaunt +rombos +romeite +romero +rommack +romp +romper +romping +rompish +rompu +rompy +roncet +ronco +rond +ronde +rondeau +rondel +rondino +rondle +rondo +rondure +rone +rongeur +ronquil +rontgen +ronyon +rood +roodle +roof +roofage +roofer +roofing +rooflet +roofman +roofy +rooibok +rooinek +rook +rooker +rookery +rookie +rookish +rooklet +rooky +rool +room +roomage +roomed +roomer +roomful +roomie +roomily +roomlet +roomth +roomthy +roomy +roon +roosa +roost +roosted +rooster +root +rootage +rootcap +rooted +rooter +rootery +rootle +rootlet +rooty +roove +ropable +rope +ropeman +roper +ropery +ropes +ropeway +ropily +roping +ropish +ropp +ropy +roque +roquer +roquet +roquist +roral +roric +rorqual +rorty +rory +rosal +rosario +rosary +rosated +roscid +rose +roseal +roseate +rosebay +rosebud +rosed +roseine +rosel +roselet +rosella +roselle +roseola +roseous +rosery +roset +rosetan +rosette +rosetty +rosetum +rosety +rosied +rosier +rosilla +rosillo +rosily +rosin +rosiny +rosland +rosoli +rosolic +rosolio +ross +rosser +rossite +rostel +roster +rostra +rostral +rostrum +rosular +rosy +rot +rota +rotal +rotaman +rotan +rotang +rotary +rotate +rotated +rotator +rotch +rote +rotella +roter +rotge +rotgut +rother +rotifer +roto +rotor +rottan +rotten +rotter +rotting +rottle +rottock +rottolo +rotula +rotulad +rotular +rotulet +rotulus +rotund +rotunda +rotundo +roub +roucou +roud +roue +rouelle +rouge +rougeau +rougeot +rough +roughen +rougher +roughet +roughie +roughly +roughy +rougy +rouille +rouky +roulade +rouleau +roun +rounce +rouncy +round +rounded +roundel +rounder +roundly +roundup +roundy +roup +rouper +roupet +roupily +roupit +roupy +rouse +rouser +rousing +roust +rouster +rout +route +router +routh +routhie +routhy +routine +routing +routous +rove +rover +rovet +rovetto +roving +row +rowable +rowan +rowboat +rowdily +rowdy +rowed +rowel +rowen +rower +rowet +rowing +rowlet +rowlock +rowport +rowty +rowy +rox +roxy +royal +royale +royalet +royally +royalty +royet +royt +rozum +ruach +ruana +rub +rubasse +rubato +rubbed +rubber +rubbers +rubbery +rubbing +rubbish +rubble +rubbler +rubbly +rubdown +rubelet +rubella +rubelle +rubeola +rubiate +rubican +rubidic +rubied +rubific +rubify +rubine +rubious +ruble +rublis +rubor +rubric +rubrica +rubrify +ruby +ruche +ruching +ruck +rucker +ruckle +rucksey +ruckus +rucky +ruction +rud +rudas +rudd +rudder +ruddied +ruddily +ruddle +ruddock +ruddy +rude +rudely +ruderal +rudesby +rudge +rudish +rudity +rue +rueful +ruelike +ruelle +ruen +ruer +ruesome +ruewort +ruff +ruffed +ruffer +ruffian +ruffin +ruffle +ruffled +ruffler +ruffly +rufous +rufter +rufus +rug +ruga +rugate +rugged +rugging +ruggle +ruggy +ruglike +rugosa +rugose +rugous +ruin +ruinate +ruined +ruiner +ruing +ruinous +rukh +rulable +rule +ruledom +ruler +ruling +rull +ruller +rullion +rum +rumal +rumble +rumbler +rumbly +rumbo +rumen +ruminal +rumkin +rumless +rumly +rummage +rummagy +rummer +rummily +rummish +rummy +rumness +rumney +rumor +rumorer +rump +rumpad +rumpade +rumple +rumply +rumpus +rumshop +run +runaway +runback +runby +runch +rundale +rundle +rundlet +rune +runed +runer +runfish +rung +runic +runite +runkle +runkly +runless +runlet +runman +runnel +runner +runnet +running +runny +runoff +runout +runover +runrig +runt +runted +runtee +runtish +runty +runway +rupa +rupee +rupia +rupiah +rupial +rupie +rupitic +ruptile +ruption +ruptive +rupture +rural +rurally +rurban +ruru +ruse +rush +rushed +rushen +rusher +rushing +rushlit +rushy +rusine +rusk +ruskin +rusky +rusma +rusot +ruspone +russel +russet +russety +russia +russud +rust +rustful +rustic +rustily +rustle +rustler +rustly +rustre +rustred +rusty +ruswut +rut +rutate +rutch +ruth +ruther +ruthful +rutic +rutile +rutin +ruttee +rutter +ruttish +rutty +rutyl +ruvid +rux +ryal +ryania +rybat +ryder +rye +ryen +ryme +rynd +rynt +ryot +ryotwar +rype +rypeck +s +sa +saa +sab +sabalo +sabanut +sabbat +sabbath +sabe +sabeca +sabella +saber +sabered +sabicu +sabina +sabine +sabino +sable +sably +sabora +sabot +saboted +sabra +sabulum +saburra +sabutan +sabzi +sac +sacaton +sacatra +saccade +saccate +saccos +saccule +saccus +sachem +sachet +sack +sackage +sackbag +sackbut +sacked +sacken +sacker +sackful +sacking +sackman +saclike +saco +sacope +sacque +sacra +sacrad +sacral +sacred +sacring +sacrist +sacro +sacrum +sad +sadden +saddik +saddish +saddle +saddled +saddler +sade +sadh +sadhe +sadhu +sadic +sadiron +sadism +sadist +sadly +sadness +sado +sadr +saecula +saeter +saeume +safari +safe +safely +safen +safener +safety +saffian +safflor +safflow +saffron +safrole +saft +sag +saga +sagaie +sagaman +sagathy +sage +sagely +sagene +sagger +sagging +saggon +saggy +saging +sagitta +sagless +sago +sagoin +saguaro +sagum +saguran +sagwire +sagy +sah +sahh +sahib +sahme +sahukar +sai +saic +said +saiga +sail +sailage +sailed +sailer +sailing +sailor +saily +saim +saimiri +saimy +sain +saint +sainted +saintly +saip +sair +sairly +sairve +sairy +saithe +saj +sajou +sake +sakeber +sakeen +saker +sakeret +saki +sakieh +sakulya +sal +salaam +salable +salably +salacot +salad +salago +salal +salamo +salar +salary +salat +salay +sale +salele +salema +salep +salfern +salic +salicin +salicyl +salient +salify +saligot +salina +saline +salite +salited +saliva +salival +salix +salle +sallee +sallet +sallier +salloo +sallow +sallowy +sally +salma +salmiac +salmine +salmis +salmon +salol +salomon +salon +saloon +saloop +salp +salpa +salpian +salpinx +salpoid +salse +salsify +salt +salta +saltant +saltary +saltate +saltcat +salted +saltee +salten +salter +saltern +saltery +saltfat +saltier +saltine +salting +saltish +saltly +saltman +saltpan +saltus +salty +saluki +salung +salute +saluter +salvage +salve +salver +salviol +salvo +salvor +salvy +sam +samadh +samadhi +samaj +saman +samara +samaria +samarra +samba +sambal +sambar +sambo +sambuk +sambuke +same +samekh +samel +samely +samen +samh +samhita +samiel +samiri +samisen +samite +samkara +samlet +sammel +sammer +sammier +sammy +samovar +samp +sampan +sampi +sample +sampler +samsara +samshu +samson +samurai +san +sanable +sanai +sancho +sanct +sancta +sanctum +sand +sandak +sandal +sandan +sandbag +sandbin +sandbox +sandboy +sandbur +sanded +sander +sanders +sandhi +sanding +sandix +sandman +sandust +sandy +sane +sanely +sang +sanga +sangar +sangei +sanger +sangha +sangley +sangrel +sangsue +sanicle +sanies +sanify +sanious +sanity +sanjak +sank +sankha +sannup +sans +sansei +sansi +sant +santal +santene +santimi +santims +santir +santon +sao +sap +sapa +sapajou +sapan +sapbush +sapek +sapful +saphead +saphena +saphie +sapid +sapient +sapin +sapinda +saple +sapless +sapling +sapo +saponin +sapor +sapota +sapote +sappare +sapper +sapphic +sapping +sapples +sappy +saprine +sapsago +sapsuck +sapwood +sapwort +sar +saraad +saraf +sarangi +sarcasm +sarcast +sarcine +sarcle +sarcler +sarcode +sarcoid +sarcoma +sarcous +sard +sardel +sardine +sardius +sare +sargo +sargus +sari +sarif +sarigue +sarinda +sarip +sark +sarkar +sarkful +sarkine +sarking +sarkit +sarlak +sarlyk +sarment +sarna +sarod +saron +sarong +saronic +saros +sarpler +sarpo +sarra +sarraf +sarsa +sarsen +sart +sartage +sartain +sartor +sarus +sarwan +sasa +sasan +sasani +sash +sashay +sashery +sashing +sasin +sasine +sassaby +sassy +sat +satable +satan +satang +satanic +satara +satchel +sate +sateen +satiate +satient +satiety +satin +satine +satined +satiny +satire +satiric +satisfy +satlijk +satrap +satrapy +satron +sattle +sattva +satura +satyr +satyric +sauce +saucer +saucily +saucy +sauf +sauger +saugh +saughen +sauld +saulie +sault +saulter +saum +saumon +saumont +sauna +saunter +sauqui +saur +saurel +saurian +saury +sausage +saut +saute +sauteur +sauty +sauve +savable +savacu +savage +savanna +savant +savarin +save +saved +saveloy +saver +savin +saving +savior +savola +savor +savored +savorer +savory +savour +savoy +savoyed +savssat +savvy +saw +sawah +sawali +sawarra +sawback +sawbill +sawbuck +sawbwa +sawder +sawdust +sawed +sawer +sawfish +sawfly +sawing +sawish +sawlike +sawman +sawmill +sawmon +sawmont +sawn +sawney +sawt +sawway +sawwort +sawyer +sax +saxhorn +saxten +saxtie +saxtuba +say +saya +sayable +sayer +sayette +sayid +saying +sazen +sblood +scab +scabbed +scabble +scabby +scabid +scabies +scabish +scabrid +scad +scaddle +scads +scaff +scaffer +scaffie +scaffle +scaglia +scala +scalage +scalar +scalare +scald +scalded +scalder +scaldic +scaldy +scale +scaled +scalena +scalene +scaler +scales +scaling +scall +scalled +scallom +scallop +scalma +scaloni +scalp +scalpel +scalper +scalt +scaly +scam +scamble +scamell +scamler +scamles +scamp +scamper +scan +scandal +scandia +scandic +scanmag +scanner +scant +scantle +scantly +scanty +scap +scape +scapel +scapha +scapoid +scapose +scapple +scapula +scapus +scar +scarab +scarce +scarcen +scare +scarer +scarf +scarfed +scarfer +scarfy +scarid +scarify +scarily +scarlet +scarman +scarn +scaroid +scarp +scarred +scarrer +scarry +scart +scarth +scarus +scarved +scary +scase +scasely +scat +scatch +scathe +scatter +scatty +scatula +scaul +scaum +scaup +scauper +scaur +scaurie +scaut +scavage +scavel +scaw +scawd +scawl +scazon +sceat +scena +scenary +scend +scene +scenery +scenic +scenist +scenite +scent +scented +scenter +scepsis +scepter +sceptic +sceptry +scerne +schanz +schappe +scharf +schelly +schema +scheme +schemer +schemy +schene +schepel +schepen +scherm +scherzi +scherzo +schesis +schism +schisma +schist +schloop +schmelz +scho +schola +scholae +scholar +scholia +schone +school +schoon +schorl +schorly +schout +schtoff +schuh +schuhe +schuit +schule +schuss +schute +schwa +schwarz +sciapod +sciarid +sciatic +scibile +science +scient +scincid +scind +sciniph +scintle +scion +scious +scirrhi +scissel +scissor +sciurid +sclaff +sclate +sclater +sclaw +scler +sclera +scleral +sclere +scliff +sclim +sclimb +scoad +scob +scobby +scobs +scoff +scoffer +scog +scoggan +scogger +scoggin +scoke +scolb +scold +scolder +scolex +scolia +scoliid +scolion +scolite +scollop +scolog +sconce +sconcer +scone +scoon +scoop +scooped +scooper +scoot +scooter +scopa +scopate +scope +scopet +scopic +scopine +scopola +scops +scopula +scorch +score +scored +scorer +scoria +scoriac +scoriae +scorify +scoring +scorn +scorned +scorner +scorny +scorper +scorse +scot +scotale +scotch +scote +scoter +scotia +scotino +scotoma +scotomy +scouch +scouk +scoup +scour +scoured +scourer +scourge +scoury +scouse +scout +scouter +scouth +scove +scovel +scovy +scow +scowder +scowl +scowler +scowman +scrab +scrabe +scrae +scrag +scraggy +scraily +scram +scran +scranch +scrank +scranky +scranny +scrap +scrape +scraped +scraper +scrapie +scrappy +scrapy +scrat +scratch +scrath +scrauch +scraw +scrawk +scrawl +scrawly +scrawm +scrawny +scray +scraze +screak +screaky +scream +screamy +scree +screech +screed +screek +screel +screen +screeny +screet +screeve +screich +screigh +screve +screver +screw +screwed +screwer +screwy +scribal +scribe +scriber +scride +scrieve +scrike +scrim +scrime +scrimer +scrimp +scrimpy +scrin +scrinch +scrine +scringe +scrip +scripee +script +scritch +scrive +scriven +scriver +scrob +scrobe +scrobis +scrod +scroff +scrog +scroggy +scrolar +scroll +scrolly +scroo +scrooch +scrooge +scroop +scrota +scrotal +scrotum +scrouge +scrout +scrow +scroyle +scrub +scrubby +scruf +scruff +scruffy +scruft +scrum +scrump +scrunch +scrunge +scrunt +scruple +scrush +scruto +scruze +scry +scryer +scud +scudder +scuddle +scuddy +scudi +scudler +scudo +scuff +scuffed +scuffer +scuffle +scuffly +scuffy +scuft +scufter +scug +sculch +scull +sculler +scullog +sculp +sculper +sculpin +sculpt +sculsh +scum +scumber +scumble +scummed +scummer +scummy +scun +scunder +scunner +scup +scupful +scupper +scuppet +scur +scurdy +scurf +scurfer +scurfy +scurry +scurvy +scuse +scut +scuta +scutage +scutal +scutate +scutch +scute +scutel +scutter +scuttle +scutty +scutula +scutum +scybala +scye +scypha +scyphae +scyphi +scyphoi +scyphus +scyt +scytale +scythe +sdeath +se +sea +seadog +seafare +seafolk +seafowl +seagirt +seagoer +seah +seak +seal +sealant +sealch +sealed +sealer +sealery +sealess +sealet +sealike +sealine +sealing +seam +seaman +seamark +seamed +seamer +seaming +seamlet +seamost +seamrog +seamy +seance +seaport +sear +searce +searcer +search +seared +searer +searing +seary +seasick +seaside +season +seat +seatang +seated +seater +seathe +seating +seatron +seave +seavy +seawant +seaward +seaware +seaway +seaweed +seawife +seaworn +seax +sebacic +sebait +sebate +sebific +sebilla +sebkha +sebum +sebundy +sec +secable +secalin +secancy +secant +secede +seceder +secern +secesh +sech +seck +seclude +secluse +secohm +second +seconde +secos +secpar +secque +secre +secrecy +secret +secreta +secrete +secreto +sect +sectary +sectile +section +sectism +sectist +sective +sector +secular +secund +secure +securer +sedan +sedate +sedent +sedge +sedged +sedging +sedgy +sedile +sedilia +seduce +seducee +seducer +seduct +sedum +see +seeable +seech +seed +seedage +seedbed +seedbox +seeded +seeder +seedful +seedily +seedkin +seedlet +seedlip +seedman +seedy +seege +seeing +seek +seeker +seeking +seel +seelful +seely +seem +seemer +seeming +seemly +seen +seenie +seep +seepage +seeped +seepy +seer +seeress +seerpaw +seesaw +seesee +seethe +seg +seggar +seggard +segged +seggrom +segment +sego +segol +seiche +seidel +seine +seiner +seise +seism +seismal +seismic +seit +seity +seize +seizer +seizin +seizing +seizor +seizure +sejant +sejoin +sejunct +sekos +selah +selamin +seldom +seldor +sele +select +selenic +self +selfdom +selfful +selfish +selfism +selfist +selfly +selion +sell +sella +sellar +sellate +seller +sellie +selling +sellout +selly +selsyn +selt +selva +selvage +semarum +sematic +semball +semble +seme +semeed +semeia +semeion +semen +semence +semese +semi +semiape +semiarc +semibay +semic +semicup +semidry +semiegg +semifib +semifit +semify +semigod +semihot +seminal +seminar +semiorb +semiped +semipro +semiraw +semis +semita +semitae +semital +semiurn +semmet +semmit +semola +semsem +sen +senaite +senam +senary +senate +senator +sence +sencion +send +sendal +sendee +sender +sending +senega +senegin +senesce +senile +senior +senna +sennet +sennit +sennite +sensa +sensal +sensate +sense +sensed +sensify +sensile +sension +sensism +sensist +sensive +sensize +senso +sensor +sensory +sensual +sensum +sensyne +sent +sentry +sepad +sepal +sepaled +sephen +sepia +sepian +sepiary +sepic +sepioid +sepion +sepiost +sepium +sepone +sepoy +seppuku +seps +sepsine +sepsis +sept +septa +septal +septan +septane +septate +septave +septet +septic +septier +septile +septime +septoic +septole +septum +septuor +sequa +sequel +sequela +sequent +sequest +sequin +ser +sera +serab +seragli +serai +serail +seral +serang +serape +seraph +serau +seraw +sercial +serdab +sere +sereh +serene +serf +serfage +serfdom +serfish +serfism +serge +serger +serging +serial +seriary +seriate +sericea +sericin +seriema +series +serif +serific +serin +serine +seringa +serio +serious +serment +sermo +sermon +sero +serolin +seron +seroon +seroot +seropus +serosa +serous +serow +serpent +serphid +serpigo +serpula +serra +serrage +serran +serrana +serrano +serrate +serried +serry +sert +serta +sertule +sertum +serum +serumal +serut +servage +serval +servant +serve +server +servery +servet +service +servile +serving +servist +servo +sesame +sesma +sesqui +sess +sessile +session +sestet +sesti +sestiad +sestina +sestine +sestole +sestuor +set +seta +setae +setal +setback +setbolt +setdown +setfast +seth +sethead +setier +setline +setness +setoff +seton +setose +setous +setout +setover +setsman +sett +settee +setter +setting +settle +settled +settler +settlor +setula +setule +setup +setwall +setwise +setwork +seugh +seven +sevener +seventh +seventy +sever +several +severe +severer +severy +sew +sewable +sewage +sewan +sewed +sewen +sewer +sewered +sewery +sewing +sewless +sewn +sex +sexed +sexern +sexfid +sexfoil +sexhood +sexifid +sexiped +sexless +sexlike +sexly +sext +sextain +sextan +sextans +sextant +sextar +sextary +sextern +sextet +sextic +sextile +sexto +sextole +sexton +sextry +sextula +sexual +sexuale +sexuous +sexy +sey +sfoot +sh +sha +shab +shabash +shabbed +shabble +shabby +shachle +shachly +shack +shackle +shackly +shacky +shad +shade +shaded +shader +shadily +shadine +shading +shadkan +shadoof +shadow +shadowy +shady +shaffle +shaft +shafted +shafter +shafty +shag +shagbag +shagged +shaggy +shaglet +shagrag +shah +shahdom +shahi +shahin +shaikh +shaitan +shake +shaken +shaker +shakers +shakha +shakily +shaking +shako +shakti +shaku +shaky +shale +shall +shallal +shallon +shallop +shallot +shallow +shallu +shalom +shalt +shalwar +shaly +sham +shama +shamal +shamalo +shaman +shamba +shamble +shame +shamed +shamer +shamir +shammed +shammer +shammy +shampoo +shan +shandry +shandy +shangan +shank +shanked +shanker +shanna +shanny +shansa +shant +shanty +shap +shape +shaped +shapely +shapen +shaper +shaping +shaps +shapy +shard +sharded +shardy +share +sharer +shargar +shark +sharky +sharn +sharny +sharp +sharpen +sharper +sharpie +sharply +sharps +sharpy +sharrag +sharry +shaster +shastra +shastri +shat +shatan +shatter +shaugh +shaul +shaup +shauri +shauwe +shave +shaved +shavee +shaven +shaver +shavery +shaving +shaw +shawl +shawled +shawm +shawny +shawy +shay +she +shea +sheaf +sheafy +sheal +shear +sheard +shearer +shears +sheat +sheath +sheathe +sheathy +sheave +sheaved +shebang +shebeen +shed +shedded +shedder +sheder +shedman +shee +sheely +sheen +sheenly +sheeny +sheep +sheepy +sheer +sheered +sheerly +sheet +sheeted +sheeter +sheety +sheik +sheikly +shekel +shela +sheld +shelder +shelf +shelfy +shell +shellac +shelled +sheller +shellum +shelly +shelta +shelter +shelty +shelve +shelver +shelvy +shend +sheng +sheolic +sheppey +sher +sherbet +sheriat +sherif +sherifa +sheriff +sherifi +sherify +sherry +sheth +sheugh +sheva +shevel +shevri +shewa +shewel +sheyle +shi +shibah +shibar +shice +shicer +shicker +shide +shied +shiel +shield +shier +shies +shiest +shift +shifter +shifty +shigram +shih +shikar +shikara +shikari +shikimi +shikken +shiko +shikra +shilf +shilfa +shill +shilla +shillet +shilloo +shilpit +shim +shimal +shimmer +shimmy +shimose +shimper +shin +shindig +shindle +shindy +shine +shiner +shingle +shingly +shinily +shining +shinner +shinny +shinty +shiny +shinza +ship +shipboy +shipful +shiplap +shiplet +shipman +shipped +shipper +shippo +shippon +shippy +shipway +shire +shirk +shirker +shirky +shirl +shirpit +shirr +shirt +shirty +shish +shisham +shisn +shita +shither +shittah +shittim +shiv +shive +shiver +shivery +shivey +shivoo +shivy +sho +shoad +shoader +shoal +shoaler +shoaly +shoat +shock +shocker +shod +shodden +shoddy +shode +shoder +shoe +shoeboy +shoeing +shoeman +shoer +shoful +shog +shogaol +shoggie +shoggle +shoggly +shogi +shogun +shohet +shoji +shola +shole +shone +shoneen +shoo +shood +shoofa +shoofly +shooi +shook +shool +shooler +shoop +shoor +shoot +shootee +shooter +shop +shopboy +shopful +shophar +shoplet +shopman +shoppe +shopper +shoppy +shoq +shor +shoran +shore +shored +shorer +shoring +shorn +short +shorten +shorter +shortly +shorts +shot +shote +shotgun +shotman +shott +shotted +shotten +shotter +shotty +shou +should +shout +shouter +shoval +shove +shovel +shover +show +showdom +shower +showery +showily +showing +showish +showman +shown +showup +showy +shoya +shrab +shradh +shraf +shrag +shram +shrank +shrap +shrave +shravey +shred +shreddy +shree +shreeve +shrend +shrew +shrewd +shrewdy +shrewly +shriek +shrieky +shrift +shrike +shrill +shrilly +shrimp +shrimpi +shrimpy +shrinal +shrine +shrink +shrinky +shrip +shrite +shrive +shrivel +shriven +shriver +shroff +shrog +shroud +shroudy +shrove +shrover +shrub +shrubby +shruff +shrug +shrunk +shrups +shuba +shuck +shucker +shucks +shudder +shuff +shuffle +shug +shul +shuler +shumac +shun +shune +shunner +shunt +shunter +shure +shurf +shush +shusher +shut +shutoff +shutout +shutten +shutter +shuttle +shy +shyer +shyish +shyly +shyness +shyster +si +siak +sial +sialic +sialid +sialoid +siamang +sib +sibbed +sibbens +sibber +sibby +sibilus +sibling +sibness +sibrede +sibship +sibyl +sibylic +sibylla +sic +sicca +siccant +siccate +siccity +sice +sick +sickbed +sicken +sicker +sickish +sickle +sickled +sickler +sickly +sicsac +sicula +sicular +sidder +siddur +side +sideage +sidearm +sidecar +sided +sider +sideral +siderin +sides +sideway +sidhe +sidi +siding +sidle +sidler +sidling +sidth +sidy +sie +siege +sieger +sienna +sier +siering +sierra +sierran +siesta +sieve +siever +sievy +sifac +sifaka +sife +siffle +sifflet +sifflot +sift +siftage +sifted +sifter +sifting +sig +sigger +sigh +sigher +sighful +sighing +sight +sighted +sighten +sighter +sightly +sighty +sigil +sigla +siglos +sigma +sigmate +sigmoid +sign +signal +signary +signate +signee +signer +signet +signify +signior +signist +signman +signory +signum +sika +sikar +sikatch +sike +sikerly +siket +sikhara +sikhra +sil +silage +silane +sile +silen +silence +silency +sileni +silenic +silent +silenus +silesia +silex +silica +silicam +silicic +silicle +silico +silicon +silicyl +siliqua +silique +silk +silked +silken +silker +silkie +silkily +silkman +silky +sill +sillar +siller +sillily +sillock +sillon +silly +silo +siloist +silphid +silt +siltage +silting +silty +silurid +silva +silvan +silver +silvern +silvery +silvics +silyl +sima +simal +simar +simball +simbil +simblin +simblot +sime +simiad +simial +simian +similar +simile +similor +simioid +simious +simity +simkin +simlin +simling +simmer +simmon +simnel +simony +simool +simoom +simoon +simous +simp +simpai +simper +simple +simpler +simplex +simply +simsim +simson +simular +simuler +sin +sina +sinaite +sinal +sinamay +sinapic +sinapis +sinawa +since +sincere +sind +sinder +sindle +sindoc +sindon +sindry +sine +sinew +sinewed +sinewy +sinful +sing +singe +singed +singer +singey +singh +singing +single +singled +singler +singles +singlet +singly +singult +sinh +sink +sinkage +sinker +sinking +sinky +sinless +sinlike +sinnen +sinner +sinnet +sinopia +sinople +sinsion +sinsyne +sinter +sintoc +sinuate +sinuose +sinuous +sinus +sinusal +sinward +siol +sion +sip +sipage +sipe +siper +siphoid +siphon +sipid +siping +sipling +sipper +sippet +sippio +sir +sircar +sirdar +sire +siren +sirene +sirenic +sireny +siress +sirgang +sirian +siricid +sirih +siris +sirkeer +sirki +sirky +sirloin +siroc +sirocco +sirpea +sirple +sirpoon +sirrah +sirree +sirship +sirup +siruped +siruper +sirupy +sis +sisal +sise +sisel +sish +sisham +sisi +siskin +siss +sissify +sissoo +sissy +sist +sister +sistern +sistle +sistrum +sit +sitao +sitar +sitch +site +sitfast +sith +sithe +sithens +sitient +sitio +sittee +sitten +sitter +sittine +sitting +situal +situate +situla +situlae +situs +siva +siver +sivvens +siwash +six +sixain +sixer +sixfoil +sixfold +sixsome +sixte +sixteen +sixth +sixthet +sixthly +sixty +sizable +sizably +sizal +sizar +size +sized +sizeman +sizer +sizes +sizing +sizy +sizygia +sizz +sizzard +sizzing +sizzle +sjambok +skaddle +skaff +skaffie +skag +skair +skal +skance +skart +skasely +skat +skate +skater +skatiku +skating +skatist +skatole +skaw +skean +skedge +skee +skeed +skeeg +skeel +skeely +skeen +skeer +skeered +skeery +skeet +skeeter +skeezix +skeg +skegger +skeif +skeigh +skeily +skein +skeiner +skeipp +skel +skelder +skelf +skelic +skell +skellat +skeller +skellum +skelly +skelp +skelper +skelpin +skelter +skemmel +skemp +sken +skene +skeo +skeough +skep +skepful +skeptic +sker +skere +skerret +skerry +sketch +sketchy +skete +skevish +skew +skewed +skewer +skewl +skewly +skewy +skey +ski +skiapod +skibby +skice +skid +skidded +skidder +skiddoo +skiddy +skidpan +skidway +skied +skieppe +skier +skies +skiff +skift +skiing +skijore +skil +skilder +skill +skilled +skillet +skilly +skilpot +skilts +skim +skime +skimmed +skimmer +skimp +skimpy +skin +skinch +skinful +skink +skinker +skinkle +skinned +skinner +skinny +skip +skipman +skippel +skipper +skippet +skipple +skippy +skirl +skirp +skirr +skirreh +skirret +skirt +skirted +skirter +skirty +skit +skite +skiter +skither +skitter +skittle +skitty +skiv +skive +skiver +skiving +sklate +sklater +sklent +skoal +skoo +skookum +skoptsy +skout +skraigh +skrike +skrupul +skua +skulk +skulker +skull +skulled +skully +skulp +skun +skunk +skunky +skuse +sky +skybal +skyey +skyful +skyish +skylark +skyless +skylike +skylook +skyman +skyphoi +skyphos +skyre +skysail +skyugle +skyward +skyway +sla +slab +slabbed +slabber +slabby +slabman +slack +slacked +slacken +slacker +slackly +slad +sladang +slade +slae +slag +slagger +slaggy +slagman +slain +slainte +slait +slake +slaker +slaking +slaky +slam +slamp +slander +slane +slang +slangy +slank +slant +slantly +slap +slape +slapper +slare +slart +slarth +slash +slashed +slasher +slashy +slat +slatch +slate +slater +slath +slather +slatify +slating +slatish +slatted +slatter +slaty +slaum +slave +slaved +slaver +slavery +slavey +slaving +slavish +slaw +slay +slayer +slaying +sleathy +sleave +sleaved +sleazy +sleck +sled +sledded +sledder +sledful +sledge +sledger +slee +sleech +sleechy +sleek +sleeken +sleeker +sleekit +sleekly +sleeky +sleep +sleeper +sleepry +sleepy +sleer +sleet +sleety +sleeve +sleeved +sleever +sleigh +sleight +slender +slent +slepez +slept +slete +sleuth +slew +slewed +slewer +slewing +sley +sleyer +slice +sliced +slicer +slich +slicht +slicing +slick +slicken +slicker +slickly +slid +slidage +slidden +slidder +slide +slided +slider +sliding +slifter +slight +slighty +slim +slime +slimer +slimily +slimish +slimly +slimpsy +slimsy +slimy +sline +sling +slinge +slinger +slink +slinker +slinky +slip +slipe +slipman +slipped +slipper +slippy +slipway +slirt +slish +slit +slitch +slite +slither +slithy +slitted +slitter +slitty +slive +sliver +slivery +sliving +sloan +slob +slobber +slobby +slock +slocken +slod +slodder +slodge +slodger +sloe +slog +slogan +slogger +sloka +sloke +slon +slone +slonk +sloo +sloom +sloomy +sloop +sloosh +slop +slope +sloped +slopely +sloper +sloping +slopped +sloppy +slops +slopy +slorp +slosh +slosher +sloshy +slot +slote +sloted +sloth +slotted +slotter +slouch +slouchy +slough +sloughy +slour +sloush +sloven +slow +slowish +slowly +slowrie +slows +sloyd +slub +slubber +slubby +slud +sludder +sludge +sludged +sludger +sludgy +slue +sluer +slug +slugged +slugger +sluggy +sluice +sluicer +sluicy +sluig +sluit +slum +slumber +slumdom +slumgum +slummer +slummy +slump +slumpy +slung +slunge +slunk +slunken +slur +slurbow +slurp +slurry +slush +slusher +slushy +slut +slutch +slutchy +sluther +slutter +slutty +sly +slyish +slyly +slyness +slype +sma +smack +smackee +smacker +smaik +small +smallen +smaller +smalls +smally +smalm +smalt +smalter +smalts +smaragd +smarm +smarmy +smart +smarten +smartly +smarty +smash +smasher +smashup +smatter +smaze +smear +smeared +smearer +smeary +smectic +smectis +smeddum +smee +smeech +smeek +smeeky +smeer +smeeth +smegma +smell +smelled +smeller +smelly +smelt +smelter +smeth +smethe +smeuse +smew +smich +smicker +smicket +smiddie +smiddum +smidge +smidgen +smilax +smile +smiler +smilet +smiling +smily +smirch +smirchy +smiris +smirk +smirker +smirkle +smirkly +smirky +smirtle +smit +smitch +smite +smiter +smith +smitham +smither +smithy +smiting +smitten +smock +smocker +smog +smoke +smoked +smoker +smokery +smokily +smoking +smokish +smoky +smolder +smolt +smooch +smoochy +smoodge +smook +smoot +smooth +smopple +smore +smote +smother +smotter +smouch +smous +smouse +smouser +smout +smriti +smudge +smudged +smudger +smudgy +smug +smuggle +smugism +smugly +smuisty +smur +smurr +smurry +smuse +smush +smut +smutch +smutchy +smutted +smutter +smutty +smyth +smytrie +snab +snabbie +snabble +snack +snackle +snaff +snaffle +snafu +snag +snagged +snagger +snaggy +snagrel +snail +snails +snaily +snaith +snake +snaker +snakery +snakily +snaking +snakish +snaky +snap +snapbag +snape +snaper +snapped +snapper +snapps +snappy +snaps +snapy +snare +snarer +snark +snarl +snarler +snarly +snary +snaste +snatch +snatchy +snath +snathe +snavel +snavvle +snaw +snead +sneak +sneaker +sneaky +sneap +sneath +sneathe +sneb +sneck +snecker +snecket +sned +snee +sneer +sneerer +sneery +sneesh +sneest +sneesty +sneeze +sneezer +sneezy +snell +snelly +snerp +snew +snib +snibble +snibel +snicher +snick +snicker +snicket +snickey +snickle +sniddle +snide +sniff +sniffer +sniffle +sniffly +sniffy +snift +snifter +snifty +snig +snigger +sniggle +snip +snipe +sniper +sniping +snipish +snipper +snippet +snippy +snipy +snirl +snirt +snirtle +snitch +snite +snithe +snithy +snittle +snivel +snively +snivy +snob +snobber +snobby +snobdom +snocher +snock +snocker +snod +snodly +snoek +snog +snoga +snoke +snood +snooded +snook +snooker +snoop +snooper +snoopy +snoose +snoot +snooty +snoove +snooze +snoozer +snoozle +snoozy +snop +snore +snorer +snoring +snork +snorkel +snorker +snort +snorter +snortle +snorty +snot +snotter +snotty +snouch +snout +snouted +snouter +snouty +snow +snowcap +snowie +snowily +snowish +snowk +snowl +snowy +snozzle +snub +snubbed +snubbee +snubber +snubby +snuck +snudge +snuff +snuffer +snuffle +snuffly +snuffy +snug +snugger +snuggle +snugify +snugly +snum +snup +snupper +snur +snurl +snurly +snurp +snurt +snuzzle +sny +snying +so +soak +soakage +soaked +soaken +soaker +soaking +soakman +soaky +soally +soam +soap +soapbox +soaper +soapery +soapily +soapsud +soapy +soar +soarer +soaring +soary +sob +sobber +sobbing +sobby +sobeit +sober +soberer +soberly +sobful +soboles +soc +socage +socager +soccer +soce +socht +social +society +socii +socius +sock +socker +socket +sockeye +socky +socle +socman +soco +sod +soda +sodaic +sodded +sodden +sodding +soddite +soddy +sodic +sodio +sodium +sodless +sodoku +sodomic +sodomy +sodwork +sody +soe +soekoe +soever +sofa +sofane +sofar +soffit +soft +softa +soften +softish +softly +softner +softy +sog +soger +soget +soggily +sogging +soggy +soh +soho +soil +soilage +soiled +soiling +soilure +soily +soiree +soja +sojourn +sok +soka +soke +sokeman +soken +sol +sola +solace +solacer +solan +solanal +solanum +solar +solate +solatia +solay +sold +soldado +soldan +solder +soldi +soldier +soldo +sole +solea +soleas +soleil +solely +solemn +solen +solent +soler +soles +soleus +soleyn +soli +solicit +solid +solidi +solidly +solidum +solidus +solio +soliped +solist +sollar +solo +solod +solodi +soloist +solon +soloth +soluble +solubly +solum +solute +solvate +solve +solvend +solvent +solver +soma +somal +somata +somatic +somber +sombre +some +someday +somehow +someone +somers +someway +somewhy +somital +somite +somitic +somma +somnial +somnify +somnus +sompay +sompne +sompner +son +sonable +sonance +sonancy +sonant +sonar +sonata +sond +sondeli +soneri +song +songful +songish +songle +songlet +songman +songy +sonhood +sonic +soniou +sonk +sonless +sonlike +sonly +sonnet +sonny +sonoric +sons +sonship +sonsy +sontag +soodle +soodly +sook +sooky +sool +sooloos +soon +sooner +soonish +soonly +soorawn +soord +soorkee +soot +sooter +sooth +soothe +soother +sootily +sooty +sop +sope +soph +sophia +sophic +sophism +sophy +sopite +sopor +sopper +sopping +soppy +soprani +soprano +sora +sorage +soral +sorb +sorbate +sorbent +sorbic +sorbile +sorbin +sorbite +sorbose +sorbus +sorcer +sorcery +sorchin +sorda +sordes +sordid +sordine +sordino +sordor +sore +soredia +soree +sorehon +sorely +sorema +sorgho +sorghum +sorgo +sori +soricid +sorite +sorites +sorn +sornare +sornari +sorner +sorning +soroban +sororal +sorose +sorosis +sorra +sorrel +sorrily +sorroa +sorrow +sorrowy +sorry +sort +sortal +sorted +sorter +sortie +sortly +sorty +sorus +sorva +sory +sosh +soshed +soso +sosoish +soss +sossle +sot +sotie +sotnia +sotnik +sotol +sots +sottage +sotted +sotter +sottish +sou +souari +soubise +soucar +souchet +souchy +soud +souffle +sough +sougher +sought +soul +soulack +souled +soulful +soulish +souly +soum +sound +sounder +soundly +soup +soupcon +souper +souple +soupy +sour +source +soured +souren +sourer +souring +sourish +sourly +sourock +soursop +sourtop +soury +souse +souser +souslik +soutane +souter +south +souther +sov +soviet +sovite +sovkhoz +sovran +sow +sowable +sowan +sowans +sowar +sowarry +sowback +sowbane +sowel +sowens +sower +sowfoot +sowing +sowins +sowl +sowle +sowlike +sowlth +sown +sowse +sowt +sowte +soy +soya +soybean +sozin +sozolic +sozzle +sozzly +spa +space +spaced +spacer +spacing +spack +spacy +spad +spade +spaded +spader +spadger +spading +spadix +spadone +spae +spaedom +spaeman +spaer +spahi +spaid +spaik +spairge +spak +spald +spalder +spale +spall +spaller +spalt +span +spancel +spandle +spandy +spane +spanemy +spang +spangle +spangly +spaniel +spaning +spank +spanker +spanky +spann +spannel +spanner +spanule +spar +sparada +sparch +spare +sparely +sparer +sparge +sparger +sparid +sparing +spark +sparked +sparker +sparkle +sparkly +sparks +sparky +sparm +sparoid +sparred +sparrer +sparrow +sparry +sparse +spart +sparth +spartle +sparver +spary +spasm +spasmed +spasmic +spastic +spat +spate +spatha +spathal +spathe +spathed +spathic +spatial +spatted +spatter +spattle +spatula +spatule +spave +spaver +spavie +spavied +spaviet +spavin +spawn +spawner +spawny +spay +spayad +spayard +spaying +speak +speaker +speal +spean +spear +spearer +speary +spec +spece +special +specie +species +specify +speck +specked +speckle +speckly +specks +specky +specs +specter +spectra +spectry +specula +specus +sped +speech +speed +speeder +speedy +speel +speen +speer +speiss +spelder +spelk +spell +speller +spelt +spelter +speltz +spelunk +spence +spencer +spend +spender +spense +spent +speos +sperate +sperity +sperket +sperm +sperma +spermic +spermy +sperone +spet +spetch +spew +spewer +spewing +spewy +spex +sphacel +sphecid +spheges +sphegid +sphene +sphenic +spheral +sphere +spheric +sphery +sphinx +spica +spical +spicant +spicate +spice +spiced +spicer +spicery +spicily +spicing +spick +spicket +spickle +spicose +spicous +spicula +spicule +spicy +spider +spidery +spidger +spied +spiegel +spiel +spieler +spier +spiff +spiffed +spiffy +spig +spignet +spigot +spike +spiked +spiker +spikily +spiking +spiky +spile +spiler +spiling +spilite +spill +spiller +spillet +spilly +spiloma +spilt +spilth +spilus +spin +spina +spinach +spinae +spinage +spinal +spinate +spinder +spindle +spindly +spine +spined +spinel +spinet +spingel +spink +spinner +spinney +spinoid +spinose +spinous +spinule +spiny +spionid +spiral +spirale +spiran +spirant +spirate +spire +spirea +spired +spireme +spiring +spirit +spirity +spirket +spiro +spiroid +spirous +spirt +spiry +spise +spit +spital +spitbox +spite +spitful +spitish +spitted +spitten +spitter +spittle +spitz +spiv +spivery +splash +splashy +splat +splatch +splay +splayed +splayer +spleen +spleeny +spleet +splenic +splet +splice +splicer +spline +splint +splinty +split +splodge +splodgy +splore +splosh +splotch +splunge +splurge +splurgy +splurt +spoach +spode +spodium +spoffle +spoffy +spogel +spoil +spoiled +spoiler +spoilt +spoke +spoken +spoky +spole +spolia +spolium +spondee +spondyl +spong +sponge +sponged +sponger +spongin +spongy +sponsal +sponson +sponsor +spoof +spoofer +spook +spooky +spool +spooler +spoom +spoon +spooner +spoony +spoor +spoorer +spoot +spor +sporal +spore +spored +sporid +sporoid +sporont +sporous +sporran +sport +sporter +sportly +sports +sporty +sporule +sposh +sposhy +spot +spotted +spotter +spottle +spotty +spousal +spouse +spousy +spout +spouter +spouty +sprack +sprad +sprag +spraich +sprain +spraint +sprang +sprank +sprat +spratty +sprawl +sprawly +spray +sprayer +sprayey +spread +spready +spreath +spree +spreeuw +spreng +sprent +spret +sprew +sprewl +spried +sprier +spriest +sprig +spriggy +spring +springe +springy +sprink +sprint +sprit +sprite +spritty +sproat +sprod +sprogue +sproil +sprong +sprose +sprout +sprowsy +spruce +sprue +spruer +sprug +spruit +sprung +sprunny +sprunt +spry +spryly +spud +spudder +spuddle +spuddy +spuffle +spug +spuke +spume +spumone +spumose +spumous +spumy +spun +spung +spunk +spunkie +spunky +spunny +spur +spurge +spuriae +spurl +spurlet +spurn +spurner +spurred +spurrer +spurry +spurt +spurter +spurtle +spurway +sput +sputa +sputter +sputum +spy +spyboat +spydom +spyer +spyhole +spyism +spyship +squab +squabby +squacco +squad +squaddy +squail +squalid +squall +squally +squalm +squalor +squam +squama +squamae +squame +square +squared +squarer +squark +squary +squash +squashy +squat +squatly +squatty +squaw +squawk +squawky +squdge +squdgy +squeak +squeaky +squeal +squeald +squeam +squeamy +squeege +squeeze +squeezy +squelch +squench +squib +squid +squidge +squidgy +squiffy +squilla +squin +squinch +squinny +squinsy +squint +squinty +squire +squiret +squirk +squirm +squirmy +squirr +squirt +squirty +squish +squishy +squit +squitch +squoze +squush +squushy +sraddha +sramana +sri +sruti +ssu +st +staab +stab +stabber +stabile +stable +stabler +stably +staboy +stacher +stachys +stack +stacker +stacte +stadda +staddle +stade +stadia +stadic +stadion +stadium +staff +staffed +staffer +stag +stage +staged +stager +stagery +stagese +stagger +staggie +staggy +stagily +staging +stagnum +stagy +staia +staid +staidly +stain +stainer +staio +stair +staired +stairy +staith +staiver +stake +staker +stale +stalely +staling +stalk +stalked +stalker +stalko +stalky +stall +stallar +staller +stam +stambha +stamen +stamin +stamina +stammel +stammer +stamnos +stamp +stampee +stamper +stample +stance +stanch +stand +standee +standel +stander +stane +stang +stanine +stanjen +stank +stankie +stannel +stanner +stannic +stanno +stannum +stannyl +stanza +stanze +stap +stapes +staple +stapled +stapler +star +starch +starchy +stardom +stare +staree +starer +starets +starful +staring +stark +starken +starkly +starky +starlet +starlit +starn +starnel +starnie +starost +starred +starry +start +starter +startle +startly +startor +starty +starve +starved +starver +starvy +stary +stases +stash +stashie +stasis +statal +statant +state +stated +stately +stater +static +statics +station +statism +statist +stative +stator +statue +statued +stature +status +statute +stauk +staumer +staun +staunch +staup +stauter +stave +staver +stavers +staving +staw +stawn +staxis +stay +stayed +stayer +staynil +stays +stchi +stead +steady +steak +steal +stealed +stealer +stealth +stealy +steam +steamer +steamy +stean +stearic +stearin +stearyl +steatin +stech +steddle +steed +steek +steel +steeler +steely +steen +steenth +steep +steepen +steeper +steeple +steeply +steepy +steer +steerer +steeve +steever +steg +steid +steigh +stein +stekan +stela +stelae +stelai +stelar +stele +stell +stella +stellar +stem +stema +stemlet +stemma +stemmed +stemmer +stemmy +stemple +stemson +sten +stenar +stench +stenchy +stencil +stend +steng +stengah +stenion +steno +stenog +stent +stenter +stenton +step +steppe +stepped +stepper +stepson +stept +stepway +stere +stereo +steri +steric +sterics +steride +sterile +sterin +sterk +sterlet +stern +sterna +sternad +sternal +sterned +sternly +sternum +stero +steroid +sterol +stert +stertor +sterve +stet +stetch +stevel +steven +stevia +stew +steward +stewed +stewpan +stewpot +stewy +stey +sthenia +sthenic +stib +stibial +stibic +stibine +stibium +stich +stichic +stichid +stick +sticked +sticker +stickit +stickle +stickly +sticks +stickum +sticky +stid +stiddy +stife +stiff +stiffen +stiffly +stifle +stifler +stigma +stigmai +stigmal +stigme +stile +stilet +still +stiller +stilly +stilt +stilted +stilter +stilty +stim +stime +stimuli +stimy +stine +sting +stinge +stinger +stingo +stingy +stink +stinker +stint +stinted +stinter +stinty +stion +stionic +stipe +stiped +stipel +stipend +stipes +stippen +stipple +stipply +stipula +stipule +stir +stirk +stirp +stirps +stirra +stirrer +stirrup +stitch +stite +stith +stithy +stive +stiver +stivy +stoa +stoach +stoat +stoater +stob +stocah +stock +stocker +stocks +stocky +stod +stodge +stodger +stodgy +stoep +stof +stoff +stog +stoga +stogie +stogy +stoic +stoical +stoke +stoker +stola +stolae +stole +stoled +stolen +stolid +stolist +stollen +stolon +stoma +stomach +stomata +stomate +stomium +stomp +stomper +stond +stone +stoned +stonen +stoner +stong +stonied +stonify +stonily +stoning +stonish +stonker +stony +stood +stooded +stooden +stoof +stooge +stook +stooker +stookie +stool +stoon +stoond +stoop +stooper +stoory +stoot +stop +stopa +stope +stoper +stopgap +stoping +stopped +stopper +stoppit +stopple +storage +storax +store +storeen +storer +storge +storied +storier +storify +stork +storken +storm +stormer +stormy +story +stosh +stoss +stot +stotter +stoun +stound +stoup +stour +stoury +stoush +stout +stouten +stouth +stoutly +stouty +stove +stoven +stover +stow +stowage +stowce +stower +stowing +stra +strack +stract +strad +strade +stradl +stradld +strae +strafe +strafer +strag +straik +strain +straint +strait +strake +straked +straky +stram +stramp +strand +strang +strange +strany +strap +strass +strata +stratal +strath +strati +stratic +stratum +stratus +strave +straw +strawen +strawer +strawy +stray +strayer +stre +streak +streaky +stream +streamy +streck +stree +streek +streel +streen +streep +street +streets +streite +streke +stremma +streng +strent +strenth +strepen +strepor +stress +stret +stretch +strette +stretti +stretto +strew +strewer +strewn +strey +streyne +stria +striae +strial +striate +strich +striche +strick +strict +strid +stride +strider +stridor +strife +strig +striga +strigae +strigal +stright +strigil +strike +striker +strind +string +stringy +striola +strip +stripe +striped +striper +stript +stripy +strit +strive +strived +striven +striver +strix +stroam +strobic +strode +stroil +stroke +stroker +stroky +strold +stroll +strolld +strom +stroma +stromal +stromb +strome +strone +strong +strook +stroot +strop +strophe +stroth +stroud +stroup +strove +strow +strowd +strown +stroy +stroyer +strub +struck +strudel +strue +strum +struma +strumae +strung +strunt +strut +struth +struv +strych +stub +stubb +stubbed +stubber +stubble +stubbly +stubboy +stubby +stuber +stuboy +stucco +stuck +stud +studder +studdie +studdle +stude +student +studia +studied +studier +studio +studium +study +stue +stuff +stuffed +stuffer +stuffy +stug +stuggy +stuiver +stull +stuller +stulm +stum +stumble +stumbly +stumer +stummer +stummy +stump +stumper +stumpy +stun +stung +stunk +stunner +stunsle +stunt +stunted +stunter +stunty +stupa +stupe +stupefy +stupend +stupent +stupex +stupid +stupor +stupose +stupp +stuprum +sturdy +sturine +sturk +sturt +sturtan +sturtin +stuss +stut +stutter +sty +styan +styca +styful +stylar +stylate +style +styler +stylet +styline +styling +stylish +stylist +stylite +stylize +stylo +styloid +stylops +stylus +stymie +stypsis +styptic +styrax +styrene +styrol +styrone +styryl +stythe +styward +suable +suably +suade +suaharo +suant +suantly +suasion +suasive +suasory +suave +suavely +suavify +suavity +sub +subacid +subact +subage +subah +subaid +subanal +subarch +subarea +subatom +subaud +subband +subbank +subbase +subbass +subbeau +subbias +subbing +subcase +subcash +subcast +subcell +subcity +subclan +subcool +subdate +subdean +subdeb +subdial +subdie +subdual +subduce +subduct +subdue +subdued +subduer +subecho +subedit +suber +suberic +suberin +subface +subfeu +subfief +subfix +subform +subfusc +subfusk +subgape +subgens +subget +subgit +subgod +subgrin +subgyre +subhall +subhead +subherd +subhero +subicle +subidar +subidea +subitem +subjack +subject +subjee +subjoin +subking +sublate +sublet +sublid +sublime +sublong +sublot +submaid +submain +subman +submind +submiss +submit +subnect +subness +subnex +subnote +subnude +suboral +suborn +suboval +subpart +subpass +subpial +subpimp +subplat +subplot +subplow +subpool +subport +subrace +subrent +subroot +subrule +subsale +subsalt +subsea +subsect +subsept +subset +subside +subsidy +subsill +subsist +subsoil +subsult +subsume +subtack +subtend +subtext +subtile +subtill +subtle +subtly +subtone +subtype +subunit +suburb +subvein +subvene +subvert +subvola +subway +subwink +subzone +succade +succeed +succent +success +succi +succin +succise +succor +succory +succous +succub +succuba +succube +succula +succumb +succuss +such +suck +suckage +sucken +sucker +sucking +suckle +suckler +suclat +sucrate +sucre +sucrose +suction +sucuri +sucuriu +sud +sudamen +sudary +sudate +sudd +sudden +sudder +suddle +suddy +sudoral +sudoric +suds +sudsman +sudsy +sue +suede +suer +suet +suety +suff +suffect +suffer +suffete +suffice +suffix +sufflue +suffuse +sugamo +sugan +sugar +sugared +sugarer +sugary +sugent +suggest +sugh +sugi +suguaro +suhuaro +suicide +suid +suidian +suiform +suimate +suine +suing +suingly +suint +suist +suit +suite +suiting +suitor +suity +suji +sulcal +sulcar +sulcate +sulcus +suld +sulea +sulfa +sulfato +sulfion +sulfury +sulk +sulka +sulker +sulkily +sulky +sull +sulla +sullage +sullen +sullow +sully +sulpha +sulpho +sulphur +sultam +sultan +sultana +sultane +sultone +sultry +sulung +sum +sumac +sumatra +sumbul +sumless +summage +summand +summar +summary +summate +summed +summer +summery +summist +summit +summity +summon +summons +summula +summut +sumner +sump +sumpage +sumper +sumph +sumphy +sumpit +sumple +sumpman +sumpter +sun +sunbeam +sunbird +sunbow +sunburn +suncup +sundae +sundang +sundari +sundek +sunder +sundew +sundial +sundik +sundog +sundown +sundra +sundri +sundry +sune +sunfall +sunfast +sunfish +sung +sungha +sunglo +sunglow +sunk +sunken +sunket +sunlamp +sunland +sunless +sunlet +sunlike +sunlit +sunn +sunnily +sunnud +sunny +sunray +sunrise +sunroom +sunset +sunsmit +sunspot +sunt +sunup +sunward +sunway +sunways +sunweed +sunwise +sunyie +sup +supa +supari +supawn +supe +super +superb +supine +supper +supping +supple +supply +support +suppose +suppost +supreme +sur +sura +surah +surahi +sural +suranal +surat +surbase +surbate +surbed +surcoat +surcrue +surculi +surd +surdent +surdity +sure +surely +sures +surette +surety +surf +surface +surfacy +surfeit +surfer +surfle +surfman +surfuse +surfy +surge +surgent +surgeon +surgery +surging +surgy +suriga +surlily +surly +surma +surmark +surmise +surname +surnap +surnay +surpass +surplus +surra +surrey +surtax +surtout +survey +survive +suscept +susi +suslik +suspect +suspend +suspire +sustain +susu +susurr +suther +sutile +sutler +sutlery +sutor +sutra +suttee +sutten +suttin +suttle +sutural +suture +suum +suwarro +suwe +suz +svelte +swa +swab +swabber +swabble +swack +swacken +swad +swaddle +swaddy +swag +swage +swager +swagger +swaggie +swaggy +swagman +swain +swaird +swale +swaler +swaling +swallet +swallo +swallow +swam +swami +swamp +swamper +swampy +swan +swang +swangy +swank +swanker +swanky +swanner +swanny +swap +swape +swapper +swaraj +swarbie +sward +swardy +sware +swarf +swarfer +swarm +swarmer +swarmy +swarry +swart +swarth +swarthy +swartly +swarty +swarve +swash +swasher +swashy +swat +swatch +swath +swathe +swather +swathy +swatter +swattle +swaver +sway +swayed +swayer +swayful +swaying +sweal +swear +swearer +sweat +sweated +sweater +sweath +sweaty +swedge +sweeny +sweep +sweeper +sweepy +sweer +sweered +sweet +sweeten +sweetie +sweetly +sweety +swego +swell +swelled +sweller +swelly +swelp +swelt +swelter +swelth +sweltry +swelty +swep +swept +swerd +swerve +swerver +swick +swidge +swift +swiften +swifter +swifty +swig +swigger +swiggle +swile +swill +swiller +swim +swimmer +swimmy +swimy +swindle +swine +swinely +swinery +swiney +swing +swinge +swinger +swingle +swingy +swinish +swink +swinney +swipe +swiper +swipes +swiple +swipper +swipy +swird +swire +swirl +swirly +swish +swisher +swishy +swiss +switch +switchy +swith +swithe +swithen +swither +swivel +swivet +swiz +swizzle +swob +swollen +swom +swonken +swoon +swooned +swoony +swoop +swooper +swoosh +sword +swore +sworn +swosh +swot +swotter +swounds +swow +swum +swung +swungen +swure +syagush +sybotic +syce +sycee +sycock +sycoma +syconid +syconus +sycosis +sye +syenite +sylid +syllab +syllabe +syllabi +sylloge +sylph +sylphic +sylphid +sylphy +sylva +sylvae +sylvage +sylvan +sylvate +sylvic +sylvine +sylvite +symbion +symbiot +symbol +sympode +symptom +synacme +synacmy +synange +synapse +synapte +synaxar +synaxis +sync +syncarp +synch +synchro +syncope +syndic +syndoc +syne +synema +synergy +synesis +syngamy +synod +synodal +synoecy +synonym +synopsy +synovia +syntan +syntax +synthol +syntomy +syntone +syntony +syntype +synusia +sypher +syre +syringa +syringe +syrinx +syrma +syrphid +syrt +syrtic +syrup +syruped +syruper +syrupy +syssel +system +systole +systyle +syzygy +t +ta +taa +taar +tab +tabacin +tabacum +tabanid +tabard +tabaret +tabaxir +tabber +tabby +tabefy +tabella +taberna +tabes +tabet +tabetic +tabic +tabid +tabidly +tabific +tabinet +tabla +table +tableau +tabled +tabler +tables +tablet +tabling +tabloid +tabog +taboo +taboot +tabor +taborer +taboret +taborin +tabour +tabret +tabu +tabula +tabular +tabule +tabut +taccada +tach +tache +tachiol +tacit +tacitly +tack +tacker +tacket +tackety +tackey +tacking +tackle +tackled +tackler +tacky +tacnode +tacso +tact +tactful +tactic +tactics +tactile +taction +tactite +tactive +tactor +tactual +tactus +tad +tade +tadpole +tae +tael +taen +taenia +taenial +taenian +taenite +taennin +taffeta +taffety +taffle +taffy +tafia +taft +tafwiz +tag +tagetol +tagged +tagger +taggle +taggy +taglet +taglike +taglock +tagrag +tagsore +tagtail +tagua +taguan +tagwerk +taha +taheen +tahil +tahin +tahr +tahsil +tahua +tai +taiaha +taich +taiga +taigle +taihoa +tail +tailage +tailed +tailer +tailet +tailge +tailing +taille +taillie +tailor +tailory +tailpin +taily +tailzee +tailzie +taimen +tain +taint +taintor +taipan +taipo +tairge +tairger +tairn +taisch +taise +taissle +tait +taiver +taivers +taivert +taj +takable +takar +take +takeful +taken +taker +takin +taking +takings +takosis +takt +taky +takyr +tal +tala +talabon +talahib +talaje +talak +talao +talar +talari +talaria +talaric +talayot +talbot +talc +talcer +talcky +talcoid +talcose +talcous +talcum +tald +tale +taled +taleful +talent +taler +tales +tali +taliage +taliera +talion +talipat +taliped +talipes +talipot +talis +talisay +talite +talitol +talk +talker +talkful +talkie +talking +talky +tall +tallage +tallboy +taller +tallero +talles +tallet +talliar +tallier +tallis +tallish +tallit +tallith +talloel +tallote +tallow +tallowy +tally +tallyho +talma +talon +taloned +talonic +talonid +talose +talpid +talpify +talpine +talpoid +talthib +taluk +taluka +talus +taluto +talwar +talwood +tam +tamable +tamably +tamale +tamandu +tamanu +tamara +tamarao +tamarin +tamas +tamasha +tambac +tamber +tambo +tamboo +tambor +tambour +tame +tamein +tamely +tamer +tamis +tamise +tamlung +tammie +tammock +tammy +tamp +tampala +tampan +tampang +tamper +tampin +tamping +tampion +tampon +tampoon +tan +tana +tanach +tanager +tanaist +tanak +tanan +tanbark +tanbur +tancel +tandan +tandem +tandle +tandour +tane +tang +tanga +tanged +tangelo +tangent +tanger +tangham +tanghan +tanghin +tangi +tangie +tangka +tanglad +tangle +tangler +tangly +tango +tangram +tangs +tangue +tangum +tangun +tangy +tanh +tanha +tania +tanica +tanier +tanist +tanjib +tanjong +tank +tanka +tankage +tankah +tankard +tanked +tanker +tankert +tankful +tankle +tankman +tanling +tannage +tannaic +tannaim +tannase +tannate +tanned +tanner +tannery +tannic +tannide +tannin +tanning +tannoid +tannyl +tanoa +tanquam +tanquen +tanrec +tansy +tantara +tanti +tantivy +tantle +tantra +tantric +tantrik +tantrum +tantum +tanwood +tanyard +tanzeb +tanzib +tanzy +tao +taotai +taoyin +tap +tapa +tapalo +tapas +tapasvi +tape +tapeman +tapen +taper +tapered +taperer +taperly +tapet +tapetal +tapete +tapeti +tapetum +taphole +tapia +tapioca +tapir +tapis +tapism +tapist +taplash +taplet +tapmost +tapnet +tapoa +tapoun +tappa +tappall +tappaul +tappen +tapper +tappet +tapping +tappoon +taproom +taproot +taps +tapster +tapu +tapul +taqua +tar +tara +taraf +tarage +tarairi +tarand +taraph +tarapin +tarata +taratah +tarau +tarbet +tarboy +tarbush +tardily +tardive +tardle +tardy +tare +tarea +tarefa +tarente +tarfa +targe +targer +target +tarhood +tari +tarie +tariff +tarin +tariric +tarish +tarkhan +tarlike +tarmac +tarman +tarn +tarnal +tarnish +taro +taroc +tarocco +tarok +tarot +tarp +tarpan +tarpon +tarpot +tarpum +tarr +tarrack +tarras +tarrass +tarred +tarrer +tarri +tarrie +tarrier +tarrify +tarrily +tarrish +tarrock +tarrow +tarry +tars +tarsal +tarsale +tarse +tarsi +tarsia +tarsier +tarsome +tarsus +tart +tartago +tartan +tartana +tartane +tartar +tarten +tartish +tartle +tartlet +tartly +tartro +tartryl +tarve +tarweed +tarwood +taryard +tasajo +tascal +tasco +tash +tashie +tashlik +tashrif +task +taskage +tasker +taskit +taslet +tass +tassago +tassah +tassal +tassard +tasse +tassel +tassely +tasser +tasset +tassie +tassoo +taste +tasted +tasten +taster +tastily +tasting +tasty +tasu +tat +tataupa +tatbeb +tatchy +tate +tater +tath +tatie +tatinek +tatler +tatou +tatouay +tatsman +tatta +tatter +tattery +tatther +tattied +tatting +tattle +tattler +tattoo +tattva +tatty +tatu +tau +taught +taula +taum +taun +taunt +taunter +taupe +taupo +taupou +taur +taurean +taurian +tauric +taurine +taurite +tauryl +taut +tautaug +tauted +tauten +tautit +tautly +tautog +tav +tave +tavell +taver +tavern +tavers +tavert +tavola +taw +tawa +tawdry +tawer +tawery +tawie +tawite +tawkee +tawkin +tawn +tawney +tawnily +tawnle +tawny +tawpi +tawpie +taws +tawse +tawtie +tax +taxable +taxably +taxator +taxed +taxeme +taxemic +taxer +taxi +taxibus +taxicab +taximan +taxine +taxing +taxis +taxite +taxitic +taxless +taxman +taxon +taxor +taxpaid +taxwax +taxy +tay +tayer +tayir +tayra +taysaam +tazia +tch +tchai +tcharik +tchast +tche +tchick +tchu +tck +te +tea +teabox +teaboy +teacake +teacart +teach +teache +teacher +teachy +teacup +tead +teadish +teaer +teaey +teagle +teaish +teaism +teak +teal +tealery +tealess +team +teaman +teameo +teamer +teaming +teamman +tean +teanal +teap +teapot +teapoy +tear +tearage +tearcat +tearer +tearful +tearing +tearlet +tearoom +tearpit +teart +teary +tease +teasel +teaser +teashop +teasing +teasler +teasy +teat +teated +teathe +teather +teatime +teatman +teaty +teave +teaware +teaze +teazer +tebbet +tec +teca +tecali +tech +techily +technic +techous +techy +teck +tecomin +tecon +tectal +tectum +tecum +tecuma +ted +tedder +tedge +tedious +tedium +tee +teedle +teel +teem +teemer +teemful +teeming +teems +teen +teenage +teenet +teens +teensy +teenty +teeny +teer +teerer +teest +teet +teetan +teeter +teeth +teethe +teethy +teeting +teety +teevee +teff +teg +tegmen +tegmina +tegua +tegula +tegular +tegumen +tehseel +tehsil +teicher +teil +teind +teinder +teioid +tejon +teju +tekiah +tekke +tekken +tektite +tekya +telamon +telang +telar +telary +tele +teledu +telega +teleost +teleran +telergy +telesia +telesis +teleuto +televox +telfer +telford +teli +telial +telic +telical +telium +tell +tellach +tellee +teller +telling +tellt +telome +telomic +telpath +telpher +telson +telt +telurgy +telyn +temacha +teman +tembe +temblor +temenos +temiak +temin +temp +temper +tempera +tempery +tempest +tempi +templar +temple +templed +templet +tempo +tempora +tempre +tempt +tempter +temse +temser +ten +tenable +tenably +tenace +tenai +tenancy +tenant +tench +tend +tendant +tendent +tender +tending +tendon +tendour +tendril +tendron +tenebra +tenent +teneral +tenet +tenfold +teng +tengere +tengu +tenible +tenio +tenline +tenne +tenner +tennis +tennisy +tenon +tenoner +tenor +tenpin +tenrec +tense +tensely +tensify +tensile +tension +tensity +tensive +tenson +tensor +tent +tentage +tented +tenter +tentful +tenth +tenthly +tentigo +tention +tentlet +tenture +tenty +tenuate +tenues +tenuis +tenuity +tenuous +tenure +teopan +tepache +tepal +tepee +tepefy +tepid +tepidly +tepor +tequila +tera +terap +teras +terbia +terbic +terbium +tercel +tercer +tercet +tercia +tercine +tercio +terebic +terebra +teredo +terek +terete +tereu +terfez +tergal +tergant +tergite +tergum +term +terma +termage +termen +termer +termin +termine +termini +termino +termite +termly +termon +termor +tern +terna +ternal +ternar +ternary +ternate +terne +ternery +ternion +ternize +ternlet +terp +terpane +terpene +terpin +terpine +terrace +terrage +terrain +terral +terrane +terrar +terrene +terret +terrier +terrify +terrine +terron +terror +terry +terse +tersely +tersion +tertia +tertial +tertian +tertius +terton +tervee +terzina +terzo +tesack +teskere +tessara +tessel +tessera +test +testa +testacy +testar +testata +testate +teste +tested +testee +tester +testes +testify +testily +testing +testis +teston +testone +testoon +testor +testril +testudo +testy +tetanic +tetanus +tetany +tetard +tetch +tetchy +tete +tetel +teth +tether +tethery +tetra +tetract +tetrad +tetrane +tetrazo +tetric +tetrode +tetrole +tetrose +tetryl +tetter +tettery +tettix +teucrin +teufit +teuk +teviss +tew +tewel +tewer +tewit +tewly +tewsome +text +textile +textlet +textman +textual +texture +tez +tezkere +th +tha +thack +thacker +thakur +thalami +thaler +thalli +thallic +thallus +thameng +than +thana +thanage +thanan +thane +thank +thankee +thanker +thanks +thapes +thapsia +thar +tharf +tharm +that +thatch +thatchy +thatn +thats +thaught +thave +thaw +thawer +thawn +thawy +the +theah +theasum +theat +theater +theatry +theave +theb +theca +thecae +thecal +thecate +thecia +thecium +thecla +theclan +thecoid +thee +theek +theeker +theelin +theelol +theer +theet +theezan +theft +thegn +thegnly +theine +their +theirn +theirs +theism +theist +thelium +them +thema +themata +theme +themer +themis +themsel +then +thenal +thenar +thence +theody +theorbo +theorem +theoria +theoric +theorum +theory +theow +therapy +there +thereas +thereat +thereby +therein +thereof +thereon +theres +therese +thereto +thereup +theriac +therial +therm +thermae +thermal +thermic +thermit +thermo +thermos +theroid +these +theses +thesial +thesis +theta +thetch +thetic +thetics +thetin +thetine +theurgy +thew +thewed +thewy +they +theyll +theyre +thiamin +thiasi +thiasoi +thiasos +thiasus +thick +thicken +thicket +thickly +thief +thienyl +thieve +thiever +thig +thigger +thigh +thighed +thight +thilk +thill +thiller +thilly +thimber +thimble +thin +thine +thing +thingal +thingly +thingum +thingy +think +thinker +thinly +thinner +thio +thiol +thiolic +thionic +thionyl +thir +third +thirdly +thirl +thirst +thirsty +thirt +thirty +this +thishow +thisn +thissen +thistle +thistly +thither +thiuram +thivel +thixle +tho +thob +thocht +thof +thoft +thoke +thokish +thole +tholi +tholoi +tholos +tholus +thon +thonder +thone +thong +thonged +thongy +thoo +thooid +thoom +thoral +thorax +thore +thoria +thoric +thorina +thorite +thorium +thorn +thorned +thornen +thorny +thoro +thoron +thorp +thort +thorter +those +thou +though +thought +thouse +thow +thowel +thowt +thrack +thraep +thrail +thrain +thrall +thram +thrang +thrap +thrash +thrast +thrave +thraver +thraw +thrawn +thread +thready +threap +threat +three +threne +threnos +threose +thresh +threw +thrice +thrift +thrifty +thrill +thrilly +thrimp +thring +thrip +thripel +thrips +thrive +thriven +thriver +thro +throat +throaty +throb +throck +throddy +throe +thronal +throne +throng +throu +throuch +through +throve +throw +thrower +thrown +thrum +thrummy +thrush +thrushy +thrust +thrutch +thruv +thrymsa +thud +thug +thugdom +thuggee +thujene +thujin +thujone +thujyl +thulia +thulir +thulite +thulium +thulr +thuluth +thumb +thumbed +thumber +thumble +thumby +thump +thumper +thunder +thung +thunge +thuoc +thurify +thurl +thurm +thurmus +thurse +thurt +thus +thusly +thutter +thwack +thwaite +thwart +thwite +thy +thyine +thymate +thyme +thymele +thymene +thymic +thymine +thymol +thymoma +thymus +thymy +thymyl +thynnid +thyroid +thyrse +thyrsus +thysel +thyself +thysen +ti +tiang +tiao +tiar +tiara +tib +tibby +tibet +tibey +tibia +tibiad +tibiae +tibial +tibiale +tiburon +tic +tical +ticca +tice +ticer +tick +ticked +ticken +ticker +ticket +tickey +tickie +ticking +tickle +tickled +tickler +tickly +tickney +ticky +ticul +tid +tidal +tidally +tidbit +tiddle +tiddler +tiddley +tiddy +tide +tided +tideful +tidely +tideway +tidily +tiding +tidings +tidley +tidy +tidyism +tie +tieback +tied +tien +tiepin +tier +tierce +tierced +tiered +tierer +tietick +tiewig +tiff +tiffany +tiffie +tiffin +tiffish +tiffle +tiffy +tift +tifter +tig +tige +tigella +tigelle +tiger +tigerly +tigery +tigger +tight +tighten +tightly +tights +tiglic +tignum +tigress +tigrine +tigroid +tigtag +tikka +tikker +tiklin +tikor +tikur +til +tilaite +tilaka +tilbury +tilde +tile +tiled +tiler +tilery +tilikum +tiling +till +tillage +tiller +tilley +tillite +tillot +tilly +tilmus +tilpah +tilt +tilter +tilth +tilting +tiltup +tilty +tilyer +timable +timar +timarau +timawa +timbal +timbale +timbang +timbe +timber +timbern +timbery +timbo +timbre +timbrel +time +timed +timeful +timely +timeous +timer +times +timid +timidly +timing +timish +timist +timon +timor +timothy +timpani +timpano +tin +tinamou +tincal +tinchel +tinclad +tinct +tind +tindal +tindalo +tinder +tindery +tine +tinea +tineal +tinean +tined +tineid +tineine +tineman +tineoid +tinety +tinful +ting +tinge +tinged +tinger +tingi +tingid +tingle +tingler +tingly +tinguy +tinhorn +tinily +tining +tink +tinker +tinkle +tinkler +tinkly +tinlet +tinlike +tinman +tinned +tinner +tinnery +tinnet +tinnily +tinning +tinnock +tinny +tinosa +tinsel +tinsman +tint +tinta +tintage +tinted +tinter +tintie +tinting +tintist +tinty +tintype +tinwald +tinware +tinwork +tiny +tip +tipburn +tipcart +tipcat +tipe +tipful +tiphead +tipiti +tiple +tipless +tiplet +tipman +tipmost +tiponi +tipped +tippee +tipper +tippet +tipping +tipple +tippler +tipply +tippy +tipsify +tipsily +tipster +tipsy +tiptail +tiptilt +tiptoe +tiptop +tipulid +tipup +tirade +tiralee +tire +tired +tiredly +tiredom +tireman +tirer +tiriba +tiring +tirl +tirma +tirr +tirret +tirrlie +tirve +tirwit +tisane +tisar +tissual +tissue +tissued +tissuey +tiswin +tit +titania +titanic +titano +titanyl +titar +titbit +tite +titer +titfish +tithal +tithe +tither +tithing +titi +titian +titien +titlark +title +titled +titler +titlike +titling +titlist +titmal +titman +titoki +titrate +titre +titter +tittery +tittie +tittle +tittler +tittup +tittupy +titty +titular +titule +titulus +tiver +tivoli +tivy +tiza +tizeur +tizzy +tji +tjosite +tlaco +tmema +tmesis +to +toa +toad +toadeat +toader +toadery +toadess +toadier +toadish +toadlet +toady +toast +toastee +toaster +toasty +toat +toatoa +tobacco +tobe +tobine +tobira +toby +tobyman +toccata +tocher +tock +toco +tocome +tocsin +tocusso +tod +today +todder +toddick +toddite +toddle +toddler +toddy +tode +tody +toe +toecap +toed +toeless +toelike +toenail +toetoe +toff +toffee +toffing +toffish +toffy +toft +tofter +toftman +tofu +tog +toga +togaed +togata +togate +togated +toggel +toggery +toggle +toggler +togless +togs +togt +togue +toher +toheroa +toho +tohunga +toi +toil +toiled +toiler +toilet +toilful +toiling +toise +toit +toitish +toity +tokay +toke +token +tokened +toko +tokopat +tol +tolan +tolane +told +toldo +tole +tolite +toll +tollage +toller +tollery +tolling +tollman +tolly +tolsey +tolt +tolter +tolu +toluate +toluene +toluic +toluide +toluido +toluol +toluyl +tolyl +toman +tomato +tomb +tombac +tombal +tombe +tombic +tomblet +tombola +tombolo +tomboy +tomcat +tomcod +tome +tomeful +tomelet +toment +tomfool +tomial +tomin +tomish +tomium +tomjohn +tomkin +tommy +tomnoup +tomorn +tomosis +tompon +tomtate +tomtit +ton +tonal +tonally +tonant +tondino +tone +toned +toneme +toner +tonetic +tong +tonga +tonger +tongman +tongs +tongue +tongued +tonguer +tonguey +tonic +tonify +tonight +tonish +tonite +tonjon +tonk +tonkin +tonlet +tonnage +tonneau +tonner +tonnish +tonous +tonsil +tonsor +tonsure +tontine +tonus +tony +too +toodle +took +tooken +tool +toolbox +tooler +tooling +toolman +toom +toomly +toon +toop +toorie +toorock +tooroo +toosh +toot +tooter +tooth +toothed +toother +toothy +tootle +tootler +tootsy +toozle +toozoo +top +toparch +topass +topaz +topazy +topcap +topcast +topcoat +tope +topee +topeng +topepo +toper +topfull +toph +tophus +topi +topia +topiary +topic +topical +topknot +topless +toplike +topline +topman +topmast +topmost +topo +toponym +topped +topper +topping +topple +toppler +topply +toppy +toprail +toprope +tops +topsail +topside +topsl +topsman +topsoil +toptail +topwise +toque +tor +tora +torah +toral +toran +torc +torcel +torch +torcher +torchon +tore +tored +torero +torfel +torgoch +toric +torii +torma +tormen +torment +tormina +torn +tornade +tornado +tornal +tornese +torney +tornote +tornus +toro +toroid +torose +torous +torpedo +torpent +torpid +torpify +torpor +torque +torqued +torques +torrefy +torrent +torrid +torsade +torse +torsel +torsile +torsion +torsive +torsk +torso +tort +torta +torteau +tortile +tortive +tortula +torture +toru +torula +torulin +torulus +torus +torve +torvid +torvity +torvous +tory +tosh +tosher +toshery +toshly +toshy +tosily +toss +tosser +tossily +tossing +tosspot +tossup +tossy +tost +toston +tosy +tot +total +totally +totara +totchka +tote +totem +totemic +totemy +toter +tother +totient +toto +totora +totquot +totter +tottery +totting +tottle +totty +totuava +totum +toty +totyman +tou +toucan +touch +touched +toucher +touchy +toug +tough +toughen +toughly +tought +tould +toumnah +toup +toupee +toupeed +toupet +tour +touraco +tourer +touring +tourism +tourist +tourize +tourn +tournay +tournee +tourney +tourte +tousche +touse +touser +tousle +tously +tousy +tout +touter +tovar +tow +towable +towage +towai +towan +toward +towards +towboat +towcock +towd +towel +towelry +tower +towered +towery +towght +towhead +towhee +towing +towkay +towlike +towline +towmast +town +towned +townee +towner +townet +townful +townify +townish +townist +townlet +townly +townman +towny +towpath +towrope +towser +towy +tox +toxa +toxamin +toxcatl +toxemia +toxemic +toxic +toxical +toxicum +toxifer +toxin +toxity +toxoid +toxon +toxone +toxosis +toxotae +toy +toydom +toyer +toyful +toying +toyish +toyland +toyless +toylike +toyman +toyon +toyshop +toysome +toytown +toywort +toze +tozee +tozer +tra +trabal +trabant +trabea +trabeae +trabuch +trace +tracer +tracery +trachea +trachle +tracing +track +tracked +tracker +tract +tractor +tradal +trade +trader +trading +tradite +traduce +trady +traffic +trag +tragal +tragedy +tragi +tragic +tragus +trah +traheen +traik +trail +trailer +traily +train +trained +trainee +trainer +trainy +traipse +trait +traitor +traject +trajet +tralira +tram +trama +tramal +tramcar +trame +tramful +tramman +trammel +trammer +trammon +tramp +tramper +trample +trampot +tramway +trance +tranced +traneen +trank +tranka +tranker +trankum +tranky +transit +transom +trant +tranter +trap +trapes +trapeze +trapped +trapper +trappy +traps +trash +traship +trashy +trass +trasy +trauma +travail +travale +trave +travel +travis +travois +travoy +trawl +trawler +tray +trayful +treacle +treacly +tread +treader +treadle +treason +treat +treatee +treater +treator +treaty +treble +trebly +treddle +tree +treed +treeful +treeify +treelet +treeman +treen +treetop +treey +tref +trefle +trefoil +tregerg +tregohm +trehala +trek +trekker +trellis +tremble +trembly +tremie +tremolo +tremor +trenail +trench +trend +trendle +trental +trepan +trepang +trepid +tress +tressed +tresson +tressy +trest +trestle +tret +trevet +trews +trey +tri +triable +triace +triacid +triact +triad +triadic +triaene +triage +trial +triamid +triarch +triarii +triatic +triaxon +triazin +triazo +tribade +tribady +tribal +tribase +tribble +tribe +triblet +tribrac +tribual +tribuna +tribune +tribute +trica +tricae +tricar +trice +triceps +trichi +trichia +trichy +trick +tricker +trickle +trickly +tricksy +tricky +triclad +tricorn +tricot +trident +triduan +triduum +tried +triedly +triene +triens +trier +trifa +trifid +trifle +trifler +triflet +trifoil +trifold +trifoly +triform +trig +trigamy +trigger +triglid +triglot +trigly +trigon +trigone +trigram +trigyn +trikaya +trike +triker +triketo +trikir +trilabe +trilby +trilit +trilite +trilith +trill +trillet +trilli +trillo +trilobe +trilogy +trim +trimer +trimly +trimmer +trin +trinal +trinary +trindle +trine +trinely +tringle +trinity +trink +trinket +trinkle +trinode +trinol +trintle +trio +triobol +triode +triodia +triole +triolet +trionym +trior +triose +trip +tripal +tripara +tripart +tripe +tripel +tripery +triple +triplet +triplex +triplum +triply +tripod +tripody +tripoli +tripos +tripper +trippet +tripple +tripsis +tripy +trireme +trisalt +trisazo +trisect +triseme +trishna +trismic +trismus +trisome +trisomy +trist +trisul +trisula +tritaph +trite +tritely +tritish +tritium +tritolo +triton +tritone +tritor +trityl +triumph +triunal +triune +triurid +trivant +trivet +trivia +trivial +trivium +trivvet +trizoic +trizone +troat +troca +trocar +trochal +troche +trochee +trochi +trochid +trochus +trock +troco +trod +trodden +trode +troft +trog +trogger +troggin +trogon +trogs +trogue +troika +troke +troker +troll +troller +trolley +trollol +trollop +trolly +tromba +trombe +trommel +tromp +trompe +trompil +tromple +tron +trona +tronage +tronc +trone +troner +troolie +troop +trooper +troot +tropal +tropary +tropate +trope +tropeic +troper +trophal +trophi +trophic +trophy +tropic +tropine +tropism +tropist +tropoyl +tropyl +trot +troth +trotlet +trotol +trotter +trottie +trotty +trotyl +trouble +troubly +trough +troughy +trounce +troupe +trouper +trouse +trouser +trout +trouter +trouty +trove +trover +trow +trowel +trowing +trowman +trowth +troy +truancy +truant +trub +trubu +truce +trucial +truck +trucker +truckle +trucks +truddo +trudge +trudgen +trudger +true +truer +truff +truffle +trug +truish +truism +trull +truller +trullo +truly +trummel +trump +trumper +trumpet +trumph +trumpie +trun +truncal +trunch +trundle +trunk +trunked +trunnel +trush +trusion +truss +trussed +trusser +trust +trustee +trusten +truster +trustle +trusty +truth +truthy +truvat +try +trygon +trying +tryma +tryout +tryp +trypa +trypan +trypsin +tryptic +trysail +tryst +tryster +tryt +tsadik +tsamba +tsantsa +tsar +tsardom +tsarina +tsatlee +tsere +tsetse +tsia +tsine +tst +tsuba +tsubo +tsun +tsunami +tsungtu +tu +tua +tuan +tuarn +tuart +tuatara +tuatera +tuath +tub +tuba +tubae +tubage +tubal +tubar +tubate +tubba +tubbal +tubbeck +tubber +tubbie +tubbing +tubbish +tubboe +tubby +tube +tubeful +tubelet +tubeman +tuber +tuberin +tubfish +tubful +tubicen +tubifer +tubig +tubik +tubing +tublet +tublike +tubman +tubular +tubule +tubulet +tubuli +tubulus +tuchit +tuchun +tuck +tucker +tucket +tucking +tuckner +tucktoo +tucky +tucum +tucuma +tucuman +tudel +tue +tueiron +tufa +tufan +tuff +tuffet +tuffing +tuft +tufted +tufter +tuftily +tufting +tuftlet +tufty +tug +tugboat +tugger +tuggery +tugging +tughra +tugless +tuglike +tugman +tugrik +tugui +tui +tuik +tuille +tuilyie +tuism +tuition +tuitive +tuke +tukra +tula +tulare +tulasi +tulchan +tulchin +tule +tuliac +tulip +tulipy +tulisan +tulle +tulsi +tulwar +tum +tumasha +tumbak +tumble +tumbled +tumbler +tumbly +tumbrel +tume +tumefy +tumid +tumidly +tummals +tummel +tummer +tummock +tummy +tumor +tumored +tump +tumtum +tumular +tumuli +tumult +tumulus +tun +tuna +tunable +tunably +tunca +tund +tunder +tundish +tundra +tundun +tune +tuned +tuneful +tuner +tunful +tung +tungate +tungo +tunhoof +tunic +tunicin +tunicle +tuning +tunish +tunist +tunk +tunket +tunlike +tunmoot +tunna +tunnel +tunner +tunnery +tunnor +tunny +tuno +tunu +tuny +tup +tupara +tupek +tupelo +tupik +tupman +tupuna +tuque +tur +turacin +turb +turban +turbary +turbeh +turbid +turbine +turbit +turbith +turbo +turbot +turco +turd +turdine +turdoid +tureen +turf +turfage +turfdom +turfed +turfen +turfing +turfite +turfman +turfy +turgent +turgid +turgite +turgoid +turgor +turgy +turio +turion +turjite +turk +turken +turkey +turkis +turkle +turm +turma +turment +turmit +turmoil +turn +turncap +turndun +turned +turnel +turner +turnery +turney +turning +turnip +turnipy +turnix +turnkey +turnoff +turnout +turnpin +turnrow +turns +turnup +turp +turpeth +turpid +turps +turr +turret +turse +tursio +turtle +turtler +turtlet +turtosa +tururi +turus +turwar +tusche +tush +tushed +tusher +tushery +tusk +tuskar +tusked +tusker +tuskish +tusky +tussah +tussal +tusser +tussis +tussive +tussle +tussock +tussore +tussur +tut +tutania +tutball +tute +tutee +tutela +tutelar +tutenag +tuth +tutin +tutly +tutman +tutor +tutorer +tutorly +tutory +tutoyer +tutress +tutrice +tutrix +tuts +tutsan +tutster +tutti +tutty +tutu +tutulus +tutwork +tuwi +tux +tuxedo +tuyere +tuza +tuzzle +twa +twaddle +twaddly +twaddy +twae +twagger +twain +twaite +twal +twale +twalt +twang +twanger +twangle +twangy +twank +twanker +twankle +twanky +twant +twarly +twas +twasome +twat +twattle +tway +twazzy +tweag +tweak +tweaker +tweaky +twee +tweed +tweeded +tweedle +tweedy +tweeg +tweel +tween +tweeny +tweesh +tweesht +tweest +tweet +tweeter +tweeze +tweezer +tweil +twelfth +twelve +twenty +twere +twerp +twibil +twice +twicer +twicet +twick +twiddle +twiddly +twifoil +twifold +twig +twigful +twigged +twiggen +twigger +twiggy +twiglet +twilit +twill +twilled +twiller +twilly +twilt +twin +twindle +twine +twiner +twinge +twingle +twinism +twink +twinkle +twinkly +twinly +twinned +twinner +twinter +twiny +twire +twirk +twirl +twirler +twirly +twiscar +twisel +twist +twisted +twister +twistle +twisty +twit +twitch +twitchy +twite +twitten +twitter +twitty +twixt +twizzle +two +twofold +twoling +twoness +twosome +tychism +tychite +tycoon +tyddyn +tydie +tye +tyee +tyg +tying +tyke +tyken +tykhana +tyking +tylarus +tylion +tyloma +tylopod +tylose +tylosis +tylote +tylotic +tylotus +tylus +tymp +tympan +tympana +tympani +tympany +tynd +typal +type +typer +typeset +typhia +typhic +typhlon +typhoid +typhoon +typhose +typhous +typhus +typic +typica +typical +typicon +typicum +typify +typist +typo +typobar +typonym +typp +typy +tyranny +tyrant +tyre +tyro +tyroma +tyrone +tyronic +tyrosyl +tyste +tyt +tzolkin +tzontle +u +uang +uayeb +uberant +uberous +uberty +ubi +ubiety +ubiquit +ubussu +uckia +udal +udaler +udaller +udalman +udasi +udder +uddered +udell +udo +ug +ugh +uglify +uglily +ugly +ugsome +uhlan +uhllo +uhtsong +uily +uinal +uintjie +uitspan +uji +ukase +uke +ukiyoye +ukulele +ula +ulcer +ulcered +ulcery +ule +ulema +uletic +ulex +ulexine +ulexite +ulitis +ull +ulla +ullage +ullaged +uller +ulling +ulluco +ulmic +ulmin +ulminic +ulmo +ulmous +ulna +ulnad +ulnae +ulnar +ulnare +ulnaria +uloid +uloncus +ulster +ultima +ultimo +ultimum +ultra +ulu +ulua +uluhi +ululant +ululate +ululu +um +umbel +umbeled +umbella +umber +umbilic +umble +umbo +umbonal +umbone +umbones +umbonic +umbra +umbrae +umbrage +umbral +umbrel +umbril +umbrine +umbrose +umbrous +ume +umiak +umiri +umlaut +ump +umph +umpire +umpirer +umpteen +umpty +umu +un +unable +unably +unact +unacted +unacute +unadapt +unadd +unadded +unadopt +unadorn +unadult +unafire +unaflow +unaged +unagile +unaging +unaided +unaimed +unaired +unakin +unakite +unal +unalarm +unalert +unalike +unalist +unalive +unallow +unalone +unaloud +unamend +unamiss +unamo +unample +unamply +unangry +unannex +unapart +unapt +unaptly +unarch +unark +unarm +unarmed +unarray +unarted +unary +unasked +unau +unavian +unawake +unaware +unaway +unawed +unawful +unawned +unaxled +unbag +unbain +unbait +unbaked +unbale +unbank +unbar +unbarb +unbare +unbark +unbase +unbased +unbaste +unbated +unbay +unbe +unbear +unbeard +unbeast +unbed +unbefit +unbeget +unbegot +unbegun +unbeing +unbell +unbelt +unbench +unbend +unbent +unberth +unbeset +unbesot +unbet +unbias +unbid +unbind +unbit +unbitt +unblade +unbled +unblent +unbless +unblest +unblind +unbliss +unblock +unbloom +unblown +unblued +unblush +unboat +unbody +unbog +unboggy +unbokel +unbold +unbolt +unbone +unboned +unbonny +unboot +unbored +unborn +unborne +unbosom +unbound +unbow +unbowed +unbowel +unbox +unboxed +unboy +unbrace +unbraid +unbran +unbrand +unbrave +unbraze +unbred +unbrent +unbrick +unbrief +unbroad +unbroke +unbrown +unbrute +unbud +unbuild +unbuilt +unbulky +unbung +unburly +unburn +unburnt +unburst +unbury +unbush +unbusk +unbusy +unbuxom +unca +uncage +uncaged +uncake +uncalk +uncall +uncalm +uncaned +uncanny +uncap +uncart +uncase +uncased +uncask +uncast +uncaste +uncate +uncave +unceded +unchain +unchair +uncharm +unchary +uncheat +uncheck +unchid +unchild +unchurn +unci +uncia +uncial +uncinal +uncinch +uncinct +uncini +uncinus +uncite +uncited +uncity +uncivic +uncivil +unclad +unclamp +unclasp +unclay +uncle +unclead +unclean +unclear +uncleft +unclew +unclick +unclify +unclimb +uncling +unclip +uncloak +unclog +unclose +uncloud +unclout +unclub +unco +uncoach +uncoat +uncock +uncoded +uncoif +uncoil +uncoin +uncoked +uncolt +uncoly +uncome +uncomfy +uncomic +uncoop +uncope +uncord +uncore +uncored +uncork +uncost +uncouch +uncous +uncouth +uncover +uncowed +uncowl +uncoy +uncram +uncramp +uncream +uncrest +uncrib +uncried +uncrime +uncrisp +uncrook +uncropt +uncross +uncrown +uncrude +uncruel +unction +uncubic +uncular +uncurb +uncurd +uncured +uncurl +uncurse +uncurst +uncus +uncut +uncuth +undaily +undam +undamn +undared +undark +undate +undated +undaub +undazed +unde +undead +undeaf +undealt +undean +undear +undeck +undecyl +undeep +undeft +undeify +undelve +unden +under +underdo +underer +undergo +underly +undern +undevil +undewed +undewy +undid +undies +undig +undight +undiked +undim +undine +undined +undirk +undo +undock +undoer +undog +undoing +undomed +undon +undone +undoped +undose +undosed +undowny +undrab +undrag +undrape +undraw +undrawn +undress +undried +undrunk +undry +undub +unducal +undue +undug +unduke +undular +undull +unduly +unduped +undust +unduty +undwelt +undy +undye +undyed +undying +uneager +unearly +unearth +unease +uneasy +uneaten +uneath +unebbed +unedge +unedged +unelect +unempt +unempty +unended +unepic +unequal +unerect +unethic +uneven +unevil +unexact +uneye +uneyed +unface +unfaced +unfact +unfaded +unfain +unfaint +unfair +unfaith +unfaked +unfalse +unfamed +unfancy +unfar +unfast +unfeary +unfed +unfeed +unfele +unfelon +unfelt +unfence +unfeted +unfeued +unfew +unfiber +unfiend +unfiery +unfight +unfile +unfiled +unfill +unfilm +unfine +unfined +unfired +unfirm +unfit +unfitly +unfitty +unfix +unfixed +unflag +unflaky +unflank +unflat +unflead +unflesh +unflock +unfloor +unflown +unfluid +unflush +unfoggy +unfold +unfond +unfool +unfork +unform +unfoul +unfound +unfoxy +unfrail +unframe +unfrank +unfree +unfreed +unfret +unfried +unfrill +unfrizz +unfrock +unfrost +unfroze +unfull +unfully +unfumed +unfunny +unfur +unfurl +unfused +unfussy +ungag +ungaged +ungain +ungaite +ungaro +ungaudy +ungear +ungelt +unget +ungiant +ungiddy +ungild +ungill +ungilt +ungird +ungirt +ungirth +ungive +ungiven +ungka +unglad +unglaze +unglee +unglobe +ungloom +unglory +ungloss +unglove +unglue +unglued +ungnaw +ungnawn +ungod +ungodly +ungold +ungone +ungood +ungored +ungorge +ungot +ungouty +ungown +ungrace +ungraft +ungrain +ungrand +ungrasp +ungrave +ungreat +ungreen +ungrip +ungripe +ungross +ungrow +ungrown +ungruff +ungual +unguard +ungueal +unguent +ungues +unguis +ungula +ungulae +ungular +unguled +ungull +ungulp +ungum +unguyed +ungyve +ungyved +unhabit +unhad +unhaft +unhair +unhairy +unhand +unhandy +unhang +unhap +unhappy +unhard +unhardy +unharsh +unhasp +unhaste +unhasty +unhat +unhate +unhated +unhaunt +unhave +unhayed +unhazed +unhead +unheady +unheal +unheard +unheart +unheavy +unhedge +unheed +unheedy +unheld +unhele +unheler +unhelm +unherd +unhero +unhewed +unhewn +unhex +unhid +unhide +unhigh +unhinge +unhired +unhit +unhitch +unhive +unhoard +unhoary +unhoed +unhoist +unhold +unholy +unhome +unhoned +unhood +unhook +unhoop +unhoped +unhorny +unhorse +unhose +unhosed +unhot +unhouse +unhull +unhuman +unhumid +unhung +unhurt +unhusk +uniat +uniate +uniaxal +unible +unice +uniced +unicell +unicism +unicist +unicity +unicorn +unicum +unideal +unidle +unidly +unie +uniface +unific +unified +unifier +uniflow +uniform +unify +unilobe +unimped +uninked +uninn +unio +unioid +union +unioned +unionic +unionid +unioval +unipara +uniped +unipod +unique +unireme +unisoil +unison +unit +unitage +unital +unitary +unite +united +uniter +uniting +unition +unitism +unitive +unitize +unitude +unity +univied +unjaded +unjam +unjewel +unjoin +unjoint +unjolly +unjoyed +unjudge +unjuicy +unjust +unkamed +unked +unkempt +unken +unkept +unket +unkey +unkeyed +unkid +unkill +unkin +unkind +unking +unkink +unkirk +unkiss +unkist +unknave +unknew +unknit +unknot +unknow +unknown +unlace +unlaced +unlade +unladen +unlaid +unlame +unlamed +unland +unlap +unlarge +unlash +unlatch +unlath +unlaugh +unlaved +unlaw +unlawed +unlawly +unlay +unlead +unleaf +unleaky +unleal +unlean +unlearn +unleash +unleave +unled +unleft +unlegal +unlent +unless +unlet +unlevel +unlid +unlie +unlight +unlike +unliked +unliken +unlimb +unlime +unlimed +unlimp +unline +unlined +unlink +unlist +unlisty +unlit +unlive +unload +unloath +unlobed +unlocal +unlock +unlodge +unlofty +unlogic +unlook +unloop +unloose +unlord +unlost +unlousy +unlove +unloved +unlowly +unloyal +unlucid +unluck +unlucky +unlunar +unlured +unlust +unlusty +unlute +unluted +unlying +unmad +unmade +unmagic +unmaid +unmail +unmake +unmaker +unman +unmaned +unmanly +unmarch +unmarry +unmask +unmast +unmate +unmated +unmaze +unmeant +unmeek +unmeet +unmerge +unmerry +unmesh +unmet +unmeted +unmew +unmewed +unmind +unmined +unmired +unmiry +unmist +unmiter +unmix +unmixed +unmodel +unmoist +unmold +unmoldy +unmoor +unmoral +unmount +unmoved +unmowed +unmown +unmuddy +unmuted +unnail +unnaked +unname +unnamed +unneat +unneedy +unnegro +unnerve +unnest +unneth +unnethe +unnew +unnewly +unnice +unnigh +unnoble +unnobly +unnose +unnosed +unnoted +unnovel +unoared +unobese +unode +unoften +unogled +unoil +unoiled +unoily +unold +unoped +unopen +unorbed +unorder +unorn +unornly +unovert +unowed +unowing +unown +unowned +unpaced +unpack +unpagan +unpaged +unpaid +unpaint +unpale +unpaled +unpanel +unpapal +unpaper +unparch +unpared +unpark +unparty +unpass +unpaste +unpave +unpaved +unpawed +unpawn +unpeace +unpeel +unpeg +unpen +unpenal +unpent +unperch +unpetal +unpick +unpiece +unpiety +unpile +unpiled +unpin +unpious +unpiped +unplace +unplaid +unplain +unplait +unplan +unplank +unplant +unplat +unpleat +unplied +unplow +unplug +unplumb +unplume +unplump +unpoise +unpoled +unpope +unposed +unpot +unpower +unpray +unprim +unprime +unprint +unprop +unproud +unpure +unpurse +unput +unqueen +unquick +unquiet +unquit +unquote +unraced +unrack +unrainy +unrake +unraked +unram +unrank +unraped +unrare +unrash +unrated +unravel +unray +unrayed +unrazed +unread +unready +unreal +unreave +unrebel +unred +unreel +unreeve +unregal +unrein +unrent +unrest +unresty +unrhyme +unrich +unricht +unrid +unride +unrife +unrig +unright +unrigid +unrind +unring +unrip +unripe +unriped +unrisen +unrisky +unrived +unriven +unrivet +unroast +unrobe +unrobed +unroll +unroof +unroomy +unroost +unroot +unrope +unroped +unrosed +unroted +unrough +unround +unrove +unroved +unrow +unrowed +unroyal +unrule +unruled +unruly +unrun +unrung +unrural +unrust +unruth +unsack +unsad +unsafe +unsage +unsaid +unsaint +unsalt +unsane +unsappy +unsash +unsated +unsatin +unsaved +unsawed +unsawn +unsay +unscale +unscaly +unscarb +unscent +unscrew +unseal +unseam +unseat +unsee +unseen +unself +unsense +unsent +unset +unsew +unsewed +unsewn +unsex +unsexed +unshade +unshady +unshape +unsharp +unshawl +unsheaf +unshed +unsheet +unshell +unship +unshod +unshoe +unshoed +unshop +unshore +unshorn +unshort +unshot +unshown +unshowy +unshrew +unshut +unshy +unshyly +unsick +unsided +unsiege +unsight +unsilly +unsin +unsinew +unsing +unsized +unskin +unslack +unslain +unslate +unslave +unsleek +unslept +unsling +unslip +unslit +unslot +unslow +unslung +unsly +unsmart +unsmoky +unsmote +unsnaky +unsnap +unsnare +unsnarl +unsneck +unsnib +unsnow +unsober +unsoft +unsoggy +unsoil +unsolar +unsold +unsole +unsoled +unsolid +unsome +unson +unsonsy +unsooty +unsore +unsorry +unsort +unsoul +unsound +unsour +unsowed +unsown +unspan +unspar +unspeak +unsped +unspeed +unspell +unspelt +unspent +unspicy +unspied +unspike +unspin +unspit +unsplit +unspoil +unspot +unspun +unstack +unstagy +unstaid +unstain +unstar +unstate +unsteck +unsteel +unsteep +unstep +unstern +unstick +unstill +unsting +unstock +unstoic +unstone +unstony +unstop +unstore +unstout +unstow +unstrap +unstrip +unstuck +unstuff +unstung +unsty +unsued +unsuit +unsulky +unsun +unsung +unsunk +unsunny +unsure +unswear +unsweat +unsweet +unswell +unswept +unswing +unsworn +unswung +untack +untaint +untaken +untall +untame +untamed +untap +untaped +untar +untaste +untasty +untaut +untawed +untax +untaxed +unteach +unteam +unteem +untell +untense +untent +untenty +untewed +unthank +unthaw +unthick +unthink +unthorn +unthrid +unthrob +untidal +untidy +untie +untied +untight +until +untile +untiled +untill +untilt +untimed +untin +untinct +untine +untipt +untire +untired +unto +untold +untomb +untone +untoned +untooth +untop +untorn +untouch +untough +untown +untrace +untrain +untread +untreed +untress +untried +untrig +untrill +untrim +untripe +untrite +untrod +untruck +untrue +untruly +untruss +untrust +untruth +untuck +untumid +untune +untuned +unturf +unturn +untwine +untwirl +untwist +untying +untz +unugly +unultra +unupset +unurban +unurged +unurn +unurned +unuse +unused +unusual +unvain +unvalid +unvalue +unveil +unvenom +unvest +unvexed +unvicar +unvisor +unvital +unvivid +unvocal +unvoice +unvote +unvoted +unvowed +unwaded +unwaged +unwaked +unwall +unwan +unware +unwarm +unwarn +unwarp +unwary +unwater +unwaved +unwax +unwaxed +unwayed +unweal +unweary +unweave +unweb +unwed +unwedge +unweel +unweft +unweld +unwell +unwept +unwet +unwheel +unwhig +unwhip +unwhite +unwield +unwifed +unwig +unwild +unwill +unwily +unwind +unwindy +unwiped +unwire +unwired +unwise +unwish +unwist +unwitch +unwitty +unwive +unwived +unwoful +unwoman +unwomb +unwon +unwooed +unwoof +unwooly +unwordy +unwork +unworld +unwormy +unworn +unworth +unwound +unwoven +unwrap +unwrit +unwrite +unwrung +unyoke +unyoked +unyoung +unze +unzen +unzone +unzoned +up +upaisle +upalley +upalong +uparch +uparise +uparm +uparna +upas +upattic +upbank +upbar +upbay +upbear +upbeat +upbelch +upbelt +upbend +upbid +upbind +upblast +upblaze +upblow +upboil +upbolt +upboost +upborne +upbotch +upbound +upbrace +upbraid +upbray +upbreak +upbred +upbreed +upbrim +upbring +upbrook +upbrow +upbuild +upbuoy +upburn +upburst +upbuy +upcall +upcanal +upcarry +upcast +upcatch +upchoke +upchuck +upcity +upclimb +upclose +upcoast +upcock +upcoil +upcome +upcover +upcrane +upcrawl +upcreek +upcreep +upcrop +upcrowd +upcry +upcurl +upcurve +upcut +updart +update +updeck +updelve +updive +updo +updome +updraft +updrag +updraw +updrink +updry +upeat +upend +upeygan +upfeed +upfield +upfill +upflame +upflare +upflash +upflee +upfling +upfloat +upflood +upflow +upflung +upfly +upfold +upframe +upfurl +upgale +upgang +upgape +upgaze +upget +upgird +upgirt +upgive +upglean +upglide +upgo +upgorge +upgrade +upgrave +upgrow +upgully +upgush +uphand +uphang +uphasp +upheal +upheap +upheave +upheld +uphelm +uphelya +upher +uphill +uphoard +uphoist +uphold +uphung +uphurl +upjerk +upjet +upkeep +upknell +upknit +upla +uplaid +uplake +upland +uplane +uplay +uplead +upleap +upleg +uplick +uplift +uplight +uplimb +upline +uplock +uplong +uplook +uploom +uploop +uplying +upmast +upmix +upmost +upmount +upmove +upness +upo +upon +uppard +uppent +upper +upperch +upperer +uppers +uppile +upping +uppish +uppity +upplow +uppluck +uppoint +uppoise +uppop +uppour +uppowoc +upprick +upprop +uppuff +uppull +uppush +upraise +upreach +uprear +uprein +uprend +uprest +uprid +upridge +upright +uprip +uprisal +uprise +uprisen +upriser +uprist +uprive +upriver +uproad +uproar +uproom +uproot +uprose +uprouse +uproute +uprun +uprush +upscale +upscrew +upseal +upseek +upseize +upsend +upset +upsey +upshaft +upshear +upshoot +upshore +upshot +upshove +upshut +upside +upsides +upsilon +upsit +upslant +upslip +upslope +upsmite +upsoak +upsoar +upsolve +upspeak +upspear +upspeed +upspew +upspin +upspire +upspout +upspurt +upstaff +upstage +upstair +upstamp +upstand +upstare +upstart +upstate +upstay +upsteal +upsteam +upstem +upstep +upstick +upstir +upsuck +upsun +upsup +upsurge +upswarm +upsway +upsweep +upswell +upswing +uptable +uptake +uptaker +uptear +uptend +upthrow +uptide +uptie +uptill +uptilt +uptorn +uptoss +uptower +uptown +uptrace +uptrack +uptrail +uptrain +uptree +uptrend +uptrill +uptrunk +uptruss +uptube +uptuck +upturn +uptwist +upupoid +upvomit +upwaft +upwall +upward +upwards +upwarp +upwax +upway +upways +upwell +upwent +upwheel +upwhelm +upwhir +upwhirl +upwind +upwith +upwork +upwound +upwrap +upwring +upyard +upyoke +ur +ura +urachal +urachus +uracil +uraemic +uraeus +ural +urali +uraline +uralite +uralium +uramido +uramil +uramino +uran +uranate +uranic +uraniid +uranin +uranine +uranion +uranism +uranist +uranite +uranium +uranous +uranyl +urao +urare +urari +urase +urate +uratic +uratoma +urazine +urazole +urban +urbane +urbian +urbic +urbify +urceole +urceoli +urceus +urchin +urd +urde +urdee +ure +urea +ureal +urease +uredema +uredine +uredo +ureic +ureid +ureide +ureido +uremia +uremic +urent +uresis +uretal +ureter +urethan +urethra +uretic +urf +urge +urgence +urgency +urgent +urger +urging +urheen +urial +uric +urinal +urinant +urinary +urinate +urine +urinose +urinous +urite +urlar +urled +urling +urluch +urman +urn +urna +urnae +urnal +urnful +urning +urnism +urnlike +urocele +urocyst +urodele +urogram +urohyal +urolith +urology +uromere +uronic +uropod +urosis +urosome +urostea +urotoxy +uroxin +ursal +ursine +ursoid +ursolic +urson +ursone +ursuk +urtica +urtite +urubu +urucu +urucuri +uruisg +urunday +urus +urushi +urushic +urva +us +usable +usage +usager +usance +usar +usara +usaron +usation +use +used +usedly +usednt +usee +useful +usehold +useless +usent +user +ush +ushabti +usher +usherer +usings +usitate +usnea +usneoid +usnic +usninic +usque +usself +ussels +ust +uster +ustion +usual +usually +usuary +usucapt +usure +usurer +usuress +usurp +usurper +usurpor +usury +usward +uswards +ut +uta +utahite +utai +utas +utch +utchy +utees +utensil +uteri +uterine +uterus +utick +utile +utility +utilize +utinam +utmost +utopia +utopian +utopism +utopist +utricle +utricul +utrubi +utrum +utsuk +utter +utterer +utterly +utu +utum +uva +uval +uvalha +uvanite +uvate +uvea +uveal +uveitic +uveitis +uveous +uvic +uvid +uviol +uvitic +uvito +uvrou +uvula +uvulae +uvular +uvver +uxorial +uzan +uzara +uzarin +uzaron +v +vaagmer +vaalite +vacancy +vacant +vacate +vacatur +vaccary +vaccina +vaccine +vache +vacoa +vacona +vacoua +vacouf +vacual +vacuate +vacuefy +vacuist +vacuity +vacuole +vacuome +vacuous +vacuum +vacuuma +vade +vadium +vadose +vady +vag +vagal +vagary +vagas +vage +vagile +vagina +vaginal +vagitus +vagrant +vagrate +vagrom +vague +vaguely +vaguish +vaguity +vagus +vahine +vail +vain +vainful +vainly +vair +vairagi +vaire +vairy +vaivode +vajra +vakass +vakia +vakil +valance +vale +valence +valency +valent +valeral +valeric +valerin +valeryl +valet +valeta +valetry +valeur +valgoid +valgus +valhall +vali +valiant +valid +validly +valine +valise +vall +vallar +vallary +vallate +valley +vallis +vallum +valonia +valor +valse +valsoid +valuate +value +valued +valuer +valuta +valva +valval +valvate +valve +valved +valvula +valvule +valyl +vamfont +vamoose +vamp +vamped +vamper +vampire +van +vanadic +vanadyl +vane +vaned +vanfoss +vang +vangee +vangeli +vanglo +vanilla +vanille +vanish +vanity +vanman +vanmost +vanner +vannet +vansire +vantage +vanward +vapid +vapidly +vapor +vapored +vaporer +vapory +vara +varahan +varan +varanid +vardy +vare +varec +vareuse +vari +variant +variate +varical +varices +varied +varier +variety +variola +variole +various +varisse +varix +varlet +varment +varna +varnish +varsha +varsity +varus +varve +varved +vary +vas +vasa +vasal +vase +vaseful +vaselet +vassal +vast +vastate +vastily +vastity +vastly +vasty +vasu +vat +vatful +vatic +vatman +vatter +vau +vaudy +vault +vaulted +vaulter +vaulty +vaunt +vaunted +vaunter +vaunty +vauxite +vavasor +vaward +veal +vealer +vealy +vection +vectis +vector +vecture +vedana +vedette +vedika +vedro +veduis +vee +veen +veep +veer +veery +vegetal +vegete +vehicle +vei +veigle +veil +veiled +veiler +veiling +veily +vein +veinage +veinal +veined +veiner +veinery +veining +veinlet +veinous +veinule +veiny +vejoces +vela +velal +velamen +velar +velaric +velary +velate +velated +veldman +veldt +velic +veliger +vell +vellala +velleda +vellon +vellum +vellumy +velo +velours +velte +velum +velumen +velure +velvet +velvety +venada +venal +venally +venatic +venator +vencola +vend +vendace +vendee +vender +vending +vendor +vendue +veneer +venene +veneral +venerer +venery +venesia +venger +venial +venie +venin +venison +vennel +venner +venom +venomed +venomer +venomly +venomy +venosal +venose +venous +vent +ventage +ventail +venter +ventil +ventose +ventrad +ventral +ventric +venture +venue +venula +venular +venule +venust +vera +veranda +verb +verbal +verbate +verbena +verbene +verbid +verbify +verbile +verbose +verbous +verby +verchok +verd +verdant +verdea +verdet +verdict +verdin +verdoy +verdun +verdure +verek +verge +vergent +verger +vergery +vergi +verglas +veri +veridic +verify +verily +verine +verism +verist +verite +verity +vermeil +vermian +vermin +verminy +vermis +vermix +vernal +vernant +vernier +vernile +vernin +vernine +verre +verrel +verruca +verruga +versal +versant +versate +verse +versed +verser +verset +versify +versine +version +verso +versor +verst +versta +versual +versus +vert +vertex +vertigo +veruled +vervain +verve +vervel +vervet +very +vesania +vesanic +vesbite +vesicae +vesical +vesicle +veskit +vespal +vesper +vespers +vespery +vespid +vespine +vespoid +vessel +vest +vestal +vestee +vester +vestige +vesting +vestlet +vestral +vestry +vesture +vet +veta +vetanda +vetch +vetchy +veteran +vetiver +veto +vetoer +vetoism +vetoist +vetust +vetusty +veuve +vex +vexable +vexed +vexedly +vexer +vexful +vexil +vext +via +viable +viaduct +viagram +viajaca +vial +vialful +viand +viander +viatic +viatica +viator +vibex +vibgyor +vibix +vibrant +vibrate +vibrato +vibrion +vicar +vicarly +vice +viceroy +vicety +vicilin +vicinal +vicine +vicious +vicoite +victim +victor +victory +victrix +victual +vicuna +viddui +video +vidette +vidonia +vidry +viduage +vidual +viduate +viduine +viduity +viduous +vidya +vie +vielle +vier +viertel +view +viewer +viewly +viewy +vifda +viga +vigia +vigil +vignin +vigonia +vigor +vihara +vihuela +vijao +viking +vila +vilayet +vile +vilely +vilify +vility +vill +villa +village +villain +villar +villate +ville +villein +villoid +villose +villous +villus +vim +vimana +vimen +vimful +viminal +vina +vinage +vinal +vinasse +vinata +vincent +vindex +vine +vinea +vineal +vined +vinegar +vineity +vinelet +viner +vinery +vinic +vinny +vino +vinose +vinous +vint +vinta +vintage +vintem +vintner +vintry +viny +vinyl +vinylic +viol +viola +violal +violate +violent +violer +violet +violety +violin +violina +violine +violist +violon +violone +viper +viperan +viperid +vipery +viqueen +viragin +virago +viral +vire +virelay +viremia +viremic +virent +vireo +virga +virgal +virgate +virgin +virgula +virgule +virial +virid +virific +virify +virile +virl +virole +viroled +viron +virose +virosis +virous +virtu +virtual +virtue +virtued +viruela +virus +vis +visa +visage +visaged +visarga +viscera +viscid +viscin +viscose +viscous +viscus +vise +viseman +visible +visibly +visie +visile +vision +visit +visita +visite +visitee +visiter +visitor +visive +visne +vison +visor +vista +vistaed +vistal +visto +visual +vita +vital +vitalic +vitally +vitals +vitamer +vitamin +vitasti +vitiate +vitium +vitrage +vitrail +vitrain +vitraux +vitreal +vitrean +vitreum +vitric +vitrics +vitrify +vitrine +vitriol +vitrite +vitrous +vitta +vittate +vitular +viuva +viva +vivary +vivax +vive +vively +vivency +viver +vivers +vives +vivid +vividly +vivific +vivify +vixen +vixenly +vizard +vizier +vlei +voar +vocable +vocably +vocal +vocalic +vocally +vocate +vocular +vocule +vodka +voe +voet +voeten +vog +voglite +vogue +voguey +voguish +voice +voiced +voicer +voicing +void +voided +voidee +voider +voiding +voidly +voile +voivode +vol +volable +volage +volant +volar +volata +volatic +volcan +volcano +vole +volency +volent +volery +volet +volley +volost +volt +voltage +voltaic +voltize +voluble +volubly +volume +volumed +volupt +volupty +voluta +volute +voluted +volutin +volva +volvate +volvent +vomer +vomica +vomit +vomiter +vomito +vomitus +voodoo +vorago +vorant +vorhand +vorpal +vortex +vota +votable +votal +votally +votary +vote +voteen +voter +voting +votive +votress +vouch +vouchee +voucher +vouge +vow +vowed +vowel +vowely +vower +vowess +vowless +voyage +voyager +voyance +voyeur +vraic +vrbaite +vriddhi +vrother +vug +vuggy +vulgar +vulgare +vulgate +vulgus +vuln +vulnose +vulpic +vulpine +vulture +vulturn +vulva +vulval +vulvar +vulvate +vum +vying +vyingly +w +wa +waag +waapa +waar +wab +wabber +wabble +wabbly +wabby +wabe +wabeno +wabster +wacago +wace +wachna +wack +wacke +wacken +wacker +wacky +wad +waddent +wadder +wadding +waddler +waddly +waddy +wade +wader +wadi +wading +wadlike +wadmal +wadmeal +wadna +wadset +wae +waeg +waer +waesome +waesuck +wafer +waferer +wafery +waff +waffle +waffly +waft +waftage +wafter +wafture +wafty +wag +wagaun +wage +waged +wagedom +wager +wagerer +wages +waggel +wagger +waggery +waggie +waggish +waggle +waggly +waggy +waglike +wagling +wagon +wagoner +wagonry +wagsome +wagtail +wagwag +wagwit +wah +wahahe +wahine +wahoo +waiata +waif +waik +waikly +wail +wailer +wailful +waily +wain +wainage +wainer +wainful +wainman +waipiro +wairch +waird +wairepo +wairsh +waise +waist +waisted +waister +wait +waiter +waiting +waive +waiver +waivery +waivod +waiwode +wajang +waka +wakan +wake +wakeel +wakeful +waken +wakener +waker +wakes +wakf +wakif +wakiki +waking +wakiup +wakken +wakon +wakonda +waky +walahee +wale +waled +waler +wali +waling +walk +walker +walking +walkist +walkout +walkway +wall +wallaba +wallaby +wallah +walled +waller +wallet +walleye +wallful +walling +wallise +wallman +walloon +wallop +wallow +wally +walnut +walrus +walsh +walt +walter +walth +waltz +waltzer +wamara +wambais +wamble +wambly +wame +wamefou +wamel +wamp +wampee +wample +wampum +wampus +wamus +wan +wand +wander +wandery +wandle +wandoo +wandy +wane +waned +wang +wanga +wangala +wangan +wanghee +wangle +wangler +wanhope +wanhorn +wanigan +waning +wankle +wankly +wanle +wanly +wanner +wanness +wannish +wanny +wanrufe +want +wantage +wanter +wantful +wanting +wanton +wantwit +wanty +wany +wap +wapacut +wapatoo +wapiti +wapp +wapper +wapping +war +warabi +waratah +warble +warbled +warbler +warblet +warbly +warch +ward +wardage +warday +warded +warden +warder +warding +wardite +wardman +ware +warehou +wareman +warf +warfare +warful +warily +warish +warison +wark +warl +warless +warlike +warlock +warluck +warly +warm +warman +warmed +warmer +warmful +warming +warmish +warmly +warmth +warmus +warn +warnel +warner +warning +warnish +warnoth +warnt +warp +warpage +warped +warper +warping +warple +warran +warrand +warrant +warree +warren +warrer +warrin +warrior +warrok +warsaw +warse +warsel +warship +warsle +warsler +warst +wart +warted +wartern +warth +wartime +wartlet +warty +warve +warwolf +warworn +wary +was +wasabi +wase +wasel +wash +washday +washed +washen +washer +washery +washin +washing +washman +washoff +washout +washpot +washrag +washtub +washway +washy +wasnt +wasp +waspen +waspily +waspish +waspy +wassail +wassie +wast +wastage +waste +wasted +wastel +waster +wasting +wastrel +wasty +wat +watap +watch +watched +watcher +water +watered +waterer +waterie +watery +wath +watt +wattage +wattape +wattle +wattled +wattman +wauble +wauch +wauchle +waucht +wauf +waugh +waughy +wauken +waukit +waul +waumle +wauner +wauns +waup +waur +wauve +wavable +wavably +wave +waved +wavelet +waver +waverer +wavery +waveson +wavey +wavicle +wavily +waving +wavy +waw +wawa +wawah +wax +waxbill +waxbird +waxbush +waxen +waxer +waxily +waxing +waxlike +waxman +waxweed +waxwing +waxwork +waxy +way +wayaka +wayang +wayback +waybill +waybird +waybook +waybung +wayfare +waygang +waygate +waygone +waying +waylaid +waylay +wayless +wayman +waymark +waymate +waypost +ways +wayside +wayward +waywode +wayworn +waywort +we +weak +weaken +weakish +weakly +weaky +weal +weald +wealth +wealthy +weam +wean +weanel +weaner +weanyer +weapon +wear +wearer +wearied +wearier +wearily +wearing +wearish +weary +weasand +weasel +weaser +weason +weather +weave +weaved +weaver +weaving +weazen +weazeny +web +webbed +webber +webbing +webby +weber +webeye +webfoot +webless +weblike +webster +webwork +webworm +wecht +wed +wedana +wedbed +wedded +wedder +wedding +wede +wedge +wedged +wedger +wedging +wedgy +wedlock +wedset +wee +weeble +weed +weeda +weedage +weeded +weeder +weedery +weedful +weedish +weedow +weedy +week +weekday +weekend +weekly +weekwam +weel +weemen +ween +weeness +weening +weenong +weeny +weep +weeper +weepful +weeping +weeps +weepy +weesh +weeshy +weet +weever +weevil +weevily +weewow +weeze +weft +weftage +wefted +wefty +weigh +weighed +weigher +weighin +weight +weighty +weir +weird +weirdly +weiring +weism +wejack +weka +wekau +wekeen +weki +welcome +weld +welder +welding +weldor +welfare +welk +welkin +well +wellat +welling +wellish +wellman +welly +wels +welsh +welsher +welsium +welt +welted +welter +welting +wem +wemless +wen +wench +wencher +wend +wende +wene +wennish +wenny +went +wenzel +wept +wer +were +werefox +werent +werf +wergil +weri +wert +wervel +wese +weskit +west +weste +wester +western +westing +westy +wet +weta +wetback +wetbird +wetched +wetchet +wether +wetly +wetness +wetted +wetter +wetting +wettish +weve +wevet +wey +wha +whabby +whack +whacker +whacky +whale +whaler +whalery +whaling +whalish +whally +whalm +whalp +whaly +wham +whamble +whame +whammle +whamp +whampee +whample +whan +whand +whang +whangam +whangee +whank +whap +whappet +whapuka +whapuku +whar +whare +whareer +wharf +wharl +wharp +wharry +whart +wharve +whase +whasle +what +whata +whatkin +whatna +whatnot +whats +whatso +whatten +whau +whauk +whaup +whaur +whauve +wheal +whealy +wheam +wheat +wheaten +wheaty +whedder +whee +wheedle +wheel +wheeled +wheeler +wheely +wheem +wheen +wheenge +wheep +wheeple +wheer +wheesht +wheetle +wheeze +wheezer +wheezle +wheezy +wheft +whein +whekau +wheki +whelk +whelked +whelker +whelky +whelm +whelp +whelve +whemmel +when +whenas +whence +wheneer +whenso +where +whereas +whereat +whereby +whereer +wherein +whereof +whereon +whereso +whereto +whereup +wherret +wherrit +wherry +whet +whether +whetile +whetter +whew +whewer +whewl +whewt +whey +wheyey +wheyish +whiba +which +whick +whicken +whicker +whid +whidah +whidder +whiff +whiffer +whiffet +whiffle +whiffy +whift +whig +while +whileen +whilere +whiles +whilie +whilk +whill +whilly +whilock +whilom +whils +whilst +whilter +whim +whimble +whimmy +whimper +whimsey +whimsic +whin +whincow +whindle +whine +whiner +whing +whinge +whinger +whinnel +whinner +whinny +whiny +whip +whipcat +whipman +whippa +whipped +whipper +whippet +whippy +whipsaw +whipt +whir +whirken +whirl +whirled +whirler +whirley +whirly +whirret +whirrey +whirroo +whirry +whirtle +whish +whisk +whisker +whiskey +whisky +whisp +whisper +whissle +whist +whister +whistle +whistly +whit +white +whited +whitely +whiten +whites +whither +whiting +whitish +whitlow +whits +whittaw +whitten +whitter +whittle +whity +whiz +whizgig +whizzer +whizzle +who +whoa +whoever +whole +wholly +whom +whomble +whomso +whone +whoo +whoof +whoop +whoopee +whooper +whoops +whoosh +whop +whopper +whorage +whore +whorish +whorl +whorled +whorly +whort +whortle +whose +whosen +whud +whuff +whuffle +whulk +whulter +whummle +whun +whup +whush +whuskie +whussle +whute +whuther +whutter +whuz +why +whyever +whyfor +whyness +whyo +wi +wice +wicht +wichtje +wick +wicked +wicken +wicker +wicket +wicking +wickiup +wickup +wicky +wicopy +wid +widbin +widder +widdle +widdy +wide +widegab +widely +widen +widener +widgeon +widish +widow +widowed +widower +widowly +widowy +width +widu +wield +wielder +wieldy +wiener +wienie +wife +wifedom +wifeism +wifekin +wifelet +wifely +wifie +wifish +wifock +wig +wigan +wigdom +wigful +wigged +wiggen +wigger +wiggery +wigging +wiggish +wiggism +wiggle +wiggler +wiggly +wiggy +wight +wightly +wigless +wiglet +wiglike +wigtail +wigwag +wigwam +wiikite +wild +wildcat +wilded +wilder +wilding +wildish +wildly +wile +wileful +wilga +wilgers +wilily +wilk +wilkin +will +willawa +willed +willer +willet +willey +willful +willie +willier +willies +willing +willock +willow +willowy +willy +willyer +wilsome +wilt +wilter +wily +wim +wimble +wimbrel +wime +wimick +wimple +win +wince +wincer +wincey +winch +wincher +wincing +wind +windage +windbag +winddog +winded +winder +windigo +windily +winding +windle +windles +windlin +windock +windore +window +windowy +windrow +windup +windway +windy +wine +wined +winemay +winepot +winer +winery +winesop +winevat +winful +wing +wingcut +winged +winger +wingle +winglet +wingman +wingy +winish +wink +winkel +winker +winking +winkle +winklet +winly +winna +winnard +winnel +winner +winning +winnle +winnow +winrace +winrow +winsome +wint +winter +wintle +wintry +winy +winze +wipe +wiper +wippen +wips +wir +wirable +wirble +wird +wire +wirebar +wired +wireman +wirer +wireway +wirily +wiring +wirl +wirling +wirr +wirra +wirrah +wiry +wis +wisdom +wise +wisely +wiseman +wisen +wisent +wiser +wish +wisha +wished +wisher +wishful +wishing +wishly +wishmay +wisht +wisket +wisp +wispish +wispy +wiss +wisse +wissel +wist +wiste +wistful +wistit +wistiti +wit +witan +witch +witched +witchen +witchet +witchy +wite +witess +witful +with +withal +withe +withen +wither +withers +withery +within +without +withy +witjar +witless +witlet +witling +witloof +witness +witney +witship +wittal +witted +witter +wittily +witting +wittol +witty +witwall +wive +wiver +wivern +wiz +wizard +wizen +wizened +wizier +wizzen +wloka +wo +woad +woader +woadman +woady +woak +woald +woan +wob +wobble +wobbler +wobbly +wobster +wod +woddie +wode +wodge +wodgy +woe +woeful +woesome +woevine +woeworn +woffler +woft +wog +wogiet +woibe +wokas +woke +wokowi +wold +woldy +wolf +wolfdom +wolfen +wolfer +wolfish +wolfkin +wolfram +wollop +wolter +wolve +wolver +woman +womanly +womb +wombat +wombed +womble +womby +womera +won +wonder +wone +wonegan +wong +wonga +wongen +wongshy +wongsky +woning +wonky +wonna +wonned +wonner +wonning +wonnot +wont +wonted +wonting +woo +wooable +wood +woodbin +woodcut +wooded +wooden +woodeny +woodine +wooding +woodish +woodlet +woodly +woodman +woodrow +woodsy +woodwax +woody +wooer +woof +woofed +woofell +woofer +woofy +woohoo +wooing +wool +woold +woolder +wooled +woolen +wooler +woolert +woolly +woolman +woolsey +woom +woomer +woon +woons +woorali +woorari +woosh +wootz +woozle +woozy +wop +woppish +wops +worble +word +wordage +worded +worder +wordily +wording +wordish +wordle +wordman +wordy +wore +work +workbag +workbox +workday +worked +worker +working +workman +workout +workpan +works +worky +world +worlded +worldly +worldy +worm +wormed +wormer +wormil +worming +wormy +worn +wornil +worral +worried +worrier +worrit +worry +worse +worsen +worser +worset +worship +worst +worsted +wort +worth +worthy +wosbird +wot +wote +wots +wottest +wotteth +woubit +wouch +wouf +wough +would +wouldnt +wouldst +wound +wounded +wounder +wounds +woundy +wourali +wourari +wournil +wove +woven +wow +wowser +wowsery +wowt +woy +wrack +wracker +wraggle +wraith +wraithe +wraithy +wraitly +wramp +wran +wrang +wrangle +wranny +wrap +wrapped +wrapper +wrasse +wrastle +wrath +wrathy +wraw +wrawl +wrawler +wraxle +wreak +wreat +wreath +wreathe +wreathy +wreck +wrecker +wrecky +wren +wrench +wrenlet +wrest +wrester +wrestle +wretch +wricht +wrick +wride +wried +wrier +wriest +wrig +wriggle +wriggly +wright +wring +wringer +wrinkle +wrinkly +wrist +wristed +wrister +writ +write +writee +writer +writh +writhe +writhed +writhen +writher +writhy +writing +written +writter +wrive +wro +wrocht +wroke +wroken +wrong +wronged +wronger +wrongly +wrossle +wrote +wroth +wrothly +wrothy +wrought +wrox +wrung +wry +wrybill +wryly +wryneck +wryness +wrytail +wud +wuddie +wudge +wudu +wugg +wulk +wull +wullcat +wulliwa +wumble +wumman +wummel +wun +wungee +wunna +wunner +wunsome +wup +wur +wurley +wurmal +wurrus +wurset +wurzel +wush +wusp +wuss +wusser +wust +wut +wuther +wuzu +wuzzer +wuzzle +wuzzy +wy +wyde +wye +wyke +wyle +wymote +wyn +wynd +wyne +wynn +wype +wyson +wyss +wyve +wyver +x +xanthic +xanthin +xanthyl +xarque +xebec +xenia +xenial +xenian +xenium +xenon +xenyl +xerafin +xerarch +xerasia +xeric +xeriff +xerogel +xeroma +xeronic +xerosis +xerotes +xerotic +xi +xiphias +xiphiid +xiphoid +xoana +xoanon +xurel +xyla +xylan +xylate +xylem +xylene +xylenol +xylenyl +xyletic +xylic +xylidic +xylinid +xylite +xylitol +xylogen +xyloid +xylol +xyloma +xylon +xylonic +xylose +xyloyl +xylyl +xylylic +xyphoid +xyrid +xyst +xyster +xysti +xystos +xystum +xystus +y +ya +yaba +yabber +yabbi +yabble +yabby +yabu +yacal +yacca +yachan +yacht +yachter +yachty +yad +yade +yaff +yaffle +yagger +yagi +yagua +yaguaza +yah +yahan +yahoo +yair +yaird +yaje +yajeine +yak +yakalo +yakamik +yakin +yakka +yakman +yalb +yale +yali +yalla +yallaer +yallow +yam +yamamai +yamanai +yamen +yamilke +yammer +yamp +yampa +yamph +yamshik +yan +yander +yang +yangtao +yank +yanking +yanky +yaoort +yaourti +yap +yapa +yaply +yapness +yapok +yapp +yapped +yapper +yapping +yappish +yappy +yapster +yar +yarak +yaray +yarb +yard +yardage +yardang +yardarm +yarder +yardful +yarding +yardman +yare +yareta +yark +yarke +yarl +yarly +yarm +yarn +yarnen +yarner +yarpha +yarr +yarran +yarrow +yarth +yarthen +yarwhip +yas +yashiro +yashmak +yat +yate +yati +yatter +yaud +yauld +yaupon +yautia +yava +yaw +yawl +yawler +yawn +yawner +yawney +yawnful +yawnily +yawning +yawnups +yawny +yawp +yawper +yawroot +yaws +yawweed +yawy +yaxche +yaya +ycie +yday +ye +yea +yeah +yealing +yean +year +yeara +yeard +yearday +yearful +yearly +yearn +yearock +yearth +yeast +yeasty +yeat +yeather +yed +yede +yee +yeel +yees +yegg +yeggman +yeguita +yeld +yeldrin +yelk +yell +yeller +yelling +yelloch +yellow +yellows +yellowy +yelm +yelmer +yelp +yelper +yelt +yen +yender +yeni +yenite +yeo +yeoman +yep +yer +yerb +yerba +yercum +yerd +yere +yerga +yerk +yern +yerth +yes +yese +yeso +yesso +yest +yester +yestern +yesty +yet +yeta +yetapa +yeth +yether +yetlin +yeuk +yeuky +yeven +yew +yex +yez +yezzy +ygapo +yield +yielden +yielder +yieldy +yigh +yill +yilt +yin +yince +yinst +yip +yird +yirk +yirm +yirn +yirr +yirth +yis +yite +ym +yn +ynambu +yo +yobi +yocco +yochel +yock +yockel +yodel +yodeler +yodh +yoe +yoga +yogh +yoghurt +yogi +yogin +yogism +yogist +yogoite +yohimbe +yohimbi +yoi +yoick +yoicks +yojan +yojana +yok +yoke +yokeage +yokel +yokelry +yoker +yoking +yoky +yolden +yolk +yolked +yolky +yom +yomer +yon +yond +yonder +yonner +yonside +yont +yook +yoop +yor +yore +york +yorker +yot +yote +you +youd +youden +youdith +youff +youl +young +younger +youngly +youngun +younker +youp +your +yourn +yours +yoursel +youse +youth +youthen +youthy +youve +youward +youze +yoven +yow +yowie +yowl +yowler +yowley +yowt +yox +yoy +yperite +yr +yttria +yttric +yttrium +yuan +yuca +yucca +yuck +yuckel +yucker +yuckle +yucky +yuft +yugada +yuh +yukkel +yulan +yule +yummy +yungan +yurt +yurta +yus +yusdrum +yutu +yuzlik +yuzluk +z +za +zabeta +zabra +zabti +zabtie +zac +zacate +zacaton +zachun +zad +zadruga +zaffar +zaffer +zafree +zag +zagged +zain +zak +zakkeu +zaman +zamang +zamarra +zamarro +zambo +zamorin +zamouse +zander +zanella +zant +zante +zany +zanyish +zanyism +zanze +zapas +zaphara +zapota +zaptiah +zaptieh +zapupe +zaqqum +zar +zareba +zarf +zarnich +zarp +zat +zati +zattare +zax +zayat +zayin +zeal +zealful +zealot +zealous +zebra +zebraic +zebrass +zebrine +zebroid +zebrula +zebrule +zebu +zebub +zeburro +zechin +zed +zedoary +zee +zeed +zehner +zein +zeism +zeist +zel +zelator +zemeism +zemi +zemmi +zemni +zemstvo +zenana +zendik +zenick +zenith +zenu +zeolite +zephyr +zephyry +zequin +zer +zerda +zero +zeroize +zest +zestful +zesty +zeta +zetetic +zeugma +ziamet +ziara +ziarat +zibet +zibetum +ziega +zieger +ziffs +zig +ziganka +zigzag +zihar +zikurat +zillah +zimarra +zimb +zimbi +zimme +zimmi +zimmis +zimocca +zinc +zincate +zincic +zincide +zincify +zincing +zincite +zincize +zincke +zincky +zinco +zincous +zincum +zing +zingel +zink +zinsang +zip +ziphian +zipper +zipping +zippy +zira +zirai +zircite +zircon +zither +zizz +zloty +zo +zoa +zoacum +zoaria +zoarial +zoarium +zobo +zocco +zoccolo +zodiac +zoea +zoeal +zoeform +zoetic +zogan +zogo +zoic +zoid +zoisite +zoism +zoist +zoistic +zokor +zoll +zolle +zombi +zombie +zonal +zonally +zonar +zonary +zonate +zonated +zone +zoned +zonelet +zonic +zoning +zonite +zonitid +zonoid +zonular +zonule +zonulet +zonure +zonurid +zoo +zoocarp +zoocyst +zooecia +zoogamy +zoogene +zoogeny +zoogony +zooid +zooidal +zooks +zoolite +zoolith +zoology +zoom +zoon +zoonal +zoonic +zoonist +zoonite +zoonomy +zoons +zoonule +zoopery +zoopsia +zoosis +zootaxy +zooter +zootic +zootomy +zootype +zoozoo +zorgite +zoril +zorilla +zorillo +zorro +zoster +zounds +zowie +zudda +zuisin +zumatic +zunyite +zuza +zwitter +zyga +zygal +zygion +zygite +zygoma +zygon +zygose +zygosis +zygote +zygotic +zygous +zymase +zyme +zymic +zymin +zymite +zymogen +zymoid +zymome +zymomin +zymosis +zymotic +zymurgy +zythem +zythum""".replace("\n", ",") diff --git a/steembase/exceptions.py b/steembase/exceptions.py index 806b2f0..686af94 100644 --- a/steembase/exceptions.py +++ b/steembase/exceptions.py @@ -6,11 +6,9 @@ def decodeRPCErrorMsg(e): python Exception class """ found = re.search( - ( - "(10 assert_exception: Assert Exception\n|" - "3030000 tx_missing_posting_auth)" - ".*: (.*)\n" - ), + ("(10 assert_exception: Assert Exception\n|" + "3030000 tx_missing_posting_auth)" + ".*: (.*)\n"), str(e), flags=re.M) if found: @@ -23,6 +21,10 @@ class RPCError(Exception): pass +class RPCErrorRecoverable(RPCError): + pass + + class NumRetriesReached(Exception): pass diff --git a/steembase/http_client.py b/steembase/http_client.py index f140e98..8732900 100644 --- a/steembase/http_client.py +++ b/steembase/http_client.py @@ -1,20 +1,27 @@ # coding=utf-8 -import concurrent.futures import json import logging import socket import time +import sys from functools import partial -from http.client import RemoteDisconnected from itertools import cycle -from urllib.parse import urlparse - +import concurrent.futures import certifi import urllib3 -from steembase.exceptions import RPCError +from steembase.exceptions import RPCError, RPCErrorRecoverable from urllib3.connection import HTTPConnection from urllib3.exceptions import MaxRetryError, ReadTimeoutError, ProtocolError +if sys.version >= '3.5': + from http.client import RemoteDisconnected + +if sys.version >= '3.0': + from urllib.parse import urlparse +else: + from urlparse import urlparse + from httplib import HTTPException + logger = logging.getLogger(__name__) @@ -29,16 +36,18 @@ class HttpClient(object): .. code-block:: python from steem.http_client import HttpClient - rpc = HttpClient(['https://steemd-node1.com', 'https://steemd-node2.com']) + + rpc = HttpClient(['https://steemd-node1.com', + 'https://steemd-node2.com']) any call available to that port can be issued using the instance - via the syntax ``rpc.exec('command', *parameters)``. + via the syntax ``rpc.call('command', *parameters)``. Example: .. code-block:: python - rpc.exec( + rpc.call( 'get_followers', 'furion', 'abit', 'blog', 10, api='follow_api' @@ -46,8 +55,10 @@ class HttpClient(object): """ + # set of endpoints which were detected to not support condenser_api + non_appbase_nodes = set() + def __init__(self, nodes, **kwargs): - self.return_with_args = kwargs.get('return_with_args', False) self.re_raise = kwargs.get('re_raise', True) self.max_workers = kwargs.get('max_workers', None) @@ -81,7 +92,7 @@ def __init__(self, nodes, **kwargs): **response_kw) ''' - self.nodes = cycle(nodes) + self.nodes = cycle(self.sanitize_nodes(nodes)) self.url = '' self.request = None self.next_node() @@ -89,11 +100,51 @@ def __init__(self, nodes, **kwargs): log_level = kwargs.get('log_level', logging.INFO) logger.setLevel(log_level) + def _curr_node_downgraded(self): + return self.url in HttpClient.non_appbase_nodes + + def _downgrade_curr_node(self): + HttpClient.non_appbase_nodes.add(self.url) + + def _is_error_recoverable(self, error): + assert 'message' in error, "missing error msg key: {}".format(error) + assert 'code' in error, "missing error code key: {}".format(error) + message = error['message'] + code = error['code'] + + # common steemd error + # {"code"=>-32003, "message"=>"Unable to acquire database lock"} + if message == 'Unable to acquire database lock': + return True + + # rare steemd error + # {"code"=>-32000, "message"=>"Unknown exception", "data"=>"0 exception: unspecified\nUnknown Exception\n[...]"} + if message == 'Unknown exception': + return True + + # generic jussi error + # {'code': -32603, 'message': 'Internal Error', 'data': {'error_id': 'c7a15140-f306-4727-acbd-b5e8f3717e9b', + # 'request': {'amzn_trace_id': 'Root=1-5ad4cb9f-9bc86fbca98d9a180850fb80', 'jussi_request_id': None}}} + if message == 'Internal Error' and code == -32603: + return True + + # jussi timeout error + # {'code': 1100, 'message': 'Bad or missing upstream response', + # 'data':{'error_id': 'fc3650d7-72...', 'exception': TimeoutError()}} + if message == 'Bad or missing upstream response' and code == 1100: + return True + + return False + def next_node(self): """ Switch to the next available node. This method will change base URL of our requests. - Use it when the current node goes down to change to a fallback node. """ + + Use it when the current node goes down to change to a fallback + node. + + """ self.set_node(next(self.nodes)) def set_node(self, node_url): @@ -106,121 +157,210 @@ def hostname(self): return urlparse(self.url).hostname @staticmethod - def json_rpc_body(name, *args, api=None, as_json=True, _id=0): + def json_rpc_body(name, *args, **kwargs): """ Build request body for steemd RPC requests. Args: - name (str): Name of a method we are trying to call. (ie: `get_accounts`) + + name (str): Name of a method we are trying to call. (ie: + `get_accounts`) + args: A list of arguments belonging to the calling method. + api (None, str): If api is provided (ie: `follow_api`), we generate a body that uses `call` method appropriately. - as_json (bool): Should this function return json as dictionary or string. - _id (int): This is an arbitrary number that can be used for request/response tracking in multi-threaded - scenarios. + + as_json (bool): Should this function return json as dictionary + or string. + + _id (int): This is an arbitrary number that can be used for + request/response tracking in multi-threaded scenarios. Returns: - (dict,str): If `as_json` is set to `True`, we get json formatted as a string. + + (dict,str): If `as_json` is set to `True`, we get json + formatted as a string. + Otherwise, a Python dictionary is returned. + """ - headers = {"jsonrpc": "2.0", "id": _id} + + # if kwargs is non-empty after this, it becomes the call params + as_json = kwargs.pop('as_json', True) + api = kwargs.pop('api', None) + _id = kwargs.pop('_id', 0) + + # `kwargs` for object-style param, `args` for list-style. pick one. + assert not (kwargs and args), 'fail - passed array AND object args' + params = kwargs if kwargs else args + if api: - body_dict = {**headers, "method": "call", "params": [api, name, args]} + body = {'jsonrpc': '2.0', + 'id': _id, + 'method': 'call', + 'params': [api, name, params]} else: - body_dict = {**headers, "method": name, "params": args} + body = {'jsonrpc': '2.0', + 'id': _id, + 'method': name, + 'params': params} + if as_json: - return json.dumps(body_dict, ensure_ascii=False).encode('utf8') - else: - return body_dict + return json.dumps(body, ensure_ascii=False).encode('utf8') + + return body - def exec(self, name, *args, api=None, return_with_args=None, _ret_cnt=0): - """ Execute a method against steemd RPC. + def call(self, + name, + *args, + **kwargs): + """ Call a remote procedure in steemd. Warnings: - This command will auto-retry in case of node failure, as well as handle - node fail-over, unless we are broadcasting a transaction. - In latter case, the exception is **re-raised**. + + This command will auto-retry in case of node failure, as well + as handle node fail-over. + """ - body = HttpClient.json_rpc_body(name, *args, api=api) - response = None - try: - response = self.request(body=body) - except (MaxRetryError, - ConnectionResetError, - ReadTimeoutError, - RemoteDisconnected, - ProtocolError) as e: - # if we broadcasted a transaction, always raise - # this is to prevent potential for double spend scenario - if api == 'network_broadcast_api': - raise e - # try switching nodes before giving up - if _ret_cnt > 2: - time.sleep(_ret_cnt) # we should wait only a short period before trying the next node, but still slowly increase backoff - elif _ret_cnt > 10: - raise e - self.next_node() - logging.debug('Switched node to %s due to exception: %s' % - (self.hostname, e.__class__.__name__)) - return self.exec(name, *args, - return_with_args=return_with_args, - _ret_cnt=_ret_cnt + 1) - except Exception as e: - if self.re_raise: - raise e - else: - extra = dict(err=e, request=self.request) - logger.info('Request error', extra=extra) - return self._return( - response=response, - args=args, - return_with_args=return_with_args) - else: - if response.status not in tuple( - [*response.REDIRECT_STATUSES, 200]): - logger.info('non 200 response:%s', response.status) + # tuple of Exceptions which are eligible for retry + retry_exceptions = (MaxRetryError, ReadTimeoutError, + ProtocolError, RPCErrorRecoverable,) - return self._return( - response=response, - args=args, - return_with_args=return_with_args) + if sys.version > '3.5': + retry_exceptions += (json.decoder.JSONDecodeError, RemoteDisconnected,) + else: + retry_exceptions += (ValueError,) - def _return(self, response=None, args=None, return_with_args=None): - return_with_args = return_with_args or self.return_with_args - result = None + if sys.version > '3.0': + retry_exceptions += (ConnectionResetError,) + else: + retry_exceptions += (HTTPException,) - if response: + tries = 0 + while True: try: - response_json = json.loads(response.data.decode('utf-8')) + + body_kwargs = kwargs.copy() + if not self._curr_node_downgraded(): + body_kwargs['api'] = 'condenser_api' + + body = HttpClient.json_rpc_body(name, *args, **body_kwargs) + response = self.request(body=body) + + success_codes = tuple(list(response.REDIRECT_STATUSES) + [200]) + if response.status not in success_codes: + raise RPCErrorRecoverable("non-200 response: %s from %s" + % (response.status, self.hostname)) + + result = json.loads(response.data.decode('utf-8')) + assert result, 'result entirely blank' + + if 'error' in result: + # legacy (pre-appbase) nodes always return err code 1 + legacy = result['error']['code'] == 1 + detail = result['error']['message'] + + # some errors have no data key (db lock error) + if 'data' not in result['error']: + error = 'error' + # some errors have no name key (jussi errors) + elif 'name' not in result['error']['data']: + if 'exception' in error['data']: + error = error['data']['exception'] + else: + error = 'unspecified error' + else: + error = result['error']['data']['name'] + + if legacy: + detail = ":".join(detail.split("\n")[0:2]) + if not self._curr_node_downgraded(): + self._downgrade_curr_node() + logging.error('Downgrade-retry %s', self.hostname) + continue + + detail = ('%s from %s (%s) in %s' % ( + error, self.hostname, detail, name)) + + if self._is_error_recoverable(result['error']): + raise RPCErrorRecoverable(detail) + else: + raise RPCError(detail) + + return result['result'] + + except retry_exceptions as e: + if e == ValueError and 'JSON' not in e.args[0]: + raise e # (python<3.5 lacks json.decoder.JSONDecodeError) + if tries >= 10: + logging.error('Failed after %d attempts -- %s: %s', + tries, e.__class__.__name__, e) + raise e + tries += 1 + logging.warning('Retry in %ds -- %s: %s', tries, + e.__class__.__name__, e) + time.sleep(tries) + self.next_node() + continue + + # TODO: unclear why this case is here; need to explicitly + # define exceptions for which we refuse to retry. except Exception as e: - extra = dict(response=response, request_args=args, err=e) - logger.info('failed to load response', extra=extra) - result = None - else: - if 'error' in response_json: - error = response_json['error'] - - if self.re_raise: - error_message = error.get( - 'detail', response_json['error']['message']) - raise RPCError(error_message) - - result = response_json['error'] - else: - result = response_json.get('result', None) - if return_with_args: - return result, args - else: - return result + extra = dict(err=e, request=self.request) + logger.error('Unexpected exception! Please report at ' + + 'https://github.com/steemit/steem-python/issues' + + ' -- %s: %s', e.__class__.__name__, e, extra=extra) + raise e - def exec_multi_with_futures(self, name, params, api=None, max_workers=None): + def call_multi_with_futures(self, name, params, api=None, + max_workers=None): with concurrent.futures.ThreadPoolExecutor( max_workers=max_workers) as executor: # Start the load operations and mark each future with its URL - def ensure_list(parameter): - return parameter if type(parameter) in (list, tuple, set) else [parameter] + def ensure_list(val): + return val if isinstance(val, (list, tuple, set)) else [val] - futures = (executor.submit(self.exec, name, *ensure_list(param), api=api) - for param in params) + futures = (executor.submit( + self.call, name, *ensure_list(param), api=api) + for param in params) for future in concurrent.futures.as_completed(futures): yield future.result() + + def sanitize_nodes(self, nodes): + """ + + This method is designed to explicitly validate the user defined + nodes that are passed to http_client. If left unvalidated, improper + input causes a variety of explicit-to-red herring errors in the code base. + This will fail loudly in the event that incorrect input has been passed. + + There are three types of input allowed when defining nodes. + 1. a string of a single node url. ie nodes='https://api.steemit.com' + 2. a comma separated string of several node url's. + nodes='https://api.steemit.com,<>,<>' + 3. a list of string node url's. + nodes=['https://api.steemit.com','<>','<>'] + + Any other input will result in a ValueError being thrown. + + :param nodes: the nodes argument passed to http_client + :return: a list of node url's. + """ + + if self._isString(nodes): + nodes = nodes.split(',') + elif isinstance(nodes, list): + if not all(self._isString(node) for node in nodes): + raise ValueError("All nodes in list must be a string.") + else: + raise ValueError("nodes arg must be a " + "comma separated string of node url's, " + "a single string url, " + "or a list of strings.") + + return nodes + + def _isString(self, input): + return isinstance(input, str) or \ + (sys.version < '3.0' and isinstance(input, unicode)) diff --git a/steembase/memo.py b/steembase/memo.py index cf28dcc..ab6434e 100644 --- a/steembase/memo.py +++ b/steembase/memo.py @@ -1,11 +1,16 @@ import hashlib +import json import struct +import sys from binascii import hexlify, unhexlify +from collections import OrderedDict -from .operations import Memo from Crypto.Cipher import AES + +from .operations import Memo from .base58 import base58encode, base58decode from .account import PrivateKey, PublicKey +from steem.utils import compat_bytes default_prefix = "STM" @@ -60,8 +65,8 @@ def _pad(s, BS): def _unpad(s, BS): - count = int(struct.unpack('B', bytes(s[-1], 'ascii'))[0]) - if bytes(s[-count::], 'ascii') == count * struct.pack('B', count): + count = int(struct.unpack('B', compat_bytes(s[-1], 'ascii'))[0]) + if compat_bytes(s[-count::], 'ascii') == count * struct.pack('B', count): return s[:-count] return s @@ -80,7 +85,8 @@ def encode_memo(priv, pub, nonce, message, **kwargs): from steembase import transactions shared_secret = get_shared_secret(priv, pub) aes, check = init_aes(shared_secret, nonce) - raw = bytes(message, 'utf8') + raw = compat_bytes(message, 'utf8') + " Padding " BS = 16 if len(raw) % BS: @@ -88,18 +94,19 @@ def encode_memo(priv, pub, nonce, message, **kwargs): " Encryption " cipher = hexlify(aes.encrypt(raw)).decode('ascii') prefix = kwargs.pop("prefix", default_prefix) - s = { - "from": format(priv.pubkey, prefix), - "to": format(pub, prefix), - "nonce": nonce, - "check": check, - "encrypted": cipher, - "from_priv": repr(priv), - "to_pub": repr(pub), - "shared_secret": shared_secret, - } + s = OrderedDict([ + ("from", format(priv.pubkey, prefix)), + ("to", format(pub, prefix)), + ("nonce", nonce), + ("check", check), + ("encrypted", cipher), + ("from_priv", repr(priv)), + ("to_pub", repr(pub)), + ("shared_secret", shared_secret), + ]) tx = Memo(**s) - return "#" + base58encode(hexlify(bytes(tx)).decode("ascii")) + + return "#" + base58encode(hexlify(compat_bytes(tx)).decode("ascii")) def decode_memo(priv, message): @@ -141,10 +148,10 @@ def decode_memo(priv, message): " Encryption " # remove the varint prefix (FIXME, long messages!) message = cipher[2:] - message = aes.decrypt(unhexlify(bytes(message, 'ascii'))) + message = aes.decrypt(unhexlify(compat_bytes(message, 'ascii'))) try: return _unpad(message.decode('utf8'), 16) - except: + except: # noqa FIXME(sneak) raise ValueError(message) diff --git a/steembase/operationids.py b/steembase/operationids.py index b2744d0..195a21b 100644 --- a/steembase/operationids.py +++ b/steembase/operationids.py @@ -41,6 +41,7 @@ 'claim_reward_balance', 'delegate_vesting_shares', 'account_create_with_delegation', + 'witness_set_properties', 'fill_convert_request', 'author_reward', 'curation_reward', diff --git a/steembase/operations.py b/steembase/operations.py index b7364c8..e9a2d20 100644 --- a/steembase/operations.py +++ b/steembase/operations.py @@ -1,15 +1,16 @@ import importlib import json +from binascii import hexlify, unhexlify import re import struct from collections import OrderedDict +from steem.utils import compat_bytes from .account import PublicKey from .operationids import operations -from .types import ( - Int16, Uint16, Uint32, Uint64, - String, Bytes, Array, PointInTime, Bool, - Optional, Map, Id, JsonObj, StaticVariant) +from .types import (Int16, Uint16, Uint32, Uint64, String, HexString, Bytes, + Array, PointInTime, Bool, Optional, Map, Id, JsonObj, + StaticVariant) default_prefix = "STM" @@ -32,12 +33,14 @@ def __init__(self, op): if self.opId is None: raise ValueError("Unknown operation") - # convert method name like feed_publish to class name like FeedPublish + # convert method name like feed_publish to class + # name like FeedPublish self.name = self.to_class_name(name) try: klass = self.get_class(self.name) - except: - raise NotImplementedError("Unimplemented Operation %s" % self.name) + except: # noqa FIXME(sneak) + raise NotImplementedError( + "Unimplemented Operation %s" % self.name) else: self.op = klass(op[1]) else: @@ -47,7 +50,7 @@ def __init__(self, op): self.opId = operations[self.to_method_name(self.name)] @staticmethod - def get_operation_name_for_id(_id: int): + def get_operation_name_for_id(_id): """ Convert an operation id into the corresponding string """ for key, value in operations.items(): @@ -55,30 +58,31 @@ def get_operation_name_for_id(_id: int): return key @staticmethod - def to_class_name(method_name: str): - """ Take a name of a method, like feed_publish and turn it into class name like FeedPublish. """ + def to_class_name(method_name): + """ Take a name of a method, like feed_publish and turn it into + class name like FeedPublish. """ return ''.join(map(str.title, method_name.split('_'))) @staticmethod - def to_method_name(class_name: str): - """ Take a name of a class, like FeedPublish and turn it into method name like feed_publish. """ + def to_method_name(class_name): + """ Take a name of a class, like FeedPublish and turn it into + method name like feed_publish. """ words = re.findall('[A-Z][^A-Z]*', class_name) return '_'.join(map(str.lower, words)) @staticmethod - def get_class(class_name: str): + def get_class(class_name): """ Given name of a class from `operations`, return real class. """ module = importlib.import_module('steembase.operations') return getattr(module, class_name) def __bytes__(self): - return bytes(Id(self.opId)) + bytes(self.op) + return compat_bytes(Id(self.opId)) + compat_bytes(self.op) def __str__(self): - return json.dumps([ - self.get_operation_name_for_id(self.opId), - self.op.json() - ]) + return json.dumps( + [self.get_operation_name_for_id(self.opId), + self.op.json()]) class GrapheneObject(object): @@ -101,9 +105,9 @@ def __bytes__(self): b = b"" for name, value in self.data.items(): if isinstance(value, str): - b += bytes(value, 'utf-8') + b += compat_bytes(value, 'utf-8') else: - b += bytes(value) + b += compat_bytes(value) return b def __json__(self): @@ -153,19 +157,17 @@ def __init__(self, *args, **kwargs): reverse=False, ) - accountAuths = Map([ - [String(e[0]), Uint16(e[1])] - for e in kwargs["account_auths"] - ]) - keyAuths = Map([ - [PublicKey(e[0], prefix=prefix), Uint16(e[1])] - for e in kwargs["key_auths"] - ]) - super().__init__(OrderedDict([ - ('weight_threshold', Uint32(int(kwargs["weight_threshold"]))), - ('account_auths', accountAuths), - ('key_auths', keyAuths), - ])) + accountAuths = Map([[String(e[0]), Uint16(e[1])] + for e in kwargs["account_auths"]]) + keyAuths = Map([[PublicKey(e[0], prefix=prefix), + Uint16(e[1])] for e in kwargs["key_auths"]]) + super(Permission, self).__init__( + OrderedDict([ + ('weight_threshold', Uint32( + int(kwargs["weight_threshold"]))), + ('account_auths', accountAuths), + ('key_auths', keyAuths), + ])) class Memo(GrapheneObject): @@ -178,13 +180,14 @@ def __init__(self, *args, **kwargs): if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] - super().__init__(OrderedDict([ - ('from', PublicKey(kwargs["from"], prefix=prefix)), - ('to', PublicKey(kwargs["to"], prefix=prefix)), - ('nonce', Uint64(int(kwargs["nonce"]))), - ('check', Uint32(int(kwargs["check"]))), - ('encrypted', Bytes(kwargs["encrypted"])), - ])) + super(Memo, self).__init__( + OrderedDict([ + ('from', PublicKey(kwargs["from"], prefix=prefix)), + ('to', PublicKey(kwargs["to"], prefix=prefix)), + ('nonce', Uint64(int(kwargs["nonce"]))), + ('check', Uint32(int(kwargs["check"]))), + ('encrypted', Bytes(kwargs["encrypted"])), + ])) class Vote(GrapheneObject): @@ -194,12 +197,13 @@ def __init__(self, *args, **kwargs): else: if len(args) == 1 and len(kwargs) == 0: kwargs = args[0] - super().__init__(OrderedDict([ - ('voter', String(kwargs["voter"])), - ('author', String(kwargs["author"])), - ('permlink', String(kwargs["permlink"])), - ('weight', Int16(kwargs["weight"])), - ])) + super(Vote, self).__init__( + OrderedDict([ + ('voter', String(kwargs["voter"])), + ('author', String(kwargs["author"])), + ('permlink', String(kwargs["permlink"])), + ('weight', Int16(kwargs["weight"])), + ])) class Comment(GrapheneObject): @@ -211,21 +215,22 @@ def __init__(self, *args, **kwargs): kwargs = args[0] meta = "" if "json_metadata" in kwargs and kwargs["json_metadata"]: - if (isinstance(kwargs["json_metadata"], dict) or - isinstance(kwargs["json_metadata"], list)): + if (isinstance(kwargs["json_metadata"], dict) + or isinstance(kwargs["json_metadata"], list)): meta = json.dumps(kwargs["json_metadata"]) else: meta = kwargs["json_metadata"] - super().__init__(OrderedDict([ - ('parent_author', String(kwargs["parent_author"])), - ('parent_permlink', String(kwargs["parent_permlink"])), - ('author', String(kwargs["author"])), - ('permlink', String(kwargs["permlink"])), - ('title', String(kwargs["title"])), - ('body', String(kwargs["body"])), - ('json_metadata', String(meta)), - ])) + super(Comment, self).__init__( + OrderedDict([ + ('parent_author', String(kwargs["parent_author"])), + ('parent_permlink', String(kwargs["parent_permlink"])), + ('author', String(kwargs["author"])), + ('permlink', String(kwargs["permlink"])), + ('title', String(kwargs["title"])), + ('body', String(kwargs["body"])), + ('json_metadata', String(meta)), + ])) class Amount: @@ -242,18 +247,11 @@ def __bytes__(self): # padding asset = self.asset + "\x00" * (7 - len(self.asset)) amount = round(float(self.amount) * 10 ** self.precision) - return ( - struct.pack(" 32: raise Exception("'id' too long") - super().__init__(OrderedDict([ - ('required_auths', - Array([String(o) for o in kwargs["required_auths"]])), - ('required_posting_auths', - Array([String(o) for o in kwargs["required_posting_auths"]])), - ('id', String(kwargs["id"])), - ('json', String(js)), - ])) + super(CustomJson, self).__init__( + OrderedDict([ + ('required_auths', + Array([String(o) for o in kwargs["required_auths"]])), + ('required_posting_auths', + Array([ + String(o) for o in kwargs["required_posting_auths"] + ])), + ('id', String(kwargs["id"])), + ('json', String(js)), + ])) class CommentOptions(GrapheneObject): @@ -691,22 +793,26 @@ def __init__(self, *args, **kwargs): kwargs = args[0] # handle beneficiaries + if "beneficiaries" in kwargs and kwargs['beneficiaries']: + kwargs['extensions'] = [[0, {'beneficiaries': kwargs['beneficiaries']}]] + extensions = Array([]) - beneficiaries = kwargs.get('beneficiaries') - if beneficiaries and type(beneficiaries) == list: - ext_obj = [0, {'beneficiaries': beneficiaries}] - ext = CommentOptionExtensions(ext_obj) - extensions = Array([ext]) - - super().__init__(OrderedDict([ - ('author', String(kwargs["author"])), - ('permlink', String(kwargs["permlink"])), - ('max_accepted_payout', Amount(kwargs["max_accepted_payout"])), - ('percent_steem_dollars', Uint16(int(kwargs["percent_steem_dollars"]))), - ('allow_votes', Bool(bool(kwargs["allow_votes"]))), - ('allow_curation_rewards', Bool(bool(kwargs["allow_curation_rewards"]))), - ('extensions', extensions), - ])) + if "extensions" in kwargs and kwargs["extensions"]: + extensions = Array([CommentOptionExtensions(o) for o in kwargs["extensions"]]) + + super(CommentOptions, self).__init__( + OrderedDict([ + ('author', String(kwargs["author"])), + ('permlink', String(kwargs["permlink"])), + ('max_accepted_payout', + Amount(kwargs["max_accepted_payout"])), + ('percent_steem_dollars', + Uint16(int(kwargs["percent_steem_dollars"]))), + ('allow_votes', Bool(bool(kwargs["allow_votes"]))), + ('allow_curation_rewards', + Bool(bool(kwargs["allow_curation_rewards"]))), + ('extensions', extensions), + ])) def isArgsThisClass(self, args): diff --git a/steembase/storage.py b/steembase/storage.py index d167e46..151a780 100644 --- a/steembase/storage.py +++ b/steembase/storage.py @@ -10,6 +10,7 @@ from appdirs import user_data_dir from steem.aes import AESCipher +from steem.utils import compat_bytes log = logging.getLogger(__name__) log.setLevel(logging.DEBUG) @@ -22,19 +23,6 @@ class DataDir(object): """ This class ensures that the user's data is stored in its OS preotected user directory: - **OSX:** - - * `~/Library/Application Support/` - - **Windows:** - - * `C:\Documents and Settings\\Application Data\Local Settings\\` - * `C:\Documents and Settings\\Application Data\\` - - **Linux:** - - * `~/.local/share/` - Furthermore, it offers an interface to generated backups in the `backups/` directory every now and then. """ @@ -69,10 +57,9 @@ def sqlite3_backup(self, dbfile, backupdir): """ if not os.path.isdir(backupdir): os.mkdir(backupdir) - backup_file = os.path.join( - backupdir, - os.path.basename(self.storageDatabase) + - datetime.now().strftime("-" + timeformat)) + backup_file = os.path.join(backupdir, + os.path.basename(self.storageDatabase) + + datetime.now().strftime("-" + timeformat)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() # Lock database before making a backup @@ -117,8 +104,7 @@ def exists_table(self): """ Check if the database table exists """ query = ("SELECT name FROM sqlite_master " + - "WHERE type='table' AND name=?", - (self.__tablename__,)) + "WHERE type='table' AND name=?", (self.__tablename__,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(*query) @@ -128,10 +114,8 @@ def create_table(self): """ Create the new table in the SQLite database """ query = ('CREATE TABLE %s (' % self.__tablename__ + - 'id INTEGER PRIMARY KEY AUTOINCREMENT,' + - 'pub STRING(256),' + - 'wif STRING(256)' + - ')') + 'id INTEGER PRIMARY KEY AUTOINCREMENT,' + 'pub STRING(256),' + + 'wif STRING(256)' + ')') connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(query) @@ -155,8 +139,7 @@ def getPrivateKeyForPublicKey(self, pub): The encryption scheme is BIP38 """ - query = ("SELECT wif from %s " % (self.__tablename__) + - "WHERE pub=?", + query = ("SELECT wif from %s " % (self.__tablename__) + "WHERE pub=?", (pub,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() @@ -173,8 +156,7 @@ def updateWif(self, pub, wif): :param str pub: Public key :param str wif: Private key """ - query = ("UPDATE %s " % self.__tablename__ + - "SET wif=? WHERE pub=?", + query = ("UPDATE %s " % self.__tablename__ + "SET wif=? WHERE pub=?", (wif, pub)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() @@ -191,8 +173,7 @@ def add(self, wif, pub): if self.getPrivateKeyForPublicKey(pub): raise ValueError("Key already in storage") query = ('INSERT INTO %s (pub, wif) ' % self.__tablename__ + - 'VALUES (?, ?)', - (pub, wif)) + 'VALUES (?, ?)', (pub, wif)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(*query) @@ -203,8 +184,7 @@ def delete(self, pub): :param str pub: Public key """ - query = ("DELETE FROM %s " % (self.__tablename__) + - "WHERE pub=?", + query = ("DELETE FROM %s " % (self.__tablename__) + "WHERE pub=?", (pub,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() @@ -236,8 +216,7 @@ def exists_table(self): """ Check if the database table exists """ query = ("SELECT name FROM sqlite_master " + - "WHERE type='table' AND name=?", - (self.__tablename__,)) + "WHERE type='table' AND name=?", (self.__tablename__,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(*query) @@ -247,10 +226,8 @@ def create_table(self): """ Create the new table in the SQLite database """ query = ('CREATE TABLE %s (' % self.__tablename__ + - 'id INTEGER PRIMARY KEY AUTOINCREMENT,' + - 'key STRING(256),' + - 'value STRING(256)' + - ')') + 'id INTEGER PRIMARY KEY AUTOINCREMENT,' + 'key STRING(256),' + + 'value STRING(256)' + ')') connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(query) @@ -259,28 +236,23 @@ def create_table(self): def checkBackup(self): """ Backup the SQL database every 7 days """ - if ("lastBackup" not in configStorage or - configStorage["lastBackup"] == ""): + if ("lastBackup" not in configStorage + or configStorage["lastBackup"] == ""): print("No backup has been created yet!") self.refreshBackup() try: - if ( - datetime.now() - - datetime.strptime(configStorage["lastBackup"], - timeformat) - ).days > 7: + if (datetime.now() - datetime.strptime(configStorage["lastBackup"], + timeformat)).days > 7: print("Backups older than 7 days!") self.refreshBackup() - except: + except: # noqa FIXME(sneak) self.refreshBackup() def _haveKey(self, key): """ Is the key `key` available int he configuration? """ - query = ("SELECT value FROM %s " % (self.__tablename__) + - "WHERE key=?", - (key,) - ) + query = ("SELECT value FROM %s " % + (self.__tablename__) + "WHERE key=?", (key,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(*query) @@ -290,10 +262,8 @@ def __getitem__(self, key): """ This method behaves differently from regular `dict` in that it returns `None` if a key is not found! """ - query = ("SELECT value FROM %s " % (self.__tablename__) + - "WHERE key=?", - (key,) - ) + query = ("SELECT value FROM %s " % + (self.__tablename__) + "WHERE key=?", (key,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(*query) @@ -322,13 +292,12 @@ def __contains__(self, key): def __setitem__(self, key, value): if self._haveKey(key): - query = ("UPDATE %s " % self.__tablename__ + - "SET value=? WHERE key=?", - (value, key)) + query = ( + "UPDATE %s " % self.__tablename__ + "SET value=? WHERE key=?", + (value, key)) else: query = ("INSERT INTO %s " % self.__tablename__ + - "(key, value) VALUES (?, ?)", - (key, value)) + "(key, value) VALUES (?, ?)", (key, value)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() cursor.execute(*query) @@ -337,8 +306,7 @@ def __setitem__(self, key, value): def delete(self, key): """ Delete a key from the configuration store """ - query = ("DELETE FROM %s " % (self.__tablename__) + - "WHERE key=?", + query = ("DELETE FROM %s " % (self.__tablename__) + "WHERE key=?", (key,)) connection = sqlite3.connect(self.sqlDataBaseFile) cursor = connection.cursor() @@ -363,94 +331,96 @@ def __len__(self): return len(cursor.fetchall()) -class WrongMasterPasswordException(Exception): +class WrongKEKException(Exception): pass -class MasterPassword(object): - """ The keys are encrypted with a Masterpassword that is stored in +class KeyEncryptionKey(object): + """ The keys are encrypted with a KeyEncryptionKey that is stored in the configurationStore. It has a checksum to verify correctness - of the password + of the userPassphrase """ - password = "" - decrypted_master = "" + userPassphrase = "" + decrypted_KEK = "" - #: This key identifies the encrypted master password stored in the confiration + #: This key identifies the encrypted KeyEncryptionKey + # stored in the configuration config_key = "encrypted_master_password" - def __init__(self, password): + def __init__(self, user_passphrase): """ The encrypted private keys in `keys` are encrypted with a - random encrypted masterpassword that is stored in the + random encrypted KeyEncryptionKey that is stored in the configuration. - The password is used to encrypt this masterpassword. To + The userPassphrase is used to encrypt this KeyEncryptionKey. To decrypt the keys stored in the keys database, one must use - BIP38, decrypt the masterpassword from the configuration - store with the user password, and use the decrypted - masterpassword to decrypt the BIP38 encrypted private keys + BIP38, decrypt the KeyEncryptionKey from the configuration + store with the userPassphrase, and use the decrypted + KeyEncryptionKey to decrypt the BIP38 encrypted private keys from the keys storage! - :param str password: Password to use for en-/de-cryption + :param str user_passphrase: Password to use for en-/de-cryption """ - self.password = password + self.userPassphrase = user_passphrase if self.config_key not in configStorage: - self.newMaster() - self.saveEncrytpedMaster() + self.newKEK() + self.saveEncrytpedKEK() else: - self.decryptEncryptedMaster() + self.decryptEncryptedKEK() - def decryptEncryptedMaster(self): - """ Decrypt the encrypted masterpassword + def decryptEncryptedKEK(self): + """ Decrypt the encrypted KeyEncryptionKey """ - aes = AESCipher(self.password) - checksum, encrypted_master = configStorage[self.config_key].split("$") + aes = AESCipher(self.userPassphrase) + checksum, encrypted_kek = configStorage[self.config_key].split("$") try: - decrypted_master = aes.decrypt(encrypted_master) - except: - raise WrongMasterPasswordException - if checksum != self.deriveChecksum(decrypted_master): - raise WrongMasterPasswordException - self.decrypted_master = decrypted_master - - def saveEncrytpedMaster(self): - """ Store the encrypted master password in the configuration + decrypted_kek = aes.decrypt(encrypted_kek) + except: # noqa FIXME(sneak) + raise WrongKEKException + if checksum != self.deriveChecksum(decrypted_kek): + raise WrongKEKException + self.decrypted_KEK = decrypted_kek + + def saveEncrytpedKEK(self): + """ Store the encrypted KeyEncryptionKey in the configuration store """ - configStorage[self.config_key] = self.getEncryptedMaster() + configStorage[self.config_key] = self.getEncryptedKEK() - def newMaster(self): - """ Generate a new random masterpassword + def newKEK(self): + """ Generate a new random KeyEncryptionKey """ # make sure to not overwrite an existing key - if (self.config_key in configStorage and - configStorage[self.config_key]): + if (self.config_key in configStorage + and configStorage[self.config_key]): return - self.decrypted_master = hexlify(os.urandom(32)).decode("ascii") + self.decrypted_KEK = hexlify(os.urandom(32)).decode("ascii") def deriveChecksum(self, s): """ Derive the checksum """ - checksum = hashlib.sha256(bytes(s, "ascii")).hexdigest() + checksum = hashlib.sha256(compat_bytes(s, "ascii")).hexdigest() return checksum[:4] - def getEncryptedMaster(self): - """ Obtain the encrypted masterkey + def getEncryptedKEK(self): + """ Obtain the encrypted KeyEncryptionKey """ - if not self.decrypted_master: - raise Exception("master not decrypted") - aes = AESCipher(self.password) - return "{}${}".format(self.deriveChecksum(self.decrypted_master), - aes.encrypt(self.decrypted_master)) - - def changePassword(self, newpassword): - """ Change the password + if not self.decrypted_KEK: + raise Exception("KeyEncryptionKey not decrypted") + aes = AESCipher(self.userPassphrase) + return "{}${}".format( + self.deriveChecksum(self.decrypted_KEK), + aes.encrypt(self.decrypted_KEK)) + + def changePassphrase(self, newpassphrase): + """ Change the passphrase """ - self.password = newpassword - self.saveEncrytpedMaster() + self.userPassphrase = newpassphrase + self.saveEncrytpedKEK() def purge(self): - """ Remove the masterpassword from the configuration store + """ Remove the KeyEncryptionKey from the configuration store """ configStorage[self.config_key] = "" diff --git a/steembase/transactions.py b/steembase/transactions.py index ffdaf07..5aef114 100644 --- a/steembase/transactions.py +++ b/steembase/transactions.py @@ -2,12 +2,15 @@ import logging import struct import time +import array +import sys from binascii import hexlify, unhexlify from collections import OrderedDict from datetime import datetime import ecdsa +from steem.utils import compat_bytes, compat_chr from .account import PrivateKey, PublicKey from .chains import known_chains from .operations import Operation, GrapheneObject, isArgsThisClass @@ -27,7 +30,7 @@ USE_SECP256K1 = True log.debug("Loaded secp256k1 binding.") -except: +except: # noqa FIXME(sneak) USE_SECP256K1 = False log.debug("To speed up transactions signing install \n" " pip install secp256k1") @@ -38,7 +41,8 @@ class SignedTransaction(GrapheneObject): signature :param num refNum: parameter ref_block_num (see ``getBlockParams``) - :param num refPrefix: parameter ref_block_prefix (see ``getBlockParams``) + :param num refPrefix: parameter ref_block_prefix (see + ``getBlockParams``) :param str expiration: expiration date :param Array operations: array of operations """ @@ -56,22 +60,28 @@ def __init__(self, *args, **kwargs): if "signatures" not in kwargs: kwargs["signatures"] = Array([]) else: - kwargs["signatures"] = Array([Signature(unhexlify(a)) for a in kwargs["signatures"]]) + kwargs["signatures"] = Array( + [Signature(unhexlify(a)) for a in kwargs["signatures"]]) if "operations" in kwargs: - if all([not isinstance(a, Operation) for a in kwargs["operations"]]): - kwargs['operations'] = Array([Operation(a) for a in kwargs["operations"]]) + if all([ + not isinstance(a, Operation) + for a in kwargs["operations"] + ]): + kwargs['operations'] = Array( + [Operation(a) for a in kwargs["operations"]]) else: kwargs['operations'] = Array(kwargs["operations"]) - super().__init__(OrderedDict([ - ('ref_block_num', Uint16(kwargs['ref_block_num'])), - ('ref_block_prefix', Uint32(kwargs['ref_block_prefix'])), - ('expiration', PointInTime(kwargs['expiration'])), - ('operations', kwargs['operations']), - ('extensions', kwargs['extensions']), - ('signatures', kwargs['signatures']), - ])) + super(SignedTransaction, self).__init__( + OrderedDict([ + ('ref_block_num', Uint16(kwargs['ref_block_num'])), + ('ref_block_prefix', Uint32(kwargs['ref_block_prefix'])), + ('expiration', PointInTime(kwargs['expiration'])), + ('operations', kwargs['operations']), + ('extensions', kwargs['extensions']), + ('signatures', kwargs['signatures']), + ])) def recoverPubkeyParameter(self, digest, signature, pubkey): """ Use to derive a number that allows to easily recover the @@ -80,13 +90,14 @@ def recoverPubkeyParameter(self, digest, signature, pubkey): for i in range(0, 4): if USE_SECP256K1: sig = pubkey.ecdsa_recoverable_deserialize(signature, i) - p = secp256k1.PublicKey(pubkey.ecdsa_recover(self.message, sig)) + p = secp256k1.PublicKey( + pubkey.ecdsa_recover(self.message, sig)) if p.serialize() == pubkey.serialize(): return i else: p = self.recover_public_key(digest, signature, i) - if (p.to_string() == pubkey.to_string() or - self.compressedPubkey(p) == pubkey.to_string()): + if (p.to_string() == pubkey.to_string() + or self.compressedPubkey(p) == pubkey.to_string()): return i return None @@ -105,12 +116,14 @@ def compressedPubkey(self, pk): order = pk.curve.generator.order() p = pk.pubkey.point x_str = ecdsa.util.number_to_string(p.x(), order) - return bytes(chr(2 + (p.y() & 1)), 'ascii') + x_str + return compat_bytes(compat_chr(2 + (p.y() & 1)), 'ascii') + x_str + # FIXME(sneak) this should be reviewed for correctness def recover_public_key(self, digest, signature, i): """ Recover the public key from the the signature """ - # See http: //www.secg.org/download/aid-780/sec1-v2.pdf section 4.1.6 primarily + # See http: //www.secg.org/download/aid-780/sec1-v2.pdf + # section 4.1.6 primarily curve = ecdsa.SECP256k1.curve G = ecdsa.SECP256k1.generator order = ecdsa.SECP256k1.order @@ -118,8 +131,12 @@ def recover_public_key(self, digest, signature, i): r, s = ecdsa.util.sigdecode_string(signature, order) # 1.1 x = r + (i // 2) * order - # 1.3. This actually calculates for either effectively 02||X or 03||X depending on 'k' instead of always for 02||X as specified. - # This substitutes for the lack of reversing R later on. -R actually is defined to be just flipping the y-coordinate in the elliptic curve. + # 1.3. This actually calculates for either effectively + # 02||X or 03||X depending on 'k' instead of always + # for 02||X as specified. + # This substitutes for the lack of reversing R later on. + # -R actually is defined to be just flipping the y-coordinate + # in the elliptic curve. alpha = ((x * x * x) + (curve.a() * x) + curve.b()) % curve.p() beta = ecdsa.numbertheory.square_root_mod_prime(alpha, curve.p()) y = beta if (beta - yp) % 2 == 0 else curve.p() - beta @@ -128,10 +145,13 @@ def recover_public_key(self, digest, signature, i): # 1.5 Compute e e = ecdsa.util.string_to_number(digest) # 1.6 Compute Q = r^-1(sR - eG) - Q = ecdsa.numbertheory.inverse_mod(r, order) * (s * R + (-e % order) * G) - # Not strictly necessary, but let's verify the message for paranoia's sake. - if not ecdsa.VerifyingKey.from_public_point(Q, curve=ecdsa.SECP256k1).verify_digest(signature, digest, - sigdecode=ecdsa.util.sigdecode_string): + Q = ecdsa.numbertheory.inverse_mod(r, order) * (s * R + + (-e % order) * G) + # Not strictly necessary, but let's verify the message for + # paranoia's sake. + if not ecdsa.VerifyingKey.from_public_point( + Q, curve=ecdsa.SECP256k1).verify_digest( + signature, digest, sigdecode=ecdsa.util.sigdecode_string): return None return ecdsa.VerifyingKey.from_public_point(Q, curve=ecdsa.SECP256k1) @@ -161,9 +181,9 @@ def deriveDigest(self, chain): self.data["signatures"] = [] # Get message to sign - # bytes(self) will give the wire formated data according to + # bytes(self) will give the wire formatted data according to # GrapheneObject and the data given in __init__() - self.message = unhexlify(self.chainid) + bytes(self) + self.message = unhexlify(self.chainid) + compat_bytes(self) self.digest = hashlib.sha256(self.message).digest() # restore signatures @@ -178,31 +198,34 @@ def verify(self, pubkeys=[], chain=None): pubKeysFound = [] for signature in signatures: - sig = bytes(signature)[1:] - recoverParameter = (bytes(signature)[0]) - 4 - 27 # recover parameter only + sig = compat_bytes(signature)[1:] + if sys.version >= '3.0': + recoverParameter = (compat_bytes(signature)[0]) - 4 - 27 # recover parameter only + else: + recoverParameter = ord((compat_bytes(signature)[0])) - 4 - 27 if USE_SECP256K1: - ALL_FLAGS = secp256k1.lib.SECP256K1_CONTEXT_VERIFY | secp256k1.lib.SECP256K1_CONTEXT_SIGN + ALL_FLAGS = secp256k1.lib.SECP256K1_CONTEXT_VERIFY | \ + secp256k1.lib.SECP256K1_CONTEXT_SIGN # Placeholder pub = secp256k1.PublicKey(flags=ALL_FLAGS) # Recover raw signature sig = pub.ecdsa_recoverable_deserialize(sig, recoverParameter) # Recover PublicKey - verifyPub = secp256k1.PublicKey(pub.ecdsa_recover(bytes(self.message), sig)) + verifyPub = secp256k1.PublicKey( + pub.ecdsa_recover(compat_bytes(self.message), sig)) # Convert recoverable sig to normal sig normalSig = verifyPub.ecdsa_recoverable_convert(sig) # Verify - verifyPub.ecdsa_verify(bytes(self.message), normalSig) - phex = hexlify(verifyPub.serialize(compressed=True)).decode('ascii') + verifyPub.ecdsa_verify(compat_bytes(self.message), normalSig) + phex = hexlify( + verifyPub.serialize(compressed=True)).decode('ascii') pubKeysFound.append(phex) else: p = self.recover_public_key(self.digest, sig, recoverParameter) # Will throw an exception of not valid p.verify_digest( - sig, - self.digest, - sigdecode=ecdsa.util.sigdecode_string - ) + sig, self.digest, sigdecode=ecdsa.util.sigdecode_string) phex = hexlify(self.compressedPubkey(p)).decode('ascii') pubKeysFound.append(phex) @@ -218,11 +241,12 @@ def verify(self, pubkeys=[], chain=None): return pubKeysFound def _is_canonical(self, sig): - return (not (sig[0] & 0x80) and - not (sig[0] == 0 and not (sig[1] & 0x80)) and - not (sig[32] & 0x80) and - not (sig[32] == 0 and not (sig[33] & 0x80))) + return (not (sig[0] & 0x80) + and not (sig[0] == 0 and not (sig[1] & 0x80)) + and not (sig[32] & 0x80) + and not (sig[32] == 0 and not (sig[33] & 0x80))) + # FIXME(sneak) audit this function def sign(self, wifkeys, chain=None): """ Sign the transaction with the provided private keys. @@ -236,12 +260,15 @@ def sign(self, wifkeys, chain=None): # Get Unique private keys self.privkeys = [] - [self.privkeys.append(item) for item in wifkeys if item not in self.privkeys] + [ + self.privkeys.append(item) for item in wifkeys + if item not in self.privkeys + ] # Sign the message with every private key given! sigs = [] for wif in self.privkeys: - p = bytes(PrivateKey(wif)) + p = compat_bytes(PrivateKey(wif)) i = 0 if USE_SECP256K1: ndata = secp256k1.ffi.new("const int *ndata") @@ -249,15 +276,11 @@ def sign(self, wifkeys, chain=None): while True: ndata[0] += 1 privkey = secp256k1.PrivateKey(p, raw=True) - sig = secp256k1.ffi.new('secp256k1_ecdsa_recoverable_signature *') + sig = secp256k1.ffi.new( + 'secp256k1_ecdsa_recoverable_signature *') signed = secp256k1.lib.secp256k1_ecdsa_sign_recoverable( - privkey.ctx, - sig, - self.digest, - privkey.private_key, - secp256k1.ffi.NULL, - ndata - ) + privkey.ctx, sig, self.digest, privkey.private_key, + secp256k1.ffi.NULL, ndata) assert signed == 1 signature, i = privkey.ecdsa_recoverable_serialize(sig) if self._is_canonical(signature): @@ -270,39 +293,44 @@ def sign(self, wifkeys, chain=None): while 1: cnt += 1 if not cnt % 20: - log.info("Still searching for a canonical signature. Tried %d times already!" % cnt) + log.info("Still searching for a canonical signature. " + "Tried %d times already!" % cnt) # Deterministic k - # k = ecdsa.rfc6979.generate_k( sk.curve.generator.order(), sk.privkey.secret_multiplier, hashlib.sha256, hashlib.sha256( - self.digest + - struct.pack("d", time.time()) # use the local time to randomize the signature + self.digest + struct.pack("d", time.time( + )) # use the local time to randomize the signature ).digest()) # Sign message # sigder = sk.sign_digest( - self.digest, - sigencode=ecdsa.util.sigencode_der, - k=k) + self.digest, sigencode=ecdsa.util.sigencode_der, k=k) # Reformating of signature # - r, s = ecdsa.util.sigdecode_der(sigder, sk.curve.generator.order()) - signature = ecdsa.util.sigencode_string(r, s, sk.curve.generator.order()) + r, s = ecdsa.util.sigdecode_der(sigder, + sk.curve.generator.order()) + signature = ecdsa.util.sigencode_string( + r, s, sk.curve.generator.order()) + + # This line allows us to convert a 2.7 byte array(which is just binary) to an array of byte values. + # We can then use the elements in sigder as integers, as in the following two lines. + sigder = array.array('B', sigder) # Make sure signature is canonical! # lenR = sigder[3] lenS = sigder[5 + lenR] - if lenR is 32 and lenS is 32: + if int(lenR) == 32 and int(lenS) == 32: # Derive the recovery parameter # - i = self.recoverPubkeyParameter(self.digest, signature, sk.get_verifying_key()) + i = self.recoverPubkeyParameter( + self.digest, signature, sk.get_verifying_key()) i += 4 # compressed i += 27 # compact break @@ -329,7 +357,8 @@ def get_block_params(steem): props = steem.get_dynamic_global_properties() ref_block_num = props["head_block_number"] - 3 & 0xFFFF ref_block = steem.get_block(props["head_block_number"] - 2) - ref_block_prefix = struct.unpack_from("= 0x80: - data += bytes([(n & 0x7f) | 0x80]) + data += compat_bytes([(n & 0x7f) | 0x80]) n >>= 7 - data += bytes([n]) + data += compat_bytes([n]) return data @@ -64,11 +67,15 @@ def JsonObj(data): """ Returns json object from data """ try: - return json.loads(str(data)) - except: + if sys.version >= '3.0': + return json.loads(str(data)) + else: + return compat_json(json.loads(str(data), object_hook=compat_json), + ignore_dicts=True) + except Exception as e: # noqa FIXME(sneak) try: return data.__str__() - except: + except: # noqa FIXME(sneak) raise ValueError('JsonObj could not parse %s:\n%s' % (type(data).__name__, data.__class__)) @@ -183,7 +190,21 @@ def unicodify(self): r.append("u%04x" % o) else: r.append(s) - return bytes("".join(r), "utf-8") + return compat_bytes("".join(r), "utf-8") + + +class HexString(object): + def __init__(self, d): + self.data = d + + def __bytes__(self): + """Returns bytes representation.""" + d = bytes(unhexlify(compat_bytes(self.data, 'ascii'))) + return varint(len(d)) + d + + def __str__(self): + """Returns data as string.""" + return '%s' % str(self.data) class Bytes: @@ -196,7 +217,7 @@ def __init__(self, d, length=None): def __bytes__(self): # FIXME constraint data to self.length - d = unhexlify(bytes(self.data, 'utf-8')) + d = unhexlify(compat_bytes(self.data, 'utf-8')) return varint(len(d)) + d def __str__(self): @@ -220,7 +241,7 @@ def __init__(self, d): self.length = Varint32(len(self.data)) def __bytes__(self): - return bytes(self.length) + b"".join([bytes(a) for a in self.data]) + return compat_bytes(self.length) + b"".join([compat_bytes(a) for a in self.data]) def __str__(self): r = [] @@ -241,7 +262,9 @@ def __init__(self, d): self.data = d def __bytes__(self): - return struct.pack(" 20e6 + + +def test_get_block(): + """ We should be able to fetch some blocks. """ + s = Steemd() + + for num in [1000, 1000000, 10000000, 20000000, 21000000]: + b = s.get_block(num) + assert b, 'block %d was blank' % num + assert num == int(b['block_id'][:8], base=16) + + start = 21000000 + for num in range(start, start + 50): + b = s.get_block(num) + assert b, 'block %d was blank' % num + assert num == int(b['block_id'][:8], base=16) + + non_existent_block = 99999999 + b = s.get_block(non_existent_block) + assert not b, 'block %d expected to be blank' % non_existent_block + + def test_ensured_block_ranges(): """ Post should load correctly if passed a dict or string identifier. """ s = Steemd() - assert list(pluck('block_num', s.get_blocks_range(1000, 2000))) == list(range(1000, 2000)) + assert list(pluck('block_num', s.get_blocks_range(1000, 2000))) == list( + range(1000, 2000)) # for fuzzing in s.get_block_range_ensured() use: - # degraded_results = [x for x in results if x['block_num'] % random.choice(range(1, 10)) != 0] + # degraded_results = [x for x in results if x['block_num'] % + # random.choice(range(1, 10)) != 0] diff --git a/tests/steem/test_transactions.py b/tests/steem/test_transactions.py index 76f2b00..f969b73 100644 --- a/tests/steem/test_transactions.py +++ b/tests/steem/test_transactions.py @@ -5,6 +5,7 @@ from steembase.transactions import SignedTransaction from steembase import operations from collections import OrderedDict +from steem.utils import compat_bytes, compat_chr import steem as stm wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3" @@ -21,24 +22,26 @@ def __init__(self, *args, **kwargs): def test_Comment(self): op = operations.Comment( - **{"parent_author": "foobara", - "parent_permlink": "foobarb", - "author": "foobarc", - "permlink": "foobard", - "title": "foobare", - "body": "foobarf", - "json_metadata": {"foo": "bar"}} - ) + **{ + "parent_author": "foobara", + "parent_permlink": "foobarb", + "author": "foobarc", + "permlink": "foobard", + "title": "foobare", + "body": "foobarf", + "json_metadata": { + "foo": "bar" + } + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010107666f6f6261726107666f6f626172620" "7666f6f6261726307666f6f6261726407666f6f6261726507666f6f62" @@ -49,23 +52,23 @@ def test_Comment(self): def test_Vote(self): op = operations.Vote( - **{"voter": "foobara", - "author": "foobarc", - "permlink": "foobard", - "weight": 1000} - ) + **{ + "voter": "foobara", + "author": "foobarc", + "permlink": "foobard", + "weight": 1000 + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) tx.verify([PrivateKey(wif).pubkey], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010007666f6f6261726107666f6f62617263" "07666f6f62617264e8030001202e09123f732a438ef6d6138484d7ad" @@ -75,43 +78,66 @@ def test_Vote(self): def test_create_account(self): op = operations.AccountCreate( - **{'creator': 'xeroc', - 'fee': '10.000 STEEM', - 'json_metadata': '', - 'memo_key': 'STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp', - 'new_account_name': 'fsafaasf', - 'owner': {'account_auths': [], - 'key_auths': [['STM5jYVokmZHdEpwo5oCG3ES2Ca4VYzy6tM8pWWkGdgVnwo2mFLFq', - 1], [ - 'STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp', - 1]], - 'weight_threshold': 1}, - 'active': {'account_auths': [], - 'key_auths': [['STM6pbVDAjRFiw6fkiKYCrkz7PFeL7XNAfefrsREwg8MKpJ9VYV9x', - 1], [ - 'STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp', - 1]], - 'weight_threshold': 1}, - 'posting': {'account_auths': [], - 'key_auths': [['STM8CemMDjdUWSV5wKotEimhK6c4dY7p2PdzC2qM1HpAP8aLtZfE7', - 1], [ - 'STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp', - 1], [ - 'STM6pbVDAjRFiw6fkiKYCrkz7PFeL7XNAfefrsREwg8MKpJ9VYV9x', - 1 - ]], - 'weight_threshold': 1}} - ) + **{ + 'creator': + 'xeroc', + 'fee': + '10.000 STEEM', + 'json_metadata': + '', + 'memo_key': + 'STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp', + 'new_account_name': + 'fsafaasf', + 'owner': { + 'account_auths': [], + 'key_auths': [[ + 'STM5jYVokmZHdEpwo5oCG3ES2Ca4VYz' + 'y6tM8pWWkGdgVnwo2mFLFq', 1 + ], [ + 'STM6zLNtyFVToBsBZDsgMhgjpwysYVb' + 'sQD6YhP3kRkQhANUB4w7Qp', 1 + ]], + 'weight_threshold': + 1 + }, + 'active': { + 'account_auths': [], + 'key_auths': [[ + 'STM6pbVDAjRFiw6fkiKYCrkz7PFeL7' + 'XNAfefrsREwg8MKpJ9VYV9x', 1 + ], [ + 'STM6zLNtyFVToBsBZDsgMhgjpwysYV' + 'bsQD6YhP3kRkQhANUB4w7Qp', 1 + ]], + 'weight_threshold': + 1 + }, + 'posting': { + 'account_auths': [], + 'key_auths': [[ + 'STM8CemMDjdUWSV5wKotEimhK6c4d' + 'Y7p2PdzC2qM1HpAP8aLtZfE7', 1 + ], [ + 'STM6zLNtyFVToBsBZDsgMhgjpwys' + 'YVbsQD6YhP3kRkQhANUB4w7Qp', 1 + ], [ + 'STM6pbVDAjRFiw6fkiKYCrkz7PFeL' + '7XNAfefrsREwg8MKpJ9VYV9x', 1 + ]], + 'weight_threshold': + 1 + } + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c804570109102700000000000003535445454d000" "0057865726f63086673616661617366010000000002026f6231b8ed" @@ -131,23 +157,21 @@ def test_create_account(self): self.assertEqual(compare[:-130], tx_wire[:-130]) def test_Transfer(self): - op = operations.Transfer( - **{"from": "foo", - "to": "baar", - "amount": "111.110 STEEM", - "memo": "Fooo" - } - ) + op = operations.Transfer(**{ + "from": "foo", + "to": "baar", + "amount": "111.110 STEEM", + "memo": "Fooo" + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010203666f6f046261617206b201000000" "000003535445454d000004466f6f6f00012025416c234dd5ff15d8" @@ -157,22 +181,20 @@ def test_Transfer(self): self.assertEqual(compare[:-130], tx_wire[:-130]) def test_Transfer_to_vesting(self): - op = operations.TransferToVesting( - **{"from": "foo", - "to": "baar", - "amount": "111.110 STEEM", - } - ) + op = operations.TransferToVesting(**{ + "from": "foo", + "to": "baar", + "amount": "111.110 STEEM", + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010303666f6f046261617206b201000000" "000003535445454d00000001203a34cd45fb4a2585514614be2c1" @@ -181,25 +203,25 @@ def test_Transfer_to_vesting(self): self.assertEqual(compare[:-130], tx_wire[:-130]) def test_withdraw_vesting(self): - op = operations.WithdrawVesting( - **{"account": "foo", - "vesting_shares": "100 VESTS", - } - ) + op = operations.WithdrawVesting(**{ + "account": "foo", + "vesting_shares": "100 VESTS", + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") - compare = ("f68585abf4dce7c80457010403666f6f00e1f5050000000006564553545300000" - "00120772da57b15b62780ee3d8afedd8d46ffafb8c62788eab5ce01435df99e1d3" - "6de549f260444866ff4e228cac445548060e018a872e7ee99ace324af9844f4c50a") + compare = ( + "f68585abf4dce7c80457010403666f6f00e1f5050000000006564553545300000" + "00120772da57b15b62780ee3d8afedd8d46ffafb8c62788eab5ce01435df99e1d" + "36de549f260444866ff4e228cac445548060e018a872e7ee99ace324af9844f4c" + "50a") self.assertEqual(compare[:-130], tx_wire[:-130]) def test_Transfer_to_savings(self): @@ -209,22 +231,22 @@ def test_Transfer_to_savings(self): "to": "testuser", "amount": "1.000 STEEM", "memo": "testmemo", - } - ) + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") - compare = ("f68585abf4dce7c804570120087465737475736572087465737475736572e8030000000000000353" - "5445454d000008746573746d656d6f00011f4df74457bf8824c02da6a722a7c604676c97aad1a51eb" - "cfb7086b0b7c1f19f9257388a06b3c24ae51d97c9eee5e0ecb7b6c32a29af6f56697f0c7516e70a75ce") + compare = ( + "f68585abf4dce7c804570120087465737475736572087465737475736572e8030" + "0000000000003535445454d000008746573746d656d6f00011f4df74457bf8824" + "c02da6a722a7c604676c97aad1a51ebcfb7086b0b7c1f19f9257388a06b3c24ae" + "51d97c9eee5e0ecb7b6c32a29af6f56697f0c7516e70a75ce") self.assertEqual(compare[:-130], tx_wire[:-130]) def test_Transfer_from_savings(self): @@ -235,68 +257,64 @@ def test_Transfer_from_savings(self): "to": "testser", "amount": "100.000 SBD", "memo": "memohere", - } - ) + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") - compare = ("f68585abf4dce7c804570121087465737475736572292300000774657374736" - "572a0860100000000000353424400000000086d656d6f6865726500012058760" - "45f4869b6459438019d71d25bdea461899e0a96635c05f19caf424fa1453fc1fe" - "103d9ca6470d629b9971adddf757c829bb47cc96b29662f294bebb4fb2") + compare = ( + "f68585abf4dce7c804570121087465737475736572292300000774657374736" + "572a0860100000000000353424400000000086d656d6f6865726500012058760" + "45f4869b6459438019d71d25bdea461899e0a96635c05f19caf424fa1453fc1fe" + "103d9ca6470d629b9971adddf757c829bb47cc96b29662f294bebb4fb2") self.assertEqual(compare[:-130], tx_wire[:-130]) def test_Cancel_transfer_from_savings(self): - op = operations.CancelTransferFromSavings( - **{ - "from": "tesuser", - "request_id": 9001, - } - ) + op = operations.CancelTransferFromSavings(**{ + "from": "tesuser", + "request_id": 9001, + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") - compare = ("f68585abf4dce7c8045701220774657375736572292300000001200942474f6723937b8" - "8e19fb8cade26cc97f68cb626362d0764d134fe837df5262200b5e71bec13a0673995a58" - "4a47674897e959d8c1f83389505895fb64ceda5") + compare = ( + "f68585abf4dce7c8045701220774657375736572292300000001200942474f672" + "3937b88e19fb8cade26cc97f68cb626362d0764d134fe837df5262200b5e71bec" + "13a0673995a584a47674897e959d8c1f83389505895fb64ceda5") self.assertEqual(compare[:-130], tx_wire[:-130]) def test_order_create(self): op = operations.LimitOrderCreate( - **{"owner": "", - "orderid": 0, - "amount_to_sell": "0.000 STEEM", - "min_to_receive": "0.000 STEEM", - "fill_or_kill": False, - "expiration": "2016-12-31T23:59:59" - } - ) + **{ + "owner": "", + "orderid": 0, + "amount_to_sell": "0.000 STEEM", + "min_to_receive": "0.000 STEEM", + "fill_or_kill": False, + "expiration": "2016-12-31T23:59:59" + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c8045701050000000000000000000000000003535" "445454d0000000000000000000003535445454d0000007f46685800" "011f28a2fc52dcfc19378c5977917b158dfab93e7760259aab7ecdb" @@ -306,38 +324,59 @@ def test_order_create(self): def test_account_update(self): op = operations.AccountUpdate( - **{"account": "streemian", - "posting": { - "weight_threshold": 1, - "account_auths": [["xeroc", 1], ["fabian", 1]], - "key_auths": [["STM6KChDK2sns9MwugxkoRvPEnyjuTxHN5upGsZ1EtanCffqBVVX3", 1], - ["STM7sw22HqsXbz7D2CmJfmMwt9rimtk518dRzsR1f8Cgw52dQR1pR", 1]] - }, - "owner": { - "weight_threshold": 1, - "account_auths": [], - "key_auths": [["STM7sw22HqsXbz7D2CmJfmMwt9rimtk518dRzsR1f8Cgw52dQR1pR", 1], - ["STM6KChDK2sns9MwugxkoRvPEnyjuTxHN5upGsZ1EtanCffqBVVX3", 1]] - }, - "active": { - "weight_threshold": 2, - "account_auths": [], - "key_auths": [["STM6KChDK2sns9MwugxkoRvPEnyjuTxHN5upGsZ1EtanCffqBVVX3", 1], - ["STM7sw22HqsXbz7D2CmJfmMwt9rimtk518dRzsR1f8Cgw52dQR1pR", 1]] - }, - "memo_key": "STM728uLvStTeAkYJsQefks3FX8yfmpFHp8wXw3RY3kwey2JGDooR", - "json_metadata": ""} - ) + **{ + "account": + "streemian", + "posting": { + "weight_threshold": + 1, + "account_auths": [["xeroc", 1], ["fabian", 1]], + "key_auths": [[ + "STM6KChDK2sns9MwugxkoRvPEnyju" + "TxHN5upGsZ1EtanCffqBVVX3", 1 + ], [ + "STM7sw22HqsXbz7D2CmJfmMwt9ri" + "mtk518dRzsR1f8Cgw52dQR1pR", 1 + ]] + }, + "owner": { + "weight_threshold": + 1, + "account_auths": [], + "key_auths": [[ + "STM7sw22HqsXbz7D2CmJfmMwt9r" + "imtk518dRzsR1f8Cgw52dQR1pR", 1 + ], [ + "STM6KChDK2sns9MwugxkoRvPEn" + "yjuTxHN5upGsZ1EtanCffqBVVX3", 1 + ]] + }, + "active": { + "weight_threshold": + 2, + "account_auths": [], + "key_auths": [[ + "STM6KChDK2sns9MwugxkoRvPEnyju" + "TxHN5upGsZ1EtanCffqBVVX3", 1 + ], [ + "STM7sw22HqsXbz7D2CmJfmMwt9ri" + "mtk518dRzsR1f8Cgw52dQR1pR", 1 + ]] + }, + "memo_key": + "STM728uLvStTeAkYJsQefks3FX8yfmpFHp8wXw3RY3kwey2JGDooR", + "json_metadata": + "" + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010a0973747265656d69616e01010000" "00000202bbcf38855c9ae9d55704ee50ff56552af1242266c105" "44a75b61005e17fa78a601000389d28937022880a7f0c7deaa6f" @@ -355,22 +394,43 @@ def test_account_update(self): "53fbeccb331067") self.assertEqual(compare[:-130], tx_wire[:-130]) + def test_change_recovery_account(self): + op = operations.ChangeRecoveryAccount( + **{ + "account_to_recover": "barrie", + "extensions": [], + "new_recovery_account": "boombastic" + }) + ops = [operations.Operation(op)] + tx = SignedTransaction( + ref_block_num=ref_block_num, + ref_block_prefix=ref_block_prefix, + expiration=expiration, + operations=ops) + tx = tx.sign([wif], chain=self.steem.chain_params) + + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") + + compare = ('f68585abf4dce7c80457011a066261727269650a626f6f6d6261' + '737469630000011f5513c021e89be2c4d8a725dc9b89334ffcde' + '6a9535487f4b6d42f93de1722c251fd9d4ec414335dc41ea081a' + 'a7a4d27b179b1a07d3415f7e0a6190852b86ecde') + self.assertEqual(compare[:-130], tx_wire[:-130]) + def test_order_cancel(self): - op = operations.LimitOrderCancel( - **{"owner": "", - "orderid": 2141244, - } - ) + op = operations.LimitOrderCancel(**{ + "owner": "", + "orderid": 2141244, + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c804570106003cac20000001206c9888d0c2c3" "1dba1302566f524dfac01a15760b93a8726241a7ae6ba00edfd" "e5b83edaf94a4bd35c2957ded6023576dcbe936338fb9d340e2" @@ -379,22 +439,21 @@ def test_order_cancel(self): def test_set_route(self): op = operations.SetWithdrawVestingRoute( - **{"from_account": "xeroc", - "to_account": "xeroc", - "percent": 1000, - "auto_vest": False - } - ) + **{ + "from_account": "xeroc", + "to_account": "xeroc", + "percent": 1000, + "auto_vest": False + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c804570114057865726f63057865726f63e803" "0000011f12d2b8f93f9528f31979e0e1f59a6d45346a88c02ab2" "c4115b10c9e273fc1e99621af0c2188598c84762b7e99ca63f6b" @@ -402,21 +461,20 @@ def test_set_route(self): self.assertEqual(compare[:-130], tx_wire[:-130]) def test_convert(self): - op = operations.Convert( - **{"owner": "xeroc", - "requestid": 2342343235, - "amount": "100.000 SBD"} - ) + op = operations.Convert(**{ + "owner": "xeroc", + "requestid": 2342343235, + "amount": "100.000 SBD" + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c804570108057865726f6343529d8ba0860100000" "00000035342440000000000011f3d22eb66e5cddcc90f5d6ca0bd7a" "43e0ab811ecd480022af8a847c45eac720b342188d55643d8cb1711" @@ -425,24 +483,24 @@ def test_convert(self): def test_utf8tests(self): op = operations.Comment( - **{"parent_author": "", - "parent_permlink": "", - "author": "a", - "permlink": "a", - "title": "-", - "body": "".join([chr(i) for i in range(0, 2048)]), - "json_metadata": {}} - ) + **{ + "parent_author": "", + "parent_permlink": "", + "author": "a", + "permlink": "a", + "title": "-", + "body": "".join([compat_chr(i) for i in range(0, 2048)]), + "json_metadata": {} + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c804570101000001610161012dec1f75303030307" "5303030317530303032753030303375303030347530303035753030" "3036753030303762090a7530303062660d753030306575303030667" @@ -599,18 +657,21 @@ def test_utf8tests(self): def test_feed_publish(self): op = operations.FeedPublish( - **{"publisher": "xeroc", - "exchange_rate": {"base": "1.000 SBD", - "quote": "4.123 STEEM"}}) + **{ + "publisher": "xeroc", + "exchange_rate": { + "base": "1.000 SBD", + "quote": "4.123 STEEM" + } + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c804570107057865726f63e803000000000" "00003534244000000001b1000000000000003535445454d00" "000001203847a02aa76964cacfb41565c23286cc64b18f6bb" @@ -620,24 +681,29 @@ def test_feed_publish(self): def test_witness_update(self): op = operations.WitnessUpdate( - **{"owner": "xeroc", - "url": "foooobar", - "block_signing_key": "STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp", - "props": {"account_creation_fee": "10.000 STEEM", - "maximum_block_size": 1111111, - "sbd_interest_rate": 1000}, - "fee": "10.000 STEEM", - } - ) + **{ + "owner": + "xeroc", + "url": + "foooobar", + "block_signing_key": + "STM6zLNtyFVToBsBZDsgMhgjpwysYVbsQD6YhP3kRkQhANUB4w7Qp", + "props": { + "account_creation_fee": "10.000 STEEM", + "maximum_block_size": 1111111, + "sbd_interest_rate": 1000 + }, + "fee": + "10.000 STEEM", + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010b057865726f6308666f6f6f6f6261" "720314aa202c9158990b3ec51a1aa49b2ab5d300c97b391df3be" "b34bb74f3c62699e102700000000000003535445454d000047f4" @@ -647,22 +713,46 @@ def test_witness_update(self): "b9f2405478badadb4c") self.assertEqual(compare[:-130], tx_wire[:-130]) + def test_witness_set_properties(self): + op = operations.WitnessSetProperties(**{ + "owner": "init-1", + "props": [ + ["account_creation_fee", "d0070000000000000354455354530000"], + ["key", ("032d2a4af3e23294e0a1d9dbc46e0272d" + "8e1977ce2ae3349527cc90fe1cc9c5db9")] + ] + }) + ops = [operations.Operation(op)] + tx = SignedTransaction( + ref_block_num=ref_block_num, + ref_block_prefix=ref_block_prefix, + expiration=expiration, + operations=ops) + tx = tx.sign([wif], chain=self.steem.chain_params) + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") + compare = ("f68585abf4dce7c80457012a06696e69742d3102146163636f75" + "6e745f6372656174696f6e5f66656510d0070000000000000354" + "455354530000036b657921032d2a4af3e23294e0a1d9dbc46e02" + "72d8e1977ce2ae3349527cc90fe1cc9c5db90000011f7797b8f7" + "3e03c04d603512f278aeceb5f76de1d0c527052886df806badb0" + "e41f55a8321abc6431c38130cc789b992e6c79ed4d403eb5906d" + "5af6d3b83626a3e7") + self.assertEqual(compare[:-130], tx_wire[:-130]) + def test_witness_vote(self): - op = operations.AccountWitnessVote( - **{"account": "xeroc", - "witness": "chainsquad", - "approve": True, - } - ) + op = operations.AccountWitnessVote(**{ + "account": "xeroc", + "witness": "chainsquad", + "approve": True, + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") compare = ("f68585abf4dce7c80457010c057865726f630a636" "861696e73717561640100011f16b43411e11f4739" "4c1624a3c4d3cf4daba700b8690f494e6add7ad9b" @@ -672,76 +762,77 @@ def test_witness_vote(self): def test_custom_json(self): op = operations.CustomJson( - **{"json": ["reblog", - OrderedDict([ # need an ordered dict to keep order for the test - ("account", "xeroc"), - ("author", "chainsquad"), - ("permlink", "streemian-com-to-open-its-doors-and-offer-a-20-discount") - ])], - "required_auths": [], - "required_posting_auths": ["xeroc"], - "id": "follow" - } - ) + **{ + "json": [ + "reblog", + OrderedDict( + [ # need an ordered dict to keep order for the test + ("account", "xeroc"), ("author", "chainsquad"), ( + "permlink", "streemian-com-to-open-its-doors-" + "and-offer-a-20-discount") + ]) + ], + "required_auths": [], + "required_posting_auths": ["xeroc"], + "id": + "follow" + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") - compare = ( - "f68585abf4dce7c8045701120001057865726f6306666f6c6c" - "6f777f5b227265626c6f67222c207b226163636f756e74223a" - "20227865726f63222c2022617574686f72223a202263686169" - "6e7371756164222c20227065726d6c696e6b223a2022737472" - "65656d69616e2d636f6d2d746f2d6f70656e2d6974732d646f" - "6f72732d616e642d6f666665722d612d32302d646973636f75" - "6e74227d5d00011f0cffad16cfd8ea4b84c06d412e93a9fc10" - "0bf2fac5f9a40d37d5773deef048217db79cabbf15ef29452d" - "e4ed1c5face51d998348188d66eb9fc1ccef79a0c0d4" - ) + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") + compare = ("f68585abf4dce7c8045701120001057865726f6306666f6c6c" + "6f777f5b227265626c6f67222c207b226163636f756e74223a" + "20227865726f63222c2022617574686f72223a202263686169" + "6e7371756164222c20227065726d6c696e6b223a2022737472" + "65656d69616e2d636f6d2d746f2d6f70656e2d6974732d646f" + "6f72732d616e642d6f666665722d612d32302d646973636f75" + "6e74227d5d00011f0cffad16cfd8ea4b84c06d412e93a9fc10" + "0bf2fac5f9a40d37d5773deef048217db79cabbf15ef29452d" + "e4ed1c5face51d998348188d66eb9fc1ccef79a0c0d4") self.assertEqual(compare[:-130], tx_wire[:-130]) def test_comment_options(self): op = operations.CommentOptions( **{ - "author": "xeroc", - "permlink": "piston", - "max_accepted_payout": "1000000.000 SBD", - "percent_steem_dollars": 10000, - "allow_votes": True, - "allow_curation_rewards": True, - "beneficiaries": [ - { - "weight": 2000, - "account": "good-karma" - }, - { - "weight": 5000, - "account": "null" - }], - } - ) + "author": + "xeroc", + "permlink": + "piston", + "max_accepted_payout": + "1000000.000 SBD", + "percent_steem_dollars": + 10000, + "allow_votes": + True, + "allow_curation_rewards": + True, + "beneficiaries": [{ + "weight": 2000, + "account": "good-karma" + }, { + "weight": 5000, + "account": "null" + }], + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - txWire = hexlify(bytes(tx)).decode("ascii") - compare = ( - "f68585abf4dce7c804570113057865726f6306706973746f6e" - "00ca9a3b000000000353424400000000102701010100020a67" - "6f6f642d6b61726d61d007046e756c6c881300011f59634e65" - "55fec7c01cb7d4921601c37c250c6746022cc35eaefdd90405" - "d7771b2f65b44e97b7f3159a6d52cb20640502d2503437215f" - "0907b2e2213940f34f2c" - ) + txWire = hexlify(compat_bytes(tx)).decode("ascii") + compare = ("f68585abf4dce7c804570113057865726f6306706973746f6e" + "00ca9a3b000000000353424400000000102701010100020a67" + "6f6f642d6b61726d61d007046e756c6c881300011f59634e65" + "55fec7c01cb7d4921601c37c250c6746022cc35eaefdd90405" + "d7771b2f65b44e97b7f3159a6d52cb20640502d2503437215f" + "0907b2e2213940f34f2c") self.assertEqual(compare[:-130], txWire[:-130]) def compareConstructedTX(self): @@ -756,30 +847,20 @@ def compareConstructedTX(self): "allow_votes": True, "allow_curation_rewards": True, "extensions": [] - } - ) + }) ops = [operations.Operation(op)] tx = SignedTransaction( ref_block_num=ref_block_num, ref_block_prefix=ref_block_prefix, expiration=expiration, - operations=ops - ) + operations=ops) tx = tx.sign([wif], chain=self.steem.chain_params) - tx_wire = hexlify(bytes(tx)).decode("ascii") + tx_wire = hexlify(compat_bytes(tx)).decode("ascii") # todo rpc = self.steem.commit.wallet compare = rpc.serialize_transaction(tx.json()) - pprint(tx.json()) - - print("\n") - print(compare[:-130]) - print(tx_wire[:-130]) - print("\n") - - print(tx_wire[:-130] == compare[:-130]) self.assertEqual(compare[:-130], tx_wire[:-130]) diff --git a/tests/steem/test_utils.py b/tests/steem/test_utils.py index 7e3442f..b6b3016 100644 --- a/tests/steem/test_utils.py +++ b/tests/steem/test_utils.py @@ -11,7 +11,7 @@ class Testcases(unittest.TestCase): def test_constructIdentifier(self): - self.assertEqual(construct_identifier("A", "B"), "@A/B") + self.assertEqual(construct_identifier("A", "B"), "A/B") def test_sanitizePermlink(self): self.assertEqual(sanitize_permlink("aAf_0.12"), "aaf-0-12") @@ -23,7 +23,7 @@ def test_derivePermlink(self): self.assertEqual(derive_permlink("[](){}"), "") def test_resolveIdentifier(self): - self.assertEqual(resolve_identifier("@A/B"), ("A", "B")) + self.assertEqual(resolve_identifier("A/B"), ("A", "B")) def test_formatTime(self): self.assertEqual(fmt_time(1463480746), "20160517t102546") diff --git a/tests/steembase/test_base58.py b/tests/steembase/test_base58.py index 30955bf..61cf0ef 100644 --- a/tests/steembase/test_base58.py +++ b/tests/steembase/test_base58.py @@ -1,117 +1,171 @@ import unittest - -from steembase.base58 import ( - Base58, - base58decode, - base58encode, - base58CheckEncode, - base58CheckDecode, - gphBase58CheckEncode, - gphBase58CheckDecode) +import re +from steembase.base58 import (Base58, base58decode, base58encode, + base58CheckEncode, base58CheckDecode, + gphBase58CheckEncode, gphBase58CheckDecode) class Testcases(unittest.TestCase): def test_base58decode(self): - self.assertEqual([base58decode('5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'), - base58decode('5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss'), - base58decode('5KfazyjBBtR2YeHjNqX5D6MXvqTUd2iZmWusrdDSUqoykTyWQZB')], - ['800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d', - '80e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8555c5bbb26', - '80f3a375e00cc5147f30bee97bb5d54b31a12eee148a1ac31ac9edc4ecd13bc1f80cc8148e']) + self.assertEqual([ + base58decode( + '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ'), + base58decode( + '5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss'), + base58decode('5KfazyjBBtR2YeHjNqX5D6MXvqTUd2iZmWusrdDSUqoykTyWQZB') + ], [ + '800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e' + '19d72aa1d507a5b8d', + '80e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991' + 'b7852b8555c5bbb26', + '80f3a375e00cc5147f30bee97bb5d54b31a12eee148a1ac31ac9edc4e' + 'cd13bc1f80cc8148e' + ]) def test_base58encode(self): - self.assertEqual(['5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ', - '5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss', - '5KfazyjBBtR2YeHjNqX5D6MXvqTUd2iZmWusrdDSUqoykTyWQZB'], - [base58encode('800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d507a5b8d'), - base58encode('80e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8555c5bbb26'), - base58encode('80f3a375e00cc5147f30bee97bb5d54b31a12eee148a1ac31ac9edc4ecd13bc1f80cc8148e')]) + self.assertEqual([ + '5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ', + '5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss', + '5KfazyjBBtR2YeHjNqX5D6MXvqTUd2iZmWusrdDSUqoykTyWQZB' + ], [ + base58encode('800c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe47' + '1be89827e19d72aa1d507a5b8d'), + base58encode('80e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b93' + '4ca495991b7852b8555c5bbb26'), + base58encode('80f3a375e00cc5147f30bee97bb5d54b31a12eee148a1ac3' + '1ac9edc4ecd13bc1f80cc8148e') + ]) def test_gphBase58CheckEncode(self): - self.assertEqual([gphBase58CheckEncode("02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680"), - gphBase58CheckEncode("021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16"), - gphBase58CheckEncode("02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a"), - gphBase58CheckEncode("03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3")], - ["6dumtt9swxCqwdPZBGXh9YmHoEjFFnNfwHaTqRbQTghGAY2gRz", - "5725vivYpuFWbeyTifZ5KevnHyqXCi5hwHbNU9cYz1FHbFXCxX", - "6kZKHSuxqAwdCYsMvwTcipoTsNE2jmEUNBQufGYywpniBKXWZK", - "8b82mpnH8YX1E9RHnU2a2YgLTZ8ooevEGP9N15c1yFqhoBvJur"]) + self.assertEqual([ + gphBase58CheckEncode( + "02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9" + "392dcd9b82263bc680"), + gphBase58CheckEncode( + "021c7359cd885c0e319924d97e3980206ad64387aff54908" + "241125b3a88b55ca16"), + gphBase58CheckEncode( + "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15f" + "a68a644ecb0806b49a"), + gphBase58CheckEncode( + "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d" + "09307a0cc4a564eba3") + ], [ + "6dumtt9swxCqwdPZBGXh9YmHoEjFFnNfwHaTqRbQTghGAY2gRz", + "5725vivYpuFWbeyTifZ5KevnHyqXCi5hwHbNU9cYz1FHbFXCxX", + "6kZKHSuxqAwdCYsMvwTcipoTsNE2jmEUNBQufGYywpniBKXWZK", + "8b82mpnH8YX1E9RHnU2a2YgLTZ8ooevEGP9N15c1yFqhoBvJur" + ]) def test_gphBase58CheckDecode(self): - self.assertEqual(["02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680", - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16", - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a", - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3"], - [gphBase58CheckDecode("6dumtt9swxCqwdPZBGXh9YmHoEjFFnNfwHaTqRbQTghGAY2gRz"), - gphBase58CheckDecode("5725vivYpuFWbeyTifZ5KevnHyqXCi5hwHbNU9cYz1FHbFXCxX"), - gphBase58CheckDecode("6kZKHSuxqAwdCYsMvwTcipoTsNE2jmEUNBQufGYywpniBKXWZK"), - gphBase58CheckDecode("8b82mpnH8YX1E9RHnU2a2YgLTZ8ooevEGP9N15c1yFqhoBvJur")]) + self.assertEqual([ + "02e649f63f8e8121345fd7f47d0d185a3ccaa84311" + "5cd2e9392dcd9b82263bc680", + "021c7359cd885c0e319924d97e3980206ad64387af" + "f54908241125b3a88b55ca16", + "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83" + "d5d15fa68a644ecb0806b49a", + "03e7595c3e6b58f907bee951dc29796f3757307e70" + "0ecf3d09307a0cc4a564eba3", + ], [ + gphBase58CheckDecode( + "6dumtt9swxCqwdPZBGXh9YmHoEjFFnNfwHaTqRbQTghGAY2gRz"), + gphBase58CheckDecode( + "5725vivYpuFWbeyTifZ5KevnHyqXCi5hwHbNU9cYz1FHbFXCxX"), + gphBase58CheckDecode( + "6kZKHSuxqAwdCYsMvwTcipoTsNE2jmEUNBQufGYywpniBKXWZK"), + gphBase58CheckDecode( + "8b82mpnH8YX1E9RHnU2a2YgLTZ8ooevEGP9N15c1yFqhoBvJur") + ]) def test_btsb58(self): - self.assertEqual(["02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680", - "03457298c4b2c56a8d572c051ca3109dabfe360beb144738180d6c964068ea3e58", - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16", - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a", - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3"], - [gphBase58CheckDecode(gphBase58CheckEncode( - "02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680")), - gphBase58CheckDecode(gphBase58CheckEncode( - "03457298c4b2c56a8d572c051ca3109dabfe360beb144738180d6c964068ea3e58")), - gphBase58CheckDecode(gphBase58CheckEncode( - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16")), - gphBase58CheckDecode(gphBase58CheckEncode( - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a")), - gphBase58CheckDecode(gphBase58CheckEncode( - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3"))]) + ml = """ + 02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680 + 03457298c4b2c56a8d572c051ca3109dabfe360beb144738180d6c964068ea3e58 + 021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16 + 02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a + 03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3""" + + for x in re.split('\s+', ml): + self.assertEqual(x, gphBase58CheckDecode(gphBase58CheckEncode(x))) def test_Base58CheckDecode(self): - self.assertEqual(["02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680", - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16", - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a", - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3", - "02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49", - "5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131", - "0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e", - "6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e", - "b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8"], - [base58CheckDecode("KwKM6S22ZZDYw5dxBFhaRyFtcuWjaoxqDDfyCcBYSevnjdfm9Cjo"), - base58CheckDecode("KwHpCk3sLE6VykHymAEyTMRznQ1Uh5ukvFfyDWpGToT7Hf5jzrie"), - base58CheckDecode("KwKTjyQbKe6mfrtsf4TFMtqAf5as5bSp526s341PQEQvq5ZzEo5W"), - base58CheckDecode("KwMJJgtyBxQ9FEvUCzJmvr8tXxB3zNWhkn14mWMCTGSMt5GwGLgz"), - base58CheckDecode("5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd"), - base58CheckDecode("5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S"), - base58CheckDecode("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq"), - base58CheckDecode("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R"), - base58CheckDecode("5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7")]) + self.assertEqual([ + "02e649f63f8e8121345fd7f47d0d185a3ccaa84" + "3115cd2e9392dcd9b82263bc680", + "021c7359cd885c0e319924d97e3980206ad6438" + "7aff54908241125b3a88b55ca16", + "02f561e0b57a552df3fa1df2d87a906b7a9fc33" + "a83d5d15fa68a644ecb0806b49a", + "03e7595c3e6b58f907bee951dc29796f3757307" + "e700ecf3d09307a0cc4a564eba3", + "02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49", + "5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131", + "0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e", + "6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e", + "b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8" + ], [ + base58CheckDecode( + "KwKM6S22ZZDYw5dxBFhaRyFtcuWjaoxqDDfyCcBYSevnjdfm9Cjo"), + base58CheckDecode( + "KwHpCk3sLE6VykHymAEyTMRznQ1Uh5ukvFfyDWpGToT7Hf5jzrie"), + base58CheckDecode( + "KwKTjyQbKe6mfrtsf4TFMtqAf5as5bSp526s341PQEQvq5ZzEo5W"), + base58CheckDecode( + "KwMJJgtyBxQ9FEvUCzJmvr8tXxB3zNWhkn14mWMCTGSMt5GwGLgz"), + base58CheckDecode( + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd"), + base58CheckDecode( + "5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S"), + base58CheckDecode( + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq"), + base58CheckDecode( + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R"), + base58CheckDecode( + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7") + ]) + + def test_base58CheckEncodeDecode(self): + ml = """ + 02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680 + 03457298c4b2c56a8d572c051ca3109dabfe360beb144738180d6c964068ea3e58 + 021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16 + 02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a + 03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3 + """ - def test_base58CheckEncodeDecopde(self): - self.assertEqual(["02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680", - "03457298c4b2c56a8d572c051ca3109dabfe360beb144738180d6c964068ea3e58", - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16", - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a", - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3"], - [base58CheckDecode(base58CheckEncode(0x80, - "02e649f63f8e8121345fd7f47d0d185a3ccaa843115cd2e9392dcd9b82263bc680")), - base58CheckDecode(base58CheckEncode(0x80, - "03457298c4b2c56a8d572c051ca3109dabfe360beb144738180d6c964068ea3e58")), - base58CheckDecode(base58CheckEncode(0x80, - "021c7359cd885c0e319924d97e3980206ad64387aff54908241125b3a88b55ca16")), - base58CheckDecode(base58CheckEncode(0x80, - "02f561e0b57a552df3fa1df2d87a906b7a9fc33a83d5d15fa68a644ecb0806b49a")), - base58CheckDecode(base58CheckEncode(0x80, - "03e7595c3e6b58f907bee951dc29796f3757307e700ecf3d09307a0cc4a564eba3"))]) + for x in re.split('\s+', ml): + self.assertEqual(x, base58CheckDecode(base58CheckEncode(0x80, x))) def test_Base58(self): - self.assertEqual([format(Base58("02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49"), "wif"), - format(Base58("5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131"), "wif"), - format(Base58("0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e"), "wif"), - format(Base58("6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e"), "wif"), - format(Base58("b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8"), "wif")], - ["5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", - "5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S", - "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq", - "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R", - "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7"]) + self.assertEqual([ + format( + Base58( + "02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda865076619" + "01adb49"), "wif"), + format( + Base58( + "5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c8556" + "8f19131"), "wif"), + format( + Base58( + "0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e" + "74ec00e"), "wif"), + format( + Base58( + "6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855" + "d919d3e"), "wif"), + format( + Base58( + "b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e" + "9ad69d8"), "wif") + ], [ + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", + "5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S", + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq", + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R", + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7" + ]) if __name__ == '__main__': diff --git a/tests/steembase/test_base_account.py b/tests/steembase/test_base_account.py index acf1867..f79f7d6 100644 --- a/tests/steembase/test_base_account.py +++ b/tests/steembase/test_base_account.py @@ -1,195 +1,346 @@ import unittest from steembase.base58 import Base58 -from steembase.account import BrainKey, Address, PublicKey, PrivateKey, PasswordKey +from steembase.account import BrainKey, Address, PublicKey, \ + PrivateKey, PasswordKey class Testcases(unittest.TestCase): def test_B85hexgetb58_btc(self): - self.assertEqual(["5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", - "5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S", - "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq", - "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R", - "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7", - "02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49", - "5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131", - "0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e", - "6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e", - ], - [format(Base58("02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49"), "WIF"), - format(Base58("5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131"), "WIF"), - format(Base58("0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e"), "WIF"), - format(Base58("6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e"), "WIF"), - format(Base58("b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8"), "WIF"), - repr(Base58("5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd")), - repr(Base58("5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S")), - repr(Base58("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq")), - repr(Base58("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R")), - ]) + self.assertEqual([ + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", + "5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S", + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq", + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R", + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7", + "02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49", + "5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131", + "0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e", + "6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e", + ], [ + format( + Base58( + "02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda8650766" + "1901adb49"), "WIF"), + format( + Base58( + "5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85" + "568f19131"), "WIF"), + format( + Base58( + "0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea" + "4e74ec00e"), "WIF"), + format( + Base58( + "6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae68" + "55d919d3e"), "WIF"), + format( + Base58( + "b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c39519666676" + "2e9ad69d8"), "WIF"), + repr( + Base58("5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd")), + repr( + Base58("5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S")), + repr( + Base58("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq")), + repr( + Base58("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R")), + ]) def test_B85hexgetb58(self): - self.assertEqual(['BTS2CAbTi1ZcgMJ5otBFZSGZJKJenwGa9NvkLxsrS49Kr8JsiSGc', - 'BTShL45FEyUVSVV1LXABQnh4joS9FsUaffRtsdarB5uZjPsrwMZF', - 'BTS7DQR5GsfVaw4wJXzA3TogDhuQ8tUR2Ggj8pwyNCJXheHehL4Q', - 'BTSqc4QMAJHAkna65i8U4b7nkbWk4VYSWpZebW7JBbD7MN8FB5sc', - 'BTS2QAVTJnJQvLUY4RDrtxzX9jS39gEq8gbqYMWjgMxvsvZTJxDSu' - ], - [format(Base58("02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda86507661901adb49"), "BTS"), - format(Base58("5b921f7051be5e13e177a0253229903c40493df410ae04f4a450c85568f19131"), "BTS"), - format(Base58("0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e"), "BTS"), - format(Base58("6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e"), "BTS"), - format(Base58("b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8"), "BTS")]) + self.assertEqual([ + 'BTS2CAbTi1ZcgMJ5otBFZSGZJKJenwGa9NvkLxsrS49Kr8JsiSGc', + 'BTShL45FEyUVSVV1LXABQnh4joS9FsUaffRtsdarB5uZjPsrwMZF', + 'BTS7DQR5GsfVaw4wJXzA3TogDhuQ8tUR2Ggj8pwyNCJXheHehL4Q', + 'BTSqc4QMAJHAkna65i8U4b7nkbWk4VYSWpZebW7JBbD7MN8FB5sc', + 'BTS2QAVTJnJQvLUY4RDrtxzX9jS39gEq8gbqYMWjgMxvsvZTJxDSu' + ], [ + format( + Base58("02b52e04a0acfe611a4b6963462aca94b6ae02b24e321eda865" + "07661901adb49"), "BTS"), + format( + Base58("5b921f7051be5e13e177a0253229903c40493df410ae04f4a45" + "0c85568f19131"), "BTS"), + format( + Base58("0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7" + "e4ea4e74ec00e"), "BTS"), + format( + Base58("6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648a" + "ae6855d919d3e"), "BTS"), + format( + Base58("b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c3951966" + "66762e9ad69d8"), "BTS") + ]) def test_Address(self): - self.assertEqual([format(Address("BTSFN9r6VYzBK8EKtMewfNbfiGCr56pHDBFi", prefix="BTS"), "BTS"), - format(Address("BTSdXrrTXimLb6TEt3nHnePwFmBT6Cck112", prefix="BTS"), "BTS"), - format(Address("BTSJQUAt4gz4civ8gSs5srTK4r82F7HvpChk", prefix="BTS"), "BTS"), - format(Address("BTSFPXXHXXGbyTBwdKoJaAPXRnhFNtTRS4EL", prefix="BTS"), "BTS"), - format(Address("BTS3qXyZnjJneeAddgNDYNYXbF7ARZrRv5dr", prefix="BTS"), "BTS"), - ], - ["BTSFN9r6VYzBK8EKtMewfNbfiGCr56pHDBFi", - "BTSdXrrTXimLb6TEt3nHnePwFmBT6Cck112", - "BTSJQUAt4gz4civ8gSs5srTK4r82F7HvpChk", - "BTSFPXXHXXGbyTBwdKoJaAPXRnhFNtTRS4EL", - "BTS3qXyZnjJneeAddgNDYNYXbF7ARZrRv5dr", - ]) + self.assertEqual([ + format( + Address("BTSFN9r6VYzBK8EKtMewfNbfiGCr56pHDBFi", prefix="BTS"), + "BTS"), + format( + Address("BTSdXrrTXimLb6TEt3nHnePwFmBT6Cck112", prefix="BTS"), + "BTS"), + format( + Address("BTSJQUAt4gz4civ8gSs5srTK4r82F7HvpChk", prefix="BTS"), + "BTS"), + format( + Address("BTSFPXXHXXGbyTBwdKoJaAPXRnhFNtTRS4EL", prefix="BTS"), + "BTS"), + format( + Address("BTS3qXyZnjJneeAddgNDYNYXbF7ARZrRv5dr", prefix="BTS"), + "BTS"), + ], [ + "BTSFN9r6VYzBK8EKtMewfNbfiGCr56pHDBFi", + "BTSdXrrTXimLb6TEt3nHnePwFmBT6Cck112", + "BTSJQUAt4gz4civ8gSs5srTK4r82F7HvpChk", + "BTSFPXXHXXGbyTBwdKoJaAPXRnhFNtTRS4EL", + "BTS3qXyZnjJneeAddgNDYNYXbF7ARZrRv5dr", + ]) def test_PubKey(self): - self.assertEqual([format(PublicKey("BTS6UtYWWs3rkZGV8JA86qrgkG6tyFksgECefKE1MiH4HkLD8PFGL", prefix="BTS").address, "BTS"), - format(PublicKey("BTS8YAMLtNcnqGNd3fx28NP3WoyuqNtzxXpwXTkZjbfe9scBmSyGT", prefix="BTS").address, "BTS"), - format(PublicKey("BTS7HUo6bm7Gfoi3RqAtzwZ83BFCwiCZ4tp37oZjtWxGEBJVzVVGw", prefix="BTS").address, "BTS"), - format(PublicKey("BTS6676cZ9qmqPnWMrm4McjCuHcnt6QW5d8oRJ4t8EDH8DdCjvh4V", prefix="BTS").address, "BTS"), - format(PublicKey("BTS7u8m6zUNuzPNK1tPPLtnipxgqV9mVmTzrFNJ9GvovvSTCkVUra", prefix="BTS").address, "BTS") - ], - ["BTS66FCjYKzMwLbE3a59YpmFqA9bwporT4L3", - "BTSKNpRuPX8KhTBsJoFp1JXd7eQEsnCpRw3k", - "BTS838ENJargbUrxXWuE2xD9HKjQaS17GdCd", - "BTSNsrLFWTziSZASnNJjWafFtGBfSu8VG8KU", - "BTSDjAGuXzk3WXabBEgKKc8NsuQM412boBdR" - ]) + self.assertEqual([ + format( + PublicKey( + "BTS6UtYWWs3rkZGV8JA86qrgkG6tyFksgECefKE1MiH4HkLD8PFGL", + prefix="BTS").address, "BTS"), + format( + PublicKey( + "BTS8YAMLtNcnqGNd3fx28NP3WoyuqNtzxXpwXTkZjbfe9scBmSyGT", + prefix="BTS").address, "BTS"), + format( + PublicKey( + "BTS7HUo6bm7Gfoi3RqAtzwZ83BFCwiCZ4tp37oZjtWxGEBJVzVVGw", + prefix="BTS").address, "BTS"), + format( + PublicKey( + "BTS6676cZ9qmqPnWMrm4McjCuHcnt6QW5d8oRJ4t8EDH8DdCjvh4V", + prefix="BTS").address, "BTS"), + format( + PublicKey( + "BTS7u8m6zUNuzPNK1tPPLtnipxgqV9mVmTzrFNJ9GvovvSTCkVUra", + prefix="BTS").address, "BTS") + ], [ + "BTS66FCjYKzMwLbE3a59YpmFqA9bwporT4L3", + "BTSKNpRuPX8KhTBsJoFp1JXd7eQEsnCpRw3k", + "BTS838ENJargbUrxXWuE2xD9HKjQaS17GdCd", + "BTSNsrLFWTziSZASnNJjWafFtGBfSu8VG8KU", + "BTSDjAGuXzk3WXabBEgKKc8NsuQM412boBdR" + ]) def test_btsprivkey(self): - self.assertEqual([format(PrivateKey("5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd").address, "BTS"), - format(PrivateKey("5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S").address, "BTS"), - format(PrivateKey("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq").address, "BTS"), - format(PrivateKey("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R").address, "BTS"), - format(PrivateKey("5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7").address, "BTS") - ], - ["BTSFN9r6VYzBK8EKtMewfNbfiGCr56pHDBFi", - "BTSdXrrTXimLb6TEt3nHnePwFmBT6Cck112", - "BTSJQUAt4gz4civ8gSs5srTK4r82F7HvpChk", - "BTSFPXXHXXGbyTBwdKoJaAPXRnhFNtTRS4EL", - "BTS3qXyZnjJneeAddgNDYNYXbF7ARZrRv5dr", - ]) + self.assertEqual([ + format( + PrivateKey( + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd") + .address, "BTS"), + format( + PrivateKey( + "5JWcdkhL3w4RkVPcZMdJsjos22yB5cSkPExerktvKnRNZR5gx1S") + .address, "BTS"), + format( + PrivateKey( + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq") + .address, "BTS"), + format( + PrivateKey( + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R") + .address, "BTS"), + format( + PrivateKey( + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7") + .address, "BTS") + ], [ + "BTSFN9r6VYzBK8EKtMewfNbfiGCr56pHDBFi", + "BTSdXrrTXimLb6TEt3nHnePwFmBT6Cck112", + "BTSJQUAt4gz4civ8gSs5srTK4r82F7HvpChk", + "BTSFPXXHXXGbyTBwdKoJaAPXRnhFNtTRS4EL", + "BTS3qXyZnjJneeAddgNDYNYXbF7ARZrRv5dr", + ]) def test_btcprivkey(self): - self.assertEqual([format(PrivateKey("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq").uncompressed.address, "BTC"), - format(PrivateKey("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R").uncompressed.address, "BTC"), - format(PrivateKey("5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7").uncompressed.address, "BTC"), - ], - ["1G7qw8FiVfHEFrSt3tDi6YgfAdrDrEM44Z", - "12c7KAAZfpREaQZuvjC5EhpoN6si9vekqK", - "1Gu5191CVHmaoU3Zz3prept87jjnpFDrXL", - ]) + self.assertEqual([ + format( + PrivateKey( + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq") + .uncompressed.address, "BTC"), + format( + PrivateKey( + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R") + .uncompressed.address, "BTC"), + format( + PrivateKey( + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7") + .uncompressed.address, "BTC"), + ], [ + "1G7qw8FiVfHEFrSt3tDi6YgfAdrDrEM44Z", + "12c7KAAZfpREaQZuvjC5EhpoN6si9vekqK", + "1Gu5191CVHmaoU3Zz3prept87jjnpFDrXL", + ]) def test_PublicKey(self): - self.assertEqual([str(PublicKey("BTS6UtYWWs3rkZGV8JA86qrgkG6tyFksgECefKE1MiH4HkLD8PFGL", prefix="BTS")), - str(PublicKey("BTS8YAMLtNcnqGNd3fx28NP3WoyuqNtzxXpwXTkZjbfe9scBmSyGT", prefix="BTS")), - str(PublicKey("BTS7HUo6bm7Gfoi3RqAtzwZ83BFCwiCZ4tp37oZjtWxGEBJVzVVGw", prefix="BTS")), - str(PublicKey("BTS6676cZ9qmqPnWMrm4McjCuHcnt6QW5d8oRJ4t8EDH8DdCjvh4V", prefix="BTS")), - str(PublicKey("BTS7u8m6zUNuzPNK1tPPLtnipxgqV9mVmTzrFNJ9GvovvSTCkVUra", prefix="BTS")) - ], - ["BTS6UtYWWs3rkZGV8JA86qrgkG6tyFksgECefKE1MiH4HkLD8PFGL", - "BTS8YAMLtNcnqGNd3fx28NP3WoyuqNtzxXpwXTkZjbfe9scBmSyGT", - "BTS7HUo6bm7Gfoi3RqAtzwZ83BFCwiCZ4tp37oZjtWxGEBJVzVVGw", - "BTS6676cZ9qmqPnWMrm4McjCuHcnt6QW5d8oRJ4t8EDH8DdCjvh4V", - "BTS7u8m6zUNuzPNK1tPPLtnipxgqV9mVmTzrFNJ9GvovvSTCkVUra" - ]) + self.assertEqual([ + str( + PublicKey( + "BTS6UtYWWs3rkZGV8JA86qrgkG6tyFksgECefKE1MiH4HkLD8PFGL", + prefix="BTS")), + str( + PublicKey( + "BTS8YAMLtNcnqGNd3fx28NP3WoyuqNtzxXpwXTkZjbfe9scBmSyGT", + prefix="BTS")), + str( + PublicKey( + "BTS7HUo6bm7Gfoi3RqAtzwZ83BFCwiCZ4tp37oZjtWxGEBJVzVVGw", + prefix="BTS")), + str( + PublicKey( + "BTS6676cZ9qmqPnWMrm4McjCuHcnt6QW5d8oRJ4t8EDH8DdCjvh4V", + prefix="BTS")), + str( + PublicKey( + "BTS7u8m6zUNuzPNK1tPPLtnipxgqV9mVmTzrFNJ9GvovvSTCkVUra", + prefix="BTS")) + ], [ + "BTS6UtYWWs3rkZGV8JA86qrgkG6tyFksgECefKE1MiH4HkLD8PFGL", + "BTS8YAMLtNcnqGNd3fx28NP3WoyuqNtzxXpwXTkZjbfe9scBmSyGT", + "BTS7HUo6bm7Gfoi3RqAtzwZ83BFCwiCZ4tp37oZjtWxGEBJVzVVGw", + "BTS6676cZ9qmqPnWMrm4McjCuHcnt6QW5d8oRJ4t8EDH8DdCjvh4V", + "BTS7u8m6zUNuzPNK1tPPLtnipxgqV9mVmTzrFNJ9GvovvSTCkVUra" + ]) def test_Privatekey(self): - self.assertEqual([str(PrivateKey("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq")), - str(PrivateKey("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R")), - str(PrivateKey("5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7")), - repr(PrivateKey("5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq")), - repr(PrivateKey("5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R")), - repr(PrivateKey("5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7")), - ], - ["5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq", - "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R", - "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7", - '0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e', - '6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e', - 'b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8' - ]) + self.assertEqual([ + str( + PrivateKey( + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq")), + str( + PrivateKey( + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R")), + str( + PrivateKey( + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7")), + repr( + PrivateKey( + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq")), + repr( + PrivateKey( + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R")), + repr( + PrivateKey( + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7")), + ], [ + "5HvVz6XMx84aC5KaaBbwYrRLvWE46cH6zVnv4827SBPLorg76oq", + "5Jete5oFNjjk3aUMkKuxgAXsp7ZyhgJbYNiNjHLvq5xzXkiqw7R", + "5KDT58ksNsVKjYShG4Ls5ZtredybSxzmKec8juj7CojZj6LPRF7", + '0e1bfc9024d1f55a7855dc690e45b2e089d2d825a4671a3c3c7e4ea4e74ec00e', + '6e5cc4653d46e690c709ed9e0570a2c75a286ad7c1bc69a648aae6855d919d3e', + 'b84abd64d66ee1dd614230ebbe9d9c6d66d78d93927c395196666762e9ad69d8' + ]) def test_BrainKey(self): - self.assertEqual([str(BrainKey("COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO").get_private()), - str(BrainKey("NAK TILTING MOOTING TAVERT SCREENY MAGIC BARDIE UPBORNE CONOID MAUVE CARBON NOTAEUM BITUMEN HOOEY KURUMA COWFISH").get_private()), - str(BrainKey("CORKITE CORDAGE FONDISH UNDER FORGET BEFLEA OUTBUD ZOOGAMY BERLINE ACANTHA STYLO YINCE TROPISM TUNKET FALCULA TOMENT").get_private()), - str(BrainKey("MURZA PREDRAW FIT LARIGOT CRYOGEN SEVENTH LISP UNTAWED AMBER CRETIN KOVIL TEATED OUTGRIN POTTAGY KLAFTER DABB").get_private()), - str(BrainKey("VERDICT REPOUR SUNRAY WAMBLY UNFILM UNCOUS COWMAN REBUOY MIURUS KEACORN BENZOLE BEMAUL SAXTIE DOLENT CHABUK BOUGHED").get_private()), - str(BrainKey("HOUGH TRUMPH SUCKEN EXODY MAMMATE PIGGIN CRIME TEPEE URETHAN TOLUATE BLINDLY CACOEPY SPINOSE COMMIE GRIECE FUNDAL").get_private()), - str(BrainKey("OERSTED ETHERIN TESTIS PEGGLE ONCOST POMME SUBAH FLOODER OLIGIST ACCUSE UNPLAT OATLIKE DEWTRY CYCLIZE PIMLICO CHICOT").get_private()), - ], - ["5JfwDztjHYDDdKnCpjY6cwUQfM4hbtYmSJLjGd9KTpk9J4H2jDZ", - "5JcdQEQjBS92rKqwzQnpBndqieKAMQSiXLhU7SFZoCja5c1JyKM", - "5JsmdqfNXegnM1eA8HyL6uimHp6pS9ba4kwoiWjjvqFC1fY5AeV", - "5J2KeFptc73WTZPoT1Sd59prFep6SobGobCYm7T5ZnBKtuW9RL9", - "5HryThsy6ySbkaiGK12r8kQ21vNdH81T5iifFEZNTe59wfPFvU9", - "5Ji4N7LSSv3MAVkM3Gw2kq8GT5uxZYNaZ3d3y2C4Ex1m7vshjBN", - "5HqSHfckRKmZLqqWW7p2iU18BYvyjxQs2sksRWhXMWXsNEtxPZU", - ]) + self.assertEqual([ + str( + BrainKey( + "COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y " + "GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO") + .get_private()), + str( + BrainKey( + "NAK TILTING MOOTING TAVERT SCREENY MAGIC BARDIE UPBORNE " + "CONOID MAUVE CARBON NOTAEUM BITUMEN HOOEY KURUMA COWFISH") + .get_private()), + str( + BrainKey("CORKITE CORDAGE FONDISH UNDER FORGET BEFLEA OUTBUD " + "ZOOGAMY BERLINE ACANTHA STYLO YINCE TROPISM TUNKET " + "FALCULA TOMENT").get_private()), + str( + BrainKey( + "MURZA PREDRAW FIT LARIGOT CRYOGEN SEVENTH LISP UNTAWED " + "AMBER CRETIN KOVIL TEATED OUTGRIN POTTAGY KLAFTER DABB") + .get_private()), + str( + BrainKey( + "VERDICT REPOUR SUNRAY WAMBLY UNFILM UNCOUS COWMAN REBUOY " + "MIURUS KEACORN BENZOLE BEMAUL SAXTIE DOLENT CHABUK " + "BOUGHED").get_private()), + str( + BrainKey( + "HOUGH TRUMPH SUCKEN EXODY MAMMATE PIGGIN CRIME TEPEE " + "URETHAN TOLUATE BLINDLY CACOEPY SPINOSE COMMIE GRIECE " + "FUNDAL").get_private()), + str( + BrainKey( + "OERSTED ETHERIN TESTIS PEGGLE ONCOST POMME SUBAH FLOODER " + "OLIGIST ACCUSE UNPLAT OATLIKE DEWTRY CYCLIZE PIMLICO " + "CHICOT").get_private()), + ], [ + "5JfwDztjHYDDdKnCpjY6cwUQfM4hbtYmSJLjGd9KTpk9J4H2jDZ", + "5JcdQEQjBS92rKqwzQnpBndqieKAMQSiXLhU7SFZoCja5c1JyKM", + "5JsmdqfNXegnM1eA8HyL6uimHp6pS9ba4kwoiWjjvqFC1fY5AeV", + "5J2KeFptc73WTZPoT1Sd59prFep6SobGobCYm7T5ZnBKtuW9RL9", + "5HryThsy6ySbkaiGK12r8kQ21vNdH81T5iifFEZNTe59wfPFvU9", + "5Ji4N7LSSv3MAVkM3Gw2kq8GT5uxZYNaZ3d3y2C4Ex1m7vshjBN", + "5HqSHfckRKmZLqqWW7p2iU18BYvyjxQs2sksRWhXMWXsNEtxPZU", + ]) def test_BrainKey_normalize(self): - b = "COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO" - self.assertEqual([BrainKey(b + "").get_brainkey(), - BrainKey(b + " ").get_brainkey(), - BrainKey(b + " ").get_brainkey(), - BrainKey(b + "\t").get_brainkey(), - BrainKey(b + "\t\t").get_brainkey(), - BrainKey(b.replace(" ", "\t")).get_brainkey(), - BrainKey(b.replace(" ", " ")).get_brainkey(), - ], - [b, b, b, b, b, b, b]) + b = "COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL " \ + "AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO" + self.assertEqual([ + BrainKey(b + "").get_brainkey(), + BrainKey(b + " ").get_brainkey(), + BrainKey(b + " ").get_brainkey(), + BrainKey(b + "\t").get_brainkey(), + BrainKey(b + "\t\t").get_brainkey(), + BrainKey(b.replace(" ", "\t")).get_brainkey(), + BrainKey(b.replace(" ", " ")).get_brainkey(), + ], [b, b, b, b, b, b, b]) def test_BrainKey_sequences(self): - b = BrainKey("COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO") - keys = ["5Hsbn6kXio4bb7eW5bX7kTp2sdkmbzP8kGWoau46Cf7en7T1RRE", - "5K9MHEyiSye5iFL2srZu3ZVjzAZjcQxUgUvuttcVrymovFbU4cc", - "5JBXhzDWQdYPAzRxxuGtzqM7ULLKPK7GZmktHTyF9foGGfbtDLT", - "5Kbbfbs6DmJFNddWiP1XZfDKwhm5dkn9KX5AENQfQke2RYBBDcz", - "5JUqLwgxn8f7myNz4gDwo5e77HZgopHMDHv4icNVww9Rxu1GDG5", - "5JNBVj5QVh86N8MUUwY3EVUmsZwChZftxnuJx22DzEtHWC4rmvK", - "5JdvczYtxPPjQdXMki1tpNvuSbvPMxJG5y4ndEAuQsC5RYMQXuC", - "5HsUSesU2YB4EA3dmpGtHh8aPAwEdkdhidG8hcU2Nd2tETKk85t", - "5JpveiQd1mt91APyQwvsCdAXWJ7uag3JmhtSxpGienic8vv1k2W", - "5KDGhQUqQmwcGQ9tegimSyyT4vmH8h2fMzoNe1MT9bEGvRvR6kD"] + b = BrainKey( + "COLORER BICORN KASBEKE FAERIE LOCHIA GOMUTI SOVKHOZ Y GERMAL " + "AUNTIE PERFUMY TIME FEATURE GANGAN CELEMIN MATZO") + keys = [ + "5Hsbn6kXio4bb7eW5bX7kTp2sdkmbzP8kGWoau46Cf7en7T1RRE", + "5K9MHEyiSye5iFL2srZu3ZVjzAZjcQxUgUvuttcVrymovFbU4cc", + "5JBXhzDWQdYPAzRxxuGtzqM7ULLKPK7GZmktHTyF9foGGfbtDLT", + "5Kbbfbs6DmJFNddWiP1XZfDKwhm5dkn9KX5AENQfQke2RYBBDcz", + "5JUqLwgxn8f7myNz4gDwo5e77HZgopHMDHv4icNVww9Rxu1GDG5", + "5JNBVj5QVh86N8MUUwY3EVUmsZwChZftxnuJx22DzEtHWC4rmvK", + "5JdvczYtxPPjQdXMki1tpNvuSbvPMxJG5y4ndEAuQsC5RYMQXuC", + "5HsUSesU2YB4EA3dmpGtHh8aPAwEdkdhidG8hcU2Nd2tETKk85t", + "5JpveiQd1mt91APyQwvsCdAXWJ7uag3JmhtSxpGienic8vv1k2W", + "5KDGhQUqQmwcGQ9tegimSyyT4vmH8h2fMzoNe1MT9bEGvRvR6kD" + ] for i in keys: p = b.next_sequence().get_private() self.assertEqual(str(p), i) def test_PasswordKey(self): - a = ["Aang7foN3oz1Ungai2qua5toh3map8ladei1eem2ohsh2shuo8aeji9Thoseo7ah", - "iep1Mees9eghiifahwei5iidi0Sazae9aigaeT7itho3quoo2dah5zuvobaelau5", - "ohBeuyoothae5aer9odaegh5Eeloh1fi7obei9ahSh0haeYuas1sheehaiv5LaiX", - "geiQuoo9NeeLoaZee0ain3Ku1biedohsesien4uHo1eib1ahzaesh5shae3iena7", - "jahzeice6Ix8ohBo3eik9pohjahgeegoh9sahthai1aeMahs8ki7Iub1oojeeSuo", - "eiVahHoh2hi4fazah9Tha8loxeeNgequaquuYee6Shoopo3EiWoosheeX6yohg2o", - "PheeCh3ar8xoofoiphoo4aisahjiiPah4vah0eeceiJ2iyeem9wahyupeithah9T", - "IuyiibahNgieshei2eeFu8aic1IeMae9ooXi9jaiwaht4Wiengieghahnguang0U", - "Ipee1quee7sheughemae4eir8pheix3quac3ei0Aquo9ohieLaeseeh8AhGeM2ew", - "Tech5iir0aP6waiMeiHoph3iwoch4iijoogh0zoh9aSh6Ueb2Dee5dang1aa8IiP" - ] - b = ["STM5NyCrrXHmdikC6QPRAPoDjSHVQJe3WC5bMZuF6YhqhSsfYfjhN", - "STM8gyvJtYyv5ZbT2ZxbAtgufQ5ovV2bq6EQp4YDTzQuSwyg7Ckry", - "STM7yE71iVPSpaq8Ae2AmsKfyFxA8pwYv5zgQtCnX7xMwRUQMVoGf", - "STM5jRgWA2kswPaXsQNtD2MMjs92XfJ1TYob6tjHtsECg2AusF5Wo", - "STM6XHwVxcP6zP5NV1jUbG6Kso9m8ZG9g2CjDiPcZpAxHngx6ATPB", - "STM59X1S4ofTAeHd1iNHDGxim5GkLo2AdcznksUsSYGU687ywB5WV", - "STM6BPPL4iSRbFVVN8v3BEEEyDsC1STRK7Ba9ewQ4Lqvszn5J8VAe", - "STM7cdK927wj95ptUrCk6HKWVeF74LG5cTjDTV22Z3yJ4Xw8xc9qp", - "STM7VNFRjrE1hs1CKpEAP9NAabdFpwvzYXRKvkrVBBv2kTQCbNHz7", - "STM7ZZFhEBjujcKjkmY31i1spPMx6xDSRhkursZLigi2HKLuALe5t", - ] + a = [ + "Aang7foN3oz1Ungai2qua5toh3map8ladei1eem2ohsh2shuo8aeji9Thoseo7ah", + "iep1Mees9eghiifahwei5iidi0Sazae9aigaeT7itho3quoo2dah5zuvobaelau5", + "ohBeuyoothae5aer9odaegh5Eeloh1fi7obei9ahSh0haeYuas1sheehaiv5LaiX", + "geiQuoo9NeeLoaZee0ain3Ku1biedohsesien4uHo1eib1ahzaesh5shae3iena7", + "jahzeice6Ix8ohBo3eik9pohjahgeegoh9sahthai1aeMahs8ki7Iub1oojeeSuo", + "eiVahHoh2hi4fazah9Tha8loxeeNgequaquuYee6Shoopo3EiWoosheeX6yohg2o", + "PheeCh3ar8xoofoiphoo4aisahjiiPah4vah0eeceiJ2iyeem9wahyupeithah9T", + "IuyiibahNgieshei2eeFu8aic1IeMae9ooXi9jaiwaht4Wiengieghahnguang0U", + "Ipee1quee7sheughemae4eir8pheix3quac3ei0Aquo9ohieLaeseeh8AhGeM2ew", + "Tech5iir0aP6waiMeiHoph3iwoch4iijoogh0zoh9aSh6Ueb2Dee5dang1aa8IiP" + ] + b = [ + "STM5NyCrrXHmdikC6QPRAPoDjSHVQJe3WC5bMZuF6YhqhSsfYfjhN", + "STM8gyvJtYyv5ZbT2ZxbAtgufQ5ovV2bq6EQp4YDTzQuSwyg7Ckry", + "STM7yE71iVPSpaq8Ae2AmsKfyFxA8pwYv5zgQtCnX7xMwRUQMVoGf", + "STM5jRgWA2kswPaXsQNtD2MMjs92XfJ1TYob6tjHtsECg2AusF5Wo", + "STM6XHwVxcP6zP5NV1jUbG6Kso9m8ZG9g2CjDiPcZpAxHngx6ATPB", + "STM59X1S4ofTAeHd1iNHDGxim5GkLo2AdcznksUsSYGU687ywB5WV", + "STM6BPPL4iSRbFVVN8v3BEEEyDsC1STRK7Ba9ewQ4Lqvszn5J8VAe", + "STM7cdK927wj95ptUrCk6HKWVeF74LG5cTjDTV22Z3yJ4Xw8xc9qp", + "STM7VNFRjrE1hs1CKpEAP9NAabdFpwvzYXRKvkrVBBv2kTQCbNHz7", + "STM7ZZFhEBjujcKjkmY31i1spPMx6xDSRhkursZLigi2HKLuALe5t", + ] for i, pwd in enumerate(a): - p = format(PasswordKey("xeroc", pwd, "posting").get_public(), "STM") + p = format( + PasswordKey("xeroc", pwd, "posting").get_public(), "STM") self.assertEqual(p, b[i]) diff --git a/tests/steembase/test_bip38.py b/tests/steembase/test_bip38.py index 8f33f9b..1a3ae19 100644 --- a/tests/steembase/test_bip38.py +++ b/tests/steembase/test_bip38.py @@ -1,25 +1,54 @@ import unittest - +import os +import sys from steembase.account import PrivateKey -from steembase.bip38 import encrypt, decrypt +import steembase.bip38 class Testcases(unittest.TestCase): def test_encrypt(self): - self.assertEqual([format(encrypt(PrivateKey("5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd"), "TestingOneTwoThree"), "encwif"), - format(encrypt(PrivateKey("5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR"), "TestingOneTwoThree"), "encwif"), - format(encrypt(PrivateKey("5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5"), "Satoshi"), "encwif")], - ["6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxThxsUW8epQi", - "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg", - "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq"]) + self.assertEqual([ + format( + steembase.bip38.encrypt( + PrivateKey( + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd"), + "TestingOneTwoThree"), "encwif"), + format( + steembase.bip38.encrypt( + PrivateKey( + "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR"), + "TestingOneTwoThree"), "encwif"), + format( + steembase.bip38.encrypt( + PrivateKey( + "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5"), + "Satoshi"), "encwif") + ], [ + "6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxThxsUW8epQi", + "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg", + "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq" + ]) + + def test_decrypt(self): + self.assertEqual([ + format( + steembase.bip38.decrypt( + "6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxTh" + "xsUW8epQi", "TestingOneTwoThree"), "wif"), + format( + steembase.bip38.decrypt( + "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEb" + "n2Nh2ZoGg", "TestingOneTwoThree"), "wif"), + format( + steembase.bip38.decrypt( + "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTe" + "PPX1dWByq", "Satoshi"), "wif") + ], [ + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", + "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR", + "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5" + ]) - def test_deencrypt(self): - self.assertEqual([format(decrypt("6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxThxsUW8epQi", "TestingOneTwoThree"), "wif"), - format(decrypt("6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg", "TestingOneTwoThree"), "wif"), - format(decrypt("6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq", "Satoshi"), "wif")], - ["5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", - "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR", - "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5"]) if __name__ == '__main__': unittest.main() diff --git a/tests/steembase/test_bip38_pylibscrypt.py b/tests/steembase/test_bip38_pylibscrypt.py new file mode 100644 index 0000000..877a60c --- /dev/null +++ b/tests/steembase/test_bip38_pylibscrypt.py @@ -0,0 +1,57 @@ +import unittest +import os +from steembase.account import PrivateKey + + +class Testcases(unittest.TestCase): + + def test_encrypt_pylibscrypt(self): + os.environ['SCRYPT_MODULE'] = 'pylibscrypt' + import steembase.bip38 + self.assertEqual([ + format( + steembase.bip38.encrypt( + PrivateKey( + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd"), + "TestingOneTwoThree"), "encwif"), + format( + steembase.bip38.encrypt( + PrivateKey( + "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR"), + "TestingOneTwoThree"), "encwif"), + format( + steembase.bip38.encrypt( + PrivateKey( + "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5"), + "Satoshi"), "encwif") + ], [ + "6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxThxsUW8epQi", + "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg", + "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq" + ]) + + def test_decrypt_pylibscrypt(self): + os.environ['SCRYPT_MODULE'] = 'pylibscrypt' + import steembase.bip38 + self.assertEqual([ + format( + steembase.bip38.decrypt( + "6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxTh" + "xsUW8epQi", "TestingOneTwoThree"), "wif"), + format( + steembase.bip38.decrypt( + "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEb" + "n2Nh2ZoGg", "TestingOneTwoThree"), "wif"), + format( + steembase.bip38.decrypt( + "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTe" + "PPX1dWByq", "Satoshi"), "wif") + ], [ + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", + "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR", + "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5" + ]) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/steembase/test_bip38_scrypt.py b/tests/steembase/test_bip38_scrypt.py new file mode 100644 index 0000000..c318643 --- /dev/null +++ b/tests/steembase/test_bip38_scrypt.py @@ -0,0 +1,57 @@ +import unittest +import os +from steembase.account import PrivateKey + + +class Testcases(unittest.TestCase): + + def test_encrypt_scrypt(self): + os.environ['SCRYPT_MODULE'] = 'scrypt' + import steembase.bip38 + self.assertEqual([ + format( + steembase.bip38.encrypt( + PrivateKey( + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd"), + "TestingOneTwoThree"), "encwif"), + format( + steembase.bip38.encrypt( + PrivateKey( + "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR"), + "TestingOneTwoThree"), "encwif"), + format( + steembase.bip38.encrypt( + PrivateKey( + "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5"), + "Satoshi"), "encwif") + ], [ + "6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxThxsUW8epQi", + "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEbn2Nh2ZoGg", + "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTePPX1dWByq" + ]) + + def test_decrypt_scrypt(self): + os.environ['SCRYPT_MODULE'] = 'scrypt' + import steembase.bip38 + self.assertEqual([ + format( + steembase.bip38.decrypt( + "6PRN5mjUTtud6fUXbJXezfn6oABoSr6GSLjMbrGXRZxSUcxTh" + "xsUW8epQi", "TestingOneTwoThree"), "wif"), + format( + steembase.bip38.decrypt( + "6PRVWUbkzzsbcVac2qwfssoUJAN1Xhrg6bNk8J7Nzm5H7kxEb" + "n2Nh2ZoGg", "TestingOneTwoThree"), "wif"), + format( + steembase.bip38.decrypt( + "6PRNFFkZc2NZ6dJqFfhRoFNMR9Lnyj7dYGrzdgXXVMXcxoKTe" + "PPX1dWByq", "Satoshi"), "wif") + ], [ + "5HqUkGuo62BfcJU5vNhTXKJRXuUi9QSE6jp8C3uBJ2BVHtB8WSd", + "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR", + "5HtasZ6ofTHP6HCwTqTkLDuLQisYPah7aUnSKfC7h4hMUVw2gi5" + ]) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/test_import.py b/tests/test_import.py index f1eda7e..a48f679 100644 --- a/tests/test_import.py +++ b/tests/test_import.py @@ -1,7 +1,10 @@ # -*- coding: utf-8 -*- +import os +import sys +sys.path.insert(0, os.path.abspath('..')) -from steem import * -from steembase import * +from steem import * # noqa +from steembase import * # noqa # pylint: disable=unused-import,unused-variable