summary refs log tree commit diff
diff options
context:
space:
mode:
authorMaxwell Beck <max@rastertail.net>2025-05-13 12:11:27 -0500
committerMaxwell Beck <max@rastertail.net>2025-05-13 12:11:27 -0500
commit8d8f662ca2097866d6f6a7958bf91743ce55fbf5 (patch)
treead26d1173c9bc01b36350e2e8fed9f8fbc35cce1
Initial commit
-rw-r--r--.gitignore1
-rw-r--r--Cargo.lock535
-rw-r--r--Cargo.toml14
-rw-r--r--src/bin/pwp.rs8
-rw-r--r--src/lib.rs198
-rw-r--r--src/orchard-street-medium.txt8192
6 files changed, 8948 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..d80b081
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,535 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "base64ct"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"
+
+[[package]]
+name = "bitflags"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "const-oid"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "4.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest",
+ "fiat-crypto",
+ "rustc_version",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "der"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
+dependencies = [
+ "const-oid",
+ "zeroize",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+dependencies = [
+ "pkcs8",
+ "serde",
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "serde",
+ "sha2",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
+]
+
+[[package]]
+name = "include-lines"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be037b494f74d7bded0680228b3133bc268cbe50282f51c25fa46b890cfedb9"
+dependencies = [
+ "include-lines-proc",
+]
+
+[[package]]
+name = "include-lines-proc"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd1ff2792810c5bb1b591ae8ac768bda8b0238a3b61cb546d062709f2a6a4f77"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.172"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+[[package]]
+name = "pawprint"
+version = "0.1.0"
+dependencies = [
+ "aho-corasick",
+ "crc",
+ "ed25519-dalek",
+ "include-lines",
+ "rand_chacha",
+ "rmp-serde",
+ "serde",
+ "sha3",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r-efi"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+dependencies = [
+ "getrandom 0.3.3",
+]
+
+[[package]]
+name = "rmp"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
+
+[[package]]
+name = "serde"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest",
+ "keccak",
+]
+
+[[package]]
+name = "signature"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "subtle"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.101"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasi"
+version = "0.14.2+wasi-0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+dependencies = [
+ "wit-bindgen-rt",
+]
+
+[[package]]
+name = "wit-bindgen-rt"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.101",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..a80f9ae
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "pawprint"
+version = "0.1.0"
+edition = "2024"
+
+[dependencies]
+aho-corasick = "1.1.3"
+crc = "3.3.0"
+ed25519-dalek = { version = "2.1.1", features = ["serde"] }
+include-lines = "1.1.2"
+rand_chacha = { version = "0.9.0", features = ["os_rng"] }
+rmp-serde = "1.3.0"
+serde = { version = "1.0.219", features = ["derive"] }
+sha3 = "0.10.8"
diff --git a/src/bin/pwp.rs b/src/bin/pwp.rs
new file mode 100644
index 0000000..feaff93
--- /dev/null
+++ b/src/bin/pwp.rs
@@ -0,0 +1,8 @@
+use pawprint::Keypair;
+
+fn main() {
+    let pair = Keypair::new("test");
+    let encoded = pair.encode_secret().join(" ");
+    dbg!(&encoded);
+    let _pair2 = Keypair::from_encoded(encoded, "test");
+}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..5e2affe
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,198 @@
+use aho_corasick::{AhoCorasick, MatchKind};
+use crc::{CRC_4_G_704, Crc};
+use ed25519_dalek::{
+    SecretKey, Signature, SigningKey, VerifyingKey, ed25519::signature::SignerMut,
+};
+use include_lines::static_include_lines;
+use rand_chacha::{
+    ChaCha12Rng,
+    rand_core::{RngCore, SeedableRng},
+};
+use serde::{Deserialize, Serialize};
+use sha3::{Digest, Sha3_256};
+
+const CHECKSUM: Crc<u8> = Crc::<u8>::new(&CRC_4_G_704);
+static_include_lines!(DICTIONARY, "src/orchard-street-medium.txt");
+
+/// A signature verifying an arbitrary message
+#[derive(Clone, Debug, Serialize, Deserialize)]
+pub struct Certificate {
+    pub key: VerifyingKey,
+    pub sig: Signature,
+}
+
+impl Certificate {
+    /// Verify a message against this certificate
+    pub fn verify(&self, message: &[u8]) -> Result<(), ed25519_dalek::SignatureError> {
+        self.key.verify_strict(message, &self.sig)
+    }
+}
+
+/// Errors that may occur during sealed key decoding
+#[derive(Clone, Debug)]
+pub enum DecodeError {
+    WrongLength,
+    CrcMismatch,
+}
+
+/// A secret key, XOR'd with a hashed password as last-resort security
+#[derive(Serialize, Deserialize)]
+pub struct SealedKey([u8; 32]);
+
+impl SealedKey {
+    /// Seal a raw secret key with a given passphrase
+    pub fn seal(mut key: SecretKey, passphrase: impl AsRef<str>) -> Self {
+        // Initialize crypto
+        let mut hasher = Sha3_256::new();
+
+        // Hash passphrase
+        hasher.update(passphrase.as_ref());
+        let hash = hasher.finalize();
+
+        // XOR with passphrase hash
+        for (k, h) in key.iter_mut().zip(hash) {
+            *k ^= h;
+        }
+
+        Self(key)
+    }
+
+    /// Unseal into a raw secret key with a given passphrase
+    ///
+    /// No checks are done on if the passphrase was valid or not.
+    pub fn unseal(&self, passphrase: impl AsRef<str>) -> SecretKey {
+        // Initialize crypto
+        let mut hasher = Sha3_256::new();
+
+        // Hash passphrase
+        hasher.update(passphrase.as_ref());
+        let hash = hasher.finalize();
+
+        // XOR with passphrase hash
+        let mut key = self.0.clone();
+        for (k, h) in key.iter_mut().zip(hash) {
+            *k ^= h;
+        }
+
+        key
+    }
+
+    /// Encode the key into a list of words suitable for writing down and storing securely
+    fn encode(&self) -> [&'static str; 20] {
+        // Compute CRC
+        let checksum = CHECKSUM.checksum(&self.0);
+
+        // Break into 13-bit indices
+        let mut indices = [0usize; 20];
+        for (i, byte) in self.0.iter().enumerate() {
+            let bit = i * 8;
+            let idx = bit / 13;
+            let shift = (bit as isize) % 13 - 4;
+
+            if shift <= 0 {
+                indices[idx] |= (*byte as usize) << -shift;
+            } else {
+                indices[idx] |= (*byte as usize) >> shift;
+                indices[idx + 1] |= ((*byte as usize) << (13 - shift)) & 0x1fff;
+            }
+        }
+        indices[19] |= checksum as usize;
+
+        indices.map(|i| DICTIONARY[i])
+    }
+
+    pub fn decode(input: impl AsRef<str>) -> Result<Self, DecodeError> {
+        // Strip any non-alphabetic characters
+        let alpha = input
+            .as_ref()
+            .chars()
+            .filter(|c| c.is_alphabetic())
+            .collect::<String>();
+
+        // Construct Aho-Corasick automaton
+        // TODO See if this can be done at compile time
+        let ac = AhoCorasick::builder()
+            .match_kind(MatchKind::LeftmostLongest)
+            .ascii_case_insensitive(true)
+            .build(DICTIONARY)
+            .unwrap();
+
+        // Stream decode the input
+        let indices = ac
+            .find_iter(&alpha)
+            .map(|m| m.pattern().as_usize())
+            .collect::<Vec<_>>();
+
+        // Check length
+        if indices.len() != 20 {
+            return Err(DecodeError::WrongLength);
+        }
+
+        unimplemented!();
+    }
+}
+
+/// A public/sealed-secret keypair capable of producing certificates
+#[derive(Serialize, Deserialize)]
+pub struct Keypair {
+    public: VerifyingKey,
+    secret: SealedKey,
+}
+
+impl Keypair {
+    /// Create a new random keypair with a passphrase
+    pub fn new(passphrase: impl AsRef<str>) -> Self {
+        // Initalize crypto
+        let mut rng = ChaCha12Rng::from_os_rng();
+
+        // Generate secret key
+        let mut unsealed = SecretKey::default();
+        rng.fill_bytes(&mut unsealed);
+
+        // Derive public key
+        let public = SigningKey::from_bytes(&unsealed).verifying_key();
+
+        // Seal secret key
+        let secret = SealedKey::seal(unsealed, passphrase);
+
+        Self { public, secret }
+    }
+
+    /// Sign a message with this keypair
+    pub fn sign(&self, passphrase: impl AsRef<str>, message: &[u8]) -> Certificate {
+        // Unseal secret key
+        let unsealed = self.secret.unseal(passphrase);
+
+        // Sign message
+        let mut signer = SigningKey::from_bytes(&unsealed);
+        let signature = signer.sign(message);
+
+        Certificate {
+            key: self.public.clone(),
+            sig: signature,
+        }
+    }
+
+    /// Sign this keypair's public key with itself
+    pub fn self_sign(&self, passphrase: impl AsRef<str>) -> Certificate {
+        self.sign(passphrase, self.public.as_bytes())
+    }
+
+    /// Encode the secret key into a list of words suitable for writing down and storing securely
+    pub fn encode_secret(&self) -> [&'static str; 20] {
+        self.secret.encode()
+    }
+
+    pub fn from_encoded(
+        encoded: impl AsRef<str>,
+        passphrase: impl AsRef<str>,
+    ) -> Result<Self, DecodeError> {
+        let sealed = SealedKey::decode(encoded)?;
+        let unsealed = sealed.unseal(passphrase);
+
+        Ok(Self {
+            public: SigningKey::from_bytes(&unsealed).verifying_key(),
+            secret: sealed,
+        })
+    }
+}
diff --git a/src/orchard-street-medium.txt b/src/orchard-street-medium.txt
new file mode 100644
index 0000000..827cd47
--- /dev/null
+++ b/src/orchard-street-medium.txt
@@ -0,0 +1,8192 @@
+abandon
+abandoned
+abbey
+abbot
+abdomen
+abdominal
+abilities
+abnormal
+aboard
+abolished
+abolition
+aboriginal
+abortion
+above
+abroad
+abruptly
+absence
+absent
+absolute
+absolutely
+absorb
+absorbed
+absorption
+abstract
+absurd
+abundance
+abundant
+abuse
+abused
+academia
+academic
+academics
+academy
+accent
+accept
+acceptable
+acceptance
+accepted
+accepting
+accepts
+access
+accessed
+accessible
+accession
+accident
+accidental
+accidents
+acclaim
+acclaimed
+accolades
+accompany
+accomplish
+accord
+accordance
+according
+account
+accounted
+accounting
+accounts
+accredited
+accuracy
+accurate
+accurately
+accused
+accustomed
+achieve
+achieved
+achieving
+acid
+acids
+acoustic
+acquainted
+acquire
+acquired
+acquiring
+acres
+across
+acting
+activated
+activation
+actively
+activism
+activist
+activists
+activities
+activity
+actress
+actually
+acute
+adapt
+adaptation
+adapted
+adaptive
+add
+added
+addiction
+adding
+addition
+additional
+additions
+address
+addressed
+addresses
+addressing
+adds
+adequately
+adherence
+adjacent
+adjoining
+adjust
+adjusted
+adjusting
+adjustment
+administer
+admiral
+admiralty
+admiration
+admired
+admission
+admissions
+admit
+admits
+admitted
+adolescent
+adopt
+adopted
+adopting
+adoption
+adult
+adulthood
+adults
+advance
+advanced
+advances
+advancing
+advantage
+advantages
+advent
+adventure
+adventures
+adverse
+advice
+advise
+advised
+adviser
+advisers
+advisory
+advocacy
+advocate
+advocated
+advocates
+aerial
+affair
+affairs
+affected
+affecting
+affection
+affiliate
+affiliated
+affinity
+affirmed
+afford
+affordable
+afforded
+afghan
+afraid
+aftermath
+afternoon
+afterward
+afterwards
+again
+against
+agencies
+agency
+agenda
+agent
+agents
+aggregate
+aggression
+aggressive
+agitation
+agrarian
+agree
+agreed
+agreement
+agreements
+agrees
+ahead
+aided
+aim
+aimed
+aiming
+aims
+airborne
+aircraft
+airfield
+airing
+airline
+airlines
+airplane
+airport
+airports
+airway
+airways
+alarm
+albeit
+album
+albums
+alcohol
+alcoholic
+alcoholism
+alert
+algebra
+algorithm
+algorithms
+alias
+alien
+alienation
+align
+aligned
+alignment
+alike
+alive
+alleged
+allegedly
+allegiance
+alley
+alliance
+alliances
+allied
+allies
+allocated
+allocation
+allowance
+allowed
+allowing
+allows
+alloy
+alloys
+almost
+alone
+along
+alongside
+aloud
+alpha
+alphabet
+alpine
+already
+altar
+alter
+alteration
+altered
+alternate
+although
+altitude
+alto
+altogether
+aluminum
+alumni
+always
+amateur
+amazed
+amazing
+amazon
+ambassador
+ambiguity
+ambiguous
+ambition
+ambitions
+ambitious
+ambulance
+amended
+amendment
+amendments
+amenities
+amid
+amino
+ammunition
+amnesty
+among
+amounted
+amounts
+amphibious
+amplifier
+amplitude
+amusement
+analog
+analogous
+analogy
+analysis
+analyst
+analysts
+analytic
+analytical
+analyze
+analyzed
+analyzing
+anatomy
+ancestor
+ancestors
+ancestral
+ancestry
+anchor
+anchored
+ancient
+android
+anemia
+anesthesia
+angel
+angels
+angle
+angles
+angry
+angular
+animal
+animals
+animated
+animation
+anime
+ankle
+annals
+annexation
+annexed
+announced
+announcing
+annual
+annually
+anonymous
+answer
+answered
+answering
+answers
+antarctic
+antenna
+anterior
+anthem
+anthology
+antibodies
+antibody
+anticipate
+antigen
+antigens
+antiquity
+anxiety
+anxious
+anybody
+anymore
+anyone
+anything
+anywhere
+apart
+apartment
+apartments
+apex
+apostles
+apostolic
+app
+apparatus
+apparent
+apparently
+appeal
+appealed
+appealing
+appeals
+appear
+appearance
+appeared
+appearing
+appears
+appendix
+appetite
+apple
+apples
+applicable
+applicant
+applicants
+applied
+applies
+apply
+applying
+appoint
+appointed
+appraisal
+appreciate
+apprentice
+approach
+approached
+approaches
+approval
+approve
+approved
+aquatic
+arbitrary
+arc
+arcade
+archbishop
+archer
+architect
+architects
+archive
+archives
+area
+areas
+arena
+argue
+argued
+argues
+arguing
+argument
+arguments
+arise
+arises
+arising
+arithmetic
+armament
+armed
+armies
+armor
+armored
+army
+arose
+around
+arrange
+arranged
+array
+arrest
+arrested
+arrests
+arrival
+arrive
+arrived
+arrives
+arriving
+arrows
+arsenal
+arteries
+artery
+arthritis
+articulate
+artifacts
+artificial
+artillery
+artist
+artistic
+artists
+artwork
+ascertain
+ashamed
+ashes
+aside
+asking
+asleep
+aspect
+aspects
+aspiration
+assault
+assembled
+assembly
+assert
+asserted
+assertion
+asserts
+assess
+assessed
+assessing
+assessment
+asset
+assets
+assign
+assigned
+assignment
+assistance
+assistant
+assistants
+assisted
+assisting
+assists
+associate
+associated
+associates
+assume
+assumed
+assumes
+assuming
+assumption
+assurance
+assure
+assured
+asteroid
+asthma
+astronomer
+astronomy
+asylum
+athlete
+athletes
+athletic
+athletics
+atlas
+atmosphere
+atom
+atomic
+atoms
+atop
+attach
+attached
+attachment
+attack
+attacked
+attacking
+attacks
+attain
+attained
+attainment
+attempt
+attempted
+attempting
+attempts
+attend
+attendance
+attendant
+attended
+attending
+attention
+attested
+attitude
+attitudes
+attorney
+attorneys
+attract
+attracted
+attracting
+attraction
+attractive
+attribute
+attributed
+attributes
+auburn
+auction
+audience
+audiences
+audio
+audit
+audition
+auditorium
+auditory
+august
+aunt
+authentic
+author
+authored
+authority
+authorized
+authors
+auto
+automated
+automatic
+automation
+automobile
+automotive
+autonomous
+autonomy
+autumn
+available
+avenue
+average
+averaged
+averaging
+aviation
+avoid
+avoidance
+avoided
+avoiding
+awake
+awakening
+award
+awarded
+awards
+awareness
+away
+awful
+awkward
+axial
+axis
+babies
+baby
+bachelor
+backed
+background
+backing
+backs
+backup
+backward
+bacon
+bacteria
+bacterial
+bad
+badge
+badly
+badminton
+bag
+bagel
+bags
+bail
+baker
+baking
+balance
+balanced
+balances
+balancing
+ballad
+ballet
+balloon
+ballot
+ballots
+banana
+band
+bands
+bandwidth
+bang
+banjo
+bank
+banker
+banking
+bankruptcy
+banks
+banned
+banner
+baptism
+bar
+barber
+bare
+barely
+bargain
+bargaining
+bark
+barker
+barn
+baron
+baronet
+baroque
+barracks
+barrel
+barrier
+barriers
+bars
+basal
+baseball
+based
+baseline
+basement
+basic
+basically
+basil
+basin
+basis
+basket
+basketball
+bass
+bassist
+batch
+bath
+bathroom
+bats
+battalion
+battalions
+batted
+batteries
+battery
+batting
+battle
+battles
+bay
+bays
+beach
+beaches
+beads
+beam
+beams
+bean
+beans
+bear
+beard
+bearing
+bears
+beast
+beat
+beaten
+beating
+beats
+beautiful
+beauty
+beaver
+became
+beck
+become
+becomes
+becoming
+bedroom
+beds
+bee
+beef
+beer
+bees
+beetle
+beetles
+beg
+began
+begin
+beginning
+beginnings
+begins
+begun
+behalf
+behave
+behavior
+behavioral
+behind
+behold
+being
+beings
+belief
+beliefs
+believe
+believed
+believers
+believes
+believing
+bell
+bells
+belly
+belong
+belonged
+belonging
+belongs
+beloved
+below
+belt
+bench
+bend
+bending
+beneath
+beneficial
+benefit
+benefited
+benefits
+benign
+bent
+berry
+beside
+besides
+best
+beta
+betrayed
+better
+beyond
+bias
+biased
+bible
+biblical
+bicycle
+bid
+big
+bigger
+biggest
+bike
+bilateral
+bilingual
+bill
+billboard
+billion
+bills
+binary
+bind
+binding
+biographer
+biography
+biological
+biology
+biopsy
+bird
+birds
+birth
+birthday
+births
+bishops
+bite
+bits
+bitter
+black
+bladder
+blade
+blades
+blame
+blamed
+blank
+blanket
+blast
+bleeding
+blend
+bless
+blessed
+blessing
+blessings
+blew
+blimp
+blind
+block
+blockade
+blocked
+blocking
+blocks
+blog
+blood
+bloody
+bloom
+blow
+blowing
+blown
+blows
+blue
+blues
+boarding
+boat
+boats
+bobby
+bodies
+bodily
+boil
+boiling
+bold
+bolt
+bomb
+bomber
+bombers
+bombing
+bombs
+bond
+bonding
+bonds
+bone
+bones
+bonus
+boom
+boost
+boot
+booth
+boots
+border
+bordered
+borders
+bore
+bored
+boring
+born
+borough
+borrow
+borrowed
+borrowing
+boss
+botanical
+botanist
+botany
+bother
+bottle
+bottles
+bottom
+bought
+boulder
+boulevard
+bound
+boundaries
+boundary
+bounded
+bout
+bowed
+bowl
+bowler
+bowling
+bowls
+box
+boxer
+boxes
+boxing
+boy
+boycott
+boyfriend
+brain
+brains
+brake
+branch
+branches
+brand
+branded
+branding
+brands
+brass
+brave
+braves
+breach
+bread
+breadth
+breakdown
+breakfast
+breaking
+breaks
+breath
+breathe
+breathing
+breed
+breeding
+breeze
+brethren
+brewery
+brick
+bride
+bridge
+bridges
+brief
+briefly
+brigade
+brigades
+bright
+brilliant
+bring
+bringing
+brings
+broadcast
+broadcasts
+broader
+broadly
+broke
+broken
+broker
+broncos
+bronze
+brook
+brooks
+brother
+brothers
+brought
+brow
+brown
+browns
+browser
+brunch
+brush
+brutal
+bubble
+buck
+buddy
+budget
+budgets
+buffalo
+buffer
+builder
+buildings
+builds
+bulk
+bull
+bulldogs
+bullet
+bulletin
+bullets
+bulls
+bunch
+bundle
+burden
+bureau
+burial
+burned
+burning
+burns
+burnt
+burst
+bury
+bus
+bush
+business
+businesses
+busy
+butler
+butter
+butterfly
+button
+buttons
+buy
+buyer
+buyers
+buying
+bye
+bypass
+cab
+cabin
+cabinet
+cable
+cache
+cadet
+cadets
+cage
+cake
+calcium
+calculate
+calculated
+calendar
+calling
+calm
+calories
+cameo
+camera
+cameras
+camp
+campaign
+campaigned
+campaigns
+camping
+camps
+campus
+campuses
+canal
+cancel
+canceled
+cancer
+candidacy
+candidate
+candidates
+candle
+candy
+cane
+cannabis
+cannon
+cannot
+canoe
+canon
+canvas
+canyon
+cap
+capability
+capacities
+capacity
+capillary
+capital
+capitalism
+capitalist
+capitals
+capped
+caps
+captain
+captained
+captive
+captivity
+capture
+captured
+capturing
+car
+carbon
+carbonate
+card
+cardiac
+cardinal
+cardinals
+cards
+career
+careers
+careful
+carefully
+cargo
+caring
+carnival
+carol
+carpenter
+carpet
+carriage
+carried
+carrier
+carriers
+carries
+carry
+carrying
+cars
+cart
+cartoon
+cartoons
+carved
+cases
+cash
+casino
+casting
+castle
+castles
+casual
+casualties
+cat
+catalog
+catalyst
+catch
+catches
+catching
+categories
+category
+cathedral
+cattle
+caucus
+caught
+causal
+cause
+caused
+causes
+causing
+caution
+cautious
+cavalry
+cave
+caves
+cavity
+cease
+cedar
+ceiling
+celebrate
+celebrated
+celebrity
+cell
+cells
+cellular
+cement
+cemetery
+censorship
+census
+centennial
+center
+centered
+centers
+central
+cents
+centuries
+century
+ceramic
+ceramics
+cerebral
+ceremonial
+ceremonies
+ceremony
+certainly
+certainty
+certified
+chain
+chains
+chaired
+chairman
+chairs
+challenge
+challenged
+challenger
+challenges
+chamber
+chambers
+champion
+champions
+chance
+chancellor
+chances
+changing
+channel
+channels
+chaos
+chap
+chapel
+chaplain
+chapter
+chapters
+character
+characters
+charge
+charged
+charges
+charging
+charitable
+charities
+charity
+charm
+charming
+chart
+charted
+charter
+chartered
+charts
+chassis
+chat
+cheap
+cheaper
+check
+checked
+checking
+checklist
+checks
+cheek
+cheeks
+cheerful
+cheese
+chef
+chemical
+chemicals
+chemist
+chemistry
+cherry
+chess
+chest
+chicken
+chief
+chiefly
+chiefs
+child
+childhood
+children
+chin
+china
+chip
+chips
+chloride
+chocolate
+choice
+choices
+choir
+choose
+chooses
+choosing
+chopped
+choral
+chord
+chorus
+chose
+chosen
+chromosome
+chronic
+chronicle
+chronicles
+chuck
+churches
+cigarette
+cigarettes
+cinema
+circa
+circle
+circles
+circuit
+circuits
+circular
+circus
+citadel
+cite
+cites
+cities
+citizen
+citizens
+city
+civic
+civil
+civilian
+civilians
+civilized
+claim
+claiming
+claims
+clamp
+clan
+clarify
+clarity
+clash
+clashes
+class
+classes
+classic
+classical
+classics
+classified
+classroom
+classrooms
+clause
+clauses
+clay
+clean
+cleaned
+cleaning
+clearance
+cleared
+clearer
+clearing
+clearly
+clement
+clergy
+clerical
+clerk
+clever
+click
+clicking
+client
+clients
+cliff
+cliffs
+climate
+climatic
+climb
+climbed
+climbing
+clinic
+clinical
+clinically
+clip
+clock
+close
+closely
+closer
+closest
+closet
+closing
+closure
+cloth
+clothes
+clothing
+cloud
+clouds
+clubs
+clue
+clues
+cluster
+clusters
+coach
+coached
+coaches
+coaching
+coal
+coalition
+coarse
+coast
+coastal
+coastline
+coat
+coated
+coating
+code
+codes
+codex
+coffee
+cognition
+cognitive
+coherence
+coherent
+coil
+coin
+coined
+coins
+cold
+collapse
+collapsed
+collar
+collateral
+colleague
+colleagues
+collect
+collected
+collecting
+collection
+collective
+collector
+collectors
+college
+colleges
+collegiate
+collision
+cologne
+colon
+colonel
+colonial
+colonies
+colonists
+colony
+color
+colors
+colt
+colts
+column
+columnist
+columns
+combat
+combine
+combined
+combines
+combining
+combustion
+comeback
+comedian
+comedy
+comfort
+comic
+comics
+command
+commanded
+commander
+commanders
+commanding
+commands
+commenced
+comment
+commentary
+commented
+commenting
+comments
+commerce
+commercial
+commission
+commit
+commitment
+committed
+committee
+committees
+commodity
+commodore
+commonly
+commons
+communal
+commune
+communes
+communion
+communism
+communist
+communists
+community
+commuter
+compact
+companies
+companion
+companions
+company
+comparable
+compare
+compared
+compares
+comparing
+comparison
+compassion
+compatible
+compelled
+compelling
+compensate
+compete
+competed
+competence
+competent
+competes
+competing
+competitor
+compiled
+complain
+complained
+complaint
+complaints
+completed
+completely
+completing
+completion
+complex
+complexes
+complexity
+compliance
+comply
+component
+components
+composed
+composer
+composers
+composing
+composite
+compound
+compounds
+comprehend
+compressed
+comprise
+comprised
+comprises
+comprising
+compromise
+compulsory
+compute
+computed
+computer
+computers
+computing
+conceal
+concealed
+conceive
+conceived
+concept
+conception
+concepts
+conceptual
+concern
+concerned
+concerning
+concerns
+concert
+concerto
+concerts
+conclude
+concluded
+concludes
+concluding
+conclusion
+concrete
+concurrent
+condemned
+condition
+conditions
+conduct
+conducted
+conducting
+conduction
+conductor
+cone
+conference
+conferred
+confess
+confession
+confidence
+confident
+confined
+confirm
+confirmed
+confirms
+conflict
+conflicts
+confluence
+conform
+conformity
+confront
+confronted
+confused
+confusing
+confusion
+congenital
+congress
+connect
+connected
+connecting
+connection
+connects
+conquered
+conquest
+conscience
+conscious
+consensus
+consent
+consider
+considered
+considers
+consist
+consisted
+consistent
+consisting
+consists
+console
+consortium
+conspiracy
+constable
+constant
+constantly
+constants
+constitute
+constraint
+construct
+constructs
+consul
+consult
+consultant
+consulted
+consulting
+consume
+consumed
+consumer
+consumers
+consuming
+contact
+contacted
+contacts
+contain
+contained
+container
+containers
+containing
+contains
+contempt
+content
+contention
+contents
+contest
+contestant
+contested
+contests
+context
+contexts
+continent
+contingent
+continual
+continue
+continued
+continues
+continuing
+continuity
+continuous
+continuum
+contour
+contract
+contracted
+contractor
+contracts
+contrary
+contrast
+contrasted
+contrasts
+contribute
+control
+controlled
+controller
+controls
+convenient
+convent
+convention
+conversely
+conversion
+convert
+converted
+converting
+converts
+convey
+conveyed
+convicted
+conviction
+convince
+convinced
+convincing
+convoy
+cook
+cooked
+cooking
+cool
+cooling
+cooper
+cooperate
+coordinate
+copied
+copies
+coping
+copper
+copy
+copying
+copyright
+coral
+cork
+corn
+corner
+corners
+coronary
+coronation
+corporate
+corps
+corpus
+corrected
+correction
+correctly
+correlated
+correspond
+corridor
+corrosion
+corrupt
+corruption
+cortex
+cosmic
+cost
+costly
+costs
+costume
+costumes
+cottage
+cotton
+couch
+cough
+council
+councils
+counsel
+counseling
+counselor
+count
+counted
+countess
+counties
+counting
+countless
+countries
+country
+counts
+county
+coup
+couple
+coupled
+couples
+coupling
+course
+courses
+court
+courtesy
+courthouse
+courts
+courtyard
+cousin
+cousins
+cove
+covenant
+coverage
+covers
+cow
+cowboys
+cows
+crack
+cracks
+crafts
+crane
+crash
+crashed
+crater
+crazy
+create
+created
+creates
+creating
+creative
+creativity
+creator
+creature
+creatures
+credit
+credited
+creditor
+creditors
+credits
+creek
+crescent
+crest
+crews
+cricket
+cricketer
+cried
+cries
+crime
+crimes
+criminal
+criminals
+crimson
+crises
+crisis
+criteria
+criterion
+critic
+critical
+critically
+criticism
+criticisms
+criticized
+critics
+critique
+crop
+crops
+crossed
+crosses
+crossing
+crossover
+crow
+crowd
+crowded
+crowds
+crown
+crowned
+crucial
+crude
+cruel
+cruelty
+cruise
+cruiser
+crusade
+crushed
+crust
+cry
+crying
+crystal
+crystals
+cubic
+cubs
+cues
+cuisine
+culminated
+cult
+cultivated
+cultural
+culturally
+culture
+cultures
+cumulative
+cup
+cups
+curator
+curiosity
+curious
+curling
+currency
+currently
+currents
+curriculum
+curse
+curtain
+curve
+curved
+curves
+custody
+custom
+customary
+customer
+customers
+customs
+cut
+cuts
+cutting
+cycles
+cyclic
+cycling
+cyclist
+cyclone
+cylinder
+dad
+daddy
+daily
+dairy
+dam
+damage
+damaged
+damages
+damaging
+dame
+damp
+dams
+dancer
+dancers
+dances
+dancing
+danger
+dangerous
+dangers
+dare
+dared
+daring
+dark
+darker
+darkness
+darling
+dash
+dashed
+data
+database
+databases
+dating
+daughter
+daughters
+dawn
+daylight
+days
+daytime
+dead
+deadline
+deadly
+deaf
+dealer
+dealers
+dealing
+dealt
+dean
+dear
+death
+deaths
+debate
+debates
+debris
+debt
+debtor
+debts
+debut
+decade
+decades
+decay
+deceased
+decent
+deception
+decide
+decided
+decides
+deciding
+decimal
+decision
+decisions
+decisive
+deck
+declare
+declared
+declares
+declaring
+decline
+declined
+declining
+decorated
+decoration
+decorative
+decrease
+decreased
+decreases
+decreasing
+decree
+dedicated
+dedication
+deduction
+deductions
+deeds
+deemed
+deep
+deeper
+deepest
+deeply
+deer
+default
+defeat
+defeating
+defeats
+defect
+defective
+defects
+defend
+defendant
+defendants
+defended
+defender
+defenders
+defending
+defense
+defenses
+defensive
+deferred
+deficiency
+deficient
+deficit
+deficits
+define
+defined
+defines
+defining
+definite
+definitely
+definition
+definitive
+defunct
+degree
+degrees
+deities
+deity
+delay
+delayed
+delays
+delegate
+delegates
+delegation
+delete
+deliberate
+delicate
+delicious
+delight
+delighted
+delightful
+deliver
+delivered
+delivering
+delivery
+delta
+demand
+demanded
+demanding
+demands
+dementia
+demise
+demo
+democracy
+democrat
+democratic
+democrats
+demolished
+demolition
+demon
+denial
+denied
+denote
+denotes
+denounced
+dense
+densities
+density
+dental
+deny
+denying
+departed
+departing
+department
+departure
+depend
+depended
+dependence
+dependency
+dependent
+depending
+depends
+depict
+depicted
+depicting
+depiction
+depicts
+depletion
+deployed
+deployment
+deported
+deposit
+deposited
+deposition
+deposits
+depot
+depressed
+depression
+deprived
+dept
+depth
+depths
+deputies
+deputy
+derby
+derivative
+derive
+derived
+derives
+descendant
+descended
+descending
+descent
+describe
+described
+describes
+describing
+desert
+deserted
+deserve
+deserved
+deserves
+design
+designated
+designed
+designer
+designers
+designing
+designs
+desirable
+desire
+desired
+desires
+desk
+desktop
+despair
+desperate
+despite
+destined
+destiny
+destroy
+destroyed
+destroyer
+destroyers
+destroying
+detached
+detachment
+detail
+detailed
+details
+detained
+detect
+detected
+detection
+detective
+detector
+detention
+determine
+determined
+determines
+devastated
+develop
+developed
+developer
+developers
+developing
+develops
+deviation
+deviations
+device
+devices
+devil
+devils
+devised
+devote
+devoted
+devotion
+diabetes
+diagnosed
+diagnosis
+diagnostic
+diagram
+diagrams
+dialect
+dialects
+dialog
+diameter
+diamond
+diamonds
+diary
+dictated
+dictionary
+die
+died
+diesel
+diet
+dietary
+differ
+differed
+difference
+different
+differing
+differs
+difficult
+difficulty
+diffuse
+diffusion
+dig
+digest
+digging
+digit
+digital
+dignity
+dilemma
+dim
+dimension
+dimensions
+diminish
+diminished
+dining
+dinner
+diocese
+dioxide
+dip
+diploma
+diplomacy
+diplomat
+diplomatic
+directed
+directing
+direction
+directions
+directive
+director
+directors
+directory
+dirt
+dirty
+disability
+disabled
+disagree
+disappear
+disaster
+disastrous
+disbanded
+discarded
+discharge
+discharged
+disciples
+discipline
+disclose
+disclosed
+disclosure
+disco
+discomfort
+discount
+discourse
+discourses
+discover
+discovered
+discovers
+discovery
+discrete
+discretion
+discuss
+discussed
+discusses
+discussing
+discussion
+disease
+diseases
+dish
+dishes
+disk
+disks
+dismiss
+dismissal
+dismissed
+disorder
+disorders
+dispatched
+dispersed
+dispersion
+displaced
+display
+displayed
+displaying
+displays
+disposal
+disposed
+dispute
+disputed
+disputes
+disruption
+dissent
+dissolved
+distance
+distances
+distant
+distinct
+distinctly
+distorted
+distortion
+distress
+distribute
+district
+districts
+disturbed
+disturbing
+dive
+diverse
+diversity
+divide
+dividend
+dividends
+dividing
+divine
+diving
+division
+divisional
+divisions
+divorce
+divorced
+dock
+doctor
+doctoral
+doctorate
+doctors
+doctrine
+doctrines
+document
+documented
+documents
+dodge
+dodgers
+dog
+doing
+doll
+dollar
+dollars
+dolphins
+domain
+domains
+dome
+domestic
+dominance
+dominant
+dominate
+dominated
+domination
+dominion
+donated
+donation
+donations
+done
+donor
+donors
+doors
+doorway
+dorsal
+dosage
+dose
+doses
+dot
+double
+doubled
+doubles
+doubt
+doubtful
+doubtless
+doubts
+download
+downstairs
+downstream
+downtown
+downward
+dozen
+dozens
+draft
+drafted
+drag
+dragged
+dragon
+dragons
+drain
+drainage
+drained
+drama
+dramas
+dramatic
+drank
+draw
+drawing
+drawings
+drawn
+draws
+dreadful
+dream
+dreamed
+dreaming
+dreams
+drew
+dried
+drift
+drill
+drilling
+drink
+drinking
+drinks
+drive
+driven
+driver
+drivers
+drives
+driving
+drop
+dropped
+dropping
+drops
+drought
+drove
+drug
+drugs
+drum
+drummer
+drums
+drunk
+dry
+drying
+dual
+dubbed
+duchess
+duck
+ducks
+due
+duet
+dug
+duke
+dull
+duly
+dumb
+duo
+duration
+dust
+duties
+duty
+dwarf
+dwell
+dwelling
+dwellings
+dye
+dying
+dynamic
+dynamics
+dynamo
+dynasty
+eager
+eagerly
+eagle
+eagles
+earlier
+earliest
+earnest
+earnings
+earth
+earthly
+earthquake
+easier
+easily
+eastern
+echo
+echoed
+echoes
+eclipse
+ecological
+ecology
+economic
+economics
+economies
+economist
+economists
+economy
+ecosystem
+ecosystems
+edge
+edges
+edit
+edited
+editing
+edition
+editions
+editor
+editorial
+editors
+educated
+education
+educator
+educators
+effect
+effected
+effective
+effects
+efficacy
+efficiency
+efficient
+effort
+efforts
+egg
+eggs
+ego
+eighteen
+eighteenth
+eighth
+eighty
+elaborate
+elastic
+elasticity
+elbow
+elder
+elderly
+elders
+eldest
+elections
+electoral
+electorate
+electric
+electrical
+electrode
+electrodes
+electron
+electronic
+electrons
+elegant
+element
+elementary
+elements
+elephant
+elevated
+elevation
+elevations
+elevator
+eleven
+eleventh
+eligible
+eliminate
+eliminated
+elite
+elites
+else
+elsewhere
+email
+embarked
+embassy
+embedded
+emblem
+embodied
+embrace
+embraced
+embryo
+emerge
+emerged
+emergence
+emergency
+emerges
+emerging
+emeritus
+emigrated
+emigration
+eminent
+emirates
+emission
+emissions
+emotion
+emotional
+emotions
+emperor
+emphasis
+emphasize
+emphasized
+emphasizes
+empire
+empirical
+employ
+employee
+employees
+employer
+employers
+employing
+employment
+employs
+empress
+empty
+enable
+enabled
+enables
+enabling
+enacted
+enclosed
+encoded
+encoding
+encounter
+encounters
+encourage
+encouraged
+encourages
+endangered
+endemic
+endless
+endorsed
+endowment
+endurance
+endure
+enduring
+enemies
+enemy
+energetic
+energies
+energy
+enforce
+enforced
+engage
+engaged
+engagement
+engaging
+engine
+engineer
+engineers
+engines
+enhance
+enhanced
+enhancing
+enjoy
+enjoyed
+enjoying
+enjoyment
+enlarged
+enlisted
+enormous
+enough
+enrolled
+enrollment
+ensemble
+enslaved
+ensuing
+ensure
+ensured
+ensures
+ensuring
+entails
+entering
+enterprise
+enthusiasm
+entire
+entirely
+entirety
+entitled
+entrance
+entrants
+entries
+entry
+envelope
+envy
+enzyme
+enzymes
+epic
+epidemic
+episcopal
+episode
+episodes
+epithet
+equally
+equals
+equation
+equations
+equipment
+equipped
+equitable
+equity
+equivalent
+erect
+erected
+erosion
+erotic
+errors
+escape
+escaped
+escapes
+escort
+escorted
+especially
+essay
+essays
+essence
+essential
+establish
+estate
+estates
+esteem
+estimate
+estimated
+estimates
+estimating
+estimation
+estrogen
+eternal
+eternity
+ethic
+ethical
+ethics
+ethnic
+ethnicity
+etymology
+euro
+evacuated
+evacuation
+evaluate
+evaluated
+evaluating
+evaluation
+eve
+evening
+evenly
+event
+events
+eventual
+eventually
+every
+everybody
+everyday
+everyone
+everything
+everywhere
+evidence
+evident
+evidently
+evoked
+evolve
+evolved
+evolving
+exact
+exactly
+exam
+examine
+examined
+examines
+examining
+example
+examples
+excavated
+excavation
+exceed
+exceeded
+exceeding
+exceeds
+excel
+excellence
+excellent
+except
+exception
+exceptions
+excess
+excessive
+exchange
+exchanged
+exchanges
+excitation
+excited
+excitement
+exciting
+exclaimed
+exclude
+excluded
+excluding
+exclusion
+exclusive
+excuse
+execute
+executive
+executives
+exempt
+exemption
+exercise
+exercised
+exercises
+exercising
+exert
+exerted
+exhaust
+exhausted
+exhibit
+exhibited
+exhibition
+exhibits
+exile
+exiled
+exist
+existed
+existence
+existing
+exists
+exit
+exotic
+expand
+expanded
+expanding
+expansion
+expect
+expecting
+expedition
+expelled
+expense
+expenses
+expensive
+experience
+experiment
+expert
+expertise
+experts
+expired
+explain
+explained
+explaining
+explains
+explicit
+explicitly
+exploit
+exploited
+explore
+explored
+explorer
+explores
+exploring
+explosion
+explosive
+export
+exported
+exports
+expose
+exposed
+exposition
+exposure
+express
+expressed
+expresses
+expressing
+expression
+expressive
+expressly
+expressway
+extant
+extend
+extended
+extending
+extends
+extension
+extensions
+extensive
+extent
+exterior
+external
+extinct
+extinction
+extra
+extract
+extracted
+extraction
+extracts
+extreme
+extremely
+extremes
+eye
+eyed
+eyes
+fabric
+facade
+faced
+facial
+facilitate
+facilities
+facility
+facing
+fact
+faction
+factions
+factor
+factories
+factors
+factory
+facts
+factual
+faculties
+faculty
+faded
+fail
+failed
+failing
+fails
+failure
+failures
+faint
+fairly
+fairness
+fairy
+faith
+faithful
+fake
+falcon
+falcons
+fallen
+falling
+falls
+false
+fame
+familial
+families
+family
+famine
+famous
+fan
+fans
+fantasies
+fantastic
+fantasy
+far
+farewell
+farm
+farmer
+farmers
+farming
+farmland
+farms
+farther
+fascist
+fashion
+fashioned
+faster
+fastest
+fat
+fatal
+fate
+father
+fathers
+fatigue
+fatty
+faults
+fauna
+favor
+favorable
+favored
+favorite
+fax
+fear
+feared
+fearful
+fears
+feasible
+feast
+feathers
+feature
+featured
+features
+featuring
+fed
+federal
+federation
+fee
+feed
+feedback
+feeding
+feeds
+feel
+feeling
+feelings
+feels
+fees
+feet
+fell
+fellow
+fellows
+fellowship
+felt
+female
+females
+feminine
+feminism
+feminist
+feminists
+fence
+fencing
+ferry
+fertile
+fertility
+fertilizer
+festival
+festivals
+fetal
+fetus
+feud
+feudal
+fever
+few
+fewer
+fiber
+fibers
+fiction
+fictional
+fields
+fierce
+fifteen
+fifteenth
+fifth
+fifty
+fig
+fight
+fighter
+fighters
+fighting
+fights
+figs
+figure
+figured
+figures
+filed
+filing
+film
+filmed
+filming
+filmmaker
+filmmakers
+films
+filter
+filters
+fin
+finale
+finalist
+finalists
+finally
+finance
+financed
+finances
+financial
+financing
+find
+finding
+findings
+finds
+finely
+finest
+finger
+fingers
+finish
+finished
+finishes
+finishing
+fire
+firearms
+fired
+fires
+firing
+firmly
+fiscal
+fisher
+fisheries
+fishing
+fist
+fitness
+fitted
+fitting
+five
+fix
+fixation
+fixed
+fixing
+fixture
+fixtures
+flag
+flags
+flagship
+flame
+flames
+flank
+flap
+flash
+flat
+flats
+flavor
+fled
+flee
+fleeing
+fleet
+flesh
+flew
+flexible
+flies
+flight
+flights
+flint
+float
+floating
+flood
+flooded
+flooding
+floods
+floor
+floors
+flora
+flotilla
+flour
+flow
+flower
+flowering
+flowers
+flowing
+flown
+flows
+fluid
+fluids
+flute
+flux
+flying
+foam
+focal
+focus
+focused
+focuses
+focusing
+fog
+fold
+folded
+folder
+folk
+folklore
+folks
+follow
+followed
+followers
+following
+follows
+fond
+font
+food
+foods
+fool
+foolish
+foot
+footage
+football
+footballer
+forbidden
+forces
+forcing
+forecast
+foregoing
+forehead
+foreign
+foreigners
+foremost
+forensic
+forest
+forested
+forestry
+forests
+forever
+forget
+forgive
+forgot
+forgotten
+fork
+formally
+format
+formation
+formations
+formats
+formerly
+formidable
+formula
+formulas
+formulate
+formulated
+forth
+fortified
+fortress
+fortunate
+fortune
+fortunes
+forty
+forum
+forward
+fossil
+fossils
+foster
+fought
+foundation
+founded
+founder
+founders
+founding
+fountain
+four
+fourteen
+fourteenth
+fourth
+fox
+fraction
+fractions
+fracture
+fractures
+fragile
+fragment
+fragments
+frame
+framed
+frames
+framework
+framing
+franchise
+frank
+fraternity
+fraud
+free
+freed
+freedom
+freelance
+freely
+freeman
+freestyle
+freeway
+freeze
+freezing
+freight
+french
+frequency
+frequent
+frequently
+fresh
+freshman
+freshwater
+friction
+friendly
+friends
+friendship
+frigate
+frightened
+fringe
+frog
+frontal
+frontier
+frost
+frozen
+fruit
+fruits
+frustrated
+fuel
+fuels
+fulfill
+fulfilled
+fulfilling
+full
+fuller
+fun
+function
+functional
+functions
+fund
+funded
+funding
+funds
+funeral
+fungi
+fungus
+funk
+funny
+furious
+furnace
+furnish
+furnished
+furniture
+further
+fury
+fuselage
+future
+futures
+fuzzy
+gable
+gains
+galaxy
+galleries
+gallery
+gambling
+game
+games
+gaming
+gamma
+gang
+gap
+gaps
+garage
+garbage
+garden
+gardens
+garlic
+garrison
+gas
+gasoline
+gastric
+gate
+gates
+gateway
+gather
+gathered
+gathering
+gauge
+gave
+gay
+gaze
+gazette
+gear
+gender
+gene
+general
+generally
+generals
+generate
+generated
+generates
+generating
+generation
+generator
+generic
+generous
+genes
+genesis
+genetic
+genetics
+genius
+genocide
+genome
+genre
+genres
+gentle
+gentleman
+gentlemen
+gently
+genuine
+genuinely
+genus
+geographic
+geography
+geological
+geology
+geometric
+geometry
+gesture
+gestures
+getting
+ghost
+giant
+giants
+gift
+gifted
+gifts
+gill
+girl
+girlfriend
+girls
+given
+giving
+glacier
+glad
+glance
+glanced
+gland
+glands
+glass
+glasses
+glen
+glimpse
+global
+globally
+globe
+glorious
+glory
+gloves
+glow
+glucose
+glue
+goal
+goalkeeper
+goals
+goat
+god
+goddess
+gods
+gold
+golden
+golf
+gone
+good
+goodness
+goods
+gorge
+gospel
+gossip
+govern
+governance
+governed
+governing
+government
+governor
+governors
+grab
+grabbed
+grace
+grades
+gradient
+gradual
+gradually
+graduate
+graduated
+graduates
+graduating
+graduation
+graft
+grain
+grains
+grammar
+grand
+grandson
+granite
+granted
+granting
+grape
+graphic
+graphics
+graphs
+grasp
+grass
+grateful
+gratitude
+grave
+gravel
+graves
+gravity
+gray
+grazing
+great
+greater
+greatest
+greatly
+greatness
+green
+greens
+greeted
+grew
+grid
+grief
+griffin
+grim
+grin
+grinned
+grip
+gross
+grossed
+grounded
+grounds
+group
+grouped
+grouping
+groups
+grove
+grow
+growing
+grown
+grows
+growth
+guarantee
+guaranteed
+guarantees
+guard
+guardian
+guards
+guerrilla
+guess
+guest
+guests
+guidance
+guide
+guided
+guidelines
+guides
+guiding
+guild
+guilt
+guilty
+guinea
+guitar
+guitarist
+guitars
+gulf
+guns
+guru
+gut
+guy
+guys
+gym
+gymnasium
+gymnastics
+habit
+habitat
+habitats
+habits
+halfway
+halls
+halt
+halted
+ham
+hamlet
+hammer
+hand
+handball
+handbook
+handed
+handful
+handicap
+handle
+handled
+handles
+handling
+hands
+handsome
+hang
+happen
+happened
+happening
+happens
+happily
+happiness
+harassment
+harbor
+hard
+harder
+hardly
+hardware
+hardy
+harmful
+harmonic
+harmony
+harry
+harsh
+harvest
+hatch
+hate
+hated
+hatred
+haven
+having
+hawk
+hawks
+hay
+hazard
+hazardous
+hazards
+headache
+headed
+header
+heading
+heads
+heal
+healing
+health
+healthcare
+healthy
+heard
+hearing
+hearings
+hears
+heart
+hearts
+heated
+heath
+heating
+heats
+heaven
+heavenly
+heavens
+heavier
+heavily
+heavy
+hectares
+height
+heightened
+heights
+heir
+helicopter
+hello
+helmet
+help
+helped
+helpful
+helping
+helpless
+helps
+hemisphere
+hemorrhage
+hepatitis
+herb
+herbs
+herd
+hereafter
+hereditary
+heritage
+hero
+heroes
+heroic
+hesitated
+hiatus
+hid
+hidden
+hide
+hiding
+hierarchy
+high
+higher
+highest
+highland
+highlands
+highlight
+highlights
+highly
+highway
+highways
+hiking
+hill
+hills
+hint
+hints
+hired
+hiring
+historian
+historians
+historic
+historical
+histories
+history
+hit
+hits
+hitting
+hockey
+holder
+holders
+holding
+holdings
+holes
+holiday
+holidays
+hollow
+holly
+holy
+homage
+home
+homeland
+homeless
+homer
+homes
+homestead
+hometown
+homework
+honest
+honestly
+honesty
+honey
+honor
+honorary
+honored
+honors
+hope
+hoped
+hopes
+hoping
+horizon
+horizontal
+hormone
+hormones
+horn
+horns
+horrible
+horror
+horse
+horses
+hospital
+hospitals
+hostage
+hosted
+hostile
+hostility
+hosting
+hosts
+hotel
+hotels
+hour
+hours
+housed
+household
+households
+houses
+housing
+however
+hub
+huge
+hull
+human
+humanities
+humanity
+humans
+humble
+humid
+humidity
+humor
+humorous
+hundred
+hundreds
+hung
+hunger
+hungry
+hunt
+hunter
+hunters
+hunting
+hurling
+hurricane
+hurricanes
+hurried
+hurry
+hurt
+husband
+husbands
+hybrid
+hydraulic
+hydrogen
+hygiene
+hymn
+hypotheses
+hypothesis
+icon
+idea
+ideal
+ideally
+ideals
+ideas
+identical
+identified
+identifies
+identify
+identities
+identity
+ideologies
+ideology
+idle
+idol
+ignorance
+ignorant
+ignore
+ignored
+ignoring
+illegal
+illness
+illnesses
+illusion
+illustrate
+image
+imagery
+images
+imaginary
+imagine
+imagined
+imaging
+immediate
+immense
+immigrant
+immigrants
+immigrated
+immune
+immunity
+impact
+impacted
+impacts
+impaired
+impairment
+imperative
+imperfect
+imperial
+implement
+implicit
+implicitly
+implied
+implies
+import
+importance
+important
+imported
+imports
+impose
+imposed
+imposing
+imposition
+impossible
+impressed
+impression
+impressive
+imprint
+imprisoned
+improper
+improve
+improved
+improves
+improving
+impulse
+impulses
+inability
+inactive
+inadequate
+inaugural
+incapable
+incentive
+incentives
+inception
+inch
+inches
+incidence
+incident
+incidents
+inclined
+include
+included
+includes
+including
+inclusion
+inclusive
+income
+incomes
+incoming
+incomplete
+incorrect
+increase
+increased
+increases
+increasing
+incredible
+incumbent
+incurred
+indebted
+indeed
+index
+indexes
+indicate
+indicated
+indicates
+indicating
+indication
+indicative
+indicator
+indicators
+indices
+indigenous
+indirect
+indirectly
+individual
+indoor
+induce
+induced
+inducted
+induction
+industrial
+industries
+industry
+inequality
+inevitable
+inevitably
+infancy
+infant
+infantry
+infants
+infarction
+infected
+infection
+infections
+infectious
+inference
+inferior
+infinite
+inflation
+influence
+influenced
+influences
+inform
+informal
+informed
+informs
+infrared
+infusion
+inhabited
+inherent
+inherently
+inherited
+inhibit
+inhibition
+initial
+initially
+initiate
+initiated
+initiation
+initiative
+injected
+injection
+injured
+injuries
+injury
+injustice
+inland
+inlet
+inmates
+inn
+innate
+innocence
+innocent
+innovation
+innovative
+input
+inputs
+inquiries
+inquiry
+inscribed
+insect
+insects
+insert
+inserted
+insertion
+inside
+insight
+insights
+insignia
+insist
+insisted
+insistence
+insists
+inspection
+inspector
+inspired
+install
+installed
+instance
+instances
+instant
+instantly
+instead
+instinct
+institute
+instituted
+institutes
+instructed
+instructor
+instrument
+insulin
+insurance
+insured
+intact
+intake
+integer
+integral
+integrate
+integrated
+integrity
+intel
+intellect
+intend
+intended
+intense
+intensely
+intensity
+intensive
+intent
+intention
+intentions
+interact
+interest
+interested
+interests
+interface
+interfaces
+interfere
+interim
+interior
+internal
+internally
+internet
+interpret
+interred
+interrupt
+interstate
+interval
+intervals
+intervene
+interview
+interviews
+intestinal
+intimacy
+intimate
+intrinsic
+introduce
+introduced
+introduces
+intuition
+intuitive
+invaded
+invalid
+invariably
+invasion
+invasive
+invented
+invention
+inventor
+inventory
+inverse
+inversion
+invest
+invested
+investing
+investment
+investor
+investors
+invisible
+invitation
+invite
+invited
+invoked
+involve
+involved
+involves
+involving
+inward
+iris
+iron
+ironic
+ironically
+irony
+irrational
+irregular
+irrelevant
+irrigation
+island
+islander
+islanders
+islands
+isle
+isles
+isolate
+isolated
+isolation
+issuing
+item
+items
+ivory
+ivy
+jack
+jacket
+jail
+jam
+japan
+jar
+jaw
+jazz
+jealous
+jealousy
+jeans
+jersey
+jet
+jets
+jewelry
+jimmy
+job
+jobs
+jockey
+join
+joins
+joint
+jointly
+joints
+joke
+jokes
+josh
+journal
+journalism
+journalist
+journals
+journey
+jubilee
+judge
+judged
+judges
+judging
+judgment
+judgments
+judicial
+judiciary
+judo
+juice
+jump
+jumped
+jumping
+junction
+jungle
+junior
+justified
+justify
+juvenile
+keen
+keep
+keeping
+keeps
+kept
+keyboard
+keyboards
+kick
+kicked
+kid
+kidnapped
+kidney
+kids
+killer
+killing
+killings
+kilometers
+kindly
+kindness
+kinds
+kinetic
+kingdom
+kingdoms
+kinship
+kiss
+kissed
+kit
+kitchen
+knee
+knees
+knew
+knife
+knight
+knights
+knock
+knocked
+knockout
+knowing
+knowledge
+knows
+koala
+lab
+label
+labeling
+labels
+labor
+laboratory
+laborers
+labs
+lacked
+lacking
+lacks
+lacrosse
+laden
+ladies
+lady
+lagoon
+laid
+lake
+lakes
+lamb
+lamps
+landed
+landing
+landlord
+landmark
+landmarks
+landscape
+landscapes
+language
+languages
+laps
+large
+largely
+larger
+largest
+larvae
+laser
+lasso
+lasted
+lasting
+lately
+latent
+later
+lateral
+latest
+latitude
+latter
+lattice
+laugh
+laughed
+laughing
+laughter
+launch
+launched
+launching
+laurel
+lava
+law
+lawn
+laws
+lawsuit
+lawyer
+lawyers
+layout
+lead
+leader
+leaders
+leadership
+leading
+leads
+leaf
+league
+leagues
+leap
+learn
+learned
+learner
+learners
+learning
+learns
+leather
+leave
+leaves
+leaving
+lecture
+lecturer
+lectures
+left
+leg
+legacy
+legally
+legend
+legendary
+legends
+legion
+legitimacy
+legitimate
+legs
+leisure
+lemon
+lending
+lengths
+lengthy
+lens
+lenses
+lesbian
+lesion
+lesions
+lesser
+lesson
+lessons
+letter
+letters
+letting
+level
+levels
+levy
+liability
+liberal
+liberalism
+liberals
+liberation
+liberties
+liberty
+librarian
+libraries
+library
+license
+licensed
+licenses
+licensing
+lie
+lifelong
+lifestyle
+lifetime
+lift
+lifted
+lifting
+lighter
+lighthouse
+lighting
+lightning
+liked
+likelihood
+likes
+likewise
+lily
+limbs
+lime
+limerick
+limestone
+limit
+limitation
+limiting
+limits
+lineage
+linear
+linebacker
+linen
+liner
+lineup
+linguistic
+lining
+link
+linkage
+linked
+linking
+links
+lions
+lipid
+lips
+liquid
+liquor
+listen
+listened
+listener
+listeners
+listening
+listing
+listings
+lists
+lit
+literacy
+literal
+literally
+literary
+literature
+litigation
+little
+lived
+lively
+lives
+livestock
+living
+lizard
+loaded
+loading
+loads
+loan
+loaned
+loans
+lobby
+local
+localities
+locality
+localized
+locally
+locals
+locate
+locations
+locomotive
+locus
+lodge
+logging
+logic
+logical
+logically
+logistics
+logo
+logs
+loneliness
+lonely
+longer
+longest
+longtime
+looking
+looks
+loop
+loops
+loose
+loosely
+lords
+loses
+loss
+losses
+lost
+lottery
+lotus
+loudly
+lounge
+love
+lovely
+lover
+lovers
+loving
+lowered
+lowest
+lowland
+loyal
+loyalty
+luck
+lucky
+lumber
+lunar
+lunch
+lung
+lungs
+luxury
+lymph
+lyric
+lyrical
+lyrics
+machine
+machinery
+machines
+macro
+mad
+madame
+made
+madness
+magazine
+magazines
+magic
+magical
+magistrate
+magnesium
+magnetic
+magnitude
+maid
+maiden
+mainland
+mainly
+mainstream
+maintain
+maintained
+maintains
+majesty
+major
+majority
+majors
+makes
+makeup
+making
+male
+males
+malignant
+mama
+mammals
+manage
+managed
+management
+manager
+managerial
+managers
+manages
+managing
+mandate
+mandatory
+manga
+mango
+manifest
+manifested
+manifesto
+manipulate
+mankind
+manner
+manners
+manning
+manor
+manpower
+mansion
+mantle
+manual
+manuscript
+map
+maple
+mapping
+maps
+marathon
+marble
+march
+marched
+marching
+mare
+margin
+marginal
+margins
+maria
+marijuana
+marina
+marital
+maritime
+markedly
+marker
+markers
+market
+marketed
+marketing
+markets
+marking
+markings
+marriage
+marriages
+married
+marrow
+marry
+mars
+marsh
+marshal
+martial
+marvel
+mascot
+masculine
+mask
+masks
+mason
+mass
+massacre
+masses
+massive
+master
+masters
+mastery
+mat
+matched
+matches
+matching
+material
+materials
+maternal
+math
+matrices
+matrix
+matter
+matters
+mature
+maturity
+max
+maximal
+maximize
+maximum
+maybe
+mayo
+mayor
+mayoral
+mayors
+meadows
+meal
+meals
+mean
+meaning
+meaningful
+meanings
+means
+meant
+meantime
+meanwhile
+measure
+measured
+measures
+measuring
+meat
+mechanical
+mechanics
+mechanism
+mechanisms
+medal
+medals
+medial
+median
+mediated
+mediation
+medical
+medication
+medicine
+medieval
+meditation
+medium
+medley
+meet
+meeting
+meetings
+meets
+melancholy
+melodies
+melody
+melt
+melting
+membership
+membrane
+membranes
+memo
+memoir
+memoirs
+memorable
+memorandum
+memorial
+memories
+memory
+mental
+mentally
+mention
+mentioned
+mentions
+mentor
+menu
+merchant
+merchants
+mercury
+mercy
+mere
+merely
+merger
+merit
+merits
+mesh
+mess
+message
+messages
+messenger
+met
+meta
+metabolic
+metabolism
+metal
+metallic
+metals
+metaphor
+metaphors
+meters
+method
+methods
+metric
+metro
+mice
+microscope
+microscopy
+microwave
+middle
+midland
+midlands
+midnight
+midst
+midway
+might
+mighty
+mild
+militant
+military
+militia
+milk
+mill
+millennium
+miller
+million
+millions
+mills
+mineral
+minerals
+miners
+mines
+mini
+miniature
+minimal
+minimize
+minimum
+mining
+miniseries
+ministers
+ministries
+ministry
+minor
+minorities
+minority
+mint
+minute
+minutes
+miracle
+miracles
+mirror
+mirrors
+miserable
+misery
+misleading
+miss
+missed
+missile
+missiles
+missing
+missionary
+mist
+mistake
+mistaken
+mistakes
+mistress
+mix
+mixed
+mixing
+mixture
+mixtures
+mob
+mobility
+mode
+model
+modeled
+modeling
+models
+modem
+moderate
+moderately
+modernity
+modes
+modest
+modified
+modify
+modulation
+module
+modules
+moist
+moisture
+mold
+molecular
+molecule
+molecules
+mollusk
+mom
+moment
+moments
+momentum
+monarch
+monarchy
+monastery
+monetary
+money
+monitor
+monitored
+monitoring
+monk
+monkey
+monkeys
+monks
+monopoly
+monster
+monsters
+month
+monthly
+months
+monument
+monumental
+monuments
+mood
+moon
+moral
+morale
+morality
+morally
+morals
+moreover
+morning
+morocco
+mortal
+mortality
+mortar
+mortgage
+mosaic
+mosque
+moss
+mostly
+moth
+mother
+mothers
+moths
+motif
+motifs
+motivated
+motivation
+motives
+motor
+motorcycle
+motors
+motorway
+motto
+mound
+mountain
+mountains
+mounting
+mourning
+mouse
+mouth
+movement
+movements
+moves
+movie
+movies
+mud
+mug
+multi
+multimedia
+multiple
+multiplied
+multiply
+multitude
+municipal
+mural
+murder
+murdered
+murders
+murmured
+muscle
+muscles
+muscular
+museum
+museums
+music
+musical
+musician
+musicians
+mutation
+mutations
+muttered
+mutual
+mutually
+myself
+mysteries
+mysterious
+mystery
+mystical
+myth
+mythology
+myths
+naked
+name
+namely
+names
+namesake
+naming
+narrative
+narrator
+narrow
+narrowly
+national
+nationally
+nationals
+nations
+nationwide
+native
+natives
+natural
+naturally
+nature
+naval
+navigation
+navy
+nearby
+nearest
+nearly
+necessary
+necessity
+neck
+need
+needed
+needs
+negative
+negotiate
+negotiated
+neighbor
+neighbors
+neon
+nephew
+nerve
+nervous
+network
+networking
+networks
+neurons
+neutral
+never
+newer
+newly
+news
+newspaper
+newspapers
+next
+nice
+nickname
+nicknamed
+niece
+nightclub
+nineteen
+nineteenth
+ninth
+nitrogen
+nobility
+noble
+nobles
+nobody
+node
+nodes
+noise
+nominal
+nominated
+nomination
+nominee
+nominees
+none
+nonprofit
+norm
+normally
+north
+northeast
+northern
+northwest
+nose
+notable
+notably
+notation
+noted
+nothing
+notice
+noticed
+noting
+notion
+notorious
+noun
+novel
+novelist
+novels
+nowadays
+nuclear
+nucleus
+number
+numbered
+numbering
+numbers
+numerical
+numerous
+nurse
+nursery
+nurses
+nursing
+nutrition
+oak
+oaks
+oath
+obedience
+obesity
+obey
+object
+objected
+objection
+objections
+objective
+objectives
+objects
+obligation
+obliged
+obscure
+observe
+observed
+observer
+observers
+observes
+observing
+obsolete
+obstacle
+obstacles
+obtain
+obtained
+obtaining
+obvious
+obviously
+occasion
+occasional
+occasions
+occupation
+occupied
+occupies
+occupy
+occupying
+occur
+occurred
+occurrence
+occurring
+occurs
+ocean
+odd
+odds
+offender
+offenders
+offense
+offensive
+offer
+offered
+offering
+offerings
+offers
+office
+officer
+officers
+offices
+officially
+officials
+offset
+offshore
+offspring
+often
+okay
+oldest
+olive
+omitted
+oneself
+ongoing
+onion
+online
+onset
+open
+opening
+openly
+openness
+opens
+opera
+operas
+operate
+operated
+operates
+operating
+operation
+operations
+operative
+operator
+operators
+opinion
+opinions
+opponent
+opponents
+oppose
+opposing
+opposite
+opposition
+oppressed
+oppression
+optic
+optical
+optimal
+optimism
+optimistic
+optimum
+optional
+options
+oracle
+orange
+orbit
+orbital
+orchestra
+orchestral
+orchid
+ordained
+ordering
+orderly
+ordinance
+ordinarily
+ordinary
+organ
+organic
+organism
+organisms
+organize
+organized
+organizing
+organs
+oriental
+oriented
+origin
+originally
+originated
+originates
+origins
+orthodox
+otherwise
+ottoman
+ottomans
+ourselves
+outbreak
+outcome
+outcomes
+outdoor
+outer
+outfit
+outlet
+outlets
+outline
+outlined
+outlines
+outlook
+output
+outputs
+outreach
+outright
+outset
+outside
+outsiders
+outskirts
+outward
+oval
+overall
+overcome
+overhead
+overlap
+overlooked
+overly
+overnight
+oversaw
+overseas
+oversight
+overt
+overtime
+overview
+owe
+owner
+owners
+ownership
+oxford
+oxidation
+oxide
+oxygen
+ozone
+pacific
+pack
+package
+packages
+packaging
+packed
+packers
+packet
+packets
+packing
+pad
+pagan
+page
+pageant
+pages
+paid
+pain
+painful
+pains
+paint
+painted
+painter
+painters
+painting
+paintings
+palace
+pale
+palm
+palms
+pandemic
+panel
+panels
+panic
+panthers
+pants
+papa
+papal
+par
+parachute
+parade
+paradigm
+paradise
+paradox
+paragraph
+paragraphs
+parallel
+parallels
+parameter
+parameters
+paramount
+pardon
+parental
+parenting
+parents
+parish
+parishes
+parking
+parks
+parkway
+parliament
+parody
+parsons
+partial
+partially
+particle
+particles
+particular
+parties
+partisan
+partition
+partly
+partner
+partnered
+partners
+parts
+party
+passage
+passages
+passed
+passenger
+passengers
+passes
+passing
+passionate
+passions
+passive
+passport
+password
+past
+paste
+pastor
+pastoral
+pat
+patch
+patches
+patent
+patents
+paternal
+path
+pathology
+paths
+pathway
+pathways
+patience
+patient
+patients
+patriarch
+patriotic
+patriots
+patrol
+patrols
+patron
+patronage
+patrons
+pattern
+patterns
+pause
+paused
+paved
+pavilion
+pay
+payable
+paying
+payment
+payments
+pays
+peace
+peaceful
+peaked
+pearl
+peasant
+peasants
+peculiar
+pedestrian
+pediatric
+peer
+peers
+pelvic
+penalties
+penalty
+pencil
+penetrate
+penguin
+peninsula
+penny
+people
+peoples
+pepper
+perceive
+perceived
+percent
+percentage
+perception
+perceptual
+percussion
+perennial
+perfection
+perfectly
+perform
+performed
+performer
+performers
+performing
+performs
+perhaps
+period
+periodic
+periods
+peripheral
+periphery
+permanent
+permission
+permit
+permits
+permitted
+permitting
+perpetual
+persist
+persisted
+persistent
+person
+personal
+personally
+personnel
+persons
+persuade
+persuaded
+persuasion
+persuasive
+pertaining
+pertinent
+pervasive
+petroleum
+petty
+phantom
+pharmacy
+phase
+phases
+phenomena
+phenomenon
+philosophy
+phoenix
+phone
+phones
+phosphate
+phosphorus
+photo
+photograph
+photon
+photos
+phrase
+phrases
+physical
+physically
+physician
+physicians
+physicist
+physics
+physiology
+pianist
+piano
+pick
+picked
+picking
+picks
+picture
+pictures
+pie
+piece
+pieces
+pier
+pierce
+pig
+pigs
+pile
+pilgrimage
+pillars
+pillow
+pilot
+pilots
+pink
+pioneer
+pioneered
+pioneering
+pioneers
+pipe
+pipeline
+pipes
+pirate
+pirates
+pistol
+pit
+pitch
+pitched
+pitcher
+pitching
+pits
+pituitary
+pity
+placement
+places
+plague
+plainly
+plaintiff
+plaintiffs
+plan
+planes
+planet
+planets
+planned
+planners
+planning
+plans
+plant
+plantation
+planted
+planting
+plants
+plaque
+plasma
+plastic
+plateau
+plates
+platform
+platforms
+platinum
+platoon
+plausible
+played
+player
+players
+playing
+playoff
+playoffs
+plays
+playwright
+plaza
+plea
+pleaded
+pleased
+pleasure
+pleasures
+pledged
+plenty
+plot
+plots
+plotted
+plug
+plural
+plus
+pocket
+pockets
+podcast
+podium
+poem
+poems
+poet
+poetic
+poetry
+poets
+pointer
+pointing
+points
+poison
+poisoning
+poker
+polar
+pole
+poles
+police
+policies
+policy
+polish
+polished
+polite
+political
+politician
+politics
+poll
+pollen
+polling
+polls
+pollution
+polo
+polymer
+polymers
+pond
+ponds
+pool
+pools
+poor
+poorer
+poorly
+pop
+pope
+popular
+popularity
+popularly
+populated
+population
+porch
+pork
+portable
+portal
+portfolio
+portions
+portrait
+portraits
+portray
+portrayal
+portrayed
+portraying
+positioned
+positions
+positive
+positively
+possess
+possessed
+possesses
+possessing
+possession
+possibly
+post
+postal
+posted
+poster
+posterior
+posters
+posting
+postmodern
+postponed
+posts
+posture
+postwar
+potassium
+potato
+potatoes
+potent
+potential
+potentials
+potter
+pottery
+pour
+poured
+poverty
+powder
+powered
+powerful
+powers
+practical
+practice
+practiced
+practices
+practicing
+pragmatic
+prairie
+praise
+praised
+praising
+prayed
+prayer
+prayers
+praying
+preached
+preacher
+preaching
+preceded
+precedent
+preceding
+precious
+precise
+precisely
+precision
+precursor
+predators
+predicate
+predict
+predicted
+predicting
+prediction
+preface
+prefecture
+prefer
+preferable
+preference
+preferred
+pregnancy
+pregnant
+prejudice
+premiere
+premiered
+premise
+premises
+premium
+prepare
+prepared
+preparing
+prescribed
+presence
+presented
+presenter
+presenting
+presently
+preserve
+preserved
+preserving
+presided
+presidency
+president
+presidents
+pressure
+pressures
+prestige
+presumably
+presumed
+pretend
+pretty
+prevail
+prevailed
+prevailing
+prevalence
+prevalent
+prevent
+prevented
+preventing
+prevention
+preventive
+prevents
+previous
+previously
+prey
+price
+prices
+pricing
+pride
+priest
+priests
+primarily
+primary
+prime
+primitive
+prince
+princes
+princess
+principal
+principle
+principles
+printer
+printers
+printing
+prints
+prior
+priorities
+priority
+priory
+prison
+prisoner
+prisoners
+prisons
+privacy
+private
+privately
+privilege
+privileged
+privileges
+privy
+prize
+prizes
+pro
+probable
+probably
+probe
+problem
+problems
+procedural
+procedure
+procedures
+proceed
+proceeded
+proceeding
+proceeds
+process
+processed
+processes
+processing
+procession
+processor
+processors
+proclaimed
+producer
+producers
+produces
+producing
+product
+production
+productive
+products
+profession
+professor
+professors
+profile
+profiles
+profitable
+profits
+profound
+profoundly
+prognosis
+program
+programs
+progress
+progressed
+prohibited
+project
+projected
+projection
+projects
+prolific
+prolonged
+prominence
+prominent
+promised
+promises
+promising
+promote
+promoted
+promoter
+promotes
+promoting
+promotion
+promotions
+prompt
+prompted
+prompting
+promptly
+prone
+pronounced
+proof
+propaganda
+properly
+properties
+property
+prophecy
+prophet
+prophetic
+prophets
+proportion
+proposal
+proposals
+propose
+proposed
+proposes
+propulsion
+prose
+prosecutor
+prospect
+prospects
+prosperity
+prosperous
+protect
+protected
+protecting
+protection
+protective
+protein
+proteins
+protest
+protestant
+protested
+protesters
+protests
+protocol
+protocols
+proton
+prototype
+proud
+proven
+provide
+provided
+providence
+provider
+providers
+provides
+providing
+province
+provinces
+provincial
+provision
+provisions
+provoked
+proximity
+proxy
+psalm
+pseudo
+pseudonym
+psychiatry
+psychic
+psychology
+pub
+publicity
+publicly
+publish
+published
+publisher
+publishers
+publishes
+publishing
+pull
+pulled
+pulling
+pulmonary
+pulp
+pump
+pumps
+punch
+punish
+punished
+punishment
+punk
+punt
+pupil
+pupils
+puppet
+purchase
+purchased
+purchaser
+purchases
+purchasing
+pure
+purely
+purified
+purity
+purple
+purpose
+purposes
+purse
+pursuant
+pursue
+pursued
+pursuing
+pursuit
+push
+pushed
+pushing
+putting
+puzzle
+puzzled
+pyramid
+qualified
+qualifier
+qualifiers
+qualify
+qualifying
+qualities
+quantities
+quantity
+quantum
+quarry
+quarter
+quarterly
+quarters
+quartet
+quartz
+quasi
+queen
+queens
+queries
+query
+question
+questioned
+questions
+queue
+quick
+quickly
+quiet
+quietly
+quit
+quite
+quotation
+quotations
+quote
+quoted
+quotes
+rabbit
+racism
+radar
+radial
+radiation
+radical
+radically
+radicals
+radio
+radius
+raiders
+raids
+railroad
+railroads
+railway
+railways
+rainbow
+rainfall
+raises
+ramp
+rams
+ran
+random
+randomly
+rang
+ranges
+ranging
+ranked
+ranking
+rankings
+ranks
+rapid
+rapidly
+rapids
+rapper
+rare
+rarely
+rat
+rather
+ratings
+ratio
+rationale
+ratios
+rats
+rays
+reaches
+react
+reaction
+reactions
+reactive
+reactor
+reader
+readers
+readily
+readiness
+reading
+readings
+real
+realism
+realistic
+realities
+reality
+realize
+realized
+realizes
+realizing
+realm
+rear
+reasonable
+reasonably
+reasoning
+reasons
+rebel
+rebellion
+rebels
+rebounds
+rebuild
+rebuilding
+rebuilt
+recall
+recalled
+recalls
+receipt
+receipts
+receive
+received
+receiver
+receives
+receiving
+recent
+recently
+reception
+receptions
+receptor
+receptors
+recession
+recipe
+recipient
+recipients
+reciprocal
+recognize
+recognized
+recognizes
+recommend
+record
+recorded
+recording
+recordings
+records
+recover
+recovered
+recovering
+recovery
+recreation
+recruit
+recruited
+recruiting
+recruits
+rector
+recurrence
+recurrent
+recurring
+redemption
+reds
+reduce
+reduced
+reduces
+reducing
+reduction
+reductions
+reef
+reelection
+referee
+referenced
+references
+referendum
+referral
+referring
+refers
+refined
+reflect
+reflected
+reflecting
+reflection
+reflective
+reflects
+reflex
+reform
+reformed
+reformers
+reforms
+refrain
+refuge
+refugee
+refugees
+refusal
+refuse
+refused
+refuses
+refusing
+regain
+regained
+regard
+regarded
+regarding
+regardless
+regards
+regency
+regent
+regime
+regiment
+regiments
+regimes
+region
+regional
+regions
+register
+registered
+registers
+registry
+regression
+regret
+regularly
+regulate
+regulated
+regulating
+regulation
+regulatory
+reign
+reigning
+reinforce
+reinforced
+reissued
+reject
+rejected
+rejecting
+rejection
+rejoined
+relate
+relates
+relating
+relation
+relational
+relations
+relative
+relatively
+relatives
+relax
+relaxation
+relaxed
+relay
+release
+releases
+releasing
+relegated
+relegation
+relevance
+reliable
+reliance
+relic
+relied
+relief
+relies
+relieve
+relieved
+religion
+religions
+religious
+relocated
+relocation
+reluctance
+reluctant
+relying
+remain
+remainder
+remained
+remaining
+remains
+remake
+remark
+remarkable
+remarkably
+remarked
+remarks
+rematch
+remedies
+remedy
+remember
+remembered
+remembers
+remind
+reminded
+reminder
+reminds
+remnants
+remote
+removal
+remove
+removed
+removing
+renal
+renamed
+render
+rendered
+rendering
+renewable
+renewal
+renewed
+renovated
+renovation
+renowned
+rented
+reopened
+rep
+repair
+repaired
+repairs
+repeat
+repeated
+repeatedly
+repeating
+repertoire
+repetition
+replace
+replaced
+replacing
+replay
+replica
+replied
+reply
+report
+reported
+reportedly
+reporter
+reporters
+reporting
+reports
+represent
+represents
+repression
+reprint
+reprinted
+reproduce
+reproduced
+republic
+republican
+reputation
+request
+requested
+requests
+require
+required
+requires
+requiring
+rescue
+rescued
+research
+researcher
+resemble
+resembles
+resentment
+reserves
+reservoir
+reside
+residence
+residences
+resides
+residing
+residual
+residue
+residues
+resign
+resigned
+resin
+resist
+resistance
+resistant
+resisted
+resolution
+resolve
+resolved
+resolving
+resonance
+resort
+resource
+resources
+respect
+respected
+respective
+respects
+respond
+responded
+respondent
+responding
+responds
+response
+responses
+responsive
+restaurant
+resting
+restless
+restore
+restored
+restoring
+restraint
+restrict
+restricted
+result
+resultant
+resulted
+resulting
+results
+resume
+retail
+retain
+retained
+retaining
+retains
+retention
+retire
+retired
+retirement
+retiring
+retreat
+retreated
+retrieval
+retrieve
+retrieved
+return
+returned
+returning
+returns
+reunion
+reunited
+reveal
+revealed
+revealing
+reveals
+revelation
+revenge
+revenue
+revenues
+reverend
+reversal
+reverse
+reversed
+reverted
+review
+reviewed
+reviewer
+reviewers
+reviewing
+reviews
+revised
+revision
+revival
+revived
+revolt
+revolution
+reward
+rewarded
+rewards
+rhetoric
+rhetorical
+rhythm
+rhythmic
+ribbon
+ribs
+rich
+rider
+riders
+rides
+ridiculous
+riding
+rifle
+rifles
+righteous
+rightly
+rights
+rigid
+rigorous
+riot
+risen
+risk
+risks
+risky
+ritual
+rituals
+rivalry
+rivals
+riverside
+rob
+robbery
+robin
+robot
+robust
+rock
+rocket
+rockets
+rocks
+rocky
+rod
+role
+roles
+roll
+roller
+rolling
+rolls
+romance
+romantic
+rookie
+root
+rooted
+roots
+rope
+roses
+roster
+rotating
+rotation
+rotten
+rouge
+rough
+roughly
+route
+routes
+routine
+routinely
+routines
+routing
+rovers
+royal
+royals
+rubbed
+rubber
+ruby
+rugby
+ruin
+ruined
+ruins
+rule
+ruled
+ruler
+rulers
+rules
+ruling
+rumors
+run
+runner
+runners
+running
+runs
+runway
+rupture
+rural
+rushing
+sacked
+sacks
+sacred
+sacrifice
+sacrifices
+sad
+saddle
+sadly
+sadness
+safe
+safely
+safer
+safety
+saga
+sail
+sailed
+sailing
+sailor
+sailors
+saint
+saints
+salad
+salaries
+salary
+sales
+salmon
+salon
+salt
+salts
+salvation
+sample
+samples
+sampling
+sanction
+sanctioned
+sanctions
+sanctuary
+sand
+sanders
+sands
+sandstone
+sandy
+sang
+sank
+sat
+satellite
+satellites
+satisfied
+satisfy
+satisfying
+saturated
+saturation
+sauce
+savage
+savannah
+save
+saved
+saves
+saving
+savings
+saying
+scale
+scales
+scaling
+scan
+scandal
+scanning
+scarce
+scarcely
+scared
+scary
+scattered
+scattering
+scenario
+scenarios
+scene
+scenes
+scenic
+schedule
+scheduled
+schedules
+scheduling
+schema
+schematic
+scheme
+schemes
+scholar
+scholarly
+scholars
+school
+schooling
+schools
+sciences
+scientific
+scientist
+scientists
+scope
+score
+scored
+scorer
+scores
+scoring
+scout
+scouting
+scouts
+scrapped
+scream
+screamed
+screaming
+screen
+screened
+screening
+screenplay
+screens
+screw
+script
+scripts
+scripture
+scriptures
+scrutiny
+sculptor
+sculpture
+sculptures
+sea
+seal
+sealed
+seals
+searched
+searches
+searching
+season
+seasonal
+seasons
+seat
+seated
+seating
+seats
+second
+secondary
+secondly
+seconds
+secret
+secretary
+secretion
+secretly
+secrets
+sectional
+sections
+sector
+sectors
+secular
+secure
+secured
+securing
+securities
+security
+sediment
+sediments
+seed
+seeded
+seeds
+seeing
+seek
+seeking
+seeks
+seem
+seemed
+seemingly
+seems
+seen
+sees
+segment
+segments
+seize
+seized
+seizure
+seizures
+seldom
+select
+selected
+selecting
+selection
+selective
+selfish
+sell
+seller
+sellers
+selling
+sells
+semantic
+semantics
+semi
+semifinal
+semifinals
+seminar
+seminary
+senate
+senator
+senators
+send
+sending
+sends
+senior
+sensation
+sensations
+sense
+sensed
+senses
+sensible
+sensing
+sensitive
+sensor
+sensors
+sensory
+sentence
+sentenced
+sentences
+sentiment
+sentiments
+separate
+separated
+separately
+separating
+separation
+sequel
+sequence
+sequences
+sequential
+sergeant
+serial
+serious
+seriously
+sermon
+serum
+servant
+servants
+service
+services
+session
+sessions
+setting
+settings
+settle
+settled
+settlement
+settlers
+settling
+setup
+seven
+sevens
+seventeen
+seventh
+seventy
+several
+severe
+severely
+severity
+sex
+sexual
+sexuality
+shack
+shade
+shades
+shadow
+shadows
+shaft
+shake
+shaking
+shall
+shallow
+shame
+shanghai
+shape
+shaped
+shapes
+shaping
+share
+shared
+shares
+sharing
+shark
+sharks
+sharp
+sharply
+shattered
+shear
+sheep
+sheets
+shelf
+shell
+shells
+shelter
+shepherd
+sheriff
+shield
+shields
+shift
+shifted
+shifting
+shifts
+shining
+shipped
+shipping
+shipyard
+shire
+shirt
+shirts
+shock
+shocked
+shoe
+shoes
+shook
+shoot
+shooter
+shooting
+shoots
+shopping
+shores
+short
+shortage
+shortened
+shorter
+shortly
+shorts
+shot
+shots
+shoulder
+shoulders
+shout
+shouted
+shouting
+show
+showcase
+showed
+shower
+showing
+shown
+shows
+shrine
+shrub
+shrug
+shrugged
+shut
+shuttle
+shy
+siblings
+sick
+sickness
+siege
+sierra
+sigh
+sighed
+sigma
+signal
+signaling
+signals
+signature
+signatures
+silence
+silent
+silently
+silicon
+silk
+silly
+silver
+similar
+similarity
+similarly
+simple
+simpler
+simplest
+simplicity
+simplified
+simply
+simulated
+simulation
+since
+sincere
+singer
+singers
+singing
+single
+singles
+singular
+sink
+sinking
+sins
+sinus
+sir
+sister
+sisters
+sitcom
+sits
+sitting
+situated
+situation
+situations
+six
+sixteen
+sixteenth
+sixth
+sixties
+sixty
+size
+sized
+sizes
+skating
+skeletal
+skeleton
+sketch
+sketches
+ski
+skiing
+skill
+skilled
+skills
+skin
+skirt
+skull
+sky
+slam
+slavery
+slaves
+sled
+sleeping
+slender
+slept
+slice
+slices
+slid
+slide
+slides
+sliding
+slight
+slightest
+slightly
+slip
+slipped
+slogan
+slope
+slot
+slow
+slowed
+slower
+slowly
+small
+smaller
+smallest
+smart
+smell
+smile
+smiled
+smiles
+smiling
+smith
+smoke
+smoking
+smooth
+smoothly
+snail
+snails
+snake
+snap
+snapped
+snow
+soap
+soccer
+social
+socialism
+socialist
+socially
+societal
+societies
+society
+sociology
+sodium
+soft
+softball
+softly
+software
+soil
+soils
+solar
+sold
+soldier
+soldiers
+solely
+solemn
+solid
+solidarity
+solids
+solitary
+solo
+soluble
+solutions
+solvent
+somebody
+somehow
+someone
+something
+sometime
+sometimes
+somewhat
+somewhere
+song
+songs
+songwriter
+sonic
+soon
+sooner
+sophomore
+soprano
+sore
+sorrow
+sorry
+sorting
+sorts
+sought
+soul
+souls
+sound
+sounded
+sounding
+sounds
+soundtrack
+soup
+south
+southeast
+southern
+southwest
+sovereign
+soviet
+soviets
+spa
+space
+spacecraft
+spaces
+spacing
+spanning
+spans
+spare
+spark
+sparked
+spatial
+speak
+speaker
+speakers
+speaking
+speaks
+special
+specialist
+specialty
+species
+specific
+specified
+specifies
+specify
+specifying
+specimen
+specimens
+spectacle
+spectator
+spectators
+spectra
+spectral
+spectrum
+speculated
+speech
+speeches
+speed
+speeds
+speedway
+spell
+spelled
+spelling
+spells
+spend
+spending
+spent
+sphere
+spheres
+spherical
+spider
+spiders
+spike
+spill
+spin
+spinal
+spine
+spinning
+spiral
+spirit
+spirits
+spiritual
+splendid
+split
+splitting
+spoke
+spoken
+spokesman
+sponsor
+sponsored
+sponsors
+sporting
+sports
+spot
+spots
+spotted
+spouse
+sprang
+spray
+spreading
+springs
+sprint
+spur
+spy
+squad
+squadron
+squadrons
+squads
+square
+squares
+stability
+stack
+stadium
+staff
+stage
+staged
+stages
+staging
+stain
+stained
+staircase
+stamp
+stamps
+standard
+standards
+standing
+standings
+standpoint
+stands
+star
+stare
+stared
+staring
+stark
+starred
+starring
+stars
+start
+started
+starter
+starting
+startled
+starts
+stash
+stat
+stated
+statement
+statements
+statewide
+static
+stating
+station
+stationary
+stationed
+stations
+statistics
+statue
+statues
+status
+stay
+stayed
+staying
+stays
+steadily
+steady
+steal
+stealing
+steals
+steam
+steel
+steep
+steering
+stein
+step
+stepped
+stepping
+steps
+sterile
+sterling
+stick
+sticks
+stiff
+still
+stimulate
+stimulated
+stimuli
+stimulus
+stint
+stir
+stirred
+stirring
+stocks
+stoke
+stolen
+stomach
+stones
+stop
+stopped
+stopping
+stops
+storage
+stores
+stories
+storm
+storms
+story
+stove
+straight
+strain
+strains
+strait
+strand
+strands
+strange
+strangely
+stranger
+strangers
+strata
+strategic
+strategies
+strategy
+straw
+stray
+streak
+streaming
+streams
+street
+streets
+strength
+strengthen
+strengths
+stressed
+stresses
+stretch
+stretched
+stretches
+stretching
+strictly
+strike
+strikeouts
+striker
+strikes
+striking
+string
+strings
+strip
+stripes
+stripped
+strips
+strive
+stroke
+strong
+stronger
+strongest
+strongly
+struck
+structural
+structure
+structured
+structures
+struggle
+struggled
+struggles
+struggling
+stuck
+stud
+student
+students
+studied
+studies
+studio
+studios
+study
+studying
+stuff
+stuffed
+stupid
+styles
+sub
+subdivided
+subject
+subjected
+subjective
+subjects
+submarine
+submarines
+submerged
+submission
+submit
+submitted
+subsection
+subsequent
+subset
+subsidiary
+subsidies
+subsidy
+substance
+substances
+substitute
+substrate
+subtle
+suburb
+suburban
+suburbs
+subway
+succeed
+succeeded
+succeeding
+success
+successes
+successful
+succession
+successive
+successor
+sudden
+suddenly
+suffer
+suffered
+suffering
+suffers
+suffice
+sufficient
+suffix
+suffrage
+sugar
+suggest
+suggested
+suggesting
+suggestion
+suggests
+suicide
+suitable
+suite
+suited
+suits
+sulfur
+sultan
+sum
+summarize
+summarized
+summary
+summer
+summers
+summit
+summoned
+sums
+sun
+sung
+sunk
+sunlight
+sunset
+sunshine
+super
+superior
+superman
+supervised
+supervisor
+supper
+supplement
+supplied
+supplier
+suppliers
+supplies
+supply
+supplying
+support
+supported
+supporter
+supporters
+supporting
+supportive
+supports
+suppose
+supposed
+supposedly
+suppress
+suppressed
+supreme
+surely
+surface
+surfaces
+surgeon
+surgery
+surgical
+surname
+surpassed
+surplus
+surprise
+surprised
+surprising
+surrender
+surrey
+surrounded
+survey
+surveyed
+surveys
+survival
+survive
+survived
+survives
+surviving
+survivor
+survivors
+suspect
+suspected
+suspects
+suspended
+suspension
+suspicion
+suspicious
+sustain
+sustained
+sustaining
+swallow
+swallowed
+swamp
+swan
+swear
+sweat
+sweep
+sweeping
+sweet
+swelling
+swept
+swift
+swim
+swimmer
+swimming
+swing
+switch
+switched
+switches
+switching
+sword
+sworn
+swung
+symbol
+symbolic
+symbolism
+symbols
+symmetry
+sympathy
+symphony
+symposium
+symptom
+symptoms
+synagogue
+syndicated
+syndrome
+synopsis
+syntactic
+syntax
+synthesis
+synthetic
+system
+systematic
+systemic
+systems
+tab
+tables
+tackle
+tackles
+tactical
+tactics
+tag
+takeover
+taking
+tale
+talent
+talented
+talents
+tales
+talk
+talked
+talking
+talks
+tallest
+tangible
+tank
+tanks
+tap
+tape
+tapes
+target
+targeted
+targeting
+targets
+tariff
+tariffs
+task
+tasked
+tasks
+taste
+tastes
+taught
+tavern
+tax
+taxable
+taxation
+taxes
+taxi
+taxonomy
+taxpayer
+tea
+teach
+teacher
+teachers
+teaches
+teaching
+teachings
+teamed
+teammate
+teammates
+teams
+tear
+tears
+teaspoon
+technical
+technique
+techniques
+technology
+teenage
+teenager
+teenagers
+teeth
+telegraph
+telephone
+telescope
+televised
+television
+tell
+telling
+tells
+temper
+temperate
+template
+temple
+temples
+temporal
+temporary
+temptation
+tenant
+tenants
+tendencies
+tendency
+tender
+tenderness
+tennis
+tenor
+tentative
+tenth
+tenure
+term
+termed
+terminal
+terminals
+terminate
+terminated
+terminus
+terms
+terrace
+terrain
+terrible
+terribly
+territory
+terror
+terrorism
+terry
+tertiary
+testament
+testified
+testify
+testimony
+testing
+textbook
+textbooks
+textile
+textiles
+textual
+texture
+thanks
+theater
+theaters
+theatrical
+theft
+theme
+themes
+theology
+theorem
+theories
+theorists
+theory
+therapist
+therapists
+therapy
+therein
+thermal
+thesis
+thick
+thickness
+thin
+things
+think
+thinkers
+thinking
+thinks
+third
+thirds
+thirteen
+thirteenth
+thirty
+thorough
+thoroughly
+thought
+thoughtful
+thoughts
+thousand
+thousands
+thread
+threads
+threat
+threaten
+threatened
+threats
+three
+threshold
+threw
+thriller
+throat
+throne
+throughout
+throw
+throwing
+throws
+thrust
+thumb
+thunder
+thyroid
+ticket
+tickets
+tidal
+tide
+tie
+tied
+tier
+tiger
+tigers
+tight
+tightly
+tiles
+timber
+timeline
+timely
+timing
+tin
+tip
+tips
+tissue
+tissues
+titans
+title
+titles
+titular
+tobacco
+today
+toe
+toes
+toilet
+token
+told
+tolerance
+tolerate
+toll
+tomato
+tomatoes
+tomb
+tombs
+tomorrow
+tongue
+tonight
+tool
+tools
+tooth
+topic
+topics
+torn
+tornado
+torpedo
+torture
+tossed
+total
+totally
+touch
+touchdown
+touchdowns
+touched
+touches
+touching
+tough
+toured
+touring
+tourism
+tourist
+tourists
+tournament
+tours
+toward
+towards
+tower
+towers
+towns
+township
+townships
+toxic
+toxicity
+toy
+toys
+trace
+traced
+traces
+tracing
+tracking
+tracks
+trade
+traded
+trademark
+traders
+trades
+trading
+tradition
+traditions
+traffic
+tragedy
+tragic
+trail
+trailer
+trails
+trained
+trainer
+training
+tram
+transfer
+transfers
+transform
+transient
+transit
+transition
+translate
+translated
+translates
+translator
+transmit
+transport
+transverse
+trap
+trapped
+trauma
+traumatic
+travel
+traveling
+travels
+treason
+treasure
+treasurer
+treasury
+treaties
+treating
+treatise
+treatment
+treatments
+treats
+treaty
+tree
+trees
+trek
+trembling
+tremendous
+trench
+trend
+trends
+trial
+trials
+triangle
+triangular
+tribal
+tribe
+tribes
+tribunal
+tribune
+tributary
+trick
+tricks
+tried
+trigger
+triggered
+trilogy
+trim
+trinity
+trio
+triple
+triumph
+trivial
+troop
+troops
+trophy
+tropical
+trouble
+troubled
+troubles
+troupe
+trout
+trucks
+true
+truly
+trump
+trunk
+trust
+trusted
+trustee
+trustees
+trusts
+truth
+truths
+trying
+tube
+tubes
+tulip
+tumor
+tumors
+tune
+tunes
+tunnel
+tunnels
+turbine
+turbulent
+turf
+turkey
+turner
+turnout
+turnover
+turtle
+tutor
+twelfth
+twelve
+twentieth
+twenty
+twice
+twin
+twins
+twist
+twisted
+twitter
+type
+types
+typhoon
+typical
+typically
+typing
+ugly
+ultimate
+ultimately
+ultrasound
+umbrella
+unable
+unanimous
+unaware
+uncertain
+unchanged
+uncle
+unclear
+uncommon
+uncovered
+undefeated
+undergo
+undergoing
+underlying
+undermine
+underneath
+understand
+understood
+undertake
+undertaken
+undertook
+underwater
+underwent
+uneasy
+unemployed
+unequal
+unexpected
+unfair
+unfamiliar
+unhappy
+unified
+uniform
+uniformly
+uniforms
+unilateral
+unions
+unique
+unit
+unite
+units
+unity
+universal
+universe
+university
+unjust
+unknown
+unless
+unlike
+unlikely
+unlimited
+unnamed
+unofficial
+unopposed
+unpleasant
+unrelated
+unreleased
+unrest
+unstable
+unusual
+unusually
+unveiled
+unwilling
+upcoming
+update
+updated
+updates
+upgrade
+upgraded
+upheld
+upon
+upright
+uprising
+upset
+upstairs
+upstream
+uptake
+upward
+uranium
+urge
+urged
+urgency
+urgent
+urging
+urine
+usage
+useful
+usefulness
+useless
+user
+users
+using
+utilities
+utility
+utilize
+utilized
+utilizing
+utmost
+utterance
+utterly
+vacancy
+vacant
+vacated
+vacation
+vaccine
+vacuum
+vague
+vain
+validation
+validity
+valley
+valleys
+valuable
+value
+valued
+values
+valve
+valves
+vampire
+van
+vanished
+vapor
+variable
+variables
+variance
+variant
+variants
+variation
+variations
+varied
+varies
+varieties
+variety
+various
+varsity
+vary
+varying
+vascular
+vast
+vault
+vector
+vectors
+vegetable
+vegetables
+vegetation
+vehicle
+vehicles
+veil
+vein
+veins
+velocity
+vendor
+vendors
+venous
+verb
+verbal
+verbs
+verdict
+verified
+verify
+verses
+versions
+versus
+vertical
+vessel
+vessels
+veteran
+veterans
+veterinary
+via
+viable
+vibration
+vicar
+vicinity
+vicious
+victim
+victims
+victor
+victories
+victorious
+victory
+video
+videos
+viewpoint
+vigorous
+vigorously
+villa
+village
+villagers
+villages
+villain
+vintage
+vinyl
+violate
+violated
+violation
+violations
+violence
+violent
+violin
+viral
+virtual
+virtually
+virtue
+virtues
+virus
+viruses
+visa
+viscosity
+viscount
+visibility
+visit
+visited
+visiting
+visitor
+visitors
+visits
+vista
+visual
+vital
+vitality
+vitamin
+vivid
+vocabulary
+vocal
+vocalist
+vocals
+vocational
+voice
+voiced
+voices
+volatile
+volcanic
+volcano
+volleyball
+vols
+voltage
+volume
+volumes
+voluntary
+volunteer
+volunteers
+vomiting
+voter
+voters
+votes
+voting
+vowel
+vowels
+voyage
+vulnerable
+wade
+wage
+wager
+wages
+wagon
+wagons
+waist
+wait
+waited
+waiting
+waking
+walk
+walked
+walker
+walking
+walks
+wall
+walls
+wanderers
+wandering
+wanted
+wanting
+wants
+warehouse
+warfare
+warm
+warming
+warmth
+warn
+warned
+warning
+warnings
+warrant
+warren
+warrior
+warriors
+wars
+warships
+wartime
+wash
+washed
+washing
+waste
+wasted
+wastes
+watch
+watched
+watching
+waters
+watershed
+watts
+wave
+waved
+wavelength
+waves
+wax
+weak
+weakened
+weaker
+weakness
+weaknesses
+wealth
+wealthy
+weapon
+weapons
+wearing
+wears
+weary
+weather
+weaver
+web
+website
+websites
+wedding
+weed
+week
+weekend
+weekends
+weekly
+weeks
+weigh
+weighed
+weight
+weighted
+weights
+welcome
+welcomed
+welfare
+wells
+welsh
+western
+westward
+wet
+wetlands
+whale
+whatever
+whatsoever
+wheat
+wheel
+wheelchair
+wheeler
+wheels
+whenever
+wherein
+wherever
+whilst
+whisper
+whispered
+white
+whole
+wholesale
+wicked
+wickets
+widely
+wider
+widespread
+widow
+wife
+wild
+wildcats
+wilderness
+wildlife
+willow
+wills
+wind
+winding
+window
+windows
+winds
+wine
+wines
+winger
+wings
+wingspan
+winner
+winners
+winning
+winter
+winters
+wiped
+wire
+wireless
+wires
+wisdom
+wish
+wished
+wishes
+wishing
+wit
+withdraw
+withdrawal
+withdrawn
+withdrew
+witness
+witnessed
+witnesses
+wives
+wizard
+woke
+wolf
+wolves
+woman
+women
+won
+wonder
+wondered
+wonderful
+wondering
+wonders
+wood
+wooden
+woodland
+woods
+wool
+words
+wore
+worked
+worker
+workers
+workforce
+workplace
+worksheet
+workshop
+workshops
+world
+worldly
+worlds
+worldwide
+worried
+worry
+worse
+worship
+worst
+worth
+worthwhile
+worthy
+wound
+wounded
+wounds
+woven
+wrap
+wrapped
+wrath
+wreck
+wrestler
+wrestlers
+wrestling
+wrist
+write
+writers
+writes
+writing
+writings
+written
+wrong
+wrote
+yacht
+yards
+year
+yearly
+years
+yeast
+yelled
+yellow
+yesterday
+yet
+yield
+yielded
+yielding
+yields
+yoga
+young
+younger
+youngest
+youth
+youths
+zero
+zinc
+zones
+zoo