commit 57bb933d16d1655cb1a6a946eedb41989d0999e7
Author: Magnus Walbeck <magnus.walbeck@walbeck.it>
Date:   Wed Dec 14 13:49:18 2022 +0100

    Initial version

diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000..5376b8a
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,4 @@
+[flake8]
+max-line-length = 80
+select = C,E,F,W,B,B950
+ignore = E203, E501, W503
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bee8a64
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+__pycache__
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..76cbc48
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# Genhost
+
+Small python application to generate hostnames based on a wordlist. Inspired by https://github.com/elasticdog/genhost
+
+The original wordlist is taken from here, https://web.archive.org/web/20090918202746/http://tothink.com/mnemonic/wordlist.html and there is a version ready to go here in this repo.
diff --git a/genhost/__init__.py b/genhost/__init__.py
new file mode 100644
index 0000000..5f3c024
--- /dev/null
+++ b/genhost/__init__.py
@@ -0,0 +1,3 @@
+from importlib.metadata import version
+
+__version__ = version(__package__)
diff --git a/genhost/__main__.py b/genhost/__main__.py
new file mode 100644
index 0000000..7739cf7
--- /dev/null
+++ b/genhost/__main__.py
@@ -0,0 +1,3 @@
+from genhost.main import main
+
+main()
diff --git a/genhost/main.py b/genhost/main.py
new file mode 100644
index 0000000..417dcaa
--- /dev/null
+++ b/genhost/main.py
@@ -0,0 +1,135 @@
+"""
+Generate a random hostname based on a wordlist
+"""
+
+import argparse
+import logging
+import random
+import os
+import sys
+from genhost.__init__ import __version__
+
+
+def setup_arguments():
+    parser = argparse.ArgumentParser(description=__doc__)
+    parser.add_argument(
+        "integer",
+        metavar="N",
+        type=int,
+        nargs="?",
+        help="The number of hostnames to commission",
+    )
+    parser.add_argument(
+        "-l",
+        "--list",
+        action="store_true",
+        help="List all the commissioned hostnames",
+    )
+    parser.add_argument(
+        "-r",
+        "--reuse",
+        help="Decommission hostname(s) and return them to the pool of available hostnames",
+    )
+    parser.add_argument(
+        "-w",
+        "--wordlist",
+        help="""Location of wordlist to use. Only needed if you want to use a wordlist
+                that isn't in the default location""",
+    )
+    parser.add_argument(
+        "-V",
+        "--version",
+        action="store_true",
+        help="Display version number",
+    )
+    return parser
+
+
+def main() -> None:
+    logging.basicConfig(format="%(asctime)s - %(message)s", level=logging.WARNING)
+    parser = setup_arguments()
+    args = parser.parse_args()
+
+    logging.debug(args)
+
+    if args.wordlist:
+        wordlist_path = args.wordlist
+    elif os.environ.get("HOME"):
+        wordlist_path = (
+            os.environ.get("HOME") + "/.config/genhost/wordlist.txt"  # type: ignore
+        )
+    else:
+        logging.fatal(
+            "No wordlist was specified and it wasn't possible to retrieve"
+            "default location for wordlist. Please specify a wordlist manually."
+        )
+        sys.exit()
+
+    if args.version:
+        display_version()
+    if args.reuse:
+        decommission_hostname(wordlist_path, args.reuse)
+    elif args.list:
+        list_hostnames(wordlist_path)
+    elif args.integer:
+        commission_hostname(wordlist_path, args.integer)
+
+
+def commission_hostname(wordlist_path: str, number_of_hosts: int) -> None:
+    words = read_wordlist(wordlist_path)
+
+    for _ in range(number_of_hosts):
+        selected_word = random.choice(words)  # nosec
+
+        while selected_word.startswith("#"):
+            selected_word = random.choice(words)  # nosec
+
+        print(selected_word.strip())
+
+        try:
+            index = words.index(selected_word)
+            words[index] = "#" + selected_word
+        except ValueError:
+            logging.fatal(
+                "Randomly selected the word, %s, but it doesn't exist in the word list.",
+                selected_word,
+            )
+            return
+
+        write_wordlist(wordlist_path, words)
+
+
+def decommission_hostname(wordlist_path: str, hostname: str) -> None:
+    words = read_wordlist(wordlist_path)
+
+    try:
+        index = words.index("#" + hostname + "\n")
+        words[index] = hostname + "\n"
+        write_wordlist(wordlist_path, words)
+        print(f"The hostname, {hostname}, has been decommissioned")
+    except ValueError:
+        logging.error("The hostname, %s, is not currently commissioned.", hostname)
+
+
+def write_wordlist(wordlist_path: str, words: list[str]) -> None:
+    with open(wordlist_path, "w", encoding="utf_8") as f:
+        f.writelines(words)
+
+
+def read_wordlist(wordlist_path: str) -> list[str]:
+    with open(wordlist_path, "r", encoding="utf_8") as f:
+        words = f.readlines()
+
+        return words
+
+
+def list_hostnames(wordlist_path: str) -> None:
+    words = read_wordlist(wordlist_path)
+
+    for word in words:
+        if word.startswith("#"):
+            print(word.strip("#\n"))
+
+
+def display_version() -> None:
+    print(__version__)
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..6cc95c8
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,251 @@
+[[package]]
+name = "astroid"
+version = "2.12.13"
+description = "An abstract syntax tree for Python with inference support."
+category = "dev"
+optional = false
+python-versions = ">=3.7.2"
+
+[package.dependencies]
+lazy-object-proxy = ">=1.4.0"
+wrapt = [
+    {version = ">=1.11,<2", markers = "python_version < \"3.11\""},
+    {version = ">=1.14,<2", markers = "python_version >= \"3.11\""},
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+
+[[package]]
+name = "dill"
+version = "0.3.6"
+description = "serialize all of python"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+graph = ["objgraph (>=1.7.2)"]
+
+[[package]]
+name = "isort"
+version = "5.10.1"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
+optional = false
+python-versions = ">=3.6.1,<4.0"
+
+[package.extras]
+colors = ["colorama (>=0.4.3,<0.5.0)"]
+pipfile-deprecated-finder = ["pipreqs", "requirementslib"]
+plugins = ["setuptools"]
+requirements-deprecated-finder = ["pip-api", "pipreqs"]
+
+[[package]]
+name = "lazy-object-proxy"
+version = "1.8.0"
+description = "A fast and thorough lazy object proxy."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "mccabe"
+version = "0.7.0"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "platformdirs"
+version = "2.6.0"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[package.extras]
+docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"]
+test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
+
+[[package]]
+name = "pylint"
+version = "2.15.8"
+description = "python code static checker"
+category = "dev"
+optional = false
+python-versions = ">=3.7.2"
+
+[package.dependencies]
+astroid = ">=2.12.13,<=2.14.0-dev0"
+colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
+dill = ">=0.2"
+isort = ">=4.2.5,<6"
+mccabe = ">=0.6,<0.8"
+platformdirs = ">=2.2.0"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+tomlkit = ">=0.10.1"
+
+[package.extras]
+spelling = ["pyenchant (>=3.2,<4.0)"]
+testutils = ["gitpython (>3)"]
+
+[[package]]
+name = "tomli"
+version = "2.0.1"
+description = "A lil' TOML parser"
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
+name = "tomlkit"
+version = "0.11.6"
+description = "Style preserving TOML library"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "wrapt"
+version = "1.14.1"
+description = "Module for decorators, wrappers and monkey patching."
+category = "dev"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.10"
+content-hash = "4ce5fc18f365ccf49f86d99f92912950c077883d28be5f3ab1144f40aabca7b8"
+
+[metadata.files]
+astroid = [
+    {file = "astroid-2.12.13-py3-none-any.whl", hash = "sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907"},
+    {file = "astroid-2.12.13.tar.gz", hash = "sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"},
+]
+colorama = [
+    {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+    {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+dill = [
+    {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"},
+    {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"},
+]
+isort = [
+    {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
+    {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
+]
+lazy-object-proxy = [
+    {file = "lazy-object-proxy-1.8.0.tar.gz", hash = "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156"},
+    {file = "lazy_object_proxy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe"},
+    {file = "lazy_object_proxy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25"},
+    {file = "lazy_object_proxy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"},
+    {file = "lazy_object_proxy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7"},
+    {file = "lazy_object_proxy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e"},
+    {file = "lazy_object_proxy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d"},
+    {file = "lazy_object_proxy-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c"},
+    {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win32.whl", hash = "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd"},
+    {file = "lazy_object_proxy-1.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858"},
+    {file = "lazy_object_proxy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada"},
+    {file = "lazy_object_proxy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f"},
+    {file = "lazy_object_proxy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c"},
+    {file = "lazy_object_proxy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288"},
+    {file = "lazy_object_proxy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f"},
+    {file = "lazy_object_proxy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0"},
+    {file = "lazy_object_proxy-1.8.0-pp37-pypy37_pp73-any.whl", hash = "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891"},
+    {file = "lazy_object_proxy-1.8.0-pp38-pypy38_pp73-any.whl", hash = "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec"},
+    {file = "lazy_object_proxy-1.8.0-pp39-pypy39_pp73-any.whl", hash = "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8"},
+]
+mccabe = [
+    {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
+    {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
+]
+platformdirs = [
+    {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"},
+    {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"},
+]
+pylint = [
+    {file = "pylint-2.15.8-py3-none-any.whl", hash = "sha256:ea82cd6a1e11062dc86d555d07c021b0fb65afe39becbe6fe692efd6c4a67443"},
+    {file = "pylint-2.15.8.tar.gz", hash = "sha256:ec4a87c33da054ab86a6c79afa6771dc8765cb5631620053e727fcf3ef8cbed7"},
+]
+tomli = [
+    {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
+    {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
+]
+tomlkit = [
+    {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"},
+    {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"},
+]
+wrapt = [
+    {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"},
+    {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"},
+    {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"},
+    {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"},
+    {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"},
+    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"},
+    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"},
+    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"},
+    {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"},
+    {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"},
+    {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"},
+    {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"},
+    {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"},
+    {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"},
+    {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"},
+    {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"},
+    {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"},
+    {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"},
+    {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"},
+    {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"},
+    {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"},
+    {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"},
+    {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"},
+    {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"},
+    {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"},
+    {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"},
+    {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"},
+    {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"},
+    {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"},
+    {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"},
+    {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"},
+    {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"},
+    {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"},
+    {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"},
+    {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"},
+    {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"},
+    {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"},
+    {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"},
+    {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"},
+    {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"},
+    {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"},
+    {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"},
+    {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"},
+    {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"},
+    {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"},
+    {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"},
+    {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"},
+    {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"},
+    {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"},
+    {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"},
+    {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"},
+    {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"},
+    {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"},
+    {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"},
+    {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"},
+    {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"},
+    {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"},
+    {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"},
+    {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"},
+    {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"},
+    {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"},
+    {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"},
+    {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"},
+    {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"},
+]
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..b14e8ec
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,25 @@
+[tool.poetry]
+name = "genhost"
+version = "0.1.0"
+description = "Generate a random hostname based on a wordlist"
+authors = ["Magnus Walbeck <mw@mwalbeck.org>"]
+readme = "README.md"
+repository = "https://git.walbeck.it/walbeck-it/genhost"
+packages = [{ include = "genhost" }]
+
+[tool.poetry.scripts]
+genhost = "genhost.main:main"
+
+[tool.poetry.dependencies]
+python = "^3.10"
+
+[tool.poetry.group.dev.dependencies]
+pylint = "^2.15.8"
+
+[build-system]
+requires = ["poetry-core"]
+build-backend = "poetry.core.masonry.api"
+
+[tool.pylint.'MESSAGES CONTROL']
+good-names = "i,j,k,ex,Run,_,e,r,f"
+disable = "C0116,C0114"
diff --git a/wordlist.txt b/wordlist.txt
new file mode 100644
index 0000000..8a01dcf
--- /dev/null
+++ b/wordlist.txt
@@ -0,0 +1,1633 @@
+acrobat
+africa
+alaska
+albert
+albino
+album
+alcohol
+alex
+alpha
+amadeus
+amanda
+amazon
+america
+analog
+animal
+antenna
+antonio
+apollo
+april
+aroma
+artist
+aspirin
+athlete
+atlas
+banana
+bandit
+banjo
+bikini
+bingo
+bonus
+camera
+canada
+carbon
+casino
+catalog
+cinema
+citizen
+cobra
+comet
+compact
+complex
+context
+credit
+critic
+crystal
+culture
+david
+delta
+dialog
+diploma
+doctor
+domino
+dragon
+drama
+extra
+fabric
+final
+focus
+forum
+galaxy
+gallery
+global
+harmony
+hotel
+humor
+index
+japan
+kilo
+lemon
+liter
+lotus
+mango
+melon
+menu
+meter
+metro
+mineral
+model
+music
+object
+piano
+pirate
+plastic
+radio
+report
+signal
+sport
+studio
+subject
+super
+tango
+taxi
+tempo
+tennis
+textile
+tokyo
+total
+tourist
+video
+visa
+academy
+alfred
+atlanta
+atomic
+barbara
+bazaar
+brother
+budget
+cabaret
+cadet
+candle
+capsule
+caviar
+channel
+chapter
+circle
+cobalt
+comrade
+condor
+crimson
+cyclone
+darwin
+declare
+denver
+desert
+divide
+dolby
+domain
+double
+eagle
+echo
+eclipse
+editor
+educate
+edward
+effect
+electra
+emerald
+emotion
+empire
+eternal
+evening
+exhibit
+expand
+explore
+extreme
+ferrari
+forget
+freedom
+friday
+fuji
+galileo
+genesis
+gravity
+habitat
+hamlet
+harlem
+helium
+holiday
+hunter
+ibiza
+iceberg
+imagine
+infant
+isotope
+jackson
+jamaica
+jasmine
+java
+jessica
+kitchen
+lazarus
+letter
+license
+lithium
+loyal
+lucky
+magenta
+manual
+marble
+maxwell
+mayor
+monarch
+monday
+money
+morning
+mother
+mystery
+native
+nectar
+nelson
+network
+nikita
+nobel
+nobody
+nominal
+norway
+nothing
+number
+october
+office
+oliver
+opinion
+option
+order
+outside
+package
+pandora
+panther
+papa
+pattern
+pedro
+pencil
+people
+phantom
+philips
+pioneer
+pluto
+podium
+portal
+potato
+process
+proxy
+pupil
+python
+quality
+quarter
+quiet
+rabbit
+radical
+radius
+rainbow
+ramirez
+ravioli
+raymond
+respect
+respond
+result
+resume
+richard
+river
+roger
+roman
+rondo
+sabrina
+salary
+salsa
+sample
+samuel
+saturn
+savage
+scarlet
+scorpio
+sector
+serpent
+shampoo
+sharon
+silence
+simple
+society
+sonar
+sonata
+soprano
+sparta
+spider
+sponsor
+abraham
+action
+active
+actor
+adam
+address
+admiral
+adrian
+agenda
+agent
+airline
+airport
+alabama
+aladdin
+alarm
+algebra
+alibi
+alice
+alien
+almond
+alpine
+amber
+amigo
+ammonia
+analyze
+anatomy
+angel
+annual
+answer
+apple
+archive
+arctic
+arena
+arizona
+armada
+arnold
+arsenal
+arthur
+asia
+aspect
+athena
+audio
+august
+austria
+avenue
+average
+axiom
+aztec
+bagel
+baker
+balance
+ballad
+ballet
+bambino
+bamboo
+baron
+basic
+basket
+battery
+belgium
+benefit
+berlin
+bermuda
+bernard
+bicycle
+binary
+biology
+bishop
+blitz
+block
+blonde
+bonjour
+boris
+boston
+bottle
+boxer
+brandy
+bravo
+brazil
+bridge
+british
+bronze
+brown
+bruce
+bruno
+brush
+burger
+burma
+cabinet
+cactus
+cafe
+cairo
+calypso
+camel
+campus
+canal
+cannon
+canoe
+cantina
+canvas
+canyon
+capital
+caramel
+caravan
+career
+cargo
+carlo
+carol
+carpet
+cartel
+cartoon
+castle
+castro
+cecilia
+cement
+center
+century
+ceramic
+chamber
+chance
+change
+chaos
+charlie
+charm
+charter
+cheese
+chef
+chemist
+cherry
+chess
+chicago
+chicken
+chief
+china
+cigar
+circus
+city
+clara
+classic
+claudia
+clean
+client
+climax
+clinic
+clock
+club
+cockpit
+coconut
+cola
+collect
+colombo
+colony
+color
+combat
+comedy
+command
+company
+concert
+connect
+consul
+contact
+contour
+control
+convert
+copy
+corner
+corona
+correct
+cosmos
+couple
+courage
+cowboy
+craft
+crash
+cricket
+crown
+cuba
+dallas
+dance
+daniel
+decade
+decimal
+degree
+delete
+deliver
+delphi
+deluxe
+demand
+demo
+denmark
+derby
+design
+detect
+develop
+diagram
+diamond
+diana
+diego
+diesel
+diet
+digital
+dilemma
+direct
+disco
+disney
+distant
+dollar
+dolphin
+donald
+drink
+driver
+dublin
+duet
+dynamic
+earth
+east
+ecology
+economy
+edgar
+egypt
+elastic
+elegant
+element
+elite
+elvis
+email
+empty
+energy
+engine
+english
+episode
+equator
+escape
+escort
+ethnic
+europe
+everest
+evident
+exact
+example
+exit
+exotic
+export
+express
+factor
+falcon
+family
+fantasy
+fashion
+fiber
+fiction
+fidel
+fiesta
+figure
+film
+filter
+finance
+finish
+finland
+first
+flag
+flash
+florida
+flower
+fluid
+flute
+folio
+ford
+forest
+formal
+formula
+fortune
+forward
+fragile
+france
+frank
+fresh
+friend
+frozen
+future
+gabriel
+gamma
+garage
+garcia
+garden
+garlic
+gemini
+general
+genetic
+genius
+germany
+gloria
+gold
+golf
+gondola
+gong
+good
+gordon
+gorilla
+grand
+granite
+graph
+green
+group
+guide
+guitar
+guru
+hand
+happy
+harbor
+harvard
+havana
+hawaii
+helena
+hello
+henry
+hilton
+history
+horizon
+house
+human
+icon
+idea
+igloo
+igor
+image
+impact
+import
+india
+indigo
+input
+insect
+instant
+iris
+italian
+jacket
+jacob
+jaguar
+janet
+jargon
+jazz
+jeep
+john
+joker
+jordan
+judo
+jumbo
+june
+jungle
+junior
+jupiter
+karate
+karma
+kayak
+kermit
+king
+koala
+korea
+labor
+lady
+lagoon
+laptop
+laser
+latin
+lava
+lecture
+left
+legal
+level
+lexicon
+liberal
+libra
+lily
+limbo
+limit
+linda
+linear
+lion
+liquid
+little
+llama
+lobby
+lobster
+local
+logic
+logo
+lola
+london
+lucas
+lunar
+machine
+macro
+madam
+madonna
+madrid
+maestro
+magic
+magnet
+magnum
+mailbox
+major
+mama
+mambo
+manager
+manila
+marco
+marina
+market
+mars
+martin
+marvin
+mary
+master
+matrix
+maximum
+media
+medical
+mega
+melody
+memo
+mental
+mentor
+mercury
+message
+metal
+meteor
+method
+mexico
+miami
+micro
+milk
+million
+minimum
+minus
+minute
+miracle
+mirage
+miranda
+mister
+mixer
+mobile
+modem
+modern
+modular
+moment
+monaco
+monica
+monitor
+mono
+monster
+montana
+morgan
+motel
+motif
+motor
+mozart
+multi
+museum
+mustang
+natural
+neon
+nepal
+neptune
+nerve
+neutral
+nevada
+news
+next
+ninja
+nirvana
+normal
+nova
+novel
+nuclear
+numeric
+nylon
+oasis
+observe
+ocean
+octopus
+olivia
+olympic
+omega
+opera
+optic
+optimal
+orange
+orbit
+organic
+orient
+origin
+orlando
+oscar
+oxford
+oxygen
+ozone
+pablo
+pacific
+pagoda
+palace
+pamela
+panama
+pancake
+panda
+panel
+panic
+paradox
+pardon
+paris
+parker
+parking
+parody
+partner
+passage
+passive
+pasta
+pastel
+patent
+patient
+patriot
+patrol
+pegasus
+pelican
+penguin
+pepper
+percent
+perfect
+perfume
+period
+permit
+person
+peru
+phone
+photo
+picasso
+picnic
+picture
+pigment
+pilgrim
+pilot
+pixel
+pizza
+planet
+plasma
+plaza
+pocket
+poem
+poetic
+poker
+polaris
+police
+politic
+polo
+polygon
+pony
+popcorn
+popular
+postage
+precise
+prefix
+premium
+present
+price
+prince
+printer
+prism
+private
+prize
+product
+profile
+program
+project
+protect
+proton
+public
+pulse
+puma
+pump
+pyramid
+queen
+radar
+ralph
+random
+rapid
+rebel
+record
+recycle
+reflex
+reform
+regard
+regular
+relax
+reptile
+reverse
+ricardo
+right
+ringo
+risk
+ritual
+robert
+robot
+rocket
+rodeo
+romeo
+royal
+russian
+safari
+salad
+salami
+salmon
+salon
+salute
+samba
+sandra
+santana
+sardine
+school
+scoop
+scratch
+screen
+script
+scroll
+second
+secret
+section
+segment
+select
+seminar
+senator
+senior
+sensor
+serial
+service
+shadow
+sharp
+sheriff
+shock
+short
+shrink
+sierra
+silicon
+silk
+silver
+similar
+simon
+single
+siren
+slang
+slogan
+smart
+smoke
+snake
+social
+soda
+solar
+solid
+solo
+sonic
+source
+soviet
+special
+speed
+sphere
+spiral
+spirit
+spring
+static
+status
+stereo
+stone
+stop
+street
+strong
+student
+style
+sultan
+susan
+sushi
+suzuki
+switch
+symbol
+system
+tactic
+tahiti
+talent
+tarzan
+telex
+texas
+theory
+thermos
+tiger
+titanic
+tomato
+topic
+tornado
+toronto
+torpedo
+totem
+tractor
+traffic
+transit
+trapeze
+travel
+tribal
+trick
+trident
+trilogy
+tripod
+tropic
+trumpet
+tulip
+tuna
+turbo
+twist
+ultra
+uniform
+union
+uranium
+vacuum
+valid
+vampire
+vanilla
+vatican
+velvet
+ventura
+venus
+vertigo
+veteran
+victor
+vienna
+viking
+village
+vincent
+violet
+violin
+virtual
+virus
+vision
+visitor
+visual
+vitamin
+viva
+vocal
+vodka
+volcano
+voltage
+volume
+voyage
+water
+weekend
+welcome
+western
+window
+winter
+wizard
+wolf
+world
+xray
+yankee
+yoga
+yogurt
+yoyo
+zebra
+zero
+zigzag
+zipper
+zodiac
+zoom
+acid
+adios
+agatha
+alamo
+alert
+almanac
+aloha
+andrea
+anita
+arcade
+aurora
+avalon
+baby
+baggage
+balloon
+bank
+basil
+begin
+biscuit
+blue
+bombay
+botanic
+brain
+brenda
+brigade
+cable
+calibre
+carmen
+cello
+celtic
+chariot
+chrome
+citrus
+civil
+cloud
+combine
+common
+cool
+copper
+coral
+crater
+cubic
+cupid
+cycle
+depend
+door
+dream
+dynasty
+edison
+edition
+enigma
+equal
+eric
+event
+evita
+exodus
+extend
+famous
+farmer
+food
+fossil
+frog
+fruit
+geneva
+gentle
+george
+giant
+gilbert
+gossip
+gram
+greek
+grille
+hammer
+harvest
+hazard
+heaven
+herbert
+heroic
+hexagon
+husband
+immune
+inca
+inch
+initial
+isabel
+ivory
+jason
+jerome
+joel
+joshua
+journal
+judge
+juliet
+jump
+justice
+kimono
+kinetic
+leonid
+leopard
+lima
+maze
+medusa
+member
+memphis
+michael
+miguel
+milan
+mile
+miller
+mimic
+mimosa
+mission
+monkey
+moral
+moses
+mouse
+nancy
+natasha
+nebula
+nickel
+nina
+noise
+orchid
+oregano
+origami
+orinoco
+orion
+othello
+paper
+paprika
+prelude
+prepare
+pretend
+promise
+prosper
+provide
+puzzle
+remote
+repair
+reply
+rival
+riviera
+robin
+rose
+rover
+rudolf
+saga
+sahara
+scholar
+shelter
+ship
+shoe
+sigma
+sister
+sleep
+smile
+spain
+spark
+split
+spray
+square
+stadium
+star
+storm
+story
+strange
+stretch
+stuart
+subway
+sugar
+sulfur
+summer
+survive
+sweet
+swim
+table
+taboo
+target
+teacher
+telecom
+temple
+tibet
+ticket
+tina
+today
+toga
+tommy
+tower
+trivial
+tunnel
+turtle
+twin
+uncle
+unicorn
+unique
+update
+valery
+vega
+version
+voodoo
+warning
+william
+wonder
+year
+yellow
+young
+absent
+absorb
+absurd
+accent
+alfonso
+alias
+ambient
+anagram
+andy
+anvil
+appear
+apropos
+archer
+ariel
+armor
+arrow
+austin
+avatar
+axis
+baboon
+bahama
+bali
+balsa
+barcode
+bazooka
+beach
+beast
+beatles
+beauty
+before
+benny
+betty
+between
+beyond
+billy
+bison
+blast
+bless
+bogart
+bonanza
+book
+border
+brave
+bread
+break
+broken
+bucket
+buenos
+buffalo
+bundle
+button
+buzzer
+byte
+caesar
+camilla
+canary
+candid
+carrot
+cave
+chant
+child
+choice
+chris
+cipher
+clarion
+clark
+clever
+cliff
+clone
+conan
+conduct
+congo
+costume
+cotton
+cover
+crack
+current
+danube
+data
+decide
+deposit
+desire
+detail
+dexter
+dinner
+donor
+druid
+drum
+easy
+eddie
+enjoy
+enrico
+epoxy
+erosion
+except
+exile
+explain
+fame
+fast
+father
+felix
+field
+fiona
+fire
+fish
+flame
+flex
+flipper
+float
+flood
+floor
+forbid
+forever
+fractal
+frame
+freddie
+front
+fuel
+gallop
+game
+garbo
+gate
+gelatin
+gibson
+ginger
+giraffe
+gizmo
+glass
+goblin
+gopher
+grace
+gray
+gregory
+grid
+griffin
+ground
+guest
+gustav
+gyro
+hair
+halt
+harris
+heart
+heavy
+herman
+hippie
+hobby
+honey
+hope
+horse
+hostel
+hydro
+imitate
+info
+ingrid
+inside
+invent
+invest
+invite
+ivan
+james
+jester
+jimmy
+join
+joseph
+juice
+julius
+july
+kansas
+karl
+kevin
+kiwi
+ladder
+lake
+laura
+learn
+legacy
+legend
+lesson
+life
+light
+list
+locate
+lopez
+lorenzo
+love
+lunch
+malta
+mammal
+margin
+margo
+marion
+mask
+match
+mayday
+meaning
+mercy
+middle
+mike
+mirror
+modest
+morph
+morris
+mystic
+nadia
+nato
+navy
+needle
+neuron
+never
+newton
+nice
+night
+nissan
+nitro
+nixon
+north
+oberon
+octavia
+ohio
+olga
+open
+opus
+orca
+oval
+owner
+page
+paint
+palma
+parent
+parlor
+parole
+paul
+peace
+pearl
+perform
+phoenix
+phrase
+pierre
+pinball
+place
+plate
+plato
+plume
+pogo
+point
+polka
+poncho
+powder
+prague
+press
+presto
+pretty
+prime
+promo
+quest
+quick
+quiz
+quota
+race
+rachel
+raja
+ranger
+region
+remark
+rent
+reward
+rhino
+ribbon
+rider
+road
+rodent
+round
+rubber
+ruby
+rufus
+sabine
+saddle
+sailor
+saint
+salt
+scale
+scuba
+season
+secure
+shake
+shallow
+shannon
+shave
+shelf
+sherman
+shine
+shirt
+side
+sinatra
+sincere
+size
+slalom
+slow
+small
+snow
+sofia
+song
+sound
+south
+speech
+spell
+spend
+spoon
+stage
+stamp
+stand
+state
+stella
+stick
+sting
+stock
+store
+sunday
+sunset
+support
+supreme
+sweden
+swing
+tape
+tavern
+think
+thomas
+tictac
+time
+toast
+tobacco
+tonight
+torch
+torso
+touch
+toyota
+trade
+tribune
+trinity
+triton
+truck
+trust
+type
+under
+unit
+urban
+urgent
+user
+value
+vendor
+venice
+verona
+vibrate
+virgo
+visible
+vista
+vital
+voice
+vortex
+waiter
+watch
+wave
+weather
+wedding
+wheel
+whiskey
+wisdom
+android
+annex
+armani
+cake
+confide
+deal
+define
+dispute
+genuine
+idiom
+impress
+include
+ironic
+null
+nurse
+obscure
+prefer
+prodigy
+ego
+fax
+jet
+job
+rio
+ski
+yes