├── .devcontainer └── devcontainer.json ├── .github ├── dependabot-bot.yaml ├── dependabot.yaml └── workflows │ ├── azure-bicep-validate.yaml │ ├── azure-dev.yaml │ └── python-check.yaml ├── .gitignore ├── .pre-commit-config.yaml ├── .vscode └── launch.json ├── LICENSE.md ├── README.md ├── azure.yaml ├── infra ├── api.bicep ├── api.parameters.json ├── core │ ├── host │ │ ├── container-app-upsert.bicep │ │ ├── container-app.bicep │ │ ├── container-apps-environment.bicep │ │ ├── container-apps.bicep │ │ └── container-registry.bicep │ ├── monitor │ │ ├── applicationinsights-dashboard.bicep │ │ ├── applicationinsights.bicep │ │ ├── loganalytics.bicep │ │ └── monitoring.bicep │ └── security │ │ ├── registry-access.bicep │ │ └── role.bicep ├── main.bicep └── main.parameters.json ├── pyproject.toml ├── readme_diagram.png ├── requirements-dev.txt └── src ├── .dockerignore ├── Dockerfile ├── api ├── __init__.py ├── api_test.py ├── data.py └── main.py ├── gunicorn.conf.py ├── gunicorn_test.py └── requirements.txt /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. 2 | { 3 | "name": "simple-fastapi-container", 4 | "image": "mcr.microsoft.com/devcontainers/python:3.11-bullseye", 5 | 6 | // See https://containers.dev/implementors/features/ 7 | "features": { 8 | "ghcr.io/devcontainers/features/docker-in-docker:2": {}, 9 | "ghcr.io/azure/azure-dev/azd:latest": {} 10 | }, 11 | 12 | // Configure tool-specific properties. 13 | "customizations": { 14 | // Configure properties specific to VS Code. 15 | "vscode": { 16 | // Add the IDs of extensions you want installed when the container is created. 17 | "extensions": [ 18 | "ms-python.python", 19 | "ms-python.vscode-pylance", 20 | "charliermarsh.ruff", 21 | "ms-azuretools.vscode-docker", 22 | "ms-azuretools.vscode-bicep" 23 | ], 24 | // Set *default* container specific settings.json values on container create. 25 | "settings": { 26 | "python.defaultInterpreterPath": "/usr/local/bin/python", 27 | "python.linting.enabled": true, 28 | "python.testing.unittestEnabled": false, 29 | "python.testing.pytestEnabled": true, 30 | "[python]": { 31 | "editor.formatOnSave": true, 32 | "editor.codeActionsOnSave": { 33 | "source.fixAll": true 34 | } 35 | }, 36 | "python.formatting.provider": "black" 37 | } 38 | } 39 | }, 40 | 41 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 42 | "forwardPorts": [3100, 8000], 43 | 44 | // Use 'postCreateCommand' to run commands after the container is created. 45 | "postCreateCommand": "python3 -m pip install -r requirements-dev.txt", 46 | 47 | // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. 48 | "remoteUser": "vscode" 49 | } 50 | -------------------------------------------------------------------------------- /.github/dependabot-bot.yaml: -------------------------------------------------------------------------------- 1 | safe: 2 | - fastapi 3 | - uvicorn 4 | - gunicorn 5 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: "weekly" 12 | - package-ecosystem: "pip" 13 | directory: "/" 14 | schedule: 15 | interval: "weekly" 16 | -------------------------------------------------------------------------------- /.github/workflows/azure-bicep-validate.yaml: -------------------------------------------------------------------------------- 1 | name: Validate bicep scripts 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v4 17 | 18 | - name: Azure CLI script 19 | uses: azure/CLI@v2 20 | with: 21 | inlineScript: az config set bicep.use_binary_from_path=false && az bicep build -f infra/main.bicep 22 | -------------------------------------------------------------------------------- /.github/workflows/azure-dev.yaml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_dispatch: 3 | push: 4 | # Run when commits are pushed to mainline branch (main or master) 5 | # Set this to the mainline branch you are using 6 | branches: 7 | - main 8 | 9 | # GitHub Actions workflow to deploy to Azure using azd 10 | # To configure required secrets for connecting to Azure, simply run `azd pipeline config` 11 | 12 | # Set up permissions for deploying with secretless Azure federated credentials 13 | # https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure?tabs=azure-portal%2Clinux#set-up-azure-login-with-openid-connect-authentication 14 | permissions: 15 | id-token: write 16 | contents: read 17 | 18 | jobs: 19 | build: 20 | runs-on: ubuntu-latest 21 | env: 22 | AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }} 23 | AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }} 24 | AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} 25 | AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} 26 | steps: 27 | - name: Checkout 28 | uses: actions/checkout@v4 29 | 30 | - name: Install azd 31 | uses: Azure/setup-azd@v1.0.0 32 | 33 | - name: Log in with Azure (Federated Credentials) 34 | if: ${{ env.AZURE_CLIENT_ID != '' }} 35 | run: | 36 | azd auth login ` 37 | --client-id "$Env:AZURE_CLIENT_ID" ` 38 | --federated-credential-provider "github" ` 39 | --tenant-id "$Env:AZURE_TENANT_ID" 40 | shell: pwsh 41 | 42 | - name: Log in with Azure (Client Credentials) 43 | if: ${{ env.AZURE_CREDENTIALS != '' }} 44 | run: | 45 | $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable; 46 | Write-Host "::add-mask::$($info.clientSecret)" 47 | 48 | azd auth login ` 49 | --client-id "$($info.clientId)" ` 50 | --client-secret "$($info.clientSecret)" ` 51 | --tenant-id "$($info.tenantId)" 52 | shell: pwsh 53 | env: 54 | AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }} 55 | 56 | - name: Provision Infrastructure 57 | run: azd provision --no-prompt 58 | env: 59 | AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} 60 | AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} 61 | AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} 62 | 63 | - name: Deploy Application 64 | run: azd deploy --no-prompt 65 | env: 66 | AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }} 67 | AZURE_LOCATION: ${{ vars.AZURE_LOCATION }} 68 | AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }} 69 | -------------------------------------------------------------------------------- /.github/workflows/python-check.yaml: -------------------------------------------------------------------------------- 1 | name: Python check 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | test_package: 11 | name: Test ${{ matrix.os }} Python ${{ matrix.python_version }} 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | os: ["ubuntu-20.04"] 17 | python_version: ["3.11"] 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Setup python 21 | uses: actions/setup-python@v5 22 | with: 23 | python-version: ${{ matrix.python_version }} 24 | architecture: x64 25 | - name: Install dependencies 26 | run: | 27 | python3 -m pip install --upgrade pip 28 | pip install -r requirements-dev.txt 29 | - name: Lint with ruff 30 | run: ruff check . 31 | - name: Check formatting with black 32 | run: black . --check --verbose 33 | - name: Run Pytest tests 34 | run: python3 -m pytest 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/*.pyc 2 | .venv/ 3 | .azure 4 | __pycache__/ 5 | .coverage 6 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v2.3.0 4 | hooks: 5 | - id: check-yaml 6 | - id: end-of-file-fixer 7 | - id: trailing-whitespace 8 | - repo: https://github.com/charliermarsh/ruff-pre-commit 9 | rev: v0.0.237 10 | hooks: 11 | - id: ruff 12 | - repo: https://github.com/psf/black 13 | rev: 22.12.0 14 | hooks: 15 | - id: black 16 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Python: App", 9 | "type": "debugpy", 10 | "request": "launch", 11 | "module": "uvicorn", 12 | "args": ["src.api.main:app", "--reload"], 13 | "justMyCode": true 14 | }, 15 | { 16 | "name": "Python: Tests", 17 | "type": "debugpy", 18 | "request": "launch", 19 | "program": "${file}", 20 | "purpose": ["debug-test"], 21 | "console": "integratedTerminal", 22 | "env": {"PYTEST_ADDOPTS": "--no-cov"} 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simple FastAPI container 2 | 3 | This repository includes a simple Python FastAPI app with a single route that returns JSON. 4 | You can use this project as a starting point for your own APIs. 5 | 6 | The repository is designed for use with [Docker containers](https://www.docker.com/), both for local development and deployment, and includes infrastructure files for deployment to [Azure Container Apps](https://learn.microsoft.com/azure/container-apps/overview). 🐳 7 | 8 | The code istested with [pytest](https://docs.pytest.org/en/7.2.x/), 9 | linted with [ruff](https://github.com/charliermarsh/ruff), and formatted with [black](https://black.readthedocs.io/en/stable/). 10 | Code quality issues are all checked with both [pre-commit](https://pre-commit.com/) and Github actions. 11 | 12 | ## Opening the project 13 | 14 | This project has [Dev Container support](https://code.visualstudio.com/docs/devcontainers/containers), so it will be be setup automatically if you open it in Github Codespaces or in local VS Code with the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). 15 | 16 | If you're not using one of those options for opening the project, then you'll need to: 17 | 18 | 1. Create a [Python virtual environment](https://docs.python.org/3/tutorial/venv.html#creating-virtual-environments) and activate it. 19 | 20 | 2. Install the requirements: 21 | 22 | ```shell 23 | python3 -m pip install -r requirements-dev.txt 24 | ``` 25 | 26 | 3. Install the pre-commit hooks: 27 | 28 | ```shell 29 | pre-commit install 30 | ``` 31 | 32 | ## Local development 33 | 34 | 1. Run the local server: 35 | 36 | ```shell 37 | fastapi dev src/api/main.py 38 | ``` 39 | 40 | 2. Click 'http://127.0.0.1:8000' in the terminal, which should open a new tab in the browser. 41 | 42 | 3. Try the API at '/generate_name' and try passing in a parameter at the end of the URL, like '/generate_name?starts_with=N'. 43 | 44 | ### Local development with Docker 45 | 46 | You can also run this app with Docker, thanks to the `Dockerfile`. 47 | 48 | You need to either have Docker Desktop installed or have this open in Github Codespaces for these commands to work. ⚠️ If you're on an Apple M1/M2, you won't be able to run `docker` commands inside a Dev Container; either use Codespaces or do not open the Dev Container. 49 | 50 | 1. Build the image: 51 | 52 | ```shell 53 | docker build --tag fastapi-app ./src 54 | ``` 55 | 56 | 2. Run the image: 57 | 58 | ```shell 59 | docker run --publish 3100:3100 fastapi-app 60 | ``` 61 | 62 | ### Deployment 63 | 64 | This repo is set up for deployment on Azure Container Apps using the configuration files in the `infra` folder. 65 | 66 | This diagram shows the architecture of the deployment: 67 | 68 | ![Diagram of app architecture: Azure Container Apps environment, Azure Container App, Azure Container Registry, Container, and Key Vault](readme_diagram.png) 69 | 70 | Steps for deployment: 71 | 72 | 1. Sign up for a [free Azure account](https://azure.microsoft.com/free/) and create an Azure Subscription. 73 | 2. Install the [Azure Developer CLI](https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd). (If you open this repository in Codespaces or with the VS Code Dev Containers extension, that part will be done for you.) 74 | 3. Login to Azure: 75 | 76 | ```shell 77 | azd auth login 78 | ``` 79 | 80 | 4. Provision and deploy all the resources: 81 | 82 | ```shell 83 | azd up 84 | ``` 85 | 86 | It will prompt you to provide an `azd` environment name (like "fastapi-app"), select a subscription from your Azure account, and select a location (like "eastus"). Then it will provision the resources in your account and deploy the latest code. If you get an error with deployment, changing the location can help, as there may be availability constraints for some of the resources. 87 | 88 | 5. When `azd` has finished deploying, you'll see an endpoint URI in the command output. Visit that URI, and you should see the API output! 🎉 89 | 6. When you've made any changes to the app code, you can just run: 90 | 91 | ```shell 92 | azd deploy 93 | ``` 94 | 95 | ### Costs 96 | 97 | Pricing varies per region and usage, so it isn't possible to predict exact costs for your usage. 98 | The majority of the Azure resources used in this infrastructure are on usage-based pricing tiers. 99 | However, Azure Container Registry has a fixed cost per registry per day. 100 | 101 | You can try the [Azure pricing calculator](https://azure.com/e/9f8185b239d240b398e201078d0c4e7a) for the resources: 102 | 103 | - Azure Container App: Consumption tier with 0.5 CPU, 1GiB memory/storage. Pricing is based on resource allocation, and each month allows for a certain amount of free usage. [Pricing](https://azure.microsoft.com/pricing/details/container-apps/) 104 | - Azure Container Registry: Basic tier. [Pricing](https://azure.microsoft.com/pricing/details/container-registry/) 105 | - Log analytics: Pay-as-you-go tier. Costs based on data ingested. [Pricing](https://azure.microsoft.com/pricing/details/monitor/) 106 | 107 | ⚠️ To avoid unnecessary costs, remember to take down your app if it's no longer in use, 108 | either by deleting the resource group in the Portal or running `azd down`. 109 | 110 | 111 | ## Getting help 112 | 113 | If you're working with this project and running into issues, please post in **Discussions**. 114 | -------------------------------------------------------------------------------- /azure.yaml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json 2 | 3 | name: simple-fastapi-container-app 4 | metadata: 5 | template: simple-fastapi-container-app@0.0.1 6 | services: 7 | api: 8 | project: ./src 9 | language: py 10 | host: containerapp 11 | -------------------------------------------------------------------------------- /infra/api.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | param identityName string 6 | param containerAppsEnvironmentName string 7 | param containerRegistryName string 8 | param serviceName string = 'api' 9 | param exists bool 10 | 11 | resource apiIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { 12 | name: identityName 13 | location: location 14 | } 15 | 16 | module app 'core/host/container-app-upsert.bicep' = { 17 | name: '${serviceName}-container-app-module' 18 | params: { 19 | name: name 20 | location: location 21 | tags: union(tags, { 'azd-service-name': serviceName }) 22 | identityName: apiIdentity.name 23 | exists: exists 24 | containerAppsEnvironmentName: containerAppsEnvironmentName 25 | containerRegistryName: containerRegistryName 26 | targetPort: 3100 27 | } 28 | } 29 | 30 | output SERVICE_API_IDENTITY_PRINCIPAL_ID string = apiIdentity.properties.principalId 31 | output SERVICE_API_NAME string = app.outputs.name 32 | output SERVICE_API_URI string = app.outputs.uri 33 | output SERVICE_API_IMAGE_NAME string = app.outputs.imageName 34 | -------------------------------------------------------------------------------- /infra/api.parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "location": { 6 | "value": "${AZURE_LOCATION}" 7 | }, 8 | "name": { 9 | "value": "${SERVICE_API_NAME}" 10 | }, 11 | "imageName": { 12 | "value": "${SERVICE_API_IMAGE_NAME}" 13 | }, 14 | "containerAppsEnvironmentName": { 15 | "value": "${AZURE_CONTAINER_ENVIRONMENT_NAME}" 16 | }, 17 | "containerRegistryName": { 18 | "value": "${AZURE_CONTAINER_REGISTRY_NAME}" 19 | }, 20 | "keyVaultName": { 21 | "value": "${AZURE_KEY_VAULT_NAME}" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /infra/core/host/container-app-upsert.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | param containerAppsEnvironmentName string 6 | param containerName string = 'main' 7 | param containerRegistryName string 8 | 9 | @description('Minimum number of replicas to run') 10 | @minValue(1) 11 | param containerMinReplicas int = 1 12 | @description('Maximum number of replicas to run') 13 | @minValue(1) 14 | param containerMaxReplicas int = 10 15 | 16 | param secrets array = [] 17 | param env array = [] 18 | param external bool = true 19 | param targetPort int = 80 20 | param exists bool 21 | 22 | @description('User assigned identity name') 23 | param identityName string 24 | 25 | @description('Enabled Ingress for container app') 26 | param ingressEnabled bool = true 27 | 28 | // Dapr Options 29 | @description('Enable Dapr') 30 | param daprEnabled bool = false 31 | @description('Dapr app ID') 32 | param daprAppId string = containerName 33 | @allowed([ 'http', 'grpc' ]) 34 | @description('Protocol used by Dapr to connect to the app, e.g. http or grpc') 35 | param daprAppProtocol string = 'http' 36 | 37 | @description('CPU cores allocated to a single container instance, e.g. 0.5') 38 | param containerCpuCoreCount string = '0.5' 39 | 40 | @description('Memory allocated to a single container instance, e.g. 1Gi') 41 | param containerMemory string = '1.0Gi' 42 | 43 | resource existingApp 'Microsoft.App/containerApps@2022-03-01' existing = if (exists) { 44 | name: name 45 | } 46 | 47 | module app 'container-app.bicep' = { 48 | name: '${deployment().name}-update' 49 | params: { 50 | name: name 51 | location: location 52 | tags: tags 53 | identityName: identityName 54 | ingressEnabled: ingressEnabled 55 | containerName: containerName 56 | containerAppsEnvironmentName: containerAppsEnvironmentName 57 | containerRegistryName: containerRegistryName 58 | containerCpuCoreCount: containerCpuCoreCount 59 | containerMemory: containerMemory 60 | containerMinReplicas: containerMinReplicas 61 | containerMaxReplicas: containerMaxReplicas 62 | daprEnabled: daprEnabled 63 | daprAppId: daprAppId 64 | daprAppProtocol: daprAppProtocol 65 | secrets: secrets 66 | external: external 67 | env: env 68 | imageName: exists ? existingApp.properties.template.containers[0].image : '' 69 | targetPort: targetPort 70 | } 71 | } 72 | 73 | output defaultDomain string = app.outputs.defaultDomain 74 | output imageName string = app.outputs.imageName 75 | output name string = app.outputs.name 76 | output uri string = app.outputs.uri 77 | -------------------------------------------------------------------------------- /infra/core/host/container-app.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | param containerAppsEnvironmentName string 6 | param containerName string = 'main' 7 | param containerRegistryName string 8 | 9 | @description('Minimum number of replicas to run') 10 | @minValue(1) 11 | param containerMinReplicas int = 1 12 | @description('Maximum number of replicas to run') 13 | @minValue(1) 14 | param containerMaxReplicas int = 10 15 | 16 | param secrets array = [] 17 | param env array = [] 18 | param external bool = true 19 | param imageName string 20 | param targetPort int = 80 21 | 22 | @description('User assigned identity name') 23 | param identityName string 24 | 25 | @description('Enabled Ingress for container app') 26 | param ingressEnabled bool = true 27 | 28 | // Dapr Options 29 | @description('Enable Dapr') 30 | param daprEnabled bool = false 31 | @description('Dapr app ID') 32 | param daprAppId string = containerName 33 | @allowed([ 'http', 'grpc' ]) 34 | @description('Protocol used by Dapr to connect to the app, e.g. http or grpc') 35 | param daprAppProtocol string = 'http' 36 | 37 | @description('CPU cores allocated to a single container instance, e.g. 0.5') 38 | param containerCpuCoreCount string = '0.5' 39 | 40 | @description('Memory allocated to a single container instance, e.g. 1Gi') 41 | param containerMemory string = '1.0Gi' 42 | 43 | resource userIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' existing = { 44 | name: identityName 45 | } 46 | 47 | module containerRegistryAccess '../security/registry-access.bicep' = { 48 | name: '${deployment().name}-registry-access' 49 | params: { 50 | containerRegistryName: containerRegistryName 51 | principalId: userIdentity.properties.principalId 52 | } 53 | } 54 | 55 | resource app 'Microsoft.App/containerApps@2022-03-01' = { 56 | name: name 57 | location: location 58 | tags: tags 59 | // It is critical that the identity is granted ACR pull access before the app is created 60 | // otherwise the container app will throw a provision error 61 | // This also forces us to use an user assigned managed identity since there would no way to 62 | // provide the system assigned identity with the ACR pull access before the app is created 63 | dependsOn: [ containerRegistryAccess ] 64 | identity: { 65 | type: 'UserAssigned' 66 | userAssignedIdentities: { '${userIdentity.id}': {} } 67 | } 68 | properties: { 69 | managedEnvironmentId: containerAppsEnvironment.id 70 | configuration: { 71 | activeRevisionsMode: 'single' 72 | ingress: ingressEnabled ? { 73 | external: external 74 | targetPort: targetPort 75 | transport: 'auto' 76 | } : null 77 | dapr: daprEnabled ? { 78 | enabled: true 79 | appId: daprAppId 80 | appProtocol: daprAppProtocol 81 | appPort: ingressEnabled ? targetPort : 0 82 | } : { enabled: false } 83 | secrets: secrets 84 | registries: [ 85 | { 86 | server: '${containerRegistry.name}.azurecr.io' 87 | identity: userIdentity.id 88 | } 89 | ] 90 | } 91 | template: { 92 | containers: [ 93 | { 94 | image: !empty(imageName) ? imageName : 'mcr.microsoft.com/azuredocs/containerapps-helloworld:latest' 95 | name: containerName 96 | env: env 97 | resources: { 98 | cpu: json(containerCpuCoreCount) 99 | memory: containerMemory 100 | } 101 | } 102 | ] 103 | scale: { 104 | minReplicas: containerMinReplicas 105 | maxReplicas: containerMaxReplicas 106 | } 107 | } 108 | } 109 | } 110 | 111 | resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2022-03-01' existing = { 112 | name: containerAppsEnvironmentName 113 | } 114 | 115 | // 2022-02-01-preview needed for anonymousPullEnabled 116 | resource containerRegistry 'Microsoft.ContainerRegistry/registries@2022-02-01-preview' existing = { 117 | name: containerRegistryName 118 | } 119 | 120 | output defaultDomain string = containerAppsEnvironment.properties.defaultDomain 121 | output imageName string = imageName 122 | output name string = app.name 123 | output uri string = 'https://${app.properties.configuration.ingress.fqdn}' 124 | -------------------------------------------------------------------------------- /infra/core/host/container-apps-environment.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | param daprEnabled bool = false 6 | param logAnalyticsWorkspaceName string 7 | param applicationInsightsName string = '' 8 | 9 | resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2022-03-01' = { 10 | name: name 11 | location: location 12 | tags: tags 13 | properties: { 14 | appLogsConfiguration: { 15 | destination: 'log-analytics' 16 | logAnalyticsConfiguration: { 17 | customerId: logAnalyticsWorkspace.properties.customerId 18 | sharedKey: logAnalyticsWorkspace.listKeys().primarySharedKey 19 | } 20 | } 21 | daprAIInstrumentationKey: daprEnabled && !empty(applicationInsightsName) ? applicationInsights.properties.InstrumentationKey : '' 22 | } 23 | } 24 | 25 | resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' existing = { 26 | name: logAnalyticsWorkspaceName 27 | } 28 | 29 | resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (daprEnabled && !empty(applicationInsightsName)){ 30 | name: applicationInsightsName 31 | } 32 | 33 | output defaultDomain string = containerAppsEnvironment.properties.defaultDomain 34 | output name string = containerAppsEnvironment.name 35 | -------------------------------------------------------------------------------- /infra/core/host/container-apps.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | param containerAppsEnvironmentName string 6 | param containerRegistryName string 7 | param logAnalyticsWorkspaceName string 8 | param applicationInsightsName string = '' 9 | 10 | module containerAppsEnvironment 'container-apps-environment.bicep' = { 11 | name: '${name}-container-apps-environment' 12 | params: { 13 | name: containerAppsEnvironmentName 14 | location: location 15 | tags: tags 16 | logAnalyticsWorkspaceName: logAnalyticsWorkspaceName 17 | applicationInsightsName: applicationInsightsName 18 | } 19 | } 20 | 21 | module containerRegistry 'container-registry.bicep' = { 22 | name: '${name}-container-registry' 23 | params: { 24 | name: containerRegistryName 25 | location: location 26 | tags: tags 27 | } 28 | } 29 | 30 | output defaultDomain string = containerAppsEnvironment.outputs.defaultDomain 31 | output environmentName string = containerAppsEnvironment.outputs.name 32 | output registryLoginServer string = containerRegistry.outputs.loginServer 33 | output registryName string = containerRegistry.outputs.name 34 | -------------------------------------------------------------------------------- /infra/core/host/container-registry.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | param adminUserEnabled bool = true 6 | param anonymousPullEnabled bool = false 7 | param dataEndpointEnabled bool = false 8 | param encryption object = { 9 | status: 'disabled' 10 | } 11 | param networkRuleBypassOptions string = 'AzureServices' 12 | param publicNetworkAccess string = 'Enabled' 13 | param sku object = { 14 | name: 'Basic' 15 | } 16 | param zoneRedundancy string = 'Disabled' 17 | 18 | @description('The log analytics workspace id used for logging & monitoring') 19 | param workspaceId string = '' 20 | 21 | // 2022-02-01-preview needed for anonymousPullEnabled 22 | resource containerRegistry 'Microsoft.ContainerRegistry/registries@2022-02-01-preview' = { 23 | name: name 24 | location: location 25 | tags: tags 26 | sku: sku 27 | properties: { 28 | adminUserEnabled: adminUserEnabled 29 | anonymousPullEnabled: anonymousPullEnabled 30 | dataEndpointEnabled: dataEndpointEnabled 31 | encryption: encryption 32 | networkRuleBypassOptions: networkRuleBypassOptions 33 | publicNetworkAccess: publicNetworkAccess 34 | zoneRedundancy: zoneRedundancy 35 | } 36 | } 37 | 38 | // TODO: Update diagnostics to be its own module 39 | // Blocking issue: https://github.com/Azure/bicep/issues/622 40 | // Unable to pass in a `resource` scope or unable to use string interpolation in resource types 41 | resource diagnostics 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = if (!empty(workspaceId)) { 42 | name: 'registry-diagnostics' 43 | scope: containerRegistry 44 | properties: { 45 | workspaceId: workspaceId 46 | logs: [ 47 | { 48 | category: 'ContainerRegistryRepositoryEvents' 49 | enabled: true 50 | } 51 | { 52 | category: 'ContainerRegistryLoginEvents' 53 | enabled: true 54 | } 55 | ] 56 | metrics: [ 57 | { 58 | category: 'AllMetrics' 59 | enabled: true 60 | timeGrain: 'PT1M' 61 | } 62 | ] 63 | } 64 | } 65 | 66 | output loginServer string = containerRegistry.properties.loginServer 67 | output name string = containerRegistry.name 68 | -------------------------------------------------------------------------------- /infra/core/monitor/applicationinsights-dashboard.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param applicationInsightsName string 3 | param location string = resourceGroup().location 4 | param tags object = {} 5 | 6 | // 2020-09-01-preview because that is the latest valid version 7 | resource applicationInsightsDashboard 'Microsoft.Portal/dashboards@2020-09-01-preview' = { 8 | name: name 9 | location: location 10 | tags: tags 11 | properties: { 12 | lenses: [ 13 | { 14 | order: 0 15 | parts: [ 16 | { 17 | position: { 18 | x: 0 19 | y: 0 20 | colSpan: 2 21 | rowSpan: 1 22 | } 23 | metadata: { 24 | inputs: [ 25 | { 26 | name: 'id' 27 | value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 28 | } 29 | { 30 | name: 'Version' 31 | value: '1.0' 32 | } 33 | ] 34 | #disable-next-line BCP036 35 | type: 'Extension/AppInsightsExtension/PartType/AspNetOverviewPinnedPart' 36 | asset: { 37 | idInputName: 'id' 38 | type: 'ApplicationInsights' 39 | } 40 | defaultMenuItemId: 'overview' 41 | } 42 | } 43 | { 44 | position: { 45 | x: 2 46 | y: 0 47 | colSpan: 1 48 | rowSpan: 1 49 | } 50 | metadata: { 51 | inputs: [ 52 | { 53 | name: 'ComponentId' 54 | value: { 55 | Name: applicationInsights.name 56 | SubscriptionId: subscription().subscriptionId 57 | ResourceGroup: resourceGroup().name 58 | } 59 | } 60 | { 61 | name: 'Version' 62 | value: '1.0' 63 | } 64 | ] 65 | #disable-next-line BCP036 66 | type: 'Extension/AppInsightsExtension/PartType/ProactiveDetectionAsyncPart' 67 | asset: { 68 | idInputName: 'ComponentId' 69 | type: 'ApplicationInsights' 70 | } 71 | defaultMenuItemId: 'ProactiveDetection' 72 | } 73 | } 74 | { 75 | position: { 76 | x: 3 77 | y: 0 78 | colSpan: 1 79 | rowSpan: 1 80 | } 81 | metadata: { 82 | inputs: [ 83 | { 84 | name: 'ComponentId' 85 | value: { 86 | Name: applicationInsights.name 87 | SubscriptionId: subscription().subscriptionId 88 | ResourceGroup: resourceGroup().name 89 | } 90 | } 91 | { 92 | name: 'ResourceId' 93 | value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 94 | } 95 | ] 96 | #disable-next-line BCP036 97 | type: 'Extension/AppInsightsExtension/PartType/QuickPulseButtonSmallPart' 98 | asset: { 99 | idInputName: 'ComponentId' 100 | type: 'ApplicationInsights' 101 | } 102 | } 103 | } 104 | { 105 | position: { 106 | x: 4 107 | y: 0 108 | colSpan: 1 109 | rowSpan: 1 110 | } 111 | metadata: { 112 | inputs: [ 113 | { 114 | name: 'ComponentId' 115 | value: { 116 | Name: applicationInsights.name 117 | SubscriptionId: subscription().subscriptionId 118 | ResourceGroup: resourceGroup().name 119 | } 120 | } 121 | { 122 | name: 'TimeContext' 123 | value: { 124 | durationMs: 86400000 125 | endTime: null 126 | createdTime: '2018-05-04T01:20:33.345Z' 127 | isInitialTime: true 128 | grain: 1 129 | useDashboardTimeRange: false 130 | } 131 | } 132 | { 133 | name: 'Version' 134 | value: '1.0' 135 | } 136 | ] 137 | #disable-next-line BCP036 138 | type: 'Extension/AppInsightsExtension/PartType/AvailabilityNavButtonPart' 139 | asset: { 140 | idInputName: 'ComponentId' 141 | type: 'ApplicationInsights' 142 | } 143 | } 144 | } 145 | { 146 | position: { 147 | x: 5 148 | y: 0 149 | colSpan: 1 150 | rowSpan: 1 151 | } 152 | metadata: { 153 | inputs: [ 154 | { 155 | name: 'ComponentId' 156 | value: { 157 | Name: applicationInsights.name 158 | SubscriptionId: subscription().subscriptionId 159 | ResourceGroup: resourceGroup().name 160 | } 161 | } 162 | { 163 | name: 'TimeContext' 164 | value: { 165 | durationMs: 86400000 166 | endTime: null 167 | createdTime: '2018-05-08T18:47:35.237Z' 168 | isInitialTime: true 169 | grain: 1 170 | useDashboardTimeRange: false 171 | } 172 | } 173 | { 174 | name: 'ConfigurationId' 175 | value: '78ce933e-e864-4b05-a27b-71fd55a6afad' 176 | } 177 | ] 178 | #disable-next-line BCP036 179 | type: 'Extension/AppInsightsExtension/PartType/AppMapButtonPart' 180 | asset: { 181 | idInputName: 'ComponentId' 182 | type: 'ApplicationInsights' 183 | } 184 | } 185 | } 186 | { 187 | position: { 188 | x: 0 189 | y: 1 190 | colSpan: 3 191 | rowSpan: 1 192 | } 193 | metadata: { 194 | inputs: [] 195 | type: 'Extension/HubsExtension/PartType/MarkdownPart' 196 | settings: { 197 | content: { 198 | settings: { 199 | content: '# Usage' 200 | title: '' 201 | subtitle: '' 202 | } 203 | } 204 | } 205 | } 206 | } 207 | { 208 | position: { 209 | x: 3 210 | y: 1 211 | colSpan: 1 212 | rowSpan: 1 213 | } 214 | metadata: { 215 | inputs: [ 216 | { 217 | name: 'ComponentId' 218 | value: { 219 | Name: applicationInsights.name 220 | SubscriptionId: subscription().subscriptionId 221 | ResourceGroup: resourceGroup().name 222 | } 223 | } 224 | { 225 | name: 'TimeContext' 226 | value: { 227 | durationMs: 86400000 228 | endTime: null 229 | createdTime: '2018-05-04T01:22:35.782Z' 230 | isInitialTime: true 231 | grain: 1 232 | useDashboardTimeRange: false 233 | } 234 | } 235 | ] 236 | #disable-next-line BCP036 237 | type: 'Extension/AppInsightsExtension/PartType/UsageUsersOverviewPart' 238 | asset: { 239 | idInputName: 'ComponentId' 240 | type: 'ApplicationInsights' 241 | } 242 | } 243 | } 244 | { 245 | position: { 246 | x: 4 247 | y: 1 248 | colSpan: 3 249 | rowSpan: 1 250 | } 251 | metadata: { 252 | inputs: [] 253 | type: 'Extension/HubsExtension/PartType/MarkdownPart' 254 | settings: { 255 | content: { 256 | settings: { 257 | content: '# Reliability' 258 | title: '' 259 | subtitle: '' 260 | } 261 | } 262 | } 263 | } 264 | } 265 | { 266 | position: { 267 | x: 7 268 | y: 1 269 | colSpan: 1 270 | rowSpan: 1 271 | } 272 | metadata: { 273 | inputs: [ 274 | { 275 | name: 'ResourceId' 276 | value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 277 | } 278 | { 279 | name: 'DataModel' 280 | value: { 281 | version: '1.0.0' 282 | timeContext: { 283 | durationMs: 86400000 284 | createdTime: '2018-05-04T23:42:40.072Z' 285 | isInitialTime: false 286 | grain: 1 287 | useDashboardTimeRange: false 288 | } 289 | } 290 | isOptional: true 291 | } 292 | { 293 | name: 'ConfigurationId' 294 | value: '8a02f7bf-ac0f-40e1-afe9-f0e72cfee77f' 295 | isOptional: true 296 | } 297 | ] 298 | #disable-next-line BCP036 299 | type: 'Extension/AppInsightsExtension/PartType/CuratedBladeFailuresPinnedPart' 300 | isAdapter: true 301 | asset: { 302 | idInputName: 'ResourceId' 303 | type: 'ApplicationInsights' 304 | } 305 | defaultMenuItemId: 'failures' 306 | } 307 | } 308 | { 309 | position: { 310 | x: 8 311 | y: 1 312 | colSpan: 3 313 | rowSpan: 1 314 | } 315 | metadata: { 316 | inputs: [] 317 | type: 'Extension/HubsExtension/PartType/MarkdownPart' 318 | settings: { 319 | content: { 320 | settings: { 321 | content: '# Responsiveness\r\n' 322 | title: '' 323 | subtitle: '' 324 | } 325 | } 326 | } 327 | } 328 | } 329 | { 330 | position: { 331 | x: 11 332 | y: 1 333 | colSpan: 1 334 | rowSpan: 1 335 | } 336 | metadata: { 337 | inputs: [ 338 | { 339 | name: 'ResourceId' 340 | value: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 341 | } 342 | { 343 | name: 'DataModel' 344 | value: { 345 | version: '1.0.0' 346 | timeContext: { 347 | durationMs: 86400000 348 | createdTime: '2018-05-04T23:43:37.804Z' 349 | isInitialTime: false 350 | grain: 1 351 | useDashboardTimeRange: false 352 | } 353 | } 354 | isOptional: true 355 | } 356 | { 357 | name: 'ConfigurationId' 358 | value: '2a8ede4f-2bee-4b9c-aed9-2db0e8a01865' 359 | isOptional: true 360 | } 361 | ] 362 | #disable-next-line BCP036 363 | type: 'Extension/AppInsightsExtension/PartType/CuratedBladePerformancePinnedPart' 364 | isAdapter: true 365 | asset: { 366 | idInputName: 'ResourceId' 367 | type: 'ApplicationInsights' 368 | } 369 | defaultMenuItemId: 'performance' 370 | } 371 | } 372 | { 373 | position: { 374 | x: 12 375 | y: 1 376 | colSpan: 3 377 | rowSpan: 1 378 | } 379 | metadata: { 380 | inputs: [] 381 | type: 'Extension/HubsExtension/PartType/MarkdownPart' 382 | settings: { 383 | content: { 384 | settings: { 385 | content: '# Browser' 386 | title: '' 387 | subtitle: '' 388 | } 389 | } 390 | } 391 | } 392 | } 393 | { 394 | position: { 395 | x: 15 396 | y: 1 397 | colSpan: 1 398 | rowSpan: 1 399 | } 400 | metadata: { 401 | inputs: [ 402 | { 403 | name: 'ComponentId' 404 | value: { 405 | Name: applicationInsights.name 406 | SubscriptionId: subscription().subscriptionId 407 | ResourceGroup: resourceGroup().name 408 | } 409 | } 410 | { 411 | name: 'MetricsExplorerJsonDefinitionId' 412 | value: 'BrowserPerformanceTimelineMetrics' 413 | } 414 | { 415 | name: 'TimeContext' 416 | value: { 417 | durationMs: 86400000 418 | createdTime: '2018-05-08T12:16:27.534Z' 419 | isInitialTime: false 420 | grain: 1 421 | useDashboardTimeRange: false 422 | } 423 | } 424 | { 425 | name: 'CurrentFilter' 426 | value: { 427 | eventTypes: [ 428 | 4 429 | 1 430 | 3 431 | 5 432 | 2 433 | 6 434 | 13 435 | ] 436 | typeFacets: {} 437 | isPermissive: false 438 | } 439 | } 440 | { 441 | name: 'id' 442 | value: { 443 | Name: applicationInsights.name 444 | SubscriptionId: subscription().subscriptionId 445 | ResourceGroup: resourceGroup().name 446 | } 447 | } 448 | { 449 | name: 'Version' 450 | value: '1.0' 451 | } 452 | ] 453 | #disable-next-line BCP036 454 | type: 'Extension/AppInsightsExtension/PartType/MetricsExplorerBladePinnedPart' 455 | asset: { 456 | idInputName: 'ComponentId' 457 | type: 'ApplicationInsights' 458 | } 459 | defaultMenuItemId: 'browser' 460 | } 461 | } 462 | { 463 | position: { 464 | x: 0 465 | y: 2 466 | colSpan: 4 467 | rowSpan: 3 468 | } 469 | metadata: { 470 | inputs: [ 471 | { 472 | name: 'options' 473 | value: { 474 | chart: { 475 | metrics: [ 476 | { 477 | resourceMetadata: { 478 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 479 | } 480 | name: 'sessions/count' 481 | aggregationType: 5 482 | namespace: 'microsoft.insights/components/kusto' 483 | metricVisualization: { 484 | displayName: 'Sessions' 485 | color: '#47BDF5' 486 | } 487 | } 488 | { 489 | resourceMetadata: { 490 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 491 | } 492 | name: 'users/count' 493 | aggregationType: 5 494 | namespace: 'microsoft.insights/components/kusto' 495 | metricVisualization: { 496 | displayName: 'Users' 497 | color: '#7E58FF' 498 | } 499 | } 500 | ] 501 | title: 'Unique sessions and users' 502 | visualization: { 503 | chartType: 2 504 | legendVisualization: { 505 | isVisible: true 506 | position: 2 507 | hideSubtitle: false 508 | } 509 | axisVisualization: { 510 | x: { 511 | isVisible: true 512 | axisType: 2 513 | } 514 | y: { 515 | isVisible: true 516 | axisType: 1 517 | } 518 | } 519 | } 520 | openBladeOnClick: { 521 | openBlade: true 522 | destinationBlade: { 523 | extensionName: 'HubsExtension' 524 | bladeName: 'ResourceMenuBlade' 525 | parameters: { 526 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 527 | menuid: 'segmentationUsers' 528 | } 529 | } 530 | } 531 | } 532 | } 533 | } 534 | { 535 | name: 'sharedTimeRange' 536 | isOptional: true 537 | } 538 | ] 539 | #disable-next-line BCP036 540 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 541 | settings: {} 542 | } 543 | } 544 | { 545 | position: { 546 | x: 4 547 | y: 2 548 | colSpan: 4 549 | rowSpan: 3 550 | } 551 | metadata: { 552 | inputs: [ 553 | { 554 | name: 'options' 555 | value: { 556 | chart: { 557 | metrics: [ 558 | { 559 | resourceMetadata: { 560 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 561 | } 562 | name: 'requests/failed' 563 | aggregationType: 7 564 | namespace: 'microsoft.insights/components' 565 | metricVisualization: { 566 | displayName: 'Failed requests' 567 | color: '#EC008C' 568 | } 569 | } 570 | ] 571 | title: 'Failed requests' 572 | visualization: { 573 | chartType: 3 574 | legendVisualization: { 575 | isVisible: true 576 | position: 2 577 | hideSubtitle: false 578 | } 579 | axisVisualization: { 580 | x: { 581 | isVisible: true 582 | axisType: 2 583 | } 584 | y: { 585 | isVisible: true 586 | axisType: 1 587 | } 588 | } 589 | } 590 | openBladeOnClick: { 591 | openBlade: true 592 | destinationBlade: { 593 | extensionName: 'HubsExtension' 594 | bladeName: 'ResourceMenuBlade' 595 | parameters: { 596 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 597 | menuid: 'failures' 598 | } 599 | } 600 | } 601 | } 602 | } 603 | } 604 | { 605 | name: 'sharedTimeRange' 606 | isOptional: true 607 | } 608 | ] 609 | #disable-next-line BCP036 610 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 611 | settings: {} 612 | } 613 | } 614 | { 615 | position: { 616 | x: 8 617 | y: 2 618 | colSpan: 4 619 | rowSpan: 3 620 | } 621 | metadata: { 622 | inputs: [ 623 | { 624 | name: 'options' 625 | value: { 626 | chart: { 627 | metrics: [ 628 | { 629 | resourceMetadata: { 630 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 631 | } 632 | name: 'requests/duration' 633 | aggregationType: 4 634 | namespace: 'microsoft.insights/components' 635 | metricVisualization: { 636 | displayName: 'Server response time' 637 | color: '#00BCF2' 638 | } 639 | } 640 | ] 641 | title: 'Server response time' 642 | visualization: { 643 | chartType: 2 644 | legendVisualization: { 645 | isVisible: true 646 | position: 2 647 | hideSubtitle: false 648 | } 649 | axisVisualization: { 650 | x: { 651 | isVisible: true 652 | axisType: 2 653 | } 654 | y: { 655 | isVisible: true 656 | axisType: 1 657 | } 658 | } 659 | } 660 | openBladeOnClick: { 661 | openBlade: true 662 | destinationBlade: { 663 | extensionName: 'HubsExtension' 664 | bladeName: 'ResourceMenuBlade' 665 | parameters: { 666 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 667 | menuid: 'performance' 668 | } 669 | } 670 | } 671 | } 672 | } 673 | } 674 | { 675 | name: 'sharedTimeRange' 676 | isOptional: true 677 | } 678 | ] 679 | #disable-next-line BCP036 680 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 681 | settings: {} 682 | } 683 | } 684 | { 685 | position: { 686 | x: 12 687 | y: 2 688 | colSpan: 4 689 | rowSpan: 3 690 | } 691 | metadata: { 692 | inputs: [ 693 | { 694 | name: 'options' 695 | value: { 696 | chart: { 697 | metrics: [ 698 | { 699 | resourceMetadata: { 700 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 701 | } 702 | name: 'browserTimings/networkDuration' 703 | aggregationType: 4 704 | namespace: 'microsoft.insights/components' 705 | metricVisualization: { 706 | displayName: 'Page load network connect time' 707 | color: '#7E58FF' 708 | } 709 | } 710 | { 711 | resourceMetadata: { 712 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 713 | } 714 | name: 'browserTimings/processingDuration' 715 | aggregationType: 4 716 | namespace: 'microsoft.insights/components' 717 | metricVisualization: { 718 | displayName: 'Client processing time' 719 | color: '#44F1C8' 720 | } 721 | } 722 | { 723 | resourceMetadata: { 724 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 725 | } 726 | name: 'browserTimings/sendDuration' 727 | aggregationType: 4 728 | namespace: 'microsoft.insights/components' 729 | metricVisualization: { 730 | displayName: 'Send request time' 731 | color: '#EB9371' 732 | } 733 | } 734 | { 735 | resourceMetadata: { 736 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 737 | } 738 | name: 'browserTimings/receiveDuration' 739 | aggregationType: 4 740 | namespace: 'microsoft.insights/components' 741 | metricVisualization: { 742 | displayName: 'Receiving response time' 743 | color: '#0672F1' 744 | } 745 | } 746 | ] 747 | title: 'Average page load time breakdown' 748 | visualization: { 749 | chartType: 3 750 | legendVisualization: { 751 | isVisible: true 752 | position: 2 753 | hideSubtitle: false 754 | } 755 | axisVisualization: { 756 | x: { 757 | isVisible: true 758 | axisType: 2 759 | } 760 | y: { 761 | isVisible: true 762 | axisType: 1 763 | } 764 | } 765 | } 766 | } 767 | } 768 | } 769 | { 770 | name: 'sharedTimeRange' 771 | isOptional: true 772 | } 773 | ] 774 | #disable-next-line BCP036 775 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 776 | settings: {} 777 | } 778 | } 779 | { 780 | position: { 781 | x: 0 782 | y: 5 783 | colSpan: 4 784 | rowSpan: 3 785 | } 786 | metadata: { 787 | inputs: [ 788 | { 789 | name: 'options' 790 | value: { 791 | chart: { 792 | metrics: [ 793 | { 794 | resourceMetadata: { 795 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 796 | } 797 | name: 'availabilityResults/availabilityPercentage' 798 | aggregationType: 4 799 | namespace: 'microsoft.insights/components' 800 | metricVisualization: { 801 | displayName: 'Availability' 802 | color: '#47BDF5' 803 | } 804 | } 805 | ] 806 | title: 'Average availability' 807 | visualization: { 808 | chartType: 3 809 | legendVisualization: { 810 | isVisible: true 811 | position: 2 812 | hideSubtitle: false 813 | } 814 | axisVisualization: { 815 | x: { 816 | isVisible: true 817 | axisType: 2 818 | } 819 | y: { 820 | isVisible: true 821 | axisType: 1 822 | } 823 | } 824 | } 825 | openBladeOnClick: { 826 | openBlade: true 827 | destinationBlade: { 828 | extensionName: 'HubsExtension' 829 | bladeName: 'ResourceMenuBlade' 830 | parameters: { 831 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 832 | menuid: 'availability' 833 | } 834 | } 835 | } 836 | } 837 | } 838 | } 839 | { 840 | name: 'sharedTimeRange' 841 | isOptional: true 842 | } 843 | ] 844 | #disable-next-line BCP036 845 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 846 | settings: {} 847 | } 848 | } 849 | { 850 | position: { 851 | x: 4 852 | y: 5 853 | colSpan: 4 854 | rowSpan: 3 855 | } 856 | metadata: { 857 | inputs: [ 858 | { 859 | name: 'options' 860 | value: { 861 | chart: { 862 | metrics: [ 863 | { 864 | resourceMetadata: { 865 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 866 | } 867 | name: 'exceptions/server' 868 | aggregationType: 7 869 | namespace: 'microsoft.insights/components' 870 | metricVisualization: { 871 | displayName: 'Server exceptions' 872 | color: '#47BDF5' 873 | } 874 | } 875 | { 876 | resourceMetadata: { 877 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 878 | } 879 | name: 'dependencies/failed' 880 | aggregationType: 7 881 | namespace: 'microsoft.insights/components' 882 | metricVisualization: { 883 | displayName: 'Dependency failures' 884 | color: '#7E58FF' 885 | } 886 | } 887 | ] 888 | title: 'Server exceptions and Dependency failures' 889 | visualization: { 890 | chartType: 2 891 | legendVisualization: { 892 | isVisible: true 893 | position: 2 894 | hideSubtitle: false 895 | } 896 | axisVisualization: { 897 | x: { 898 | isVisible: true 899 | axisType: 2 900 | } 901 | y: { 902 | isVisible: true 903 | axisType: 1 904 | } 905 | } 906 | } 907 | } 908 | } 909 | } 910 | { 911 | name: 'sharedTimeRange' 912 | isOptional: true 913 | } 914 | ] 915 | #disable-next-line BCP036 916 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 917 | settings: {} 918 | } 919 | } 920 | { 921 | position: { 922 | x: 8 923 | y: 5 924 | colSpan: 4 925 | rowSpan: 3 926 | } 927 | metadata: { 928 | inputs: [ 929 | { 930 | name: 'options' 931 | value: { 932 | chart: { 933 | metrics: [ 934 | { 935 | resourceMetadata: { 936 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 937 | } 938 | name: 'performanceCounters/processorCpuPercentage' 939 | aggregationType: 4 940 | namespace: 'microsoft.insights/components' 941 | metricVisualization: { 942 | displayName: 'Processor time' 943 | color: '#47BDF5' 944 | } 945 | } 946 | { 947 | resourceMetadata: { 948 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 949 | } 950 | name: 'performanceCounters/processCpuPercentage' 951 | aggregationType: 4 952 | namespace: 'microsoft.insights/components' 953 | metricVisualization: { 954 | displayName: 'Process CPU' 955 | color: '#7E58FF' 956 | } 957 | } 958 | ] 959 | title: 'Average processor and process CPU utilization' 960 | visualization: { 961 | chartType: 2 962 | legendVisualization: { 963 | isVisible: true 964 | position: 2 965 | hideSubtitle: false 966 | } 967 | axisVisualization: { 968 | x: { 969 | isVisible: true 970 | axisType: 2 971 | } 972 | y: { 973 | isVisible: true 974 | axisType: 1 975 | } 976 | } 977 | } 978 | } 979 | } 980 | } 981 | { 982 | name: 'sharedTimeRange' 983 | isOptional: true 984 | } 985 | ] 986 | #disable-next-line BCP036 987 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 988 | settings: {} 989 | } 990 | } 991 | { 992 | position: { 993 | x: 12 994 | y: 5 995 | colSpan: 4 996 | rowSpan: 3 997 | } 998 | metadata: { 999 | inputs: [ 1000 | { 1001 | name: 'options' 1002 | value: { 1003 | chart: { 1004 | metrics: [ 1005 | { 1006 | resourceMetadata: { 1007 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 1008 | } 1009 | name: 'exceptions/browser' 1010 | aggregationType: 7 1011 | namespace: 'microsoft.insights/components' 1012 | metricVisualization: { 1013 | displayName: 'Browser exceptions' 1014 | color: '#47BDF5' 1015 | } 1016 | } 1017 | ] 1018 | title: 'Browser exceptions' 1019 | visualization: { 1020 | chartType: 2 1021 | legendVisualization: { 1022 | isVisible: true 1023 | position: 2 1024 | hideSubtitle: false 1025 | } 1026 | axisVisualization: { 1027 | x: { 1028 | isVisible: true 1029 | axisType: 2 1030 | } 1031 | y: { 1032 | isVisible: true 1033 | axisType: 1 1034 | } 1035 | } 1036 | } 1037 | } 1038 | } 1039 | } 1040 | { 1041 | name: 'sharedTimeRange' 1042 | isOptional: true 1043 | } 1044 | ] 1045 | #disable-next-line BCP036 1046 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 1047 | settings: {} 1048 | } 1049 | } 1050 | { 1051 | position: { 1052 | x: 0 1053 | y: 8 1054 | colSpan: 4 1055 | rowSpan: 3 1056 | } 1057 | metadata: { 1058 | inputs: [ 1059 | { 1060 | name: 'options' 1061 | value: { 1062 | chart: { 1063 | metrics: [ 1064 | { 1065 | resourceMetadata: { 1066 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 1067 | } 1068 | name: 'availabilityResults/count' 1069 | aggregationType: 7 1070 | namespace: 'microsoft.insights/components' 1071 | metricVisualization: { 1072 | displayName: 'Availability test results count' 1073 | color: '#47BDF5' 1074 | } 1075 | } 1076 | ] 1077 | title: 'Availability test results count' 1078 | visualization: { 1079 | chartType: 2 1080 | legendVisualization: { 1081 | isVisible: true 1082 | position: 2 1083 | hideSubtitle: false 1084 | } 1085 | axisVisualization: { 1086 | x: { 1087 | isVisible: true 1088 | axisType: 2 1089 | } 1090 | y: { 1091 | isVisible: true 1092 | axisType: 1 1093 | } 1094 | } 1095 | } 1096 | } 1097 | } 1098 | } 1099 | { 1100 | name: 'sharedTimeRange' 1101 | isOptional: true 1102 | } 1103 | ] 1104 | #disable-next-line BCP036 1105 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 1106 | settings: {} 1107 | } 1108 | } 1109 | { 1110 | position: { 1111 | x: 4 1112 | y: 8 1113 | colSpan: 4 1114 | rowSpan: 3 1115 | } 1116 | metadata: { 1117 | inputs: [ 1118 | { 1119 | name: 'options' 1120 | value: { 1121 | chart: { 1122 | metrics: [ 1123 | { 1124 | resourceMetadata: { 1125 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 1126 | } 1127 | name: 'performanceCounters/processIOBytesPerSecond' 1128 | aggregationType: 4 1129 | namespace: 'microsoft.insights/components' 1130 | metricVisualization: { 1131 | displayName: 'Process IO rate' 1132 | color: '#47BDF5' 1133 | } 1134 | } 1135 | ] 1136 | title: 'Average process I/O rate' 1137 | visualization: { 1138 | chartType: 2 1139 | legendVisualization: { 1140 | isVisible: true 1141 | position: 2 1142 | hideSubtitle: false 1143 | } 1144 | axisVisualization: { 1145 | x: { 1146 | isVisible: true 1147 | axisType: 2 1148 | } 1149 | y: { 1150 | isVisible: true 1151 | axisType: 1 1152 | } 1153 | } 1154 | } 1155 | } 1156 | } 1157 | } 1158 | { 1159 | name: 'sharedTimeRange' 1160 | isOptional: true 1161 | } 1162 | ] 1163 | #disable-next-line BCP036 1164 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 1165 | settings: {} 1166 | } 1167 | } 1168 | { 1169 | position: { 1170 | x: 8 1171 | y: 8 1172 | colSpan: 4 1173 | rowSpan: 3 1174 | } 1175 | metadata: { 1176 | inputs: [ 1177 | { 1178 | name: 'options' 1179 | value: { 1180 | chart: { 1181 | metrics: [ 1182 | { 1183 | resourceMetadata: { 1184 | id: '/subscriptions/${subscription().subscriptionId}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Insights/components/${applicationInsights.name}' 1185 | } 1186 | name: 'performanceCounters/memoryAvailableBytes' 1187 | aggregationType: 4 1188 | namespace: 'microsoft.insights/components' 1189 | metricVisualization: { 1190 | displayName: 'Available memory' 1191 | color: '#47BDF5' 1192 | } 1193 | } 1194 | ] 1195 | title: 'Average available memory' 1196 | visualization: { 1197 | chartType: 2 1198 | legendVisualization: { 1199 | isVisible: true 1200 | position: 2 1201 | hideSubtitle: false 1202 | } 1203 | axisVisualization: { 1204 | x: { 1205 | isVisible: true 1206 | axisType: 2 1207 | } 1208 | y: { 1209 | isVisible: true 1210 | axisType: 1 1211 | } 1212 | } 1213 | } 1214 | } 1215 | } 1216 | } 1217 | { 1218 | name: 'sharedTimeRange' 1219 | isOptional: true 1220 | } 1221 | ] 1222 | #disable-next-line BCP036 1223 | type: 'Extension/HubsExtension/PartType/MonitorChartPart' 1224 | settings: {} 1225 | } 1226 | } 1227 | ] 1228 | } 1229 | ] 1230 | } 1231 | } 1232 | 1233 | resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = { 1234 | name: applicationInsightsName 1235 | } 1236 | -------------------------------------------------------------------------------- /infra/core/monitor/applicationinsights.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param dashboardName string 3 | param location string = resourceGroup().location 4 | param tags object = {} 5 | 6 | param logAnalyticsWorkspaceId string 7 | 8 | resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = { 9 | name: name 10 | location: location 11 | tags: tags 12 | kind: 'web' 13 | properties: { 14 | Application_Type: 'web' 15 | WorkspaceResourceId: logAnalyticsWorkspaceId 16 | } 17 | } 18 | 19 | module applicationInsightsDashboard 'applicationinsights-dashboard.bicep' = { 20 | name: 'application-insights-dashboard' 21 | params: { 22 | name: dashboardName 23 | location: location 24 | applicationInsightsName: applicationInsights.name 25 | } 26 | } 27 | 28 | output connectionString string = applicationInsights.properties.ConnectionString 29 | output instrumentationKey string = applicationInsights.properties.InstrumentationKey 30 | output name string = applicationInsights.name 31 | -------------------------------------------------------------------------------- /infra/core/monitor/loganalytics.bicep: -------------------------------------------------------------------------------- 1 | param name string 2 | param location string = resourceGroup().location 3 | param tags object = {} 4 | 5 | resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2021-12-01-preview' = { 6 | name: name 7 | location: location 8 | tags: tags 9 | properties: any({ 10 | retentionInDays: 30 11 | features: { 12 | searchVersion: 1 13 | } 14 | sku: { 15 | name: 'PerGB2018' 16 | } 17 | }) 18 | } 19 | 20 | output id string = logAnalytics.id 21 | output name string = logAnalytics.name 22 | -------------------------------------------------------------------------------- /infra/core/monitor/monitoring.bicep: -------------------------------------------------------------------------------- 1 | param logAnalyticsName string 2 | param applicationInsightsName string 3 | param applicationInsightsDashboardName string 4 | param location string = resourceGroup().location 5 | param tags object = {} 6 | 7 | module logAnalytics 'loganalytics.bicep' = { 8 | name: 'loganalytics' 9 | params: { 10 | name: logAnalyticsName 11 | location: location 12 | tags: tags 13 | } 14 | } 15 | 16 | module applicationInsights 'applicationinsights.bicep' = { 17 | name: 'applicationinsights' 18 | params: { 19 | name: applicationInsightsName 20 | location: location 21 | tags: tags 22 | dashboardName: applicationInsightsDashboardName 23 | logAnalyticsWorkspaceId: logAnalytics.outputs.id 24 | } 25 | } 26 | 27 | output applicationInsightsConnectionString string = applicationInsights.outputs.connectionString 28 | output applicationInsightsInstrumentationKey string = applicationInsights.outputs.instrumentationKey 29 | output applicationInsightsName string = applicationInsights.outputs.name 30 | output logAnalyticsWorkspaceId string = logAnalytics.outputs.id 31 | output logAnalyticsWorkspaceName string = logAnalytics.outputs.name 32 | -------------------------------------------------------------------------------- /infra/core/security/registry-access.bicep: -------------------------------------------------------------------------------- 1 | param containerRegistryName string 2 | param principalId string 3 | 4 | var acrPullRole = subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '7f951dda-4ed3-4680-a7ca-43fe172d538d') 5 | 6 | resource aksAcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = { 7 | scope: containerRegistry // Use when specifying a scope that is different than the deployment scope 8 | name: guid(subscription().id, resourceGroup().id, principalId, acrPullRole) 9 | properties: { 10 | roleDefinitionId: acrPullRole 11 | principalType: 'ServicePrincipal' 12 | principalId: principalId 13 | } 14 | } 15 | 16 | resource containerRegistry 'Microsoft.ContainerRegistry/registries@2022-02-01-preview' existing = { 17 | name: containerRegistryName 18 | } 19 | -------------------------------------------------------------------------------- /infra/core/security/role.bicep: -------------------------------------------------------------------------------- 1 | param principalId string 2 | 3 | @allowed([ 4 | 'Device' 5 | 'ForeignGroup' 6 | 'Group' 7 | 'ServicePrincipal' 8 | 'User' 9 | ]) 10 | param principalType string = 'ServicePrincipal' 11 | param roleDefinitionId string 12 | 13 | resource role 'Microsoft.Authorization/roleAssignments@2022-04-01' = { 14 | name: guid(subscription().id, resourceGroup().id, principalId, roleDefinitionId) 15 | properties: { 16 | principalId: principalId 17 | principalType: principalType 18 | roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /infra/main.bicep: -------------------------------------------------------------------------------- 1 | targetScope = 'subscription' 2 | 3 | @minLength(1) 4 | @maxLength(64) 5 | @description('Name which is used to generate a short unique hash for each resource') 6 | param name string 7 | 8 | @minLength(1) 9 | @description('Primary location for all resources') 10 | param location string 11 | 12 | param apiAppExists bool = false 13 | 14 | var resourceToken = toLower(uniqueString(subscription().id, name, location)) 15 | var tags = { 'azd-env-name': name } 16 | 17 | resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { 18 | name: '${name}-rg' 19 | location: location 20 | tags: tags 21 | } 22 | 23 | var prefix = '${name}-${resourceToken}' 24 | 25 | 26 | // Container apps host (including container registry) 27 | module containerApps 'core/host/container-apps.bicep' = { 28 | name: 'container-apps' 29 | scope: resourceGroup 30 | params: { 31 | name: 'app' 32 | location: location 33 | tags: tags 34 | containerAppsEnvironmentName: '${prefix}-containerapps-env' 35 | containerRegistryName: '${replace(prefix, '-', '')}registry' 36 | logAnalyticsWorkspaceName: logAnalyticsWorkspace.outputs.name 37 | } 38 | } 39 | 40 | // API app 41 | module api 'api.bicep' = { 42 | name: 'api' 43 | scope: resourceGroup 44 | params: { 45 | name: replace('${take(prefix,19)}-ca', '--', '-') 46 | location: location 47 | tags: tags 48 | identityName: '${prefix}-id-api' 49 | containerAppsEnvironmentName: containerApps.outputs.environmentName 50 | containerRegistryName: containerApps.outputs.registryName 51 | exists: apiAppExists 52 | } 53 | } 54 | 55 | 56 | module logAnalyticsWorkspace 'core/monitor/loganalytics.bicep' = { 57 | name: 'loganalytics' 58 | scope: resourceGroup 59 | params: { 60 | name: '${prefix}-loganalytics' 61 | location: location 62 | tags: tags 63 | } 64 | } 65 | 66 | output AZURE_LOCATION string = location 67 | output AZURE_CONTAINER_ENVIRONMENT_NAME string = containerApps.outputs.environmentName 68 | output AZURE_CONTAINER_REGISTRY_NAME string = containerApps.outputs.registryName 69 | output AZURE_CONTAINER_REGISTRY_ENDPOINT string = containerApps.outputs.registryLoginServer 70 | output SERVICE_API_IDENTITY_PRINCIPAL_ID string = api.outputs.SERVICE_API_IDENTITY_PRINCIPAL_ID 71 | output SERVICE_API_NAME string = api.outputs.SERVICE_API_NAME 72 | output SERVICE_API_URI string = api.outputs.SERVICE_API_URI 73 | output SERVICE_API_IMAGE_NAME string = api.outputs.SERVICE_API_IMAGE_NAME 74 | output SERVICE_API_ENDPOINTS array = ['${api.outputs.SERVICE_API_URI}/generate_name'] 75 | -------------------------------------------------------------------------------- /infra/main.parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "name": { 6 | "value": "${AZURE_ENV_NAME}" 7 | }, 8 | "location": { 9 | "value": "${AZURE_LOCATION}" 10 | }, 11 | "apiAppExists": { 12 | "value": "${SERVICE_API_RESOURCE_EXISTS=false}" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.black] 2 | line-length = 120 3 | target-version = ["py311"] 4 | src = ["src"] 5 | 6 | [tool.ruff] 7 | line-length = 120 8 | target-version = "py311" 9 | select = ["E", "F", "I", "UP"] 10 | 11 | [tool.pytest.ini_options] 12 | addopts = "-ra --cov=src" 13 | testpaths = [ 14 | "src/api/", 15 | "src/gunicorn_test.py" 16 | ] 17 | pythonpath = ["src"] 18 | 19 | [tool.coverage.report] 20 | show_missing = true 21 | fail_under = 100 22 | -------------------------------------------------------------------------------- /readme_diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pamelafox/simple-fastapi-container/1694e833e74d03cd2c8610a887a3dc211c5a33bb/readme_diagram.png -------------------------------------------------------------------------------- /requirements-dev.txt: -------------------------------------------------------------------------------- 1 | -r src/requirements.txt 2 | black 3 | ruff 4 | pytest 5 | coverage 6 | pytest-cov 7 | pre-commit 8 | -------------------------------------------------------------------------------- /src/.dockerignore: -------------------------------------------------------------------------------- 1 | .git* 2 | .venv/ 3 | **/*.pyc 4 | -------------------------------------------------------------------------------- /src/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11 2 | 3 | WORKDIR /code 4 | 5 | COPY requirements.txt . 6 | 7 | RUN pip install --no-cache-dir --upgrade -r requirements.txt 8 | 9 | COPY . . 10 | 11 | EXPOSE 3100 12 | 13 | CMD ["gunicorn", "api.main:app"] 14 | -------------------------------------------------------------------------------- /src/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pamelafox/simple-fastapi-container/1694e833e74d03cd2c8610a887a3dc211c5a33bb/src/api/__init__.py -------------------------------------------------------------------------------- /src/api/api_test.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | from fastapi.testclient import TestClient 4 | 5 | from .main import app 6 | 7 | client = TestClient(app) 8 | 9 | 10 | def test_generate_name(): 11 | random.seed(1) 12 | response = client.get("/generate_name") 13 | assert response.status_code == 200 14 | assert response.json()["name"] == "Belton" 15 | 16 | 17 | def test_generate_name_params(): 18 | random.seed(1) 19 | response = client.get("/generate_name?starts_with=n") 20 | assert response.status_code == 200 21 | assert response.json()["name"] == "Nancy" 22 | 23 | 24 | def test_generate_name_params_upper(): 25 | random.seed(1) 26 | response = client.get("/generate_name?starts_with=NE") 27 | assert response.status_code == 200 28 | assert response.json()["name"] == "Newell" 29 | -------------------------------------------------------------------------------- /src/api/data.py: -------------------------------------------------------------------------------- 1 | names = [ 2 | "John", 3 | "William", 4 | "James", 5 | "Charles", 6 | "George", 7 | "Frank", 8 | "Joseph", 9 | "Thomas", 10 | "Henry", 11 | "Robert", 12 | "Edward", 13 | "Harry", 14 | "Walter", 15 | "Arthur", 16 | "Fred", 17 | "Albert", 18 | "Samuel", 19 | "David", 20 | "Louis", 21 | "Joe", 22 | "Charlie", 23 | "Clarence", 24 | "Richard", 25 | "Andrew", 26 | "Daniel", 27 | "Ernest", 28 | "Will", 29 | "Jesse", 30 | "Oscar", 31 | "Lewis", 32 | "Peter", 33 | "Benjamin", 34 | "Frederick", 35 | "Willie", 36 | "Alfred", 37 | "Sam", 38 | "Roy", 39 | "Herbert", 40 | "Jacob", 41 | "Tom", 42 | "Elmer", 43 | "Carl", 44 | "Lee", 45 | "Howard", 46 | "Martin", 47 | "Michael", 48 | "Bert", 49 | "Herman", 50 | "Jim", 51 | "Francis", 52 | "Harvey", 53 | "Earl", 54 | "Eugene", 55 | "Ralph", 56 | "Ed", 57 | "Claude", 58 | "Edwin", 59 | "Ben", 60 | "Charley", 61 | "Paul", 62 | "Edgar", 63 | "Isaac", 64 | "Otto", 65 | "Luther", 66 | "Lawrence", 67 | "Ira", 68 | "Patrick", 69 | "Guy", 70 | "Oliver", 71 | "Theodore", 72 | "Hugh", 73 | "Clyde", 74 | "Alexander", 75 | "August", 76 | "Floyd", 77 | "Homer", 78 | "Jack", 79 | "Leonard", 80 | "Horace", 81 | "Marion", 82 | "Philip", 83 | "Allen", 84 | "Archie", 85 | "Stephen", 86 | "Chester", 87 | "Willis", 88 | "Raymond", 89 | "Rufus", 90 | "Warren", 91 | "Jessie", 92 | "Milton", 93 | "Alex", 94 | "Leo", 95 | "Julius", 96 | "Ray", 97 | "Sidney", 98 | "Bernard", 99 | "Dan", 100 | "Jerry", 101 | "Calvin", 102 | "Perry", 103 | "Dave", 104 | "Anthony", 105 | "Eddie", 106 | "Amos", 107 | "Dennis", 108 | "Clifford", 109 | "Leroy", 110 | "Wesley", 111 | "Alonzo", 112 | "Garfield", 113 | "Franklin", 114 | "Emil", 115 | "Leon", 116 | "Nathan", 117 | "Harold", 118 | "Matthew", 119 | "Levi", 120 | "Moses", 121 | "Everett", 122 | "Lester", 123 | "Winfield", 124 | "Adam", 125 | "Lloyd", 126 | "Mack", 127 | "Fredrick", 128 | "Jay", 129 | "Jess", 130 | "Melvin", 131 | "Noah", 132 | "Aaron", 133 | "Alvin", 134 | "Norman", 135 | "Gilbert", 136 | "Elijah", 137 | "Victor", 138 | "Gus", 139 | "Nelson", 140 | "Jasper", 141 | "Silas", 142 | "Christopher", 143 | "Jake", 144 | "Mike", 145 | "Percy", 146 | "Adolph", 147 | "Maurice", 148 | "Cornelius", 149 | "Felix", 150 | "Reuben", 151 | "Wallace", 152 | "Claud", 153 | "Roscoe", 154 | "Sylvester", 155 | "Earnest", 156 | "Hiram", 157 | "Otis", 158 | "Simon", 159 | "Willard", 160 | "Irvin", 161 | "Mark", 162 | "Jose", 163 | "Wilbur", 164 | "Abraham", 165 | "Virgil", 166 | "Clinton", 167 | "Elbert", 168 | "Leslie", 169 | "Marshall", 170 | "Owen", 171 | "Wiley", 172 | "Anton", 173 | "Morris", 174 | "Manuel", 175 | "Phillip", 176 | "Augustus", 177 | "Emmett", 178 | "Eli", 179 | "Nicholas", 180 | "Wilson", 181 | "Alva", 182 | "Harley", 183 | "Newton", 184 | "Timothy", 185 | "Marvin", 186 | "Ross", 187 | "Curtis", 188 | "Edmund", 189 | "Jeff", 190 | "Elias", 191 | "Harrison", 192 | "Stanley", 193 | "Columbus", 194 | "Lon", 195 | "Ora", 196 | "Ollie", 197 | "Russell", 198 | "Pearl", 199 | "Solomon", 200 | "Arch", 201 | "Asa", 202 | "Clayton", 203 | "Enoch", 204 | "Irving", 205 | "Mathew", 206 | "Nathaniel", 207 | "Scott", 208 | "Hubert", 209 | "Lemuel", 210 | "Andy", 211 | "Ellis", 212 | "Emanuel", 213 | "Joshua", 214 | "Millard", 215 | "Vernon", 216 | "Wade", 217 | "Cyrus", 218 | "Miles", 219 | "Rudolph", 220 | "Sherman", 221 | "Austin", 222 | "Bill", 223 | "Chas", 224 | "Lonnie", 225 | "Monroe", 226 | "Byron", 227 | "Edd", 228 | "Emery", 229 | "Grant", 230 | "Jerome", 231 | "Max", 232 | "Mose", 233 | "Steve", 234 | "Gordon", 235 | "Abe", 236 | "Pete", 237 | "Chris", 238 | "Clark", 239 | "Gustave", 240 | "Orville", 241 | "Lorenzo", 242 | "Bruce", 243 | "Marcus", 244 | "Preston", 245 | "Bob", 246 | "Dock", 247 | "Donald", 248 | "Jackson", 249 | "Cecil", 250 | "Barney", 251 | "Delbert", 252 | "Edmond", 253 | "Anderson", 254 | "Christian", 255 | "Glenn", 256 | "Jefferson", 257 | "Luke", 258 | "Neal", 259 | "Burt", 260 | "Ike", 261 | "Myron", 262 | "Tony", 263 | "Conrad", 264 | "Joel", 265 | "Matt", 266 | "Riley", 267 | "Vincent", 268 | "Emory", 269 | "Isaiah", 270 | "Nick", 271 | "Ezra", 272 | "Green", 273 | "Juan", 274 | "Clifton", 275 | "Lucius", 276 | "Porter", 277 | "Arnold", 278 | "Bud", 279 | "Jeremiah", 280 | "Taylor", 281 | "Forrest", 282 | "Roland", 283 | "Spencer", 284 | "Burton", 285 | "Don", 286 | "Emmet", 287 | "Gustav", 288 | "Louie", 289 | "Morgan", 290 | "Ned", 291 | "Van", 292 | "Ambrose", 293 | "Chauncey", 294 | "Elisha", 295 | "Ferdinand", 296 | "General", 297 | "Julian", 298 | "Kenneth", 299 | "Mitchell", 300 | "Allie", 301 | "Josh", 302 | "Judson", 303 | "Lyman", 304 | "Napoleon", 305 | "Pedro", 306 | "Berry", 307 | "Dewitt", 308 | "Ervin", 309 | "Forest", 310 | "Lynn", 311 | "Pink", 312 | "Ruben", 313 | "Sanford", 314 | "Ward", 315 | "Douglas", 316 | "Ole", 317 | "Omer", 318 | "Ulysses", 319 | "Walker", 320 | "Wilbert", 321 | "Adelbert", 322 | "Benjiman", 323 | "Ivan", 324 | "Jonas", 325 | "Major", 326 | "Abner", 327 | "Archibald", 328 | "Caleb", 329 | "Clint", 330 | "Dudley", 331 | "Granville", 332 | "King", 333 | "Mary", 334 | "Merton", 335 | "Antonio", 336 | "Bennie", 337 | "Carroll", 338 | "Freeman", 339 | "Josiah", 340 | "Milo", 341 | "Royal", 342 | "Dick", 343 | "Earle", 344 | "Elza", 345 | "Emerson", 346 | "Fletcher", 347 | "Judge", 348 | "Laurence", 349 | "Neil", 350 | "Roger", 351 | "Seth", 352 | "Glen", 353 | "Hugo", 354 | "Jimmie", 355 | "Johnnie", 356 | "Washington", 357 | "Elwood", 358 | "Gust", 359 | "Harmon", 360 | "Jordan", 361 | "Simeon", 362 | "Wayne", 363 | "Wilber", 364 | "Clem", 365 | "Evan", 366 | "Frederic", 367 | "Irwin", 368 | "Junius", 369 | "Lafayette", 370 | "Loren", 371 | "Madison", 372 | "Mason", 373 | "Orval", 374 | "Abram", 375 | "Aubrey", 376 | "Elliott", 377 | "Hans", 378 | "Karl", 379 | "Minor", 380 | "Wash", 381 | "Wilfred", 382 | "Allan", 383 | "Alphonse", 384 | "Dallas", 385 | "Dee", 386 | "Isiah", 387 | "Jason", 388 | "Johnny", 389 | "Lawson", 390 | "Lew", 391 | "Micheal", 392 | "Orin", 393 | "Addison", 394 | "Cal", 395 | "Erastus", 396 | "Francisco", 397 | "Hardy", 398 | "Lucien", 399 | "Randolph", 400 | "Stewart", 401 | "Vern", 402 | "Wilmer", 403 | "Zack", 404 | "Adrian", 405 | "Alvah", 406 | "Bertram", 407 | "Clay", 408 | "Ephraim", 409 | "Fritz", 410 | "Giles", 411 | "Grover", 412 | "Harris", 413 | "Isom", 414 | "Jesus", 415 | "Johnie", 416 | "Jonathan", 417 | "Lucian", 418 | "Malcolm", 419 | "Merritt", 420 | "Otho", 421 | "Perley", 422 | "Rolla", 423 | "Sandy", 424 | "Tomas", 425 | "Wilford", 426 | "Adolphus", 427 | "Angus", 428 | "Arther", 429 | "Carlos", 430 | "Cary", 431 | "Cassius", 432 | "Davis", 433 | "Hamilton", 434 | "Harve", 435 | "Israel", 436 | "Leander", 437 | "Melville", 438 | "Merle", 439 | "Murray", 440 | "Pleasant", 441 | "Sterling", 442 | "Steven", 443 | "Axel", 444 | "Boyd", 445 | "Bryant", 446 | "Clement", 447 | "Erwin", 448 | "Ezekiel", 449 | "Foster", 450 | "Frances", 451 | "Geo", 452 | "Houston", 453 | "Issac", 454 | "Jules", 455 | "Larkin", 456 | "Mat", 457 | "Morton", 458 | "Orlando", 459 | "Pierce", 460 | "Prince", 461 | "Rollie", 462 | "Rollin", 463 | "Sim", 464 | "Stuart", 465 | "Wilburn", 466 | "Bennett", 467 | "Casper", 468 | "Christ", 469 | "Dell", 470 | "Egbert", 471 | "Elmo", 472 | "Fay", 473 | "Gabriel", 474 | "Hector", 475 | "Horatio", 476 | "Lige", 477 | "Saul", 478 | "Smith", 479 | "Squire", 480 | "Tobe", 481 | "Tommie", 482 | "Wyatt", 483 | "Alford", 484 | "Alma", 485 | "Alton", 486 | "Andres", 487 | "Burl", 488 | "Cicero", 489 | "Dean", 490 | "Dorsey", 491 | "Enos", 492 | "Howell", 493 | "Lou", 494 | "Loyd", 495 | "Mahlon", 496 | "Nat", 497 | "Omar", 498 | "Oran", 499 | "Parker", 500 | "Raleigh", 501 | "Reginald", 502 | "Rubin", 503 | "Seymour", 504 | "Wm", 505 | "Young", 506 | "Benjamine", 507 | "Carey", 508 | "Carlton", 509 | "Eldridge", 510 | "Elzie", 511 | "Garrett", 512 | "Isham", 513 | "Johnson", 514 | "Larry", 515 | "Logan", 516 | "Merrill", 517 | "Mont", 518 | "Oren", 519 | "Pierre", 520 | "Rex", 521 | "Rodney", 522 | "Ted", 523 | "Webster", 524 | "West", 525 | "Wheeler", 526 | "Willam", 527 | "Al", 528 | "Aloysius", 529 | "Alvie", 530 | "Anna", 531 | "Art", 532 | "Augustine", 533 | "Bailey", 534 | "Benjaman", 535 | "Beverly", 536 | "Bishop", 537 | "Clair", 538 | "Cloyd", 539 | "Coleman", 540 | "Dana", 541 | "Duncan", 542 | "Dwight", 543 | "Emile", 544 | "Evert", 545 | "Henderson", 546 | "Hunter", 547 | "Jean", 548 | "Lem", 549 | "Luis", 550 | "Mathias", 551 | "Maynard", 552 | "Miguel", 553 | "Mortimer", 554 | "Nels", 555 | "Norris", 556 | "Pat", 557 | "Phil", 558 | "Rush", 559 | "Santiago", 560 | "Sol", 561 | "Sydney", 562 | "Thaddeus", 563 | "Thornton", 564 | "Tim", 565 | "Travis", 566 | "Truman", 567 | "Watson", 568 | "Webb", 569 | "Wellington", 570 | "Winfred", 571 | "Wylie", 572 | "Alec", 573 | "Basil", 574 | "Baxter", 575 | "Bertrand", 576 | "Buford", 577 | "Burr", 578 | "Cleveland", 579 | "Colonel", 580 | "Dempsey", 581 | "Early", 582 | "Ellsworth", 583 | "Fate", 584 | "Finley", 585 | "Gabe", 586 | "Garland", 587 | "Gerald", 588 | "Herschel", 589 | "Hezekiah", 590 | "Justus", 591 | "Lindsey", 592 | "Marcellus", 593 | "Olaf", 594 | "Olin", 595 | "Pablo", 596 | "Rolland", 597 | "Turner", 598 | "Verne", 599 | "Volney", 600 | "Williams", 601 | "Almon", 602 | "Alois", 603 | "Alonza", 604 | "Anson", 605 | "Authur", 606 | "Benton", 607 | "Billie", 608 | "Cornelious", 609 | "Darius", 610 | "Denis", 611 | "Dillard", 612 | "Doctor", 613 | "Elvin", 614 | "Emma", 615 | "Eric", 616 | "Evans", 617 | "Gideon", 618 | "Haywood", 619 | "Hilliard", 620 | "Hosea", 621 | "Lincoln", 622 | "Lonzo", 623 | "Lucious", 624 | "Lum", 625 | "Malachi", 626 | "Newt", 627 | "Noel", 628 | "Orie", 629 | "Palmer", 630 | "Pinkney", 631 | "Shirley", 632 | "Sumner", 633 | "Terry", 634 | "Urban", 635 | "Uriah", 636 | "Valentine", 637 | "Waldo", 638 | "Warner", 639 | "Wong", 640 | "Zeb", 641 | "Abel", 642 | "Alden", 643 | "Archer", 644 | "Avery", 645 | "Carson", 646 | "Cullen", 647 | "Doc", 648 | "Eben", 649 | "Elige", 650 | "Elizabeth", 651 | "Elmore", 652 | "Ernst", 653 | "Finis", 654 | "Freddie", 655 | "Godfrey", 656 | "Guss", 657 | "Hamp", 658 | "Hermann", 659 | "Isadore", 660 | "Isreal", 661 | "Jones", 662 | "June", 663 | "Lacy", 664 | "Lafe", 665 | "Leland", 666 | "Llewellyn", 667 | "Ludwig", 668 | "Manford", 669 | "Maxwell", 670 | "Minnie", 671 | "Obie", 672 | "Octave", 673 | "Orrin", 674 | "Ossie", 675 | "Oswald", 676 | "Park", 677 | "Parley", 678 | "Ramon", 679 | "Rice", 680 | "Stonewall", 681 | "Theo", 682 | "Tillman", 683 | "Addie", 684 | "Aron", 685 | "Ashley", 686 | "Bernhard", 687 | "Bertie", 688 | "Berton", 689 | "Buster", 690 | "Butler", 691 | "Carleton", 692 | "Carrie", 693 | "Clara", 694 | "Clarance", 695 | "Clare", 696 | "Crawford", 697 | "Danial", 698 | "Dayton", 699 | "Dolphus", 700 | "Elder", 701 | "Ephriam", 702 | "Fayette", 703 | "Felipe", 704 | "Fernando", 705 | "Flem", 706 | "Florence", 707 | "Ford", 708 | "Harlan", 709 | "Hayes", 710 | "Henery", 711 | "Hoy", 712 | "Huston", 713 | "Ida", 714 | "Ivory", 715 | "Jonah", 716 | "Justin", 717 | "Lenard", 718 | "Leopold", 719 | "Lionel", 720 | "Manley", 721 | "Marquis", 722 | "Marshal", 723 | "Mart", 724 | "Odie", 725 | "Olen", 726 | "Oral", 727 | "Orley", 728 | "Otha", 729 | "Press", 730 | "Price", 731 | "Quincy", 732 | "Randall", 733 | "Rich", 734 | "Richmond", 735 | "Romeo", 736 | "Russel", 737 | "Rutherford", 738 | "Shade", 739 | "Shelby", 740 | "Solon", 741 | "Thurman", 742 | "Tilden", 743 | "Troy", 744 | "Woodson", 745 | "Worth", 746 | "Aden", 747 | "Alcide", 748 | "Alf", 749 | "Algie", 750 | "Arlie", 751 | "Bart", 752 | "Bedford", 753 | "Benito", 754 | "Billy", 755 | "Bird", 756 | "Birt", 757 | "Bruno", 758 | "Burley", 759 | "Chancy", 760 | "Claus", 761 | "Cliff", 762 | "Clovis", 763 | "Connie", 764 | "Creed", 765 | "Delos", 766 | "Duke", 767 | "Eber", 768 | "Eligah", 769 | "Elliot", 770 | "Elton", 771 | "Emmitt", 772 | "Gene", 773 | "Golden", 774 | "Hal", 775 | "Hardin", 776 | "Harman", 777 | "Hervey", 778 | "Hollis", 779 | "Ivey", 780 | "Jennie", 781 | "Len", 782 | "Lindsay", 783 | "Lonie", 784 | "Lyle", 785 | "Mac", 786 | "Mal", 787 | "Math", 788 | "Miller", 789 | "Orson", 790 | "Osborne", 791 | "Percival", 792 | "Pleas", 793 | "Ples", 794 | "Rafael", 795 | "Raoul", 796 | "Roderick", 797 | "Rose", 798 | "Shelton", 799 | "Sid", 800 | "Theron", 801 | "Tobias", 802 | "Toney", 803 | "Tyler", 804 | "Vance", 805 | "Vivian", 806 | "Walton", 807 | "Watt", 808 | "Weaver", 809 | "Wilton", 810 | "Adolf", 811 | "Albin", 812 | "Albion", 813 | "Allison", 814 | "Alpha", 815 | "Alpheus", 816 | "Anastacio", 817 | "Andre", 818 | "Annie", 819 | "Arlington", 820 | "Armand", 821 | "Asberry", 822 | "Asbury", 823 | "Asher", 824 | "Augustin", 825 | "Auther", 826 | "Author", 827 | "Ballard", 828 | "Blas", 829 | "Caesar", 830 | "Candido", 831 | "Cato", 832 | "Clarke", 833 | "Clemente", 834 | "Colin", 835 | "Commodore", 836 | "Cora", 837 | "Coy", 838 | "Cruz", 839 | "Curt", 840 | "Damon", 841 | "Davie", 842 | "Delmar", 843 | "Dexter", 844 | "Dora", 845 | "Doss", 846 | "Drew", 847 | "Edson", 848 | "Elam", 849 | "Elihu", 850 | "Eliza", 851 | "Elsie", 852 | "Erie", 853 | "Ernie", 854 | "Ethel", 855 | "Ferd", 856 | "Friend", 857 | "Garry", 858 | "Gary", 859 | "Grace", 860 | "Gustaf", 861 | "Hallie", 862 | "Hampton", 863 | "Harrie", 864 | "Hattie", 865 | "Hence", 866 | "Hillard", 867 | "Hollie", 868 | "Holmes", 869 | "Hope", 870 | "Hyman", 871 | "Ishmael", 872 | "Jarrett", 873 | "Jessee", 874 | "Joeseph", 875 | "Junious", 876 | "Kirk", 877 | "Levy", 878 | "Mervin", 879 | "Michel", 880 | "Milford", 881 | "Mitchel", 882 | "Nellie", 883 | "Noble", 884 | "Obed", 885 | "Oda", 886 | "Orren", 887 | "Ottis", 888 | "Rafe", 889 | "Redden", 890 | "Reese", 891 | "Rube", 892 | "Ruby", 893 | "Rupert", 894 | "Salomon", 895 | "Sammie", 896 | "Sanders", 897 | "Soloman", 898 | "Stacy", 899 | "Stanford", 900 | "Stanton", 901 | "Thad", 902 | "Titus", 903 | "Tracy", 904 | "Vernie", 905 | "Wendell", 906 | "Wilhelm", 907 | "Willian", 908 | "Yee", 909 | "Zeke", 910 | "Ab", 911 | "Abbott", 912 | "Agustus", 913 | "Albertus", 914 | "Almer", 915 | "Alphonso", 916 | "Alvia", 917 | "Artie", 918 | "Arvid", 919 | "Ashby", 920 | "Augusta", 921 | "Aurthur", 922 | "Babe", 923 | "Baldwin", 924 | "Barnett", 925 | "Bartholomew", 926 | "Barton", 927 | "Bernie", 928 | "Blaine", 929 | "Boston", 930 | "Brad", 931 | "Bradford", 932 | "Bradley", 933 | "Brooks", 934 | "Buck", 935 | "Budd", 936 | "Ceylon", 937 | "Chalmers", 938 | "Chesley", 939 | "Chin", 940 | "Cleo", 941 | "Crockett", 942 | "Cyril", 943 | "Daisy", 944 | "Denver", 945 | "Dow", 946 | "Duff", 947 | "Edie", 948 | "Edith", 949 | "Elick", 950 | "Elie", 951 | "Eliga", 952 | "Eliseo", 953 | "Elroy", 954 | "Ely", 955 | "Ennis", 956 | "Enrique", 957 | "Erasmus", 958 | "Esau", 959 | "Everette", 960 | "Firman", 961 | "Fleming", 962 | "Flora", 963 | "Gardner", 964 | "Gee", 965 | "Gorge", 966 | "Gottlieb", 967 | "Gregorio", 968 | "Gregory", 969 | "Gustavus", 970 | "Halsey", 971 | "Handy", 972 | "Hardie", 973 | "Harl", 974 | "Hayden", 975 | "Hays", 976 | "Hermon", 977 | "Hershel", 978 | "Holly", 979 | "Hosteen", 980 | "Hoyt", 981 | "Hudson", 982 | "Huey", 983 | "Humphrey", 984 | "Hunt", 985 | "Hyrum", 986 | "Irven", 987 | "Isam", 988 | "Ivy", 989 | "Jabez", 990 | "Jewel", 991 | "Jodie", 992 | "Judd", 993 | "Julious", 994 | "Justice", 995 | "Katherine", 996 | "Kelly", 997 | "Kit", 998 | "Knute", 999 | "Lavern", 1000 | "Lawyer", 1001 | "Layton", 1002 | "Brown", 1003 | "Newell", 1004 | "Carter", 1005 | "Lucas", 1006 | "Ransom", 1007 | "Bee", 1008 | "Meyer", 1009 | "Paris", 1010 | "Byrd", 1011 | "Deforest", 1012 | "Dolph", 1013 | "Harper", 1014 | "Jule", 1015 | "Lambert", 1016 | "Margaret", 1017 | "Ocie", 1018 | "Orange", 1019 | "Reece", 1020 | "Roe", 1021 | "Ambers", 1022 | "Bessie", 1023 | "Collins", 1024 | "Elbridge", 1025 | "Eldon", 1026 | "Elvis", 1027 | "Gaston", 1028 | "Guadalupe", 1029 | "Hartwell", 1030 | "Knox", 1031 | "Lue", 1032 | "Manning", 1033 | "Ola", 1034 | "Reed", 1035 | "Sampson", 1036 | "Samual", 1037 | "Thos", 1038 | "Todd", 1039 | "Tommy", 1040 | "Unknown", 1041 | "Wirt", 1042 | "Woodie", 1043 | "Alice", 1044 | "Alvis", 1045 | "Ammon", 1046 | "Boss", 1047 | "Cas", 1048 | "Cass", 1049 | "Chalmer", 1050 | "Denton", 1051 | "Elsworth", 1052 | "Erving", 1053 | "Fredric", 1054 | "Furman", 1055 | "Helen", 1056 | "Pearlie", 1057 | "Plummer", 1058 | "Presley", 1059 | "Rollo", 1060 | "Roswell", 1061 | "Ruffus", 1062 | "Sheldon", 1063 | "Tilman", 1064 | "York", 1065 | "Acie", 1066 | "Alfonso", 1067 | "Ashton", 1068 | "Burke", 1069 | "Cap", 1070 | "Casimiro", 1071 | "Collie", 1072 | "Curley", 1073 | "Dale", 1074 | "Dixon", 1075 | "Dominick", 1076 | "Garret", 1077 | "Gerrit", 1078 | "Griffin", 1079 | "Hall", 1080 | "Heber", 1081 | "Hurley", 1082 | "Isidore", 1083 | "Lorenza", 1084 | "Marian", 1085 | "Maud", 1086 | "Maude", 1087 | "Murphy", 1088 | "Obe", 1089 | "Orla", 1090 | "Orlo", 1091 | "Orrie", 1092 | "Sebastian", 1093 | "Starling", 1094 | "Tolbert", 1095 | "Whit", 1096 | "Adrien", 1097 | "Alto", 1098 | "Angelo", 1099 | "Antone", 1100 | "Arden", 1101 | "Atticus", 1102 | "Belton", 1103 | "Bertha", 1104 | "Blair", 1105 | "Burrell", 1106 | "Callie", 1107 | "Campbell", 1108 | "Champ", 1109 | "Coley", 1110 | "Conway", 1111 | "Craig", 1112 | "Dalton", 1113 | "Darrell", 1114 | "Darwin", 1115 | "Dennie", 1116 | "Ebb", 1117 | "Ebbie", 1118 | "Edna", 1119 | "Ellison", 1120 | "Elonzo", 1121 | "Emit", 1122 | "Emry", 1123 | "Ephram", 1124 | "Esequiel", 1125 | "Essie", 1126 | "Esta", 1127 | "Evertt", 1128 | "Garner", 1129 | "Garnett", 1130 | "Graham", 1131 | "Gregg", 1132 | "Halbert", 1133 | "Harvie", 1134 | "Harvy", 1135 | "Hubbard", 1136 | "Jared", 1137 | "Jere", 1138 | "Joesph", 1139 | "Johnathan", 1140 | "Juluis", 1141 | "Kirby", 1142 | "Kyle", 1143 | "Lane", 1144 | "Lawerence", 1145 | "Less", 1146 | "Linwood", 1147 | "Louise", 1148 | "Lowell", 1149 | "Loy", 1150 | "Lucy", 1151 | "Manly", 1152 | "Mannie", 1153 | "Marcel", 1154 | "Marius", 1155 | "Marrion", 1156 | "Mercer", 1157 | "Monte", 1158 | "Montgomery", 1159 | "Nolan", 1160 | "Okey", 1161 | "Page", 1162 | "Philo", 1163 | "Primus", 1164 | "Prosper", 1165 | "Pryor", 1166 | "Rene", 1167 | "Robin", 1168 | "Roll", 1169 | "Seward", 1170 | "Shannon", 1171 | "Talmage", 1172 | "Vaughn", 1173 | "Verner", 1174 | "Waverly", 1175 | "Weldon", 1176 | "Wells", 1177 | "Wiliam", 1178 | "Wing", 1179 | "Wood", 1180 | "Wright", 1181 | "Add", 1182 | "Adelard", 1183 | "Cleve", 1184 | "Linus", 1185 | "Martha", 1186 | "Reinhold", 1187 | "Junior", 1188 | "Ace", 1189 | "Armstead", 1190 | "Benedict", 1191 | "Brice", 1192 | "Gibson", 1193 | "May", 1194 | "Mills", 1195 | "Adolfo", 1196 | "Alanzo", 1197 | "Antoine", 1198 | "Ethan", 1199 | "Eustace", 1200 | "Ewing", 1201 | "Fernand", 1202 | "Fisher", 1203 | "Gail", 1204 | "Harland", 1205 | "Hilary", 1206 | "Hosie", 1207 | "Lemon", 1208 | "Lora", 1209 | "Marsh", 1210 | "Newman", 1211 | "Nickolas", 1212 | "Olie", 1213 | "Pearley", 1214 | "Roman", 1215 | "Rome", 1216 | "Rowland", 1217 | "Shelly", 1218 | "Vicente", 1219 | "Weston", 1220 | "Alan", 1221 | "Alberto", 1222 | "Alexis", 1223 | "Auguste", 1224 | "Bascom", 1225 | "Cameron", 1226 | "Camille", 1227 | "Clabe", 1228 | "Cooper", 1229 | "Domingo", 1230 | "Elwin", 1231 | "Emilio", 1232 | "French", 1233 | "Gerhard", 1234 | "Hansford", 1235 | "Jarvis", 1236 | "Jobe", 1237 | "Josephus", 1238 | "Landon", 1239 | "Lennie", 1240 | "Leonidas", 1241 | "Lesley", 1242 | "Lillian", 1243 | "Linn", 1244 | "Littleton", 1245 | "Lone", 1246 | "Margarito", 1247 | "Mattie", 1248 | "Melton", 1249 | "Ott", 1250 | "Randle", 1251 | "Seaborn", 1252 | "Severt", 1253 | "Steward", 1254 | "Sylvanus", 1255 | "Theadore", 1256 | "Theophile", 1257 | "Vester", 1258 | "Wenzel", 1259 | "Alby", 1260 | "Alcee", 1261 | "Almond", 1262 | "Alvy", 1263 | "Amon", 1264 | "Ansel", 1265 | "Bayard", 1266 | "Benny", 1267 | "Bluford", 1268 | "Booker", 1269 | "Burnett", 1270 | "Burney", 1271 | "Caswell", 1272 | "Claudie", 1273 | "Conley", 1274 | "Cortez", 1275 | "Dionicio", 1276 | "Donnie", 1277 | "Eldred", 1278 | "Ell", 1279 | "Ellery", 1280 | "Ellwood", 1281 | "Elva", 1282 | "Emmit", 1283 | "Erle", 1284 | "Essex", 1285 | "Ewell", 1286 | "Ewin", 1287 | "Fabian", 1288 | "Florencio", 1289 | "Fremont", 1290 | "Gaines", 1291 | "Garnet", 1292 | "Gaylord", 1293 | "German", 1294 | "Greene", 1295 | "Brady", 1296 | "Festus", 1297 | "Jewell", 1298 | "Odell", 1299 | "Rosco", 1300 | "Bernice", 1301 | "Chauncy", 1302 | "Delmer", 1303 | "Effie", 1304 | "Ellie", 1305 | "Jimmy", 1306 | "Lars", 1307 | "Milas", 1308 | "Miner", 1309 | "Rogers", 1310 | "Sarah", 1311 | "Wess", 1312 | "Woody", 1313 | "Bryan", 1314 | "Douglass", 1315 | "Hilton", 1316 | "Irvine", 1317 | "Isidor", 1318 | "Jeptha", 1319 | "Mabel", 1320 | "Malcom", 1321 | "Mell", 1322 | "Olof", 1323 | "Robt", 1324 | "Ronald", 1325 | "Simpson", 1326 | "Spurgeon", 1327 | "Tandy", 1328 | "Thurlow", 1329 | "Toy", 1330 | "Winston", 1331 | "Zeno", 1332 | "Alphonsus", 1333 | "Alvan", 1334 | "Amado", 1335 | "Ananias", 1336 | "Ancel", 1337 | "Atlas", 1338 | "Banks", 1339 | "Barry", 1340 | "Blake", 1341 | "Blanchard", 1342 | "Bose", 1343 | "Captain", 1344 | "Ceasar", 1345 | "Chance", 1346 | "Chancey", 1347 | "Charle", 1348 | "Clide", 1349 | "Dink", 1350 | "Ella", 1351 | "Emett", 1352 | "Erick", 1353 | "Estill", 1354 | "Fenton", 1355 | "Gale", 1356 | "Gay", 1357 | "Grove", 1358 | "Hanson", 1359 | "Harlie", 1360 | "Harlow", 1361 | "Haskell", 1362 | "Ingram", 1363 | "Iva", 1364 | "Jep", 1365 | "Joy", 1366 | "Lessie", 1367 | "Lillie", 1368 | "Linton", 1369 | "Linzy", 1370 | "Little", 1371 | "Loney", 1372 | "Loring", 1373 | "Lovie", 1374 | "Lute", 1375 | "Mace", 1376 | "Matthias", 1377 | "Meredith", 1378 | "Benjamen", 1379 | "Jens", 1380 | "Oakley", 1381 | "Whitney", 1382 | "Donaciano", 1383 | "Hayward", 1384 | "Loran", 1385 | "Love", 1386 | "Son", 1387 | "Tollie", 1388 | "Vollie", 1389 | "Bonnie", 1390 | "Catherine", 1391 | "Ebenezer", 1392 | "Ewald", 1393 | "Herb", 1394 | "Julia", 1395 | "Silvester", 1396 | "Stafford", 1397 | "Sullivan", 1398 | "Thurston", 1399 | "Wayman", 1400 | "Wes", 1401 | "Winnie", 1402 | "Burrel", 1403 | "Cleon", 1404 | "Dozier", 1405 | "Elden", 1406 | "Fulton", 1407 | "Helmer", 1408 | "Hill", 1409 | "Hjalmer", 1410 | "Ignatz", 1411 | "Kelley", 1412 | "Marlin", 1413 | "Moody", 1414 | "Myrtle", 1415 | "Namon", 1416 | "Odin", 1417 | "Odis", 1418 | "Oley", 1419 | "Osborn", 1420 | "Osie", 1421 | "Prentice", 1422 | "Purl", 1423 | "Roby", 1424 | "Shep", 1425 | "Simmie", 1426 | "Stanislaus", 1427 | "Vander", 1428 | "Zollie", 1429 | "Abb", 1430 | "Ah", 1431 | "Aleck", 1432 | "Beecher", 1433 | "Blain", 1434 | "Bowman", 1435 | "Bunk", 1436 | "Burgess", 1437 | "Carol", 1438 | "Charly", 1439 | "Clell", 1440 | "Cody", 1441 | "Lamar", 1442 | "Worley", 1443 | "Arley", 1444 | "Nicolas", 1445 | "Terence", 1446 | "Claire", 1447 | "Earley", 1448 | "Elzy", 1449 | "Fielding", 1450 | "Gertrude", 1451 | "Nora", 1452 | "Norton", 1453 | "Clemens", 1454 | "Earlie", 1455 | "Ellen", 1456 | "Epifanio", 1457 | "Glover", 1458 | "Lark", 1459 | "Laurance", 1460 | "Leigh", 1461 | "Braxton", 1462 | "Cleave", 1463 | "Colon", 1464 | "Constantine", 1465 | "Dominic", 1466 | "Emiliano", 1467 | "Fleet", 1468 | "Franklyn", 1469 | "Hobart", 1470 | "Josephine", 1471 | "Laverne", 1472 | "Lillard", 1473 | "Lim", 1474 | "Merlin", 1475 | "Milan", 1476 | "Nim", 1477 | "Norbert", 1478 | "North", 1479 | "Orland", 1480 | "Orvis", 1481 | "Reason", 1482 | "Rob", 1483 | "Virge", 1484 | "Zenas", 1485 | "Ada", 1486 | "Alejandro", 1487 | "Atha", 1488 | "Audie", 1489 | "Boyce", 1490 | "Brent", 1491 | "Burdette", 1492 | "Cash", 1493 | "Chase", 1494 | "Clive", 1495 | "Courtney", 1496 | "Cris", 1497 | "Dawson", 1498 | "Drury", 1499 | "Duane", 1500 | "Elon", 1501 | "Estevan", 1502 | "Fitzhugh", 1503 | "Fount", 1504 | "Gray", 1505 | "Terrence", 1506 | "Bartley", 1507 | "Shedrick", 1508 | "Dixie", 1509 | "Ignacio", 1510 | "Merl", 1511 | "Nehemiah", 1512 | "Norwood", 1513 | "Raphael", 1514 | "Reno", 1515 | "Rudy", 1516 | "Rueben", 1517 | "Sylvan", 1518 | "Virgle", 1519 | "Charls", 1520 | "Cole", 1521 | "Elby", 1522 | "Ferman", 1523 | "Fern", 1524 | "Florian", 1525 | "Fuller", 1526 | "Gorden", 1527 | "Gussie", 1528 | "Ham", 1529 | "Hazel", 1530 | "Ignatius", 1531 | "Joaquin", 1532 | "Lacey", 1533 | "Laurie", 1534 | "Lilburn", 1535 | "Lovell", 1536 | "Lovett", 1537 | "Malvin", 1538 | "Manson", 1539 | "Pratt", 1540 | "Reid", 1541 | "Ruffin", 1542 | "Tomie", 1543 | "Vince", 1544 | "Wayland", 1545 | "Acey", 1546 | "Alger", 1547 | "Algernon", 1548 | "Amasa", 1549 | "Amil", 1550 | "Barrett", 1551 | "Britt", 1552 | "Burns", 1553 | "Calhoun", 1554 | "Christy", 1555 | "Cletus", 1556 | "Colbert", 1557 | "Courtland", 1558 | "Myles", 1559 | "Irl", 1560 | "Benson", 1561 | "Norval", 1562 | "Armond", 1563 | "Frazier", 1564 | "Thompson", 1565 | "Alfredo", 1566 | "Grady", 1567 | "Lorenz", 1568 | "Peyton", 1569 | "Seldon", 1570 | "Ethelbert", 1571 | "Eva", 1572 | "Gilman", 1573 | "Henri", 1574 | "Iver", 1575 | "Laura", 1576 | "Leonce", 1577 | "Mamie", 1578 | "Orion", 1579 | "Ottie", 1580 | "Rudolf", 1581 | "Selmer", 1582 | "Shepherd", 1583 | "Yancy", 1584 | "Abbie", 1585 | "Agnes", 1586 | "Arnie", 1587 | "Arvin", 1588 | "Blanche", 1589 | "Bliss", 1590 | "Cassie", 1591 | "Dewey", 1592 | "Diego", 1593 | "Dorr", 1594 | "Edmon", 1595 | "Estes", 1596 | "Gilford", 1597 | "Graves", 1598 | "Hillery", 1599 | "Laurel", 1600 | "Carlisle", 1601 | "Hughie", 1602 | "Orvel", 1603 | "Angel", 1604 | "Horton", 1605 | "Lena", 1606 | "Marie", 1607 | "Waymon", 1608 | "Arno", 1609 | "Burnie", 1610 | "Elgie", 1611 | "Fannie", 1612 | "Felton", 1613 | "Keith", 1614 | "Maxie", 1615 | "Nils", 1616 | "Sie", 1617 | "Sonny", 1618 | "Vere", 1619 | "Virgie", 1620 | "Benjman", 1621 | "Bernardo", 1622 | "Casey", 1623 | "Celestino", 1624 | "Cephus", 1625 | "Della", 1626 | "Hart", 1627 | "Hillary", 1628 | "Hilmer", 1629 | "Holland", 1630 | "Jacques", 1631 | "Johny", 1632 | "Jordon", 1633 | "Julien", 1634 | "Julio", 1635 | "Kay", 1636 | "Le", 1637 | "Leeroy", 1638 | "Liston", 1639 | "Lott", 1640 | "Doyle", 1641 | "Gerard", 1642 | "Alfonzo", 1643 | "Carlie", 1644 | "Branch", 1645 | "Bush", 1646 | "Elgin", 1647 | "Federico", 1648 | "Franz", 1649 | "Governor", 1650 | "Maury", 1651 | "Nancy", 1652 | "Salvatore", 1653 | "Werner", 1654 | "Edw", 1655 | "Ernesto", 1656 | "Fed", 1657 | "Foy", 1658 | "Galen", 1659 | "Genie", 1660 | "Hjalmar", 1661 | "Lawton", 1662 | "Levin", 1663 | "Lish", 1664 | "Pascal", 1665 | "Posey", 1666 | "Redmond", 1667 | "Rosendo", 1668 | "Talmadge", 1669 | "Winford", 1670 | "Abie", 1671 | "Alta", 1672 | "Alver", 1673 | "Anatole", 1674 | "Bobbie", 1675 | "Boone", 1676 | "Buell", 1677 | "Claiborne", 1678 | "Loyal", 1679 | "Eduardo", 1680 | "Maggie", 1681 | "Needham", 1682 | "Mansfield", 1683 | "Ras", 1684 | "Guilford", 1685 | "Sing", 1686 | "Xavier", 1687 | "Charlton", 1688 | "Eula", 1689 | "Mckinley", 1690 | "Polk", 1691 | "Shellie", 1692 | "Bentley", 1693 | "Claudius", 1694 | "Conard", 1695 | "Cornell", 1696 | "Ester", 1697 | "Esther", 1698 | "Mae", 1699 | "Mildred", 1700 | "Neely", 1701 | "Owens", 1702 | "Rance", 1703 | "Red", 1704 | "Robbie", 1705 | "Sigurd", 1706 | "Teddy", 1707 | "Val", 1708 | "Almus", 1709 | "Sheridan", 1710 | "Lorin", 1711 | "Carmine", 1712 | "Jonnie", 1713 | "Kent", 1714 | "Murl", 1715 | "Ricardo", 1716 | "Wilfrid", 1717 | "Adlai", 1718 | "Buddie", 1719 | "Burk", 1720 | "Dessie", 1721 | "Edison", 1722 | "Gifford", 1723 | "Goldie", 1724 | "Hurbert", 1725 | "Iverson", 1726 | "Job", 1727 | "Leamon", 1728 | "Olive", 1729 | "Powell", 1730 | "Rexford", 1731 | "Roma", 1732 | "Romie", 1733 | "Vick", 1734 | "Waldemar", 1735 | "Zebulon", 1736 | "Alferd", 1737 | "Algot", 1738 | "Alphons", 1739 | "Audley", 1740 | "Barnard", 1741 | "Berkley", 1742 | "Bethel", 1743 | "Caroline", 1744 | "Corbett", 1745 | "Ruth", 1746 | "Fidel", 1747 | "Guillermo", 1748 | "Murry", 1749 | "Reubin", 1750 | "Rocco", 1751 | "Samson", 1752 | "Westley", 1753 | "Alba", 1754 | "Irene", 1755 | "Murdock", 1756 | "Nolen", 1757 | "Royce", 1758 | "Ruel", 1759 | "Willaim", 1760 | "Beryl", 1761 | "Beulah", 1762 | "Burleigh", 1763 | "Carrol", 1764 | "Con", 1765 | "Dillon", 1766 | "Ebert", 1767 | "Encarnacion", 1768 | "Cedric", 1769 | "Estel", 1770 | "Mayo", 1771 | "Shelley", 1772 | "Thorwald", 1773 | "Durward", 1774 | "Luster", 1775 | "Arnett", 1776 | "Aubra", 1777 | "Avon", 1778 | "Bolden", 1779 | "Dannie", 1780 | "Elex", 1781 | "Ferris", 1782 | "Jeffie", 1783 | "Lexie", 1784 | "Link", 1785 | "Moises", 1786 | "Myer", 1787 | "Carlyle", 1788 | "Arvel", 1789 | "Erby", 1790 | "Floy", 1791 | "Hughey", 1792 | "Ovid", 1793 | "Alston", 1794 | "Audrey", 1795 | "Buddy", 1796 | "Clemmie", 1797 | "Clemon", 1798 | "Dorothy", 1799 | "Einar", 1800 | "Gurney", 1801 | "Hebert", 1802 | "Hezzie", 1803 | "Kurt", 1804 | "Lois", 1805 | "Lula", 1806 | "Mearl", 1807 | "Oddie", 1808 | "Ramsey", 1809 | "Vinton", 1810 | "Zed", 1811 | "Audy", 1812 | "Barnie", 1813 | "Donat", 1814 | "Emmons", 1815 | "Erich", 1816 | "Esley", 1817 | "Eston", 1818 | "Roosevelt", 1819 | "Hartley", 1820 | "Jennings", 1821 | "Hobert", 1822 | "Montie", 1823 | "Rae", 1824 | "Arvil", 1825 | "Casimer", 1826 | "Elwyn", 1827 | "Evander", 1828 | "Gaither", 1829 | "Grafton", 1830 | "Guthrie", 1831 | "Jettie", 1832 | "Lannie", 1833 | "Lea", 1834 | "Moe", 1835 | "Nestor", 1836 | "Ovila", 1837 | "Reynold", 1838 | "Reynolds", 1839 | "Susie", 1840 | "True", 1841 | "Alwin", 1842 | "Casimir", 1843 | "Vergil", 1844 | "Hazen", 1845 | "Sigmund", 1846 | "Saint", 1847 | "Silver", 1848 | "Eugenio", 1849 | "Lisle", 1850 | "Milburn", 1851 | "Carmen", 1852 | "Orris", 1853 | "Rayford", 1854 | "Raymon", 1855 | "Virgel", 1856 | "Aloys", 1857 | "Cam", 1858 | "Hale", 1859 | "Nile", 1860 | "Offie", 1861 | "Opal", 1862 | "Rosa", 1863 | "Wardell", 1864 | "Willy", 1865 | "Acy", 1866 | "Arthor", 1867 | "Boysie", 1868 | "Britton", 1869 | "Oris", 1870 | "Gladys", 1871 | "Georgia", 1872 | "Bryon", 1873 | "Elvie", 1874 | "Frankie", 1875 | "Mario", 1876 | "Pasquale", 1877 | "Rhoda", 1878 | "Rossie", 1879 | "Sherwood", 1880 | "Buel", 1881 | "Clearence", 1882 | "Dabney", 1883 | "Diamond", 1884 | "Dorris", 1885 | "Everet", 1886 | "Ezell", 1887 | "Hobson", 1888 | "Admiral", 1889 | "Shafter", 1890 | "Maceo", 1891 | "Schley", 1892 | "Ewart", 1893 | "Patsy", 1894 | "Arba", 1895 | "Orvil", 1896 | "Adams", 1897 | "Collier", 1898 | "Gayle", 1899 | "Gladstone", 1900 | "Hilario", 1901 | "Kathryn", 1902 | "Mickey", 1903 | "Odus", 1904 | "Vernal", 1905 | "Von", 1906 | "Haven", 1907 | "Williard", 1908 | "Stephan", 1909 | "Collis", 1910 | "Griffith", 1911 | "Jethro", 1912 | "Vic", 1913 | "Viola", 1914 | "Baker", 1915 | "Beatrice", 1916 | "Bynum", 1917 | "Colvin", 1918 | "Doris", 1919 | "Elizah", 1920 | "Eunice", 1921 | "Leighton", 1922 | "Linnie", 1923 | "Lizzie", 1924 | "Rosevelt", 1925 | "Farris", 1926 | "Lemmie", 1927 | "Estell", 1928 | "Goebel", 1929 | "Tallie", 1930 | "Arlo", 1931 | "Artis", 1932 | "Collin", 1933 | "Eddy", 1934 | "Hester", 1935 | "Lauren", 1936 | "Lupe", 1937 | "Ozie", 1938 | "Salvador", 1939 | "Santos", 1940 | "Schuyler", 1941 | "Arturo", 1942 | "Donovan", 1943 | "Kermit", 1944 | "Eino", 1945 | "Olan", 1946 | "Danny", 1947 | "Lola", 1948 | "Esco", 1949 | "Josef", 1950 | "Lance", 1951 | "Leona", 1952 | "Mathews", 1953 | "Ova", 1954 | "Pate", 1955 | "Regis", 1956 | "Rosario", 1957 | "Vito", 1958 | "Adron", 1959 | "Ancil", 1960 | "Arland", 1961 | "Buren", 1962 | "Erland", 1963 | "Johney", 1964 | "Clarnce", 1965 | "Garvin", 1966 | "Agustin", 1967 | "Nathen", 1968 | "Oneal", 1969 | "Verna", 1970 | "Victoriano", 1971 | "Doll", 1972 | "Georgie", 1973 | "Heyward", 1974 | "Ivor", 1975 | "Myrl", 1976 | "Beckham", 1977 | "Thedore", 1978 | "Thelma", 1979 | "Trinidad", 1980 | "Verl", 1981 | "Evelyn", 1982 | "Hershell", 1983 | "Marty", 1984 | "Roberto", 1985 | "Teddie", 1986 | "Terrell", 1987 | "Hilbert", 1988 | "Lenon", 1989 | "Lenord", 1990 | "Ozzie", 1991 | "Porfirio", 1992 | "Sammy", 1993 | "Rayfield", 1994 | "Waino", 1995 | "Clemence", 1996 | "Harm", 1997 | "Jamie", 1998 | "Vincenzo", 1999 | "Welton", 2000 | "Adrain", 2001 | "Arbie", 2002 | "Betty", 2003 | "Bobby", 2004 | "Desmond", 2005 | "Domenic", 2006 | "Duard", 2007 | "Raul", 2008 | "Severo", 2009 | "Tobie", 2010 | "Council", 2011 | "Domenick", 2012 | "Darrel", 2013 | "Graydon", 2014 | "Fredie", 2015 | "Eliot", 2016 | "Hoke", 2017 | "Pauline", 2018 | "Tyree", 2019 | "Arne", 2020 | "Bell", 2021 | "Carlo", 2022 | "Hansel", 2023 | "Jiles", 2024 | "Leonardo", 2025 | "Quentin", 2026 | "Toby", 2027 | "Verlin", 2028 | "Winthrop", 2029 | "Domenico", 2030 | "Harrold", 2031 | "Lucille", 2032 | "Ryan", 2033 | "Benard", 2034 | "Quinton", 2035 | "Rodolfo", 2036 | "Armando", 2037 | "Delmas", 2038 | "Denzil", 2039 | "Luciano", 2040 | "Lyndon", 2041 | "Vera", 2042 | "Taft", 2043 | "Delphin", 2044 | "Rodger", 2045 | "Woodrow", 2046 | "Burnice", 2047 | "Giovanni", 2048 | "Americo", 2049 | "Ardell", 2050 | "Delmus", 2051 | "Gilmer", 2052 | "Lucio", 2053 | "Mariano", 2054 | "Ogden", 2055 | "Oland", 2056 | "Prentiss", 2057 | "Samie", 2058 | "Hadley", 2059 | "Francesco", 2060 | "Toivo", 2061 | "Robley", 2062 | "Verle", 2063 | "Farrell", 2064 | "Nathanial", 2065 | "Reyes", 2066 | "Eleanor", 2067 | "Emmanuel", 2068 | "Esker", 2069 | "Florentino", 2070 | "Gaetano", 2071 | "Levie", 2072 | "Guido", 2073 | "Aurelio", 2074 | "Curtiss", 2075 | "Othel", 2076 | "Santo", 2077 | "Harrell", 2078 | "Lenwood", 2079 | "Leopoldo", 2080 | "Dante", 2081 | "Ann", 2082 | "Halley", 2083 | "Reino", 2084 | "Carmelo", 2085 | "Wyman", 2086 | "Silvio", 2087 | "Colie", 2088 | "Alfonse", 2089 | "Aldo", 2090 | "Amerigo", 2091 | "Enrico", 2092 | "Gasper", 2093 | "Attilio", 2094 | "Woodroe", 2095 | "Nunzio", 2096 | "Burnell", 2097 | "Erling", 2098 | "Gilberto", 2099 | "Glendon", 2100 | "Larue", 2101 | "Masao", 2102 | "Nevin", 2103 | "Armin", 2104 | "Tyrus", 2105 | "Kendall", 2106 | "Garold", 2107 | "Gennaro", 2108 | "Cosmo", 2109 | "Luigi", 2110 | "Hymen", 2111 | "Donato", 2112 | "Melbourne", 2113 | "Merwin", 2114 | "Winton", 2115 | "Gino", 2116 | "Glenwood", 2117 | "Geno", 2118 | "Glynn", 2119 | "Nello", 2120 | "Durwood", 2121 | "Gilmore", 2122 | "Saverio", 2123 | "Garth", 2124 | "Hiroshi", 2125 | "Arlin", 2126 | "Yoshio", 2127 | "Arvo", 2128 | "Deward", 2129 | "Hughes", 2130 | "Tatsuo", 2131 | "Jerald", 2132 | "Zigmund", 2133 | "Gerhardt", 2134 | "Lynwood", 2135 | "Berlin", 2136 | "Merlyn", 2137 | "Pershing", 2138 | "Hideo", 2139 | "Normand", 2140 | "Orvin", 2141 | "Joyce", 2142 | "Minoru", 2143 | "Foch", 2144 | "Bryce", 2145 | "Carmel", 2146 | "Marco", 2147 | "Winifred", 2148 | "Edsel", 2149 | "Quinten", 2150 | "Kiyoshi", 2151 | "Therman", 2152 | "Kazuo", 2153 | "Metro", 2154 | "Laddie", 2155 | "Harding", 2156 | "Kennith", 2157 | "Eloy", 2158 | "Daryl", 2159 | "Rayburn", 2160 | "Jon", 2161 | "Dewayne", 2162 | "Marcos", 2163 | "Kevin", 2164 | "Harden", 2165 | "Delton", 2166 | "Reynaldo", 2167 | "Donal", 2168 | "Toshio", 2169 | "Dwayne", 2170 | "Zane", 2171 | "Luverne", 2172 | "Jackie", 2173 | "Ramiro", 2174 | "Harlen", 2175 | "Deane", 2176 | "Dwain", 2177 | "Boris", 2178 | "Dorman", 2179 | "Coolidge", 2180 | "Refugio", 2181 | "Darold", 2182 | "Donn", 2183 | "Faustino", 2184 | "Brian", 2185 | "Melvyn", 2186 | "Esteban", 2187 | "Freddy", 2188 | "Virginia", 2189 | "Marlyn", 2190 | "Ken", 2191 | "Dwaine", 2192 | "Gearld", 2193 | "Valentino", 2194 | "Lindy", 2195 | "Lindbergh", 2196 | "Shoji", 2197 | "Denny", 2198 | "Gonzalo", 2199 | "Jorge", 2200 | "Jerrold", 2201 | "Akira", 2202 | "Maria", 2203 | "Hoover", 2204 | "Jerold", 2205 | "Arlen", 2206 | "Ronnie", 2207 | "Marcelino", 2208 | "Verlyn", 2209 | "Ismael", 2210 | "Fidencio", 2211 | "Dolores", 2212 | "Adan", 2213 | "Davey", 2214 | "Derald", 2215 | "Barbara", 2216 | "Humberto", 2217 | "Joan", 2218 | "Sherwin", 2219 | "Lavon", 2220 | "Duwayne", 2221 | "Genaro", 2222 | "Kenny", 2223 | "Rogelio", 2224 | "Rolf", 2225 | "Arnulfo", 2226 | "Gerry", 2227 | "Derl", 2228 | "Gerold", 2229 | "Arlan", 2230 | "Patricia", 2231 | "Dino", 2232 | "Wally", 2233 | "Mervyn", 2234 | "Allyn", 2235 | "Monty", 2236 | "Dickie", 2237 | "Jan", 2238 | "Arlis", 2239 | "Kaye", 2240 | "Kenton", 2241 | "Sherrill", 2242 | "Darl", 2243 | "Raymundo", 2244 | "Delano", 2245 | "Terrance", 2246 | "Ronny", 2247 | "Chuck", 2248 | "Orlin", 2249 | "Gloria", 2250 | "Darryl", 2251 | "Marc", 2252 | "Sal", 2253 | "Stan", 2254 | "Cordell", 2255 | "Darvin", 2256 | "Derrell", 2257 | "Jame", 2258 | "Jacky", 2259 | "Lanny", 2260 | "Ron", 2261 | "Marland", 2262 | "Arlyn", 2263 | "Jerrell", 2264 | "Jeffrey", 2265 | "Valentin", 2266 | "Kerry", 2267 | "Ferrell", 2268 | "Gaylon", 2269 | "Jerrel", 2270 | "Darwyn", 2271 | "Dwane", 2272 | "Randy", 2273 | "Ian", 2274 | "Delwin", 2275 | "Gustavo", 2276 | "Verlon", 2277 | "Vernell", 2278 | "Delma", 2279 | "Windell", 2280 | "Kim", 2281 | "Errol", 2282 | "Reggie", 2283 | "Geoffrey", 2284 | "Mel", 2285 | "Sergio", 2286 | "Del", 2287 | "Donnell", 2288 | "Tyrone", 2289 | "Sharon", 2290 | "Donny", 2291 | "Doug", 2292 | "Marilyn", 2293 | "Carolyn", 2294 | "Delvin", 2295 | "Janet", 2296 | "Levon", 2297 | "Ozell", 2298 | "Gaylen", 2299 | "Lamont", 2300 | "Tex", 2301 | "Lonny", 2302 | "Autry", 2303 | "Rondal", 2304 | "Randal", 2305 | "Dion", 2306 | "Greg", 2307 | "Sandra", 2308 | "Judith", 2309 | "Scotty", 2310 | "Ronal", 2311 | "Jeffery", 2312 | "Randell", 2313 | "Joey", 2314 | "Nicky", 2315 | "Leonel", 2316 | "Harlon", 2317 | "Lawrance", 2318 | "Linda", 2319 | "Barrie", 2320 | "Darnell", 2321 | "Isidro", 2322 | "Wilkie", 2323 | "Rick", 2324 | "Ricky", 2325 | "Donna", 2326 | "Janice", 2327 | "Javier", 2328 | "Wendel", 2329 | "Erik", 2330 | "Lindell", 2331 | "Judy", 2332 | "Jeffry", 2333 | "Karen", 2334 | "Brendan", 2335 | "Darell", 2336 | "Mcarthur", 2337 | "Macarthur", 2338 | "Rickey", 2339 | "Rod", 2340 | "Niles", 2341 | "Jeremy", 2342 | "Susan", 2343 | "Walt", 2344 | "Lary", 2345 | "Jaime", 2346 | "Noe", 2347 | "Rocky", 2348 | "Derek", 2349 | "Les", 2350 | "Terrill", 2351 | "Russ", 2352 | "Timmy", 2353 | "Butch", 2354 | "Sean", 2355 | "Linden", 2356 | "Roddy", 2357 | "Rickie", 2358 | "Lenny", 2359 | "Rusty", 2360 | "Dane", 2361 | "Geary", 2362 | "Eusebio", 2363 | "Garey", 2364 | "Lucky", 2365 | "Gerardo", 2366 | "Gil", 2367 | "Richie", 2368 | "Carnell", 2369 | "Chad", 2370 | "Hank", 2371 | "Dorian", 2372 | "Rolando", 2373 | "Kip", 2374 | "Mikel", 2375 | "Jonathon", 2376 | "Stevan", 2377 | "Kris", 2378 | "Jody", 2379 | "Lyn", 2380 | "Zachary", 2381 | "Brett", 2382 | "Patric", 2383 | "Rory", 2384 | "Rand", 2385 | "Robby", 2386 | "Cornel", 2387 | "Shawn", 2388 | "Skip", 2389 | "Randel", 2390 | "Jed", 2391 | "Dirk", 2392 | "Brock", 2393 | "Deryl", 2394 | "Stevie", 2395 | "Derrick", 2396 | "Jerel", 2397 | "Cesar", 2398 | "Baron", 2399 | "Kathleen", 2400 | "Stefan", 2401 | "Donell", 2402 | "Corey", 2403 | "Kelvin", 2404 | "Ezzard", 2405 | "Tod", 2406 | "Shaun", 2407 | "Brant", 2408 | "Scot", 2409 | "Efrain", 2410 | "Stacey", 2411 | "Brandon", 2412 | "Marlon", 2413 | "Jory", 2414 | "Layne", 2415 | "Danniel", 2416 | "Michial", 2417 | "Ritchie", 2418 | "Edwardo", 2419 | "Kimberly", 2420 | "Ricki", 2421 | "Kurtis", 2422 | "Cory", 2423 | "Deborah", 2424 | "Scottie", 2425 | "Erasmo", 2426 | "Rudolfo", 2427 | "Lex", 2428 | "Rodrick", 2429 | "Daryle", 2430 | "Greggory", 2431 | "Darren", 2432 | "Mikeal", 2433 | "Trent", 2434 | "Michal", 2435 | "Theodis", 2436 | "Damian", 2437 | "Kimball", 2438 | "Michale", 2439 | "Wilfredo", 2440 | "Shane", 2441 | "Robbin", 2442 | "Kraig", 2443 | "Kirt", 2444 | "Chip", 2445 | "Randolf", 2446 | "Bret", 2447 | "Antony", 2448 | "Bradly", 2449 | "Faron", 2450 | "Blaise", 2451 | "Alvaro", 2452 | "Ricci", 2453 | "Dusty", 2454 | "Debra", 2455 | "Rock", 2456 | "Keven", 2457 | "Gavin", 2458 | "Kevan", 2459 | "Blane", 2460 | "Demetrius", 2461 | "Rahn", 2462 | "Barron", 2463 | "Heriberto", 2464 | "Jude", 2465 | "Levern", 2466 | "Darcy", 2467 | "Micky", 2468 | "Kennard", 2469 | "Davy", 2470 | "Tad", 2471 | "Rhett", 2472 | "Ty", 2473 | "Mitch", 2474 | "Jefferey", 2475 | "Dann", 2476 | "Timmothy", 2477 | "Broderick", 2478 | "Derwin", 2479 | "Chet", 2480 | "Quintin", 2481 | "Timmie", 2482 | "Tab", 2483 | "Tracey", 2484 | "Jace", 2485 | "Kem", 2486 | "Brion", 2487 | "Andrea", 2488 | "Cynthia", 2489 | "Kennth", 2490 | "Renaldo", 2491 | "Desi", 2492 | "Renard", 2493 | "Trevor", 2494 | "Kenney", 2495 | "Brien", 2496 | "Cheyenne", 2497 | "Derick", 2498 | "Robb", 2499 | "Devin", 2500 | "Kerwin", 2501 | "Grayling", 2502 | "Quinn", 2503 | "Wayde", 2504 | "Maverick", 2505 | "Tobin", 2506 | "Kristopher", 2507 | "Keenan", 2508 | "Diane", 2509 | "Cheryl", 2510 | "Reinaldo", 2511 | "Jamey", 2512 | "Darrin", 2513 | "Flint", 2514 | "Darin", 2515 | "Daren", 2516 | "Efrem", 2517 | "Kieth", 2518 | "Micah", 2519 | "Andra", 2520 | "Chaim", 2521 | "Raynard", 2522 | "Leif", 2523 | "Kennedy", 2524 | "Lisa", 2525 | "Darrick", 2526 | "Darry", 2527 | "Roel", 2528 | "Darron", 2529 | "Darryle", 2530 | "Stephon", 2531 | "Darryll", 2532 | "Brenda", 2533 | "Devon", 2534 | "Arnoldo", 2535 | "Kory", 2536 | "Regan", 2537 | "Brook", 2538 | "Shayne", 2539 | "Lorne", 2540 | "Parrish", 2541 | "Drake", 2542 | "Norberto", 2543 | "Kalvin", 2544 | "Pernell", 2545 | "Markus", 2546 | "Thor", 2547 | "Osvaldo", 2548 | "Anibal", 2549 | "Daron", 2550 | "Deon", 2551 | "Edgardo", 2552 | "Geoff", 2553 | "Tammy", 2554 | "Jayson", 2555 | "Rodrigo", 2556 | "Tyron", 2557 | "Dwyane", 2558 | "Stoney", 2559 | "Tal", 2560 | "Jaimie", 2561 | "Trenton", 2562 | "Andreas", 2563 | "Vinson", 2564 | "Pamela", 2565 | "Erin", 2566 | "Mauricio", 2567 | "Rigoberto", 2568 | "Roderic", 2569 | "Destry", 2570 | "Deron", 2571 | "Fitzgerald", 2572 | "Quint", 2573 | "Kipp", 2574 | "Trey", 2575 | "Kendrick", 2576 | "Deric", 2577 | "Terance", 2578 | "Antonia", 2579 | "Shon", 2580 | "Daryn", 2581 | "Darien", 2582 | "Darryn", 2583 | "Trace", 2584 | "Darian", 2585 | "Dario", 2586 | "Chadwick", 2587 | "Brain", 2588 | "Reginal", 2589 | "Heath", 2590 | "Jarrod", 2591 | "Michelle", 2592 | "Illya", 2593 | "Brenton", 2594 | "Michele", 2595 | "Dylan", 2596 | "Efren", 2597 | "Arron", 2598 | "Tyson", 2599 | "Cedrick", 2600 | "Dereck", 2601 | "Brennan", 2602 | "Jerrod", 2603 | "Garrick", 2604 | "Jennifer", 2605 | "Angela", 2606 | "Claudio", 2607 | "Derik", 2608 | "Octavio", 2609 | "Alfie", 2610 | "Brendon", 2611 | "Kristian", 2612 | "Shad", 2613 | "Ariel", 2614 | "Liam", 2615 | "Tina", 2616 | "Beau", 2617 | "Giuseppe", 2618 | "Franco", 2619 | "Dustin", 2620 | "Jamal", 2621 | "Damien", 2622 | "Waylon", 2623 | "Colby", 2624 | "Damion", 2625 | "Brenden", 2626 | "Korey", 2627 | "Tye", 2628 | "Rico", 2629 | "Darby", 2630 | "Melissa", 2631 | "Anthoney", 2632 | "Jade", 2633 | "Lamonte", 2634 | "Shan", 2635 | "Johnathon", 2636 | "Tory", 2637 | "Trever", 2638 | "Lazaro", 2639 | "Jemal", 2640 | "Jamison", 2641 | "Aric", 2642 | "Ari", 2643 | "Donavan", 2644 | "Torrey", 2645 | "Torrance", 2646 | "Shanon", 2647 | "Chandler", 2648 | "Ali", 2649 | "Corwin", 2650 | "Amy", 2651 | "Jameson", 2652 | "Demetrios", 2653 | "Jasen", 2654 | "Davin", 2655 | "Cale", 2656 | "Jermaine", 2657 | "Malik", 2658 | "Jeromy", 2659 | "Jammie", 2660 | "Che", 2661 | "Bronson", 2662 | "Dax", 2663 | "Brandt", 2664 | "Kenyatta", 2665 | "Antione", 2666 | "Laron", 2667 | "Antwan", 2668 | "Branden", 2669 | "Dedric", 2670 | "Jayme", 2671 | "Kelsey", 2672 | "Torrence", 2673 | "Shea", 2674 | "Kenyon", 2675 | "Kristin", 2676 | "Shay", 2677 | "Corbin", 2678 | "Cristopher", 2679 | "Jeramy", 2680 | "Braden", 2681 | "Kenya", 2682 | "Dedrick", 2683 | "Tate", 2684 | "Germaine", 2685 | "Nigel", 2686 | "Jerod", 2687 | "Christoper", 2688 | "Chadd", 2689 | "Jarod", 2690 | "Tristan", 2691 | "Brannon", 2692 | "Jeremey", 2693 | "Deandre", 2694 | "Kiley", 2695 | "Donavon", 2696 | "Sedrick", 2697 | "Hassan", 2698 | "Jamel", 2699 | "Jeramie", 2700 | "Marcelo", 2701 | "Coby", 2702 | "Deshawn", 2703 | "Toriano", 2704 | "Kwame", 2705 | "Kasey", 2706 | "Demian", 2707 | "Kristofer", 2708 | "Paulo", 2709 | "Donte", 2710 | "Jarred", 2711 | "Demond", 2712 | "Kareem", 2713 | "Vidal", 2714 | "Zachariah", 2715 | "Jamar", 2716 | "Abdul", 2717 | "Jermain", 2718 | "Tremayne", 2719 | "Jeremie", 2720 | "Marlo", 2721 | "Lashawn", 2722 | "Brandy", 2723 | "Josue", 2724 | "Jabbar", 2725 | "Kristoffer", 2726 | "Diallo", 2727 | "Tito", 2728 | "Damond", 2729 | "Nicole", 2730 | "Dameon", 2731 | "Rahsaan", 2732 | "Nathanael", 2733 | "Abelardo", 2734 | "Cade", 2735 | "Vashon", 2736 | "Taurus", 2737 | "Chadrick", 2738 | "Tarik", 2739 | "Marcello", 2740 | "Dominique", 2741 | "Donta", 2742 | "Moshe", 2743 | "Zachery", 2744 | "Jevon", 2745 | "Stephanie", 2746 | "Nakia", 2747 | "Telly", 2748 | "Ahmad", 2749 | "Jamil", 2750 | "Toma", 2751 | "Trinity", 2752 | "Jereme", 2753 | "Dejuan", 2754 | "Jabari", 2755 | "Ahmed", 2756 | "Heather", 2757 | "Demarcus", 2758 | "Antwon", 2759 | "Jered", 2760 | "Rashad", 2761 | "Kristen", 2762 | "Mauro", 2763 | "Benji", 2764 | "Tavares", 2765 | "Marques", 2766 | "Rasheed", 2767 | "Jerad", 2768 | "Corry", 2769 | "Cristobal", 2770 | "Deangelo", 2771 | "Karim", 2772 | "Sharif", 2773 | "Demarco", 2774 | "Kareen", 2775 | "Rebecca", 2776 | "Raheem", 2777 | "Jamaal", 2778 | "Jovan", 2779 | "Seneca", 2780 | "Jermey", 2781 | "Torey", 2782 | "Hakim", 2783 | "Cortney", 2784 | "Jamin", 2785 | "Javon", 2786 | "Zackary", 2787 | "Ezequiel", 2788 | "Jerimy", 2789 | "Muhammad", 2790 | "Jameel", 2791 | "Brody", 2792 | "Jaron", 2793 | "Dimitrios", 2794 | "Taj", 2795 | "Tanner", 2796 | "Torry", 2797 | "Amir", 2798 | "Levar", 2799 | "Lavar", 2800 | "Kunta", 2801 | "Jedediah", 2802 | "Jerimiah", 2803 | "Kinte", 2804 | "Rashawn", 2805 | "Jeramiah", 2806 | "Jessica", 2807 | "Jedidiah", 2808 | "Amin", 2809 | "Rian", 2810 | "Conor", 2811 | "Lydell", 2812 | "Davon", 2813 | "Kaleb", 2814 | "Samir", 2815 | "Zackery", 2816 | "Khalid", 2817 | "Bo", 2818 | "Cristian", 2819 | "Demetric", 2820 | "Horacio", 2821 | "Anwar", 2822 | "Nicholaus", 2823 | "Kenji", 2824 | "Nikolas", 2825 | "Demario", 2826 | "Johnpaul", 2827 | "Nicklaus", 2828 | "Jarret", 2829 | "Kody", 2830 | "Antwain", 2831 | "Dequan", 2832 | "Lukas", 2833 | "Christina", 2834 | "Deshaun", 2835 | "Juston", 2836 | "Hasan", 2837 | "Jeb", 2838 | "Amanda", 2839 | "Andrae", 2840 | "Kendell", 2841 | "Tucker", 2842 | "Keon", 2843 | "Garett", 2844 | "Amit", 2845 | "Omari", 2846 | "Tyrell", 2847 | "Mohammad", 2848 | "Bryson", 2849 | "Tyrel", 2850 | "Tremaine", 2851 | "Jarrad", 2852 | "Rustin", 2853 | "Kai", 2854 | "Justen", 2855 | "Keegan", 2856 | "Chaz", 2857 | "Yoel", 2858 | "Jarad", 2859 | "Jessy", 2860 | "Bjorn", 2861 | "Brandan", 2862 | "Dustan", 2863 | "Isaias", 2864 | "Kellen", 2865 | "Skyler", 2866 | "Marchello", 2867 | "Mohammed", 2868 | "Johathan", 2869 | "Adalberto", 2870 | "Connor", 2871 | "Dontae", 2872 | "Taurean", 2873 | "Skylar", 2874 | "Mohamed", 2875 | "Colt", 2876 | "Kiel", 2877 | "Colton", 2878 | "Eliezer", 2879 | "Darrius", 2880 | "Tuan", 2881 | "Hung", 2882 | "Long", 2883 | "Lamarcus", 2884 | "Justine", 2885 | "Huy", 2886 | "Akeem", 2887 | "Cassidy", 2888 | "Devan", 2889 | "Martell", 2890 | "Remington", 2891 | "Jacoby", 2892 | "Jakob", 2893 | "Trumaine", 2894 | "Marquise", 2895 | "Deven", 2896 | "Crystal", 2897 | "Ryne", 2898 | "Coty", 2899 | "Grayson", 2900 | "Jerrad", 2901 | "Jarrell", 2902 | "Baby", 2903 | "Brandin", 2904 | "Alonso", 2905 | "Danielle", 2906 | "Tavon", 2907 | "Travon", 2908 | "Deonte", 2909 | "Rachel", 2910 | "Kameron", 2911 | "Tavaris", 2912 | "Tylor", 2913 | "Jairo", 2914 | "Durell", 2915 | "Durrell", 2916 | "Channing", 2917 | "Jaymes", 2918 | "Dakota", 2919 | "Keaton", 2920 | "Ulises", 2921 | "Brandyn", 2922 | "Mackenzie", 2923 | "Maximilian", 2924 | "Uriel", 2925 | "Terell", 2926 | "Kale", 2927 | "Dandre", 2928 | "Kolby", 2929 | "Joshuah", 2930 | "Martez", 2931 | "Rayshawn", 2932 | "Dangelo", 2933 | "Derrek", 2934 | "Cordero", 2935 | "Jayce", 2936 | "Yaakov", 2937 | "Kyler", 2938 | "Alexandro", 2939 | "Zechariah", 2940 | "Giancarlo", 2941 | "Garrison", 2942 | "Spenser", 2943 | "Austen", 2944 | "Payton", 2945 | "Kalen", 2946 | "Kane", 2947 | "Mychal", 2948 | "Conner", 2949 | "Cordaro", 2950 | "Dashawn", 2951 | "Holden", 2952 | "Octavius", 2953 | "Rashaad", 2954 | "Montrell", 2955 | "Jaren", 2956 | "Joseluis", 2957 | "Trevin", 2958 | "Brennen", 2959 | "Kegan", 2960 | "Camron", 2961 | "Colten", 2962 | "Codey", 2963 | "Arsenio", 2964 | "Jaquan", 2965 | "Geraldo", 2966 | "Kelby", 2967 | "Jamarcus", 2968 | "Marquez", 2969 | "Dominque", 2970 | "Brittany", 2971 | "Ridge", 2972 | "Mikhail", 2973 | "Brantley", 2974 | "Nico", 2975 | "Kade", 2976 | "Alexandre", 2977 | "Christop", 2978 | "Infant", 2979 | "Alexande", 2980 | "Hakeem", 2981 | "Kadeem", 2982 | "Gage", 2983 | "Khiry", 2984 | "Jasmine", 2985 | "Daquan", 2986 | "Niko", 2987 | "Rakeem", 2988 | "Nikko", 2989 | "Dionte", 2990 | "Samantha", 2991 | "Darion", 2992 | "Kendal", 2993 | "Kiara", 2994 | "Tiffany", 2995 | "Khalil", 2996 | "Najee", 2997 | "Ladarius", 2998 | "Stetson", 2999 | "Yosef", 3000 | "Trevon", 3001 | "Dimitri", 3002 | "Tevin", 3003 | "Denzel", 3004 | "Male", 3005 | "Laquan", 3006 | "Kiefer", 3007 | "Jorden", 3008 | "Ibrahim", 3009 | "Mykel", 3010 | "Kevon", 3011 | "Zakary", 3012 | "Aidan", 3013 | "Talon", 3014 | "Codie", 3015 | "Hernan", 3016 | "Camden", 3017 | "Deontae", 3018 | "Keenen", 3019 | "Misael", 3020 | "Devonte", 3021 | "Sage", 3022 | "Dillan", 3023 | "Gunnar", 3024 | "Shaquille", 3025 | "Dillion", 3026 | "Dylon", 3027 | "Storm", 3028 | "Domonique", 3029 | "Codi", 3030 | "Jaleel", 3031 | "Davion", 3032 | "Brayden", 3033 | "Denzell", 3034 | "Devante", 3035 | "Dijon", 3036 | "Keifer", 3037 | "Tariq", 3038 | "Babyboy", 3039 | "Sawyer", 3040 | "Desean", 3041 | "Deonta", 3042 | "Kolton", 3043 | "Justyn", 3044 | "Unnamed", 3045 | "Dejon", 3046 | "Bilal", 3047 | "Deante", 3048 | "Jalen", 3049 | "Tre", 3050 | "Davonte", 3051 | "Devonta", 3052 | "Javonte", 3053 | "Devontae", 3054 | "Deion", 3055 | "Demetri", 3056 | "Davante", 3057 | "Dyllan", 3058 | "Trae", 3059 | "Dondre", 3060 | "Tayler", 3061 | "Caden", 3062 | "Dakotah", 3063 | "Montel", 3064 | "Davonta", 3065 | "Dalvin", 3066 | "Tyshawn", 3067 | "Maximillian", 3068 | "Juwan", 3069 | "Tyquan", 3070 | "Kieran", 3071 | "Colter", 3072 | "Jaylen", 3073 | "Devyn", 3074 | "Savon", 3075 | "Deondre", 3076 | "Darrian", 3077 | "Dallin", 3078 | "Jordy", 3079 | "Mikal", 3080 | "Adonis", 3081 | "Kelton", 3082 | "Shaquan", 3083 | "Devaughn", 3084 | "Darrien", 3085 | "Austyn", 3086 | "Kaden", 3087 | "Darrion", 3088 | "Fredy", 3089 | "Montana", 3090 | "Kole", 3091 | "Syed", 3092 | "Demonte", 3093 | "Dakoda", 3094 | "Jaden", 3095 | "Keanu", 3096 | "Jaylon", 3097 | "Daulton", 3098 | "Shyheim", 3099 | "Markell", 3100 | "Menachem", 3101 | "Markel", 3102 | "Jayden", 3103 | "Khari", 3104 | "Trayvon", 3105 | "Gunner", 3106 | "Auston", 3107 | "Cain", 3108 | "Jaylin", 3109 | "River", 3110 | "Alek", 3111 | "Destin", 3112 | "Tyrin", 3113 | "Ryder", 3114 | "Armani", 3115 | "Kahlil", 3116 | "Bryton", 3117 | "Jonatan", 3118 | "Tristen", 3119 | "Triston", 3120 | "Raekwon", 3121 | "Tristin", 3122 | "Anfernee", 3123 | "Draven", 3124 | "Romello", 3125 | "Stone", 3126 | "Tristian", 3127 | "Easton", 3128 | "Treyvon", 3129 | "Aiden", 3130 | "Rashaan", 3131 | "Rohan", 3132 | "Killian", 3133 | "Phoenix", 3134 | "Greyson", 3135 | "Latrell", 3136 | "Brennon", 3137 | "Seamus", 3138 | "Isai", 3139 | "Branson", 3140 | "Damarcus", 3141 | "Mateo", 3142 | "Keshawn", 3143 | "Keyshawn", 3144 | "Trystan", 3145 | "Braeden", 3146 | "Brayan", 3147 | "Shamar", 3148 | "Keion", 3149 | "Raquan", 3150 | "Jair", 3151 | "Braydon", 3152 | "Shemar", 3153 | "Reilly", 3154 | "Reagan", 3155 | "Jaylan", 3156 | "Nasir", 3157 | "Abdullah", 3158 | "Dominik", 3159 | "Keagan", 3160 | "Kordell", 3161 | "Kobe", 3162 | "Gianni", 3163 | "Jaret", 3164 | "Koby", 3165 | "Nash", 3166 | "Rylan", 3167 | "Jaxon", 3168 | "Giovanny", 3169 | "Ronaldo", 3170 | "Coleton", 3171 | "Amari", 3172 | "Jarett", 3173 | "Keyon", 3174 | "Paxton", 3175 | "Landen", 3176 | "Raven", 3177 | "Jamari", 3178 | "Jovani", 3179 | "Jovanny", 3180 | "Keandre", 3181 | "Kenan", 3182 | "Jajuan", 3183 | "Ryley", 3184 | "Nikhil", 3185 | "Tyrese", 3186 | "Tyrek", 3187 | "Zion", 3188 | "Declan", 3189 | "Savion", 3190 | "Kamron", 3191 | "Jadon", 3192 | "Tyrique", 3193 | "Tahj", 3194 | "Tyriq", 3195 | "Tyreek", 3196 | "Izaiah", 3197 | "Tavian", 3198 | "Jacquez", 3199 | "Alessandro", 3200 | "Kyree", 3201 | "Tyrik", 3202 | "Jordi", 3203 | "Jalon", 3204 | "Mekhi", 3205 | "Jelani", 3206 | "Matteo", 3207 | "Johan", 3208 | "Hamza", 3209 | "Brycen", 3210 | "Jovany", 3211 | "Miguelangel", 3212 | "Jensen", 3213 | "Rahul", 3214 | "Christion", 3215 | "Judah", 3216 | "Konnor", 3217 | "Kylan", 3218 | "Jaiden", 3219 | "Tyreke", 3220 | "Cayden", 3221 | "Jett", 3222 | "Zaire", 3223 | "Jaydon", 3224 | "Korbin", 3225 | "Tyreese", 3226 | "Braedon", 3227 | "Jaxson", 3228 | "Xander", 3229 | "Camren", 3230 | "Semaj", 3231 | "Ean", 3232 | "Gaven", 3233 | "Karson", 3234 | "Trevion", 3235 | "Ayden", 3236 | "Rey", 3237 | "Tavion", 3238 | "Braiden", 3239 | "Kadin", 3240 | "Arman", 3241 | "Aditya", 3242 | "Rowan", 3243 | "Bridger", 3244 | "Kayden", 3245 | "Elian", 3246 | "Luca", 3247 | "Finn", 3248 | "Kaiden", 3249 | "Sincere", 3250 | "Maximus", 3251 | "Xzavier", 3252 | "Blaze", 3253 | "Gaige", 3254 | "London", 3255 | "Keshaun", 3256 | "Sabastian", 3257 | "Kavon", 3258 | "Kian", 3259 | "Brodie", 3260 | "Jaeden", 3261 | "Javion", 3262 | "Jamir", 3263 | "Maxim", 3264 | "Alexzander", 3265 | "Kamren", 3266 | "Zander", 3267 | "Dayne", 3268 | "Isaak", 3269 | "Jaheim", 3270 | "Jagger", 3271 | "Oswaldo", 3272 | "Ronan", 3273 | "Haden", 3274 | "Jadyn", 3275 | "Immanuel", 3276 | "Alijah", 3277 | "Jakobe", 3278 | "Imanol", 3279 | "Jordyn", 3280 | "Zain", 3281 | "Yusuf", 3282 | "Gavyn", 3283 | "Pranav", 3284 | "Yehuda", 3285 | "Daunte", 3286 | "Caiden", 3287 | "Arjun", 3288 | "Jahiem", 3289 | "Zavier", 3290 | "Mustafa", 3291 | "Rylee", 3292 | "Giovani", 3293 | "Jovanni", 3294 | "Omarion", 3295 | "Yahir", 3296 | "Amarion", 3297 | "Gael", 3298 | "Cael", 3299 | "Treyton", 3300 | "Aryan", 3301 | "Jaheem", 3302 | "Malakai", 3303 | "Javen", 3304 | "Lisandro", 3305 | "Santino", 3306 | "Adriel", 3307 | "Ethen", 3308 | "Luc", 3309 | "Maximo", 3310 | "Cason", 3311 | "Gannon", 3312 | "Jaquez", 3313 | "Bradyn", 3314 | "Jase", 3315 | "Zayne", 3316 | "Osbaldo", 3317 | "Maddox", 3318 | "Jamarion", 3319 | "Yair", 3320 | "Aydan", 3321 | "Konner", 3322 | "Damarion", 3323 | "Jahir", 3324 | "Enzo", 3325 | "Cannon", 3326 | "Kamari", 3327 | "Kaeden", 3328 | "Ryker", 3329 | "Soren", 3330 | "Mordechai", 3331 | "Cristofer", 3332 | "Ryland", 3333 | "Zaid", 3334 | "Arnav", 3335 | "Canyon", 3336 | "Kanye", 3337 | "Kyan", 3338 | "Cohen", 3339 | "Braylon", 3340 | "Davian", 3341 | "Jaidyn", 3342 | "Demarion", 3343 | "Landyn", 3344 | "Luka", 3345 | "Braulio", 3346 | "Andon", 3347 | "Aydin", 3348 | "Matias", 3349 | "Jaydin", 3350 | "Deacon", 3351 | "Teagan", 3352 | "Kamden", 3353 | "Malaki", 3354 | "Koda", 3355 | "Rhys", 3356 | "Haiden", 3357 | "Tayshaun", 3358 | "Jayvon", 3359 | "Trenten", 3360 | "Rishi", 3361 | "Kason", 3362 | "Talan", 3363 | "Amare", 3364 | "Makai", 3365 | "Braylen", 3366 | "Kadyn", 3367 | "Leandro", 3368 | "Aedan", 3369 | "Finnegan", 3370 | "Karter", 3371 | "Damari", 3372 | "Messiah", 3373 | "Makhi", 3374 | "Camryn", 3375 | "Gauge", 3376 | "Jax", 3377 | "Adin", 3378 | "Krish", 3379 | "Yandel", 3380 | "Beckett", 3381 | "Kael", 3382 | "Bode", 3383 | "Koen", 3384 | "Zayden", 3385 | "Santana", 3386 | "Landin", 3387 | "Talen", 3388 | "Kasen", 3389 | "Aidyn", 3390 | "Jasiah", 3391 | "Memphis", 3392 | "Kingston", 3393 | "Landan", 3394 | "Case", 3395 | "Coen", 3396 | "Izayah", 3397 | "Anders", 3398 | "Brogan", 3399 | "Madden", 3400 | "Slade", 3401 | "Kellan", 3402 | "Jaydan", 3403 | "Nery", 3404 | "Rayan", 3405 | "Dereon", 3406 | "Yael", 3407 | "Raiden", 3408 | "Nikolai", 3409 | "Yurem", 3410 | "Lyric", 3411 | "Kelan", 3412 | "Tegan", 3413 | "Kamryn", 3414 | "Jayvion", 3415 | "Ronin", 3416 | "Daxton", 3417 | "Aaden", 3418 | "Chace", 3419 | "Marley", 3420 | "Kash", 3421 | "Kymani", 3422 | "Ishaan", 3423 | "Jadiel", 3424 | "Urijah", 3425 | "Eden", 3426 | "Zaiden", 3427 | "Ayaan", 3428 | "Aarav", 3429 | "Tripp", 3430 | "Geovanni", 3431 | "Yadiel", 3432 | "Kyson", 3433 | "Callum", 3434 | "Deegan", 3435 | "Lennon", 3436 | "Abdiel", 3437 | "Carsen", 3438 | "Kolten", 3439 | "Stella", 3440 | "Sallie", 3441 | "Nettie", 3442 | "Etta", 3443 | "Harriet", 3444 | "Sadie", 3445 | "Katie", 3446 | "Lydia", 3447 | "Kate", 3448 | "Mollie", 3449 | "Lulu", 3450 | "Nannie", 3451 | "Lottie", 3452 | "Belle", 3453 | "Charlotte", 3454 | "Amelia", 3455 | "Hannah", 3456 | "Jane", 3457 | "Emily", 3458 | "Matilda", 3459 | "Henrietta", 3460 | "Sara", 3461 | "Estella", 3462 | "Theresa", 3463 | "Josie", 3464 | "Sophia", 3465 | "Anne", 3466 | "Delia", 3467 | "Louisa", 3468 | "Mayme", 3469 | "Estelle", 3470 | "Nina", 3471 | "Bettie", 3472 | "Luella", 3473 | "Inez", 3474 | "Lela", 3475 | "Rosie", 3476 | "Millie", 3477 | "Janie", 3478 | "Cornelia", 3479 | "Victoria", 3480 | "Celia", 3481 | "Christine", 3482 | "Birdie", 3483 | "Harriett", 3484 | "Mable", 3485 | "Myra", 3486 | "Sophie", 3487 | "Tillie", 3488 | "Isabel", 3489 | "Sylvia", 3490 | "Isabelle", 3491 | "Leila", 3492 | "Sally", 3493 | "Ina", 3494 | "Nell", 3495 | "Alberta", 3496 | "Katharine", 3497 | "Rena", 3498 | "Mina", 3499 | "Mathilda", 3500 | "Dollie", 3501 | "Hettie", 3502 | "Fanny", 3503 | "Lenora", 3504 | "Adelaide", 3505 | "Lelia", 3506 | "Nelle", 3507 | "Sue", 3508 | "Johanna", 3509 | "Lilly", 3510 | "Lucinda", 3511 | "Minerva", 3512 | "Lettie", 3513 | "Roxie", 3514 | "Helena", 3515 | "Hilda", 3516 | "Hulda", 3517 | "Genevieve", 3518 | "Cordelia", 3519 | "Jeanette", 3520 | "Adeline", 3521 | "Leah", 3522 | "Lura", 3523 | "Mittie", 3524 | "Isabella", 3525 | "Olga", 3526 | "Phoebe", 3527 | "Teresa", 3528 | "Lida", 3529 | "Lina", 3530 | "Marguerite", 3531 | "Claudia", 3532 | "Cecelia", 3533 | "Bess", 3534 | "Emilie", 3535 | "Rosetta", 3536 | "Myrtie", 3537 | "Cecilia", 3538 | "Olivia", 3539 | "Ophelia", 3540 | "Elnora", 3541 | "Violet", 3542 | "Adele", 3543 | "Lily", 3544 | "Loretta", 3545 | "Madge", 3546 | "Polly", 3547 | "Eugenia", 3548 | "Lucile", 3549 | "Mabelle", 3550 | "Rosalie", 3551 | "Kittie", 3552 | "Meta", 3553 | "Angie", 3554 | "Georgiana", 3555 | "Lila", 3556 | "Regina", 3557 | "Selma", 3558 | "Wilhelmina", 3559 | "Bridget", 3560 | "Lilla", 3561 | "Malinda", 3562 | "Vina", 3563 | "Freda", 3564 | "Gertie", 3565 | "Jeannette", 3566 | "Louella", 3567 | "Mandy", 3568 | "Roberta", 3569 | "Corinne", 3570 | "Lyda", 3571 | "Naomi", 3572 | "Norma", 3573 | "Margie", 3574 | "Nona", 3575 | "Zella", 3576 | "Dovie", 3577 | "Elvira", 3578 | "Erma", 3579 | "Irma", 3580 | "Leota", 3581 | "Blanch", 3582 | "Charity", 3583 | "Lorena", 3584 | "Lucretia", 3585 | "Orpha", 3586 | "Alvina", 3587 | "Annette", 3588 | "Catharine", 3589 | "Elma", 3590 | "Geneva", 3591 | "Leora", 3592 | "Lona", 3593 | "Miriam", 3594 | "Zora", 3595 | "Octavia", 3596 | "Sudie", 3597 | "Zula", 3598 | "Adella", 3599 | "Frieda", 3600 | "Joanna", 3601 | "Leonora", 3602 | "Priscilla", 3603 | "Tennie", 3604 | "Angeline", 3605 | "Docia", 3606 | "Ettie", 3607 | "Flossie", 3608 | "Hanna", 3609 | "Letha", 3610 | "Minta", 3611 | "Retta", 3612 | "Rosella", 3613 | "Adah", 3614 | "Berta", 3615 | "Elisabeth", 3616 | "Elise", 3617 | "Leola", 3618 | "Margret", 3619 | "Adaline", 3620 | "Idella", 3621 | "Juanita", 3622 | "Lenna", 3623 | "Lucie", 3624 | "Missouri", 3625 | "Nola", 3626 | "Zoe", 3627 | "Eda", 3628 | "Isabell", 3629 | "Julie", 3630 | "Letitia", 3631 | "Madeline", 3632 | "Malissa", 3633 | "Mariah", 3634 | "Pattie", 3635 | "Almeda", 3636 | "Aurelia", 3637 | "Dolly", 3638 | "Jannie", 3639 | "Kathrine", 3640 | "Lavinia", 3641 | "Marietta", 3642 | "Melvina", 3643 | "Ona", 3644 | "Pinkie", 3645 | "Susanna", 3646 | "Chloe", 3647 | "Elsa", 3648 | "Matie", 3649 | "Pearle", 3650 | "Vesta", 3651 | "Vinnie", 3652 | "Antoinette", 3653 | "Clementine", 3654 | "Edythe", 3655 | "Harriette", 3656 | "Libbie", 3657 | "Lilian", 3658 | "Lutie", 3659 | "Magdalena", 3660 | "Meda", 3661 | "Rita", 3662 | "Tena", 3663 | "Zelma", 3664 | "Adelia", 3665 | "Annetta", 3666 | "Dona", 3667 | "Elizebeth", 3668 | "Georgianna", 3669 | "Gracie", 3670 | "Iona", 3671 | "Leta", 3672 | "Liza", 3673 | "Mertie", 3674 | "Molly", 3675 | "Neva", 3676 | "Oma", 3677 | "Alida", 3678 | "Cecile", 3679 | "Ernestine", 3680 | "Evie", 3681 | "Helene", 3682 | "Minna", 3683 | "Myrta", 3684 | "Prudence", 3685 | "Queen", 3686 | "Rilla", 3687 | "Savannah", 3688 | "Tessie", 3689 | "Agatha", 3690 | "America", 3691 | "Anita", 3692 | "Arminta", 3693 | "Dorothea", 3694 | "Luvenia", 3695 | "Marjorie", 3696 | "Maybelle", 3697 | "Mellie", 3698 | "Nan", 3699 | "Velma", 3700 | "Constance", 3701 | "Ila", 3702 | "Iola", 3703 | "Louvenia", 3704 | "Lucia", 3705 | "Ludie", 3706 | "Luna", 3707 | "Metta", 3708 | "Phebe", 3709 | "Sophronia", 3710 | "Adda", 3711 | "Avis", 3712 | "Betsy", 3713 | "Cordie", 3714 | "Emmaline", 3715 | "Ethelyn", 3716 | "Hortense", 3717 | "Marcella", 3718 | "Melinda", 3719 | "Mona", 3720 | "Odessa", 3721 | "Veronica", 3722 | "Aimee", 3723 | "Annabel", 3724 | "Ava", 3725 | "Bella", 3726 | "Carolina", 3727 | "Cathrine", 3728 | "Christena", 3729 | "Dena", 3730 | "Eleanore", 3731 | "Elmira", 3732 | "Jenny", 3733 | "Kizzie", 3734 | "Loula", 3735 | "Magdalene", 3736 | "Mettie", 3737 | "Mintie", 3738 | "Peggy", 3739 | "Reba", 3740 | "Serena", 3741 | "Vida", 3742 | "Zada", 3743 | "Abigail", 3744 | "Celestine", 3745 | "Celina", 3746 | "Daisie", 3747 | "Dessa", 3748 | "Easter", 3749 | "Emelia", 3750 | "Emmie", 3751 | "Imogene", 3752 | "India", 3753 | "Jeanne", 3754 | "Lenore", 3755 | "Liddie", 3756 | "Lotta", 3757 | "Mame", 3758 | "Nevada", 3759 | "Rachael", 3760 | "Sina", 3761 | "Willa", 3762 | "Aline", 3763 | "Daisey", 3764 | "Dorcas", 3765 | "Edmonia", 3766 | "Effa", 3767 | "Eldora", 3768 | "Eloise", 3769 | "Emmer", 3770 | "Era", 3771 | "Gena", 3772 | "Iris", 3773 | "Izora", 3774 | "Lissie", 3775 | "Mallie", 3776 | "Malvina", 3777 | "Mathilde", 3778 | "Mazie", 3779 | "Queenie", 3780 | "Rosina", 3781 | "Salome", 3782 | "Theodora", 3783 | "Therese", 3784 | "Vena", 3785 | "Wanda", 3786 | "Wilda", 3787 | "Altha", 3788 | "Anastasia", 3789 | "Besse", 3790 | "Birtie", 3791 | "Clarissa", 3792 | "Delilah", 3793 | "Diana", 3794 | "Emelie", 3795 | "Erna", 3796 | "Florida", 3797 | "Frona", 3798 | "Hilma", 3799 | "Juliet", 3800 | "Leonie", 3801 | "Lugenia", 3802 | "Mammie", 3803 | "Manda", 3804 | "Manerva", 3805 | "Manie", 3806 | "Nella", 3807 | "Paulina", 3808 | "Philomena", 3809 | "Selina", 3810 | "Sena", 3811 | "Theodosia", 3812 | "Una", 3813 | "Adela", 3814 | "Althea", 3815 | "Amalia", 3816 | "Amber", 3817 | "Angelina", 3818 | "Annabelle", 3819 | "Anner", 3820 | "Arie", 3821 | "Clarice", 3822 | "Corda", 3823 | "Corrie", 3824 | "Dellar", 3825 | "Donie", 3826 | "Elda", 3827 | "Elinor", 3828 | "Emeline", 3829 | "Emilia", 3830 | "Etha", 3831 | "Indiana", 3832 | "Ione", 3833 | "Josiephine", 3834 | "Kitty", 3835 | "Lavina", 3836 | "Leda", 3837 | "Letta", 3838 | "Mahala", 3839 | "Marcia", 3840 | "Margarette", 3841 | "Maudie", 3842 | "Maye", 3843 | "Norah", 3844 | "Patty", 3845 | "Paula", 3846 | "Permelia", 3847 | "Rosalia", 3848 | "Roxanna", 3849 | "Sula", 3850 | "Vada", 3851 | "Winnifred", 3852 | "Adline", 3853 | "Almira", 3854 | "Alvena", 3855 | "Arizona", 3856 | "Becky", 3857 | "Bernadette", 3858 | "Cordia", 3859 | "Corine", 3860 | "Dicie", 3861 | "Dove", 3862 | "Drusilla", 3863 | "Elena", 3864 | "Elenora", 3865 | "Elmina", 3866 | "Ethyl", 3867 | "Evalyn", 3868 | "Evelina", 3869 | "Faye", 3870 | "Huldah", 3871 | "Idell", 3872 | "Inga", 3873 | "Irena", 3874 | "Kattie", 3875 | "Lavenia", 3876 | "Lovina", 3877 | "Lulie", 3878 | "Magnolia", 3879 | "Margeret", 3880 | "Margery", 3881 | "Media", 3882 | "Millicent", 3883 | "Nena", 3884 | "Orilla", 3885 | "Pansy", 3886 | "Rosia", 3887 | "Rowena", 3888 | "Tabitha", 3889 | "Verdie", 3890 | "Zetta", 3891 | "Zoa", 3892 | "Zona", 3893 | "Albertina", 3894 | "Albina", 3895 | "Alyce", 3896 | "Amie", 3897 | "Annis", 3898 | "Carra", 3899 | "Clarinda", 3900 | "Delphia", 3901 | "Dillie", 3902 | "Doshie", 3903 | "Drucilla", 3904 | "Etna", 3905 | "Eugenie", 3906 | "Eulalia", 3907 | "Eve", 3908 | "Felicia", 3909 | "Florance", 3910 | "Fronie", 3911 | "Geraldine", 3912 | "Gina", 3913 | "Glenna", 3914 | "Grayce", 3915 | "Hedwig", 3916 | "Jossie", 3917 | "Katheryn", 3918 | "Katy", 3919 | "Leanna", 3920 | "Leitha", 3921 | "Leone", 3922 | "Lidie", 3923 | "Loma", 3924 | "Lular", 3925 | "Magdalen", 3926 | "Maymie", 3927 | "Minervia", 3928 | "Muriel", 3929 | "Neppie", 3930 | "Onie", 3931 | "Osa", 3932 | "Otelia", 3933 | "Paralee", 3934 | "Patience", 3935 | "Rella", 3936 | "Rillie", 3937 | "Rosanna", 3938 | "Tilda", 3939 | "Tishie", 3940 | "Tressa", 3941 | "Viva", 3942 | "Yetta", 3943 | "Zena", 3944 | "Zola", 3945 | "Abby", 3946 | "Aileen", 3947 | "Alda", 3948 | "Alla", 3949 | "Alverta", 3950 | "Ara", 3951 | "Ardelia", 3952 | "Ardella", 3953 | "Arrie", 3954 | "Arvilla", 3955 | "Aurora", 3956 | "Bama", 3957 | "Bena", 3958 | "Calla", 3959 | "Camilla", 3960 | "Carlotta", 3961 | "Celestia", 3962 | "Cherry", 3963 | "Cinda", 3964 | "Classie", 3965 | "Claudine", 3966 | "Clemie", 3967 | "Clyda", 3968 | "Creola", 3969 | "Debbie", 3970 | "Dinah", 3971 | "Doshia", 3972 | "Ednah", 3973 | "Edyth", 3974 | "Eleanora", 3975 | "Electa", 3976 | "Eola", 3977 | "Eudora", 3978 | "Euphemia", 3979 | "Evalena", 3980 | "Evaline", 3981 | "Faith", 3982 | "Fidelia", 3983 | "Golda", 3984 | "Helma", 3985 | "Hermine", 3986 | "Hessie", 3987 | "Ivah", 3988 | "Janette", 3989 | "Jennette", 3990 | "Joella", 3991 | "Kathryne", 3992 | "Lanie", 3993 | "Lauretta", 3994 | "Leana", 3995 | "Leatha", 3996 | "Liller", 3997 | "Lillis", 3998 | "Louetta", 3999 | "Madie", 4000 | "Mai", 4001 | "Martina", 4002 | "Maryann", 4003 | "Melva", 4004 | "Mena", 4005 | "Mercedes", 4006 | "Mima", 4007 | "Minda", 4008 | "Monica", 4009 | "Nealie", 4010 | "Netta", 4011 | "Nolia", 4012 | "Nonie", 4013 | "Odelia", 4014 | "Ottilie", 4015 | "Phyllis", 4016 | "Sabina", 4017 | "Sada", 4018 | "Suzanne", 4019 | "Sybilla", 4020 | "Thea", 4021 | "Tressie", 4022 | "Vallie", 4023 | "Venie", 4024 | "Viney", 4025 | "Wilhelmine", 4026 | "Winona", 4027 | "Zelda", 4028 | "Zilpha", 4029 | "Adelle", 4030 | "Adina", 4031 | "Adrienne", 4032 | "Albertine", 4033 | "Alys", 4034 | "Ana", 4035 | "Araminta", 4036 | "Birtha", 4037 | "Bulah", 4038 | "Caddie", 4039 | "Celie", 4040 | "Charlotta", 4041 | "Concepcion", 4042 | "Cordella", 4043 | "Corrine", 4044 | "Delila", 4045 | "Delphine", 4046 | "Dosha", 4047 | "Elaine", 4048 | "Elisa", 4049 | "Ellar", 4050 | "Elmire", 4051 | "Elvina", 4052 | "Ena", 4053 | "Estie", 4054 | "Etter", 4055 | "Fronnie", 4056 | "Georgina", 4057 | "Gracia", 4058 | "Gwendolyn", 4059 | "Hassie", 4060 | "Honora", 4061 | "Icy", 4062 | "Isa", 4063 | "Isadora", 4064 | "Johannah", 4065 | "Juana", 4066 | "Junie", 4067 | "Lavonia", 4068 | "Lella", 4069 | "Lemma", 4070 | "Letty", 4071 | "Linna", 4072 | "Littie", 4073 | "Lollie", 4074 | "Lorene", 4075 | "Lovisa", 4076 | "Lucina", 4077 | "Madora", 4078 | "Mahalia", 4079 | "Manervia", 4080 | "Manuela", 4081 | "Margarett", 4082 | "Margaretta", 4083 | "Margarita", 4084 | "Marilla", 4085 | "Mignon", 4086 | "Mozella", 4087 | "Natalie", 4088 | "Nelia", 4089 | "Nolie", 4090 | "Omie", 4091 | "Ottilia", 4092 | "Parthenia", 4093 | "Penelope", 4094 | "Pinkey", 4095 | "Pollie", 4096 | "Rennie", 4097 | "Reta", 4098 | "Roena", 4099 | "Rosalee", 4100 | "Roseanna", 4101 | "Ruthie", 4102 | "Sabra", 4103 | "Sannie", 4104 | "Selena", 4105 | "Sibyl", 4106 | "Tella", 4107 | "Tempie", 4108 | "Tennessee", 4109 | "Teressa", 4110 | "Texas", 4111 | "Theda", 4112 | "Thursa", 4113 | "Ula", 4114 | "Vannie", 4115 | "Verona", 4116 | "Vertie", 4117 | "Wilma", 4118 | "Adell", 4119 | "Aggie", 4120 | "Alcie", 4121 | "Alfreda", 4122 | "Alicia", 4123 | "Allene", 4124 | "Almyra", 4125 | "Anastacia", 4126 | "Aria", 4127 | "Arminda", 4128 | "Aura", 4129 | "Avie", 4130 | "Berdie", 4131 | "Buena", 4132 | "Calista", 4133 | "Cammie", 4134 | "Cara", 4135 | "Celesta", 4136 | "Celeste", 4137 | "Chaney", 4138 | "Chanie", 4139 | "Charlottie", 4140 | "Chrissie", 4141 | "Christene", 4142 | "Christiana", 4143 | "Cleora", 4144 | "Clora", 4145 | "Coralie", 4146 | "Dayse", 4147 | "Delfina", 4148 | "Deliah", 4149 | "Delina", 4150 | "Delle", 4151 | "Dicy", 4152 | "Donia", 4153 | "Dulcie", 4154 | "Edwina", 4155 | "Ela", 4156 | "Eleonora", 4157 | "Elta", 4158 | "Elzada", 4159 | "Emaline", 4160 | "Eulah", 4161 | "Eulalie", 4162 | "Euna", 4163 | "Zadie", 4164 | "Eveline", 4165 | "Lelah", 4166 | "Nanie", 4167 | "Petra", 4168 | "Glennie", 4169 | "Juliette", 4170 | "Mercy", 4171 | "Miranda", 4172 | "Nana", 4173 | "Zilpah", 4174 | "Almedia", 4175 | "Byrdie", 4176 | "Claribel", 4177 | "Coral", 4178 | "Exie", 4179 | "Malissie", 4180 | "Myrtice", 4181 | "Narcissus", 4182 | "Rosamond", 4183 | "Theresia", 4184 | "Valeria", 4185 | "Vessie", 4186 | "Victorine", 4187 | "Arabella", 4188 | "Dottie", 4189 | "Flo", 4190 | "Fredericka", 4191 | "Gusta", 4192 | "Icie", 4193 | "Lillia", 4194 | "Lota", 4195 | "Nathalie", 4196 | "Nita", 4197 | "Ota", 4198 | "Ramona", 4199 | "Texie", 4200 | "Zillah", 4201 | "Aida", 4202 | "Arra", 4203 | "Belva", 4204 | "Biddie", 4205 | "Bula", 4206 | "Carry", 4207 | "Crete", 4208 | "Dossie", 4209 | "Evangeline", 4210 | "Flavia", 4211 | "Fleta", 4212 | "Fronia", 4213 | "Gillie", 4214 | "Jinnie", 4215 | "Katharina", 4216 | "Mirtie", 4217 | "Mora", 4218 | "Ninnie", 4219 | "Rettie", 4220 | "Rozella", 4221 | "Sofia", 4222 | "Sybil", 4223 | "Sylvania", 4224 | "Tilla", 4225 | "Ursula", 4226 | "Veda", 4227 | "Zaida", 4228 | "Zenobia", 4229 | "Aletha", 4230 | "Ason", 4231 | "Bina", 4232 | "Chloie", 4233 | "Christie", 4234 | "Corean", 4235 | "Corinna", 4236 | "Elodie", 4237 | "Epsie", 4238 | "Exa", 4239 | "Georgine", 4240 | "Gretta", 4241 | "Henriette", 4242 | "Jemima", 4243 | "Jo", 4244 | "Josefa", 4245 | "Juliana", 4246 | "Katharyn", 4247 | "Lavada", 4248 | "Leonore", 4249 | "Levina", 4250 | "Libby", 4251 | "Lilie", 4252 | "Louanna", 4253 | "Mabell", 4254 | "Madeleine", 4255 | "Marinda", 4256 | "Mila", 4257 | "Neta", 4258 | "Orlena", 4259 | "Ozella", 4260 | "Ressie", 4261 | "Rosena", 4262 | "Rosey", 4263 | "Senora", 4264 | "Siddie", 4265 | "Susana", 4266 | "Susanne", 4267 | "Texanna", 4268 | "Tiney", 4269 | "Tinie", 4270 | "Tiny", 4271 | "Achsah", 4272 | "Agness", 4273 | "Ala", 4274 | "Alabama", 4275 | "Alexina", 4276 | "Altie", 4277 | "Ama", 4278 | "Amalie", 4279 | "Amelie", 4280 | "Amey", 4281 | "Amma", 4282 | "Ammie", 4283 | "Anie", 4284 | "Annabell", 4285 | "Arta", 4286 | "Attie", 4287 | "Audra", 4288 | "Azzie", 4289 | "Cathryn", 4290 | "Cena", 4291 | "Chestina", 4292 | "Crissie", 4293 | "Cyntha", 4294 | "Daisye", 4295 | "Dellia", 4296 | "Delta", 4297 | "Dema", 4298 | "Dezzie", 4299 | "Dola", 4300 | "Dollye", 4301 | "Eithel", 4302 | "Elba", 4303 | "Elfrieda", 4304 | "Elna", 4305 | "Emogene", 4306 | "Enola", 4307 | "Verda", 4308 | "Gretchen", 4309 | "Hermina", 4310 | "Nelly", 4311 | "Eller", 4312 | "Hetty", 4313 | "Luetta", 4314 | "Pennie", 4315 | "Rosemary", 4316 | "Beckie", 4317 | "Buna", 4318 | "Caldonia", 4319 | "Candace", 4320 | "Edla", 4321 | "Florrie", 4322 | "Luisa", 4323 | "Myrtis", 4324 | "Trudie", 4325 | "Agusta", 4326 | "Alphonsine", 4327 | "Dellie", 4328 | "Delpha", 4329 | "Kathyrn", 4330 | "Loretto", 4331 | "Lucindy", 4332 | "Maybell", 4333 | "Odile", 4334 | "Orah", 4335 | "Prudie", 4336 | "Rhea", 4337 | "Rinda", 4338 | "Rosy", 4339 | "Roxy", 4340 | "Sarrah", 4341 | "Susannah", 4342 | "Tula", 4343 | "Alwina", 4344 | "Arah", 4345 | "Bernadine", 4346 | "Capitola", 4347 | "Cathern", 4348 | "Columbia", 4349 | "Eileen", 4350 | "Elizbeth", 4351 | "Eura", 4352 | "Hennie", 4353 | "Henretta", 4354 | "Ivie", 4355 | "Jeanie", 4356 | "Justina", 4357 | "Leaner", 4358 | "Leonia", 4359 | "Lorraine", 4360 | "Lucetta", 4361 | "Macie", 4362 | "Mahalie", 4363 | "Marry", 4364 | "Novella", 4365 | "Olevia", 4366 | "Phillis", 4367 | "Philomene", 4368 | "Salina", 4369 | "Sinda", 4370 | "Tinnie", 4371 | "Vashti", 4372 | "Vella", 4373 | "Veva", 4374 | "Vicy", 4375 | "Zita", 4376 | "Affie", 4377 | "Albertha", 4378 | "Anabel", 4379 | "Artelia", 4380 | "Barbra", 4381 | "Beaulah", 4382 | "Bertina", 4383 | "Birdella", 4384 | "Blossom", 4385 | "Carmela", 4386 | "Carolyne", 4387 | "Cilla", 4388 | "Denise", 4389 | "Dorthea", 4390 | "Eleonore", 4391 | "Fairy", 4392 | "Fannye", 4393 | "Franc", 4394 | "Francina", 4395 | "Francisca", 4396 | "Genevra", 4397 | "Helga", 4398 | "Iza", 4399 | "Jeanetta", 4400 | "Jeannie", 4401 | "Jerusha", 4402 | "Lisette", 4403 | "Loda", 4404 | "Luda", 4405 | "Lynda", 4406 | "Marget", 4407 | "Mariam", 4408 | "Modena", 4409 | "Nanna", 4410 | "Nelie", 4411 | "Olena", 4412 | "Lelar", 4413 | "Matilde", 4414 | "Simona", 4415 | "Thora", 4416 | "Angelita", 4417 | "Berenice", 4418 | "Dagmar", 4419 | "Dina", 4420 | "Ema", 4421 | "Florine", 4422 | "Loraine", 4423 | "Maida", 4424 | "Missie", 4425 | "Arline", 4426 | "Beatrix", 4427 | "Dorathea", 4428 | "Elenor", 4429 | "Gertha", 4430 | "Lesta", 4431 | "Rebekah", 4432 | "Almina", 4433 | "Arlena", 4434 | "Dot", 4435 | "Elfie", 4436 | "Ermine", 4437 | "Francisqui", 4438 | "Georgeanna", 4439 | "Glendora", 4440 | "Leontine", 4441 | "Leva", 4442 | "Litha", 4443 | "Luberta", 4444 | "Marianna", 4445 | "Parlee", 4446 | "Pearla", 4447 | "Sister", 4448 | "Thresa", 4449 | "Alene", 4450 | "Alverda", 4451 | "Antonette", 4452 | "Argie", 4453 | "Arkie", 4454 | "Arletta", 4455 | "Bea", 4456 | "Bettye", 4457 | "Cappie", 4458 | "Caro", 4459 | "Cloe", 4460 | "Corene", 4461 | "Deetta", 4462 | "Elberta", 4463 | "Ether", 4464 | "Felicie", 4465 | "Frederica", 4466 | "Hellen", 4467 | "Icey", 4468 | "Ines", 4469 | "Junia", 4470 | "Laney", 4471 | "Lassie", 4472 | "Lockie", 4473 | "Lossie", 4474 | "Lovey", 4475 | "Marianita", 4476 | "Mattye", 4477 | "Rubie", 4478 | "Milly", 4479 | "Pluma", 4480 | "Ruie", 4481 | "Vira", 4482 | "Cleva", 4483 | "Gennie", 4484 | "Sadye", 4485 | "Vennie", 4486 | "Zettie", 4487 | "Clevie", 4488 | "Ferne", 4489 | "Maebelle", 4490 | "Maxine", 4491 | "Pearly", 4492 | "Savanah", 4493 | "Savilla", 4494 | "Valerie", 4495 | "Violetta", 4496 | "Adelina", 4497 | "Alzina", 4498 | "Annice", 4499 | "Beda", 4500 | "Clarabelle", 4501 | "Fleda", 4502 | "Goldia", 4503 | "Laila", 4504 | "Leala", 4505 | "Lilah", 4506 | "Lyla", 4507 | "Naoma", 4508 | "Nealy", 4509 | "Olivine", 4510 | "Rutha", 4511 | "Sussie", 4512 | "Theodocia", 4513 | "Vassie", 4514 | "Zina", 4515 | "Aurore", 4516 | "Beth", 4517 | "Channie", 4518 | "Freida", 4519 | "Georganna", 4520 | "Izetta", 4521 | "Kathern", 4522 | "Lady", 4523 | "Lala", 4524 | "Lilia", 4525 | "Lurana", 4526 | "Mozelle", 4527 | "Norine", 4528 | "Oney", 4529 | "Clotilde", 4530 | "Nova", 4531 | "Myrna", 4532 | "Medora", 4533 | "Hildur", 4534 | "Imo", 4535 | "Ragna", 4536 | "Vinie", 4537 | "Emmy", 4538 | "Hildegarde", 4539 | "Octa", 4540 | "Aurilla", 4541 | "Beula", 4542 | "Lera", 4543 | "Macy", 4544 | "Margrett", 4545 | "Melina", 4546 | "Pheobe", 4547 | "Alvira", 4548 | "Clella", 4549 | "Cornie", 4550 | "Dorotha", 4551 | "Dorthy", 4552 | "Dosia", 4553 | "Enid", 4554 | "Essa", 4555 | "Evelena", 4556 | "Genoveva", 4557 | "Greta", 4558 | "Ica", 4559 | "Ilma", 4560 | "Lalla", 4561 | "Lana", 4562 | "Leonor", 4563 | "Lolla", 4564 | "Lorna", 4565 | "Vergie", 4566 | "Mossie", 4567 | "Manuelita", 4568 | "Oline", 4569 | "Ima", 4570 | "Janey", 4571 | "Villa", 4572 | "Clytie", 4573 | "Ermina", 4574 | "Hertha", 4575 | "Margaretha", 4576 | "Melanie", 4577 | "Metha", 4578 | "Pricilla", 4579 | "Sigrid", 4580 | "Thekla", 4581 | "Berniece", 4582 | "Betha", 4583 | "Florie", 4584 | "Hilah", 4585 | "Isla", 4586 | "Judie", 4587 | "Lethia", 4588 | "Louisiana", 4589 | "Rubye", 4590 | "Silvia", 4591 | "Zelpha", 4592 | "Alwilda", 4593 | "Angele", 4594 | "Verlie", 4595 | "Zelia", 4596 | "Gunda", 4597 | "Octavie", 4598 | "Orelia", 4599 | "Retha", 4600 | "Signe", 4601 | "Anice", 4602 | "Carlota", 4603 | "Lurline", 4604 | "Luz", 4605 | "Opha", 4606 | "Ura", 4607 | "Vicie", 4608 | "Alwine", 4609 | "Carmelita", 4610 | "Clemma", 4611 | "Elia", 4612 | "Eloisa", 4613 | "Eppie", 4614 | "Gustie", 4615 | "Hazle", 4616 | "Lu", 4617 | "Ebba", 4618 | "Margarete", 4619 | "Myrle", 4620 | "Nadine", 4621 | "Pallie", 4622 | "Betsey", 4623 | "Cleta", 4624 | "Filomena", 4625 | "Orra", 4626 | "Arlene", 4627 | "Margretta", 4628 | "Pairlee", 4629 | "Zana", 4630 | "Francies", 4631 | "Marjory", 4632 | "Roxana", 4633 | "Cressie", 4634 | "Erla", 4635 | "Herma", 4636 | "Oliva", 4637 | "Rosalind", 4638 | "Chessie", 4639 | "Daphne", 4640 | "Lulah", 4641 | "Marvel", 4642 | "Monnie", 4643 | "Noemie", 4644 | "Gregoria", 4645 | "Josefina", 4646 | "Fleeta", 4647 | "Madaline", 4648 | "Hildred", 4649 | "Sibbie", 4650 | "Verena", 4651 | "Bernardine", 4652 | "Gerda", 4653 | "Hazelle", 4654 | "Nobie", 4655 | "Reva", 4656 | "Vonnie", 4657 | "Ethie", 4658 | "Jessye", 4659 | "Jetta", 4660 | "Signa", 4661 | "Delcie", 4662 | "Hildegard", 4663 | "Treva", 4664 | "Violette", 4665 | "Sylva", 4666 | "Twila", 4667 | "Concetta", 4668 | "Idabelle", 4669 | "Lulla", 4670 | "Mira", 4671 | "Nila", 4672 | "Olar", 4673 | "Velva", 4674 | "Yvonne", 4675 | "Evia", 4676 | "Willia", 4677 | "Dortha", 4678 | "Else", 4679 | "Freeda", 4680 | "Versa", 4681 | "Ilah", 4682 | "Maurine", 4683 | "Vernice", 4684 | "Elmyra", 4685 | "Madelyn", 4686 | "Cannie", 4687 | "Carmella", 4688 | "Cliffie", 4689 | "Ever", 4690 | "Leafy", 4691 | "Olinda", 4692 | "Virdie", 4693 | "Allena", 4694 | "Clotilda", 4695 | "Elida", 4696 | "Elvera", 4697 | "Fae", 4698 | "Josefita", 4699 | "Lurena", 4700 | "Versie", 4701 | "Vivien", 4702 | "Melba", 4703 | "Alline", 4704 | "Elfreda", 4705 | "Verla", 4706 | "Ouida", 4707 | "Flonnie", 4708 | "Palma", 4709 | "Consuelo", 4710 | "Lorine", 4711 | "Venus", 4712 | "Hasel", 4713 | "Noma", 4714 | "Virgia", 4715 | "Alleen", 4716 | "Mavis", 4717 | "Nelda", 4718 | "Trilby", 4719 | "Adel", 4720 | "Buelah", 4721 | "Milda", 4722 | "Velda", 4723 | "Bernetta", 4724 | "Neoma", 4725 | "Gaynell", 4726 | "Laurette", 4727 | "Coletta", 4728 | "Zela", 4729 | "Zeta", 4730 | "Manila", 4731 | "Manilla", 4732 | "Cuba", 4733 | "Earline", 4734 | "Vlasta", 4735 | "Jacqueline", 4736 | "Onnie", 4737 | "Vara", 4738 | "Alena", 4739 | "Ilo", 4740 | "Imelda", 4741 | "Ardis", 4742 | "Delores", 4743 | "Irva", 4744 | "Gwen", 4745 | "Tomasa", 4746 | "Veta", 4747 | "Berneice", 4748 | "Lempi", 4749 | "Eathel", 4750 | "Marybelle", 4751 | "Chrystal", 4752 | "Elvia", 4753 | "Ilene", 4754 | "Margarite", 4755 | "Marianne", 4756 | "Odette", 4757 | "Antonina", 4758 | "Delsie", 4759 | "Portia", 4760 | "Reatha", 4761 | "Aleen", 4762 | "Almeta", 4763 | "Lilyan", 4764 | "Jaunita", 4765 | "Luvinia", 4766 | "Alvera", 4767 | "Allean", 4768 | "Dagny", 4769 | "Leoma", 4770 | "Oleta", 4771 | "Trula", 4772 | "Ethyle", 4773 | "Ingeborg", 4774 | "Jeane", 4775 | "Laurine", 4776 | "Lorean", 4777 | "Marge", 4778 | "Margueritta", 4779 | "Mozell", 4780 | "Norene", 4781 | "Oneta", 4782 | "Lolita", 4783 | "Elouise", 4784 | "Cathleen", 4785 | "Bette", 4786 | "Earnestine", 4787 | "Florene", 4788 | "Laverna", 4789 | "Rafaela", 4790 | "Thyra", 4791 | "Loyce", 4792 | "Cleda", 4793 | "Pearline", 4794 | "Ceola", 4795 | "Lavera", 4796 | "Marcelle", 4797 | "Romaine", 4798 | "Rosalyn", 4799 | "Augustina", 4800 | "Bonita", 4801 | "Dominga", 4802 | "Girtha", 4803 | "Isobel", 4804 | "Anona", 4805 | "Syble", 4806 | "Edris", 4807 | "Santa", 4808 | "Theola", 4809 | "Veola", 4810 | "Ceil", 4811 | "Madlyn", 4812 | "Vernia", 4813 | "Ellamae", 4814 | "Irine", 4815 | "Linnea", 4816 | "Madalyn", 4817 | "Roslyn", 4818 | "Edrie", 4819 | "Vincenza", 4820 | "Yolanda", 4821 | "Edra", 4822 | "Orma", 4823 | "Ilda", 4824 | "Ardath", 4825 | "Renee", 4826 | "Astrid", 4827 | "Beadie", 4828 | "Doretha", 4829 | "Neola", 4830 | "Vela", 4831 | "Wava", 4832 | "Evelyne", 4833 | "Dimple", 4834 | "Annamae", 4835 | "Elease", 4836 | "Williemae", 4837 | "Rosaline", 4838 | "Charline", 4839 | "Charlene", 4840 | "Joanne", 4841 | "Theta", 4842 | "Deloris", 4843 | "Maureen", 4844 | "Rosabelle", 4845 | "Gilda", 4846 | "Herminia", 4847 | "Afton", 4848 | "Margurite", 4849 | "Clydie", 4850 | "Izola", 4851 | "Rosemarie", 4852 | "Arnetta", 4853 | "Gladyce", 4854 | "Floretta", 4855 | "Merna", 4856 | "Nedra", 4857 | "Clementina", 4858 | "Launa", 4859 | "Sonia", 4860 | "Aili", 4861 | "Gladis", 4862 | "Alease", 4863 | "Madonna", 4864 | "Azalee", 4865 | "Colleen", 4866 | "Darlene", 4867 | "Macel", 4868 | "Cleola", 4869 | "Loree", 4870 | "Stephania", 4871 | "Joann", 4872 | "Antonetta", 4873 | "Arietta", 4874 | "Vivienne", 4875 | "Elinore", 4876 | "Benita", 4877 | "Glenda", 4878 | "Earlene", 4879 | "Arleen", 4880 | "Blanchie", 4881 | "Vilma", 4882 | "Erline", 4883 | "Felice", 4884 | "Georgette", 4885 | "Yvette", 4886 | "Assunta", 4887 | "Helyn", 4888 | "Lavonne", 4889 | "Audry", 4890 | "Dorathy", 4891 | "Stasia", 4892 | "Vita", 4893 | "Jayne", 4894 | "Maebell", 4895 | "Mafalda", 4896 | "Olympia", 4897 | "Masako", 4898 | "Stacia", 4899 | "Domenica", 4900 | "Ingrid", 4901 | "Wynona", 4902 | "Bernita", 4903 | "Carole", 4904 | "Elenore", 4905 | "Waneta", 4906 | "Esperanza", 4907 | "Madelene", 4908 | "Roselyn", 4909 | "Kathlyn", 4910 | "Ardith", 4911 | "Venita", 4912 | "Santina", 4913 | "Maryjane", 4914 | "Orene", 4915 | "Noreen", 4916 | "Antionette", 4917 | "Margot", 4918 | "Dawn", 4919 | "Lahoma", 4920 | "Alexandra", 4921 | "Maryellen", 4922 | "Ruthe", 4923 | "Cleone", 4924 | "Kathaleen", 4925 | "Aldona", 4926 | "Janis", 4927 | "Christeen", 4928 | "Dorine", 4929 | "Caryl", 4930 | "Francine", 4931 | "Rosaria", 4932 | "Erlene", 4933 | "Georgetta", 4934 | "Olene", 4935 | "Sheila", 4936 | "Georgene", 4937 | "Yoshiko", 4938 | "Delora", 4939 | "Lavelle", 4940 | "Idamae", 4941 | "Michelina", 4942 | "Catalina", 4943 | "Liberty", 4944 | "Victory", 4945 | "Beverley", 4946 | "Laurene", 4947 | "Marilynn", 4948 | "Jeraldine", 4949 | "Marylou", 4950 | "Jacquelyn", 4951 | "Oneida", 4952 | "Concha", 4953 | "Marina", 4954 | "Doreen", 4955 | "Haruko", 4956 | "Felipa", 4957 | "Socorro", 4958 | "Elois", 4959 | "Toshiko", 4960 | "Carlene", 4961 | "Fumiko", 4962 | "Soledad", 4963 | "Gearldine", 4964 | "Shirlee", 4965 | "Merry", 4966 | "Clarine", 4967 | "Lorayne", 4968 | "Marlene", 4969 | "Kiyoko", 4970 | "Elwanda", 4971 | "Elayne", 4972 | "Darline", 4973 | "Arlyne", 4974 | "Marlys", 4975 | "Mardell", 4976 | "Willene", 4977 | "Inell", 4978 | "Venice", 4979 | "Ofelia", 4980 | "Peggie", 4981 | "Beatriz", 4982 | "Rochelle", 4983 | "Leatrice", 4984 | "Billye", 4985 | "Darleen", 4986 | "Hortencia", 4987 | "Ethelene", 4988 | "Marylouise", 4989 | "Eris", 4990 | "Bettyjane", 4991 | "Penny", 4992 | "Dorene", 4993 | "Toni", 4994 | "Lynette", 4995 | "Vonda", 4996 | "Amparo", 4997 | "Bebe", 4998 | "Phylis", 4999 | "Bettylou", 5000 | "Wanita", 5001 | "Marceline", 5002 | "Vernelle", 5003 | "Ernestina", 5004 | "Doloris", 5005 | "Delois", 5006 | "Nanette", 5007 | "Ardelle", 5008 | "Natalia", 5009 | "Estela", 5010 | "Sherry", 5011 | "Twyla", 5012 | "Jacquelin", 5013 | "Enriqueta", 5014 | "Bobbye", 5015 | "Patti", 5016 | "Lorrayne", 5017 | "Janell", 5018 | "Ladonna", 5019 | "Nada", 5020 | "Carla", 5021 | "Evangelina", 5022 | "Willodean", 5023 | "Charleen", 5024 | "Coleen", 5025 | "Illa", 5026 | "Shirlie", 5027 | "Ailene", 5028 | "Erlinda", 5029 | "Lita", 5030 | "Marilou", 5031 | "Lawanda", 5032 | "Charmaine", 5033 | "Cherie", 5034 | "Sonya", 5035 | "Raquel", 5036 | "Hortensia", 5037 | "Valencia", 5038 | "Jocelyn", 5039 | "Kazuko", 5040 | "Joye", 5041 | "Lidia", 5042 | "Roseann", 5043 | "Earlean", 5044 | "Jeannine", 5045 | "Romona", 5046 | "Jeanine", 5047 | "Joline", 5048 | "Felicitas", 5049 | "Carma", 5050 | "Marva", 5051 | "Colette", 5052 | "Sondra", 5053 | "Marilee", 5054 | "Jolene", 5055 | "Jovita", 5056 | "Dorla", 5057 | "Dianne", 5058 | "Margy", 5059 | "Velia", 5060 | "Margene", 5061 | "Beverlee", 5062 | "Maryanne", 5063 | "Joycelyn", 5064 | "Merlene", 5065 | "Oralia", 5066 | "Sydell", 5067 | "Jill", 5068 | "Ardeth", 5069 | "Armida", 5070 | "Marylin", 5071 | "Sonja", 5072 | "Laquita", 5073 | "Julianne", 5074 | "Nannette", 5075 | "Margo", 5076 | "Claudette", 5077 | "Arla", 5078 | "Charlsie", 5079 | "Marylyn", 5080 | "Mitzi", 5081 | "Patrica", 5082 | "Eartha", 5083 | "Herlinda", 5084 | "Trudy", 5085 | "Verdell", 5086 | "Joretta", 5087 | "Marsha", 5088 | "Verlene", 5089 | "Lynne", 5090 | "Mariann", 5091 | "Joetta", 5092 | "Rosanne", 5093 | "Belia", 5094 | "Janelle", 5095 | "Merilyn", 5096 | "Ardyce", 5097 | "Rosita", 5098 | "Celine", 5099 | "Carleen", 5100 | "Carolee", 5101 | "Dian", 5102 | "Dorthey", 5103 | "Kathy", 5104 | "Marita", 5105 | "Thomasina", 5106 | "Marta", 5107 | "Thalia", 5108 | "Nira", 5109 | "Sharlene", 5110 | "Rheta", 5111 | "Jerrie", 5112 | "Ginger", 5113 | "Jacklyn", 5114 | "Elissa", 5115 | "Paulette", 5116 | "Monna", 5117 | "Joellen", 5118 | "Lavona", 5119 | "Bonny", 5120 | "Luanne", 5121 | "Saundra", 5122 | "Luann", 5123 | "Pearlene", 5124 | "Nancie", 5125 | "Shirlene", 5126 | "Marcelina", 5127 | "Vicki", 5128 | "Karol", 5129 | "Louann", 5130 | "Alison", 5131 | "Marylee", 5132 | "Sharron", 5133 | "Cathy", 5134 | "Darla", 5135 | "Norita", 5136 | "Gaye", 5137 | "Jeri", 5138 | "Loris", 5139 | "Shirleyann", 5140 | "Carolynn", 5141 | "Marla", 5142 | "Evonne", 5143 | "Darlyne", 5144 | "Vernetta", 5145 | "Rhonda", 5146 | "Shelba", 5147 | "Shelva", 5148 | "Deanna", 5149 | "Karla", 5150 | "Tanya", 5151 | "Annmarie", 5152 | "Wendy", 5153 | "Ruthann", 5154 | "Sherrie", 5155 | "Carolann", 5156 | "Evon", 5157 | "Sheryl", 5158 | "Jacquline", 5159 | "Karlene", 5160 | "Glennis", 5161 | "Karin", 5162 | "Marleen", 5163 | "Roxanne", 5164 | "Harlene", 5165 | "Annamarie", 5166 | "Jacque", 5167 | "Maralyn", 5168 | "Shari", 5169 | "Larae", 5170 | "Gayla", 5171 | "Deanne", 5172 | "Dianna", 5173 | "Simone", 5174 | "Leilani", 5175 | "Vickie", 5176 | "Diann", 5177 | "Karolyn", 5178 | "Deann", 5179 | "Noretta", 5180 | "Shelvia", 5181 | "Shelvie", 5182 | "Shelia", 5183 | "Janyce", 5184 | "Jonell", 5185 | "Marolyn", 5186 | "Mimi", 5187 | "Noreta", 5188 | "Roseanne", 5189 | "Lorelei", 5190 | "Vicky", 5191 | "Helaine", 5192 | "Maryjo", 5193 | "Deana", 5194 | "Janine", 5195 | "Ronda", 5196 | "Leanne", 5197 | "Cindy", 5198 | "Judi", 5199 | "Karel", 5200 | "Karon", 5201 | "Glynda", 5202 | "Tamara", 5203 | "Suzann", 5204 | "Fran", 5205 | "Nanci", 5206 | "April", 5207 | "Hedy", 5208 | "Mari", 5209 | "Jannette", 5210 | "Jerri", 5211 | "Heidi", 5212 | "Dotty", 5213 | "Suellen", 5214 | "Lonna", 5215 | "Kathie", 5216 | "Ilona", 5217 | "Laraine", 5218 | "Susann", 5219 | "Rona", 5220 | "Sharen", 5221 | "Lynnette", 5222 | "Scarlett", 5223 | "Belinda", 5224 | "Pam", 5225 | "Ruthanne", 5226 | "Juliann", 5227 | "Sherron", 5228 | "Donita", 5229 | "Georgiann", 5230 | "Jerilyn", 5231 | "Sharyn", 5232 | "Sherri", 5233 | "Suzan", 5234 | "Nyla", 5235 | "Trina", 5236 | "Judyth", 5237 | "Nikki", 5238 | "Sheri", 5239 | "Jana", 5240 | "Adrianne", 5241 | "Georgeann", 5242 | "Terri", 5243 | "Caren", 5244 | "Kristine", 5245 | "Geri", 5246 | "Jerilynn", 5247 | "Karan", 5248 | "Rosann", 5249 | "Cheri", 5250 | "Leann", 5251 | "Phyliss", 5252 | "Merrily", 5253 | "Melody", 5254 | "Kaaren", 5255 | "Cassandra", 5256 | "Aloma", 5257 | "Cathie", 5258 | "Sandi", 5259 | "Ronna", 5260 | "Karren", 5261 | "Jerrilyn", 5262 | "Sheron", 5263 | "Pauletta", 5264 | "Merrilee", 5265 | "Terrie", 5266 | "Tonya", 5267 | "Sunny", 5268 | "Karyn", 5269 | "Ginny", 5270 | "Charla", 5271 | "Tana", 5272 | "Charolette", 5273 | "Marcy", 5274 | "Cheryle", 5275 | "Kathi", 5276 | "Karyl", 5277 | "Candy", 5278 | "Sherryl", 5279 | "Luana", 5280 | "Rozanne", 5281 | "Carlyn", 5282 | "Jacquelynn", 5283 | "Caron", 5284 | "Suzette", 5285 | "Dorinda", 5286 | "Teri", 5287 | "Alana", 5288 | "Danna", 5289 | "Maribeth", 5290 | "Pamala", 5291 | "Rosalinda", 5292 | "Elyse", 5293 | "Pamella", 5294 | "Bobbi", 5295 | "Corliss", 5296 | "Cheryll", 5297 | "Graciela", 5298 | "Sherilyn", 5299 | "Deirdre", 5300 | "Gerri", 5301 | "Glinda", 5302 | "Mickie", 5303 | "Marybeth", 5304 | "Cherrie", 5305 | "Laureen", 5306 | "Patrice", 5307 | "Aleta", 5308 | "Candice", 5309 | "Kristina", 5310 | "Vickey", 5311 | "Nicki", 5312 | "Deena", 5313 | "Janeen", 5314 | "Meryl", 5315 | "Bettina", 5316 | "Robyn", 5317 | "Sharyl", 5318 | "Erica", 5319 | "Lani", 5320 | "Leslee", 5321 | "Deidre", 5322 | "Katrina", 5323 | "Kristi", 5324 | "Cherryl", 5325 | "Dayle", 5326 | "Randi", 5327 | "Lori", 5328 | "Jacalyn", 5329 | "Starr", 5330 | "Kendra", 5331 | "Suzanna", 5332 | "Debby", 5333 | "Valarie", 5334 | "Melodie", 5335 | "Annemarie", 5336 | "Michaele", 5337 | "Janna", 5338 | "Trudi", 5339 | "Sandie", 5340 | "Daria", 5341 | "Vikki", 5342 | "Rachelle", 5343 | "Tonia", 5344 | "Marcie", 5345 | "Candis", 5346 | "Shiela", 5347 | "Regenia", 5348 | "Debora", 5349 | "Maura", 5350 | "Caryn", 5351 | "Kristie", 5352 | "Lizabeth", 5353 | "Regena", 5354 | "Denice", 5355 | "Drema", 5356 | "Shirleen", 5357 | "Cathey", 5358 | "Cristina", 5359 | "Lyndia", 5360 | "Blanca", 5361 | "Fonda", 5362 | "Renae", 5363 | "Kathlene", 5364 | "Loreen", 5365 | "Shauna", 5366 | "Sharman", 5367 | "Valorie", 5368 | "Sanjuanita", 5369 | "Bethany", 5370 | "Christa", 5371 | "Sanjuana", 5372 | "Candyce", 5373 | "Lorrie", 5374 | "Tara", 5375 | "Pamelia", 5376 | "Kristy", 5377 | "Collette", 5378 | "Roxann", 5379 | "Debrah", 5380 | "Mindy", 5381 | "Krista", 5382 | "Leticia", 5383 | "Terese", 5384 | "Mara", 5385 | "Nicolette", 5386 | "Vanessa", 5387 | "Merrie", 5388 | "Debbra", 5389 | "Jenifer", 5390 | "Lourdes", 5391 | "Geralyn", 5392 | "Jaclyn", 5393 | "Sharleen", 5394 | "Lorie", 5395 | "Allyson", 5396 | "Angelia", 5397 | "Jann", 5398 | "Joleen", 5399 | "Christi", 5400 | "Esmeralda", 5401 | "Teena", 5402 | "Gwenda", 5403 | "Rhona", 5404 | "Brinda", 5405 | "Pandora", 5406 | "Jodi", 5407 | "Kimberley", 5408 | "Megan", 5409 | "Lauri", 5410 | "Paige", 5411 | "Deborrah", 5412 | "Joette", 5413 | "Lise", 5414 | "Jacqulyn", 5415 | "Milagros", 5416 | "Marlena", 5417 | "Roxane", 5418 | "Ellyn", 5419 | "Debera", 5420 | "Joni", 5421 | "Cindi", 5422 | "Tricia", 5423 | "Brooke", 5424 | "Doretta", 5425 | "Lorri", 5426 | "Danette", 5427 | "Marci", 5428 | "Alisa", 5429 | "Kari", 5430 | "Lesa", 5431 | "Francesca", 5432 | "Lanette", 5433 | "Sharla", 5434 | "Kimberlee", 5435 | "Zandra", 5436 | "Sheree", 5437 | "Sabrina", 5438 | "Valinda", 5439 | "Sherie", 5440 | "Joanie", 5441 | "Starla", 5442 | "Merri", 5443 | "Kerri", 5444 | "Leeann", 5445 | "Vernita", 5446 | "Cherri", 5447 | "Bambi", 5448 | "Renita", 5449 | "Janel", 5450 | "Desiree", 5451 | "Denese", 5452 | "Roni", 5453 | "Sheilah", 5454 | "Athena", 5455 | "Jeryl", 5456 | "Danita", 5457 | "Gisele", 5458 | "Sherree", 5459 | "Debi", 5460 | "Kandy", 5461 | "Felecia", 5462 | "Migdalia", 5463 | "Dayna", 5464 | "Debbi", 5465 | "Debroah", 5466 | "Jaye", 5467 | "Monique", 5468 | "Tami", 5469 | "Taryn", 5470 | "Lorinda", 5471 | "Moira", 5472 | "Melodee", 5473 | "Sheryll", 5474 | "Trena", 5475 | "Noemi", 5476 | "Leesa", 5477 | "Marisa", 5478 | "Dawna", 5479 | "Tracie", 5480 | "Dani", 5481 | "Sheena", 5482 | "Dara", 5483 | "Kelli", 5484 | "Shawna", 5485 | "Barb", 5486 | "Kathey", 5487 | "Kellie", 5488 | "Wendi", 5489 | "Gaylene", 5490 | "Liz", 5491 | "Jeanna", 5492 | "Kara", 5493 | "Leisa", 5494 | "Chandra", 5495 | "Dori", 5496 | "Jami", 5497 | "Meg", 5498 | "Maritza", 5499 | "Stacie", 5500 | "Glynis", 5501 | "Juli", 5502 | "Babette", 5503 | "Tammie", 5504 | "Tamera", 5505 | "Tamra", 5506 | "Traci", 5507 | "Tammi", 5508 | "Deb", 5509 | "Tamela", 5510 | "Cyndi", 5511 | "Gabrielle", 5512 | "Cathi", 5513 | "Erika", 5514 | "Candi", 5515 | "Jacki", 5516 | "Nilda", 5517 | "Keri", 5518 | "Sarita", 5519 | "Tia", 5520 | "Bridgette", 5521 | "Tamie", 5522 | "Brigitte", 5523 | "Suzy", 5524 | "Kirsten", 5525 | "Tambra", 5526 | "Missy", 5527 | "Gigi", 5528 | "Perri", 5529 | "Karrie", 5530 | "Lissa", 5531 | "Lanita", 5532 | "Suzie", 5533 | "Bev", 5534 | "Alyson", 5535 | "Tresa", 5536 | "Kandi", 5537 | "Bridgett", 5538 | "Cari", 5539 | "Tori", 5540 | "Alesia", 5541 | "Ivette", 5542 | "Kerrie", 5543 | "Renea", 5544 | "Angelica", 5545 | "Liane", 5546 | "Shelli", 5547 | "Lesia", 5548 | "Penni", 5549 | "Tonja", 5550 | "Keely", 5551 | "Melisa", 5552 | "Tari", 5553 | "Deedee", 5554 | "Kayla", 5555 | "Lisha", 5556 | "Misty", 5557 | "Deidra", 5558 | "Leisha", 5559 | "Elana", 5560 | "Adriana", 5561 | "Loriann", 5562 | "Tania", 5563 | "Dedra", 5564 | "Evette", 5565 | "Latanya", 5566 | "Fawn", 5567 | "Risa", 5568 | "Krystal", 5569 | "Deeann", 5570 | "Johnna", 5571 | "Velvet", 5572 | "Corina", 5573 | "Jeana", 5574 | "Angelique", 5575 | "Marnita", 5576 | "Jonna", 5577 | "Machelle", 5578 | "Maribel", 5579 | "Barbie", 5580 | "Loria", 5581 | "Gwyn", 5582 | "Shanna", 5583 | "Monika", 5584 | "Trisha", 5585 | "Alecia", 5586 | "Janene", 5587 | "Latonya", 5588 | "Staci", 5589 | "Stefanie", 5590 | "Melonie", 5591 | "Marisol", 5592 | "Aretha", 5593 | "Marti", 5594 | "Darci", 5595 | "Adriene", 5596 | "Dawne", 5597 | "Charisse", 5598 | "Shirl", 5599 | "Lesli", 5600 | "Jena", 5601 | "Brigette", 5602 | "Tamala", 5603 | "Shana", 5604 | "Delisa", 5605 | "Maricela", 5606 | "Alyssa", 5607 | "Michell", 5608 | "Tonda", 5609 | "Richelle", 5610 | "Jeanmarie", 5611 | "Marissa", 5612 | "Melony", 5613 | "Deneen", 5614 | "Mia", 5615 | "Kecia", 5616 | "Djuna", 5617 | "Djuana", 5618 | "Noelle", 5619 | "Renata", 5620 | "Tessa", 5621 | "Anjanette", 5622 | "Denine", 5623 | "Daneen", 5624 | "Holli", 5625 | "Kimberli", 5626 | "Linette", 5627 | "Christal", 5628 | "Alisha", 5629 | "Elaina", 5630 | "Karri", 5631 | "Delinda", 5632 | "Tyra", 5633 | "Tawana", 5634 | "Marnie", 5635 | "Dionne", 5636 | "Kimberlie", 5637 | "Gabriela", 5638 | "Casandra", 5639 | "Marni", 5640 | "Tangela", 5641 | "Kimberely", 5642 | "Shanda", 5643 | "Demetria", 5644 | "Lavonda", 5645 | "Natasha", 5646 | "Mechelle", 5647 | "Shonda", 5648 | "Yolonda", 5649 | "Brigid", 5650 | "Julianna", 5651 | "Carin", 5652 | "Keli", 5653 | "Gia", 5654 | "Latricia", 5655 | "Lizette", 5656 | "Cristine", 5657 | "Bethann", 5658 | "Tabatha", 5659 | "Joelle", 5660 | "Lara", 5661 | "Sonji", 5662 | "Tamatha", 5663 | "Tasha", 5664 | "Tatia", 5665 | "Gidget", 5666 | "Latonia", 5667 | "Brandi", 5668 | "Nichole", 5669 | "Alissa", 5670 | "Demetra", 5671 | "Joell", 5672 | "Inger", 5673 | "Caprice", 5674 | "Denita", 5675 | "Mellissa", 5676 | "Lia", 5677 | "Catrina", 5678 | "Milissa", 5679 | "Sunday", 5680 | "Meghan", 5681 | "Andria", 5682 | "Nichelle", 5683 | "Cami", 5684 | "Anissa", 5685 | "Josette", 5686 | "Lissette", 5687 | "Adriane", 5688 | "Windy", 5689 | "Kami", 5690 | "Buffy", 5691 | "Karie", 5692 | "Keisha", 5693 | "Wende", 5694 | "Tawnya", 5695 | "Danelle", 5696 | "Misti", 5697 | "Tisha", 5698 | "Larissa", 5699 | "Darcie", 5700 | "Mayra", 5701 | "Sebrina", 5702 | "Ericka", 5703 | "Towanda", 5704 | "Michaela", 5705 | "Cristy", 5706 | "Cherise", 5707 | "Tanja", 5708 | "Carie", 5709 | "Carri", 5710 | "Tiffani", 5711 | "Coretta", 5712 | "Tamiko", 5713 | "Tamika", 5714 | "Chantel", 5715 | "Shannan", 5716 | "Kristal", 5717 | "Davina", 5718 | "Kirstin", 5719 | "Latrice", 5720 | "Jolie", 5721 | "Cristi", 5722 | "Cori", 5723 | "Araceli", 5724 | "Stephenie", 5725 | "Melissia", 5726 | "Chantal", 5727 | "Corrina", 5728 | "Gillian", 5729 | "Rolanda", 5730 | "Nicola", 5731 | "Kellee", 5732 | "Shani", 5733 | "Chanda", 5734 | "Cinnamon", 5735 | "Chelsea", 5736 | "Ami", 5737 | "Racquel", 5738 | "Nicolle", 5739 | "Autumn", 5740 | "Kisha", 5741 | "Latasha", 5742 | "Shonna", 5743 | "Christin", 5744 | "Latisha", 5745 | "Dione", 5746 | "Jada", 5747 | "Kyra", 5748 | "Mindi", 5749 | "Shona", 5750 | "Mellisa", 5751 | "Christen", 5752 | "Alexandria", 5753 | "Sharonda", 5754 | "Julissa", 5755 | "Karina", 5756 | "Kira", 5757 | "Tawanda", 5758 | "Marisela", 5759 | "Terra", 5760 | "Lashonda", 5761 | "Tera", 5762 | "Toya", 5763 | "Carissa", 5764 | "Stefani", 5765 | "Kesha", 5766 | "Tisa", 5767 | "Maya", 5768 | "Angella", 5769 | "Tiffanie", 5770 | "Trista", 5771 | "Raina", 5772 | "Crista", 5773 | "Kristan", 5774 | "Tawanna", 5775 | "Niki", 5776 | "Serina", 5777 | "Shawnda", 5778 | "Tosha", 5779 | "Christel", 5780 | "Tracee", 5781 | "Dyan", 5782 | "Tanisha", 5783 | "Chantelle", 5784 | "Stephany", 5785 | "Treena", 5786 | "Yesenia", 5787 | "Candida", 5788 | "Tarsha", 5789 | "Tameka", 5790 | "Ayanna", 5791 | "Jenni", 5792 | "Brandie", 5793 | "Shantel", 5794 | "Ebony", 5795 | "Shayla", 5796 | "Kia", 5797 | "Alysia", 5798 | "Summer", 5799 | "Jenna", 5800 | "Latoya", 5801 | "Cristal", 5802 | "Shanta", 5803 | "Shalonda", 5804 | "Angelic", 5805 | "Brenna", 5806 | "Alycia", 5807 | "Damaris", 5808 | "Consuela", 5809 | "Lashanda", 5810 | "Adria", 5811 | "Lasonya", 5812 | "Shara", 5813 | "Katina", 5814 | "Catina", 5815 | "Cher", 5816 | "Lakisha", 5817 | "Chastity", 5818 | "Nikole", 5819 | "Contina", 5820 | "Chiquita", 5821 | "Chasity", 5822 | "Nichol", 5823 | "Brandee", 5824 | "Camisha", 5825 | "Lakesha", 5826 | "Anika", 5827 | "Cherilyn", 5828 | "Alejandra", 5829 | "Lakeisha", 5830 | "Latosha", 5831 | "Keena", 5832 | "Sasha", 5833 | "Nikita", 5834 | "Cristin", 5835 | "Rocio", 5836 | "Tomika", 5837 | "Tomeka", 5838 | "Racheal", 5839 | "Griselda", 5840 | "Keesha", 5841 | "Liliana", 5842 | "Stephaine", 5843 | "Bree", 5844 | "Latrina", 5845 | "Felisha", 5846 | "Layla", 5847 | "Celena", 5848 | "Jenniffer", 5849 | "Rebeca", 5850 | "Sherita", 5851 | "Kori", 5852 | "Alethea", 5853 | "Carly", 5854 | "Aisha", 5855 | "Cicely", 5856 | "Anitra", 5857 | "Bianca", 5858 | "Vonetta", 5859 | "Latarsha", 5860 | "Nyree", 5861 | "Alexa", 5862 | "Fatima", 5863 | "Keshia", 5864 | "Daniela", 5865 | "Danyelle", 5866 | "Mendy", 5867 | "Charissa", 5868 | "Shantell", 5869 | "Marquita", 5870 | "Briana", 5871 | "Chanel", 5872 | "Danyell", 5873 | "Sunshine", 5874 | "Nia", 5875 | "Nikia", 5876 | "Jamila", 5877 | "Tanika", 5878 | "Brande", 5879 | "Meagan", 5880 | "Jasmin", 5881 | "Maranda", 5882 | "Lakeshia", 5883 | "Kyla", 5884 | "Syreeta", 5885 | "Luciana", 5886 | "Tobi", 5887 | "Alanna", 5888 | "Mistie", 5889 | "Tamica", 5890 | "Carisa", 5891 | "Cherish", 5892 | "Cecily", 5893 | "Haley", 5894 | "Mandi", 5895 | "Daniele", 5896 | "Tamisha", 5897 | "Tanesha", 5898 | "Danyel", 5899 | "Gabriella", 5900 | "Tiana", 5901 | "Mandie", 5902 | "Harmony", 5903 | "Shameka", 5904 | "Spring", 5905 | "Destiny", 5906 | "Nakisha", 5907 | "Tamekia", 5908 | "Ayana", 5909 | "Rashida", 5910 | "Yadira", 5911 | "Alesha", 5912 | "Kacey", 5913 | "Shawanda", 5914 | "Shamika", 5915 | "Takisha", 5916 | "Pepper", 5917 | "Kandice", 5918 | "Alina", 5919 | "Meggan", 5920 | "Farrah", 5921 | "Tennille", 5922 | "Nadia", 5923 | "Rhiannon", 5924 | "Jillian", 5925 | "January", 5926 | "Khalilah", 5927 | "Janae", 5928 | "Jaimee", 5929 | "Farah", 5930 | "Chana", 5931 | "Sommer", 5932 | "Shayna", 5933 | "Shasta", 5934 | "Torrie", 5935 | "Ashlee", 5936 | "Carina", 5937 | "Chaka", 5938 | "Trish", 5939 | "Rayna", 5940 | "Brianna", 5941 | "Eboni", 5942 | "Kenisha", 5943 | "Caitlin", 5944 | "Latoria", 5945 | "Torie", 5946 | "Venessa", 5947 | "Shanika", 5948 | "Shandra", 5949 | "Kizzy", 5950 | "Qiana", 5951 | "Talia", 5952 | "Hayley", 5953 | "Shawnte", 5954 | "Shante", 5955 | "Salena", 5956 | "Liana", 5957 | "Quiana", 5958 | "Kamilah", 5959 | "Shalon", 5960 | "Latesha", 5961 | "Iesha", 5962 | "Brittney", 5963 | "Danica", 5964 | "Jenelle", 5965 | "Yasmin", 5966 | "Lashunda", 5967 | "Malia", 5968 | "Adrianna", 5969 | "Tarah", 5970 | "Tenisha", 5971 | "Shawnna", 5972 | "Chante", 5973 | "Karissa", 5974 | "Corie", 5975 | "Chrissy", 5976 | "Kylie", 5977 | "Aja", 5978 | "Meghann", 5979 | "Crissy", 5980 | "Meaghan", 5981 | "Shavon", 5982 | "Brianne", 5983 | "Krissy", 5984 | "Shavonne", 5985 | "Lacie", 5986 | "Shanita", 5987 | "Desirae", 5988 | "Abbey", 5989 | "Lyndsey", 5990 | "Shaunna", 5991 | "Marlana", 5992 | "Ariane", 5993 | "Kylee", 5994 | "Sierra", 5995 | "Leia", 5996 | "Natosha", 5997 | "Ariana", 5998 | "Somer", 5999 | "Ashleigh", 6000 | "Star", 6001 | "Alaina", 6002 | "Casie", 6003 | "Kindra", 6004 | "Precious", 6005 | "Kiana", 6006 | "Winter", 6007 | "Viviana", 6008 | "Breanne", 6009 | "Siobhan", 6010 | "Maren", 6011 | "Kylene", 6012 | "Breanna", 6013 | "Ashanti", 6014 | "Asia", 6015 | "Lyndsay", 6016 | "Sharee", 6017 | "Kacy", 6018 | "Princess", 6019 | "Ayesha", 6020 | "Rikki", 6021 | "Lynsey", 6022 | "Shaneka", 6023 | "Linsey", 6024 | "Loni", 6025 | "Perla", 6026 | "Kristyn", 6027 | "Anya", 6028 | "Mariana", 6029 | "Renada", 6030 | "Kacie", 6031 | "Britney", 6032 | "Reyna", 6033 | "Chimere", 6034 | "Kaci", 6035 | "Brynn", 6036 | "Laci", 6037 | "Tai", 6038 | "Ashlie", 6039 | "Jessi", 6040 | "Tatiana", 6041 | "Kati", 6042 | "Krystle", 6043 | "Tierra", 6044 | "Tiara", 6045 | "Fallon", 6046 | "Evita", 6047 | "Kaitlin", 6048 | "Martine", 6049 | "Kassandra", 6050 | "Jesica", 6051 | "Alexia", 6052 | "Toccara", 6053 | "Latoyia", 6054 | "Tashina", 6055 | "Chaya", 6056 | "Joi", 6057 | "Daniella", 6058 | "Katelyn", 6059 | "Kandace", 6060 | "Shanell", 6061 | "Kourtney", 6062 | "Nereida", 6063 | "Jazmin", 6064 | "Chelsey", 6065 | "Kaleena", 6066 | "Kala", 6067 | "Kassie", 6068 | "Jenilee", 6069 | "Emilee", 6070 | "Cassondra", 6071 | "Shaina", 6072 | "Shakira", 6073 | "Ciara", 6074 | "Hailey", 6075 | "Kali", 6076 | "Shena", 6077 | "Falon", 6078 | "Tawny", 6079 | "Arielle", 6080 | "Ashly", 6081 | "Chelsie", 6082 | "Tenika", 6083 | "Sharita", 6084 | "Cristen", 6085 | "Tabetha", 6086 | "Krysta", 6087 | "Carley", 6088 | "Arianna", 6089 | "Mallory", 6090 | "Kaitlyn", 6091 | "Ciji", 6092 | "Ashely", 6093 | "Giselle", 6094 | "Tess", 6095 | "Maegan", 6096 | "Echo", 6097 | "Dwan", 6098 | "Britni", 6099 | "Ashli", 6100 | "Paola", 6101 | "Ashlea", 6102 | "Caitlyn", 6103 | "Tyesha", 6104 | "Maira", 6105 | "Brittani", 6106 | "Tasia", 6107 | "Grisel", 6108 | "Kaylee", 6109 | "Shenna", 6110 | "Teela", 6111 | "Savanna", 6112 | "Breann", 6113 | "Mckenzie", 6114 | "Janessa", 6115 | "Kasandra", 6116 | "Markita", 6117 | "Karly", 6118 | "Magen", 6119 | "Dannielle", 6120 | "Cierra", 6121 | "Sade", 6122 | "Krystina", 6123 | "Micaela", 6124 | "Ciera", 6125 | "Brittni", 6126 | "Kayleigh", 6127 | "Britany", 6128 | "Alyse", 6129 | "Deandra", 6130 | "Brittny", 6131 | "Kaley", 6132 | "Alysha", 6133 | "Jazmine", 6134 | "Shaquita", 6135 | "Krysten", 6136 | "Brittanie", 6137 | "Krystin", 6138 | "Magan", 6139 | "Katelin", 6140 | "Violeta", 6141 | "Kasie", 6142 | "Jessika", 6143 | "Kelsie", 6144 | "Mariel", 6145 | "Shira", 6146 | "Jaqueline", 6147 | "Amberly", 6148 | "Samatha", 6149 | "Eliana", 6150 | "Kaleigh", 6151 | "Nakita", 6152 | "Phylicia", 6153 | "Brittaney", 6154 | "Katlyn", 6155 | "Shardae", 6156 | "Jerrica", 6157 | "Porsha", 6158 | "Britta", 6159 | "Sharde", 6160 | "Cherrelle", 6161 | "Katelynn", 6162 | "Mallorie", 6163 | "Cherelle", 6164 | "Malorie", 6165 | "Sable", 6166 | "Kaila", 6167 | "Ashlyn", 6168 | "Shanae", 6169 | "Sharday", 6170 | "Fabiola", 6171 | "Iliana", 6172 | "Kyrie", 6173 | "Leandra", 6174 | "Shatara", 6175 | "Kortney", 6176 | "Janay", 6177 | "Ayla", 6178 | "Cayla", 6179 | "Yessenia", 6180 | "Skye", 6181 | "Kelsi", 6182 | "Jerica", 6183 | "Tiera", 6184 | "Jesenia", 6185 | "Kaela", 6186 | "Karli", 6187 | "Porsche", 6188 | "Kalyn", 6189 | "Chanelle", 6190 | "Alessandra", 6191 | "Lakendra", 6192 | "Lauryn", 6193 | "Kaycee", 6194 | "Kailey", 6195 | "Denisse", 6196 | "Jessenia", 6197 | "Anjelica", 6198 | "Sarai", 6199 | "Tianna", 6200 | "Kaylin", 6201 | "Kaylyn", 6202 | "Denisha", 6203 | "Stephani", 6204 | "Kaylie", 6205 | "Danae", 6206 | "Shanice", 6207 | "Jaleesa", 6208 | "Jalisa", 6209 | "Whitley", 6210 | "Deja", 6211 | "Taja", 6212 | "Chelsi", 6213 | "Genesis", 6214 | "Katlin", 6215 | "Kimber", 6216 | "Brittnee", 6217 | "Kierra", 6218 | "Alexandrea", 6219 | "Anais", 6220 | "Allyssa", 6221 | "Kiersten", 6222 | "Breana", 6223 | "Diandra", 6224 | "Sarina", 6225 | "Lizbeth", 6226 | "Kiera", 6227 | "Katarina", 6228 | "Jalissa", 6229 | "Hali", 6230 | "Carli", 6231 | "Tiarra", 6232 | "Grecia", 6233 | "Moriah", 6234 | "Kaitlynn", 6235 | "Brittnie", 6236 | "Flor", 6237 | "Elizabet", 6238 | "Alexandr", 6239 | "Britny", 6240 | "Katherin", 6241 | "Mikayla", 6242 | "Audrianna", 6243 | "Kirstie", 6244 | "Asha", 6245 | "Kallie", 6246 | "Kelsea", 6247 | "Bryanna", 6248 | "Audriana", 6249 | "Danika", 6250 | "Gianna", 6251 | "Makayla", 6252 | "Martika", 6253 | "Mikaela", 6254 | "Destinee", 6255 | "Brittnay", 6256 | "Yajaira", 6257 | "Yasmine", 6258 | "Shaniqua", 6259 | "Shanelle", 6260 | "Lizeth", 6261 | "Joana", 6262 | "Ryann", 6263 | "Isamar", 6264 | "Latifah", 6265 | "Kanisha", 6266 | "Rubi", 6267 | "Mariela", 6268 | "Symone", 6269 | "Ivana", 6270 | "Heaven", 6271 | "Lucero", 6272 | "Shelbi", 6273 | "Alysa", 6274 | "Dulce", 6275 | "Brooklyn", 6276 | "Nataly", 6277 | "Imani", 6278 | "Kalie", 6279 | "Alannah", 6280 | "Fiona", 6281 | "Kanesha", 6282 | "Laken", 6283 | "Haleigh", 6284 | "Eryn", 6285 | "Elyssa", 6286 | "Shelbie", 6287 | "Demi", 6288 | "Ieshia", 6289 | "Makenzie", 6290 | "Shanequa", 6291 | "Karlee", 6292 | "Haylee", 6293 | "Cheyanne", 6294 | "Estefania", 6295 | "Halie", 6296 | "Chynna", 6297 | "Karlie", 6298 | "Stormy", 6299 | "Delaney", 6300 | "Carlee", 6301 | "Kailee", 6302 | "Alayna", 6303 | "Mckenna", 6304 | "Shaquana", 6305 | "Tiesha", 6306 | "Brielle", 6307 | "Marcela", 6308 | "Myranda", 6309 | "Miriah", 6310 | "Alexus", 6311 | "Kelcie", 6312 | "Emerald", 6313 | "Giovanna", 6314 | "Bryana", 6315 | "China", 6316 | "Essence", 6317 | "Bria", 6318 | "Aracely", 6319 | "Aubree", 6320 | "Chelsy", 6321 | "Miesha", 6322 | "Cinthia", 6323 | "Brianda", 6324 | "Hailee", 6325 | "Karley", 6326 | "Ashlynn", 6327 | "Macey", 6328 | "Tatyana", 6329 | "Shawnee", 6330 | "Brea", 6331 | "Joselyn", 6332 | "Ivonne", 6333 | "Katerina", 6334 | "Marlee", 6335 | "Breonna", 6336 | "Shaniece", 6337 | "Kaylynn", 6338 | "Kinsey", 6339 | "Kenia", 6340 | "Destini", 6341 | "Kayley", 6342 | "Lexus", 6343 | "Selene", 6344 | "Yaritza", 6345 | "Khadijah", 6346 | "Kadijah", 6347 | "Halle", 6348 | "Brionna", 6349 | "Destiney", 6350 | "Jazmyn", 6351 | "Yazmin", 6352 | "Itzel", 6353 | "Kassidy", 6354 | "Coraima", 6355 | "Shannen", 6356 | "Kailyn", 6357 | "Kalene", 6358 | "Katlynn", 6359 | "Lexi", 6360 | "Deyanira", 6361 | "Yasmeen", 6362 | "Shyanne", 6363 | "Viridiana", 6364 | "Kaylene", 6365 | "Crysta", 6366 | "Reina", 6367 | "Alondra", 6368 | "Kayli", 6369 | "Nayeli", 6370 | "Jasmyn", 6371 | "Aspen", 6372 | "Jasmyne", 6373 | "Paloma", 6374 | "Eleni", 6375 | "Hana", 6376 | "Aaliyah", 6377 | "Aliyah", 6378 | "Dalia", 6379 | "Zhane", 6380 | "Mckayla", 6381 | "Clarisa", 6382 | "Mikala", 6383 | "Dayana", 6384 | "Maddison", 6385 | "Kianna", 6386 | "Kenzie", 6387 | "Bailee", 6388 | "Sydnee", 6389 | "Haylie", 6390 | "Nohely", 6391 | "Makenna", 6392 | "Vanesa", 6393 | "Cydney", 6394 | "Aleah", 6395 | "Shyann", 6396 | "Valentina", 6397 | "Caitlynn", 6398 | "Tatum", 6399 | "Adilene", 6400 | "Isis", 6401 | "Tatianna", 6402 | "Baylee", 6403 | "Shania", 6404 | "Jocelyne", 6405 | "Daisha", 6406 | "Kaelyn", 6407 | "Jayla", 6408 | "Dasia", 6409 | "Emely", 6410 | "Sydni", 6411 | "Abbigail", 6412 | "Miracle", 6413 | "Zoey", 6414 | "Unique", 6415 | "Iridian", 6416 | "Brooklynn", 6417 | "Alia", 6418 | "Keanna", 6419 | "Alivia", 6420 | "Daija", 6421 | "Sydnie", 6422 | "Fernanda", 6423 | "Daja", 6424 | "Lesly", 6425 | "Annika", 6426 | "Kyleigh", 6427 | "Sienna", 6428 | "Ciarra", 6429 | "Maci", 6430 | "Destany", 6431 | "Tamia", 6432 | "Moesha", 6433 | "Odalys", 6434 | "Yamilex", 6435 | "Zaria", 6436 | "Mireya", 6437 | "Alize", 6438 | "Xena", 6439 | "Dania", 6440 | "Katia", 6441 | "Maia", 6442 | "Amani", 6443 | "Shianne", 6444 | "Madisen", 6445 | "Odalis", 6446 | "Kaylah", 6447 | "Sarahi", 6448 | "Jailene", 6449 | "Jazlyn", 6450 | "Alyssia", 6451 | "Chyna", 6452 | "Estefany", 6453 | "Ansley", 6454 | "Madyson", 6455 | "Jaycie", 6456 | "Jacey", 6457 | "Lexis", 6458 | "Daijah", 6459 | "Joslyn", 6460 | "Dejah", 6461 | "Yulissa", 6462 | "Anahi", 6463 | "Aylin", 6464 | "Julisa", 6465 | "Salma", 6466 | "Madisyn", 6467 | "Erykah", 6468 | "Gisselle", 6469 | "Raegan", 6470 | "Tea", 6471 | "Estrella", 6472 | "Jayda", 6473 | "Rylie", 6474 | "Makala", 6475 | "Taya", 6476 | "Kaylan", 6477 | "Camila", 6478 | "Annalise", 6479 | "Jazmyne", 6480 | "Keeley", 6481 | "Shaylee", 6482 | "Savana", 6483 | "Madelynn", 6484 | "Micayla", 6485 | "Maeve", 6486 | "Nautica", 6487 | "Cali", 6488 | "Serenity", 6489 | "Yulisa", 6490 | "Baylie", 6491 | "Samara", 6492 | "Mya", 6493 | "Ally", 6494 | "Myah", 6495 | "Reanna", 6496 | "Madilyn", 6497 | "Felicity", 6498 | "Ireland", 6499 | "Skyla", 6500 | "Willow", 6501 | "Jaida", 6502 | "Abigayle", 6503 | "Jaelyn", 6504 | "Rhianna", 6505 | "Amira", 6506 | "Shae", 6507 | "Zoie", 6508 | "Caleigh", 6509 | "Abril", 6510 | "Deasia", 6511 | "Kaylen", 6512 | "Tayla", 6513 | "Alexys", 6514 | "Jaycee", 6515 | "Jayde", 6516 | "Kennedi", 6517 | "Amaya", 6518 | "Piper", 6519 | "Aniya", 6520 | "Noelia", 6521 | "Kiarra", 6522 | "Shaniya", 6523 | "Keara", 6524 | "Emmalee", 6525 | "Aiyana", 6526 | "Miya", 6527 | "Jalyn", 6528 | "Nyasia", 6529 | "Aniyah", 6530 | "Jaylene", 6531 | "Kyara", 6532 | "Citlalli", 6533 | "Abigale", 6534 | "Isabela", 6535 | "Tatyanna", 6536 | "Journey", 6537 | "Ryleigh", 6538 | "Aliya", 6539 | "Sky", 6540 | "Shyla", 6541 | "Bryn", 6542 | "Abagail", 6543 | "Izabella", 6544 | "Nya", 6545 | "Saige", 6546 | "Jakayla", 6547 | "Litzy", 6548 | "Brisa", 6549 | "Amya", 6550 | "Jackeline", 6551 | "Kaya", 6552 | "Jaquelin", 6553 | "Hailie", 6554 | "Nyah", 6555 | "Amara", 6556 | "Dariana", 6557 | "Yamilet", 6558 | "Monserrat", 6559 | "Cielo", 6560 | "Aryanna", 6561 | "Anaya", 6562 | "Arely", 6563 | "Kaia", 6564 | "Maryam", 6565 | "Anjali", 6566 | "Lilliana", 6567 | "Amiya", 6568 | "Belen", 6569 | "Aliza", 6570 | "Keira", 6571 | "Janiya", 6572 | "Ashtyn", 6573 | "Neha", 6574 | "Laisha", 6575 | "Amina", 6576 | "Jailyn", 6577 | "Kenna", 6578 | "Iyana", 6579 | "Maiya", 6580 | "Marlen", 6581 | "Nevaeh", 6582 | "Ainsley", 6583 | "Yuliana", 6584 | "Beyonce", 6585 | "Nayely", 6586 | "Johana", 6587 | "Nallely", 6588 | "Kaiya", 6589 | "Meadow", 6590 | "Makaila", 6591 | "Kya", 6592 | "Ximena", 6593 | "Jimena", 6594 | "Melany", 6595 | "Jamya", 6596 | "Taina", 6597 | "Aubrie", 6598 | "Frida", 6599 | "Kaliyah", 6600 | "Mikaila", 6601 | "Taliyah", 6602 | "Taniya", 6603 | "Citlali", 6604 | "Annabella", 6605 | "Dafne", 6606 | "Hayleigh", 6607 | "Yoselin", 6608 | "Areli", 6609 | "Madalynn", 6610 | "Priscila", 6611 | "Miah", 6612 | "Keila", 6613 | "Natalya", 6614 | "Jaylynn", 6615 | "Rianna", 6616 | "Sheyla", 6617 | "Aryana", 6618 | "Elle", 6619 | "Lisbeth", 6620 | "Evelin", 6621 | "Makena", 6622 | "Jaliyah", 6623 | "Keyla", 6624 | "Giana", 6625 | "Maleah", 6626 | "Shreya", 6627 | "Maliyah", 6628 | "Samira", 6629 | "Jalynn", 6630 | "Galilea", 6631 | "Riya", 6632 | "Cadence", 6633 | "Iyanna", 6634 | "Kiya", 6635 | "Jaylyn", 6636 | "Estefani", 6637 | "Yareli", 6638 | "Dayanara", 6639 | "Janiyah", 6640 | "Taniyah", 6641 | "Sanaa", 6642 | "Yahaira", 6643 | "Kadence", 6644 | "Amiyah", 6645 | "Tamya", 6646 | "Sherlyn", 6647 | "Natalee", 6648 | "Lainey", 6649 | "Angeles", 6650 | "Karyme", 6651 | "Arly", 6652 | "Saniya", 6653 | "Sariah", 6654 | "Kaydence", 6655 | "Alani", 6656 | "Amaris", 6657 | "Charlize", 6658 | "Kimora", 6659 | "Xiomara", 6660 | "Marin", 6661 | "Diya", 6662 | "Treasure", 6663 | "Aleena", 6664 | "Saniyah", 6665 | "Addyson", 6666 | "Karis", 6667 | "Gracelyn", 6668 | "Jaylee", 6669 | "Nathaly", 6670 | "Livia", 6671 | "Jayleen", 6672 | "Janiah", 6673 | "Gwyneth", 6674 | "Zariah", 6675 | "Averie", 6676 | "Heidy", 6677 | "Mikalah", 6678 | "Arleth", 6679 | "Karma", 6680 | "Siena", 6681 | "Jaelynn", 6682 | "Anabelle", 6683 | "Naima", 6684 | "Anneliese", 6685 | "Zara", 6686 | "Elliana", 6687 | "Kinsley", 6688 | "Selah", 6689 | "Jolette", 6690 | "Brylee", 6691 | "Myla", 6692 | "Yuridia", 6693 | "Montserrat", 6694 | "Valery", 6695 | "Lilianna", 6696 | "Leyla", 6697 | "Rihanna", 6698 | "Addisyn", 6699 | "Akeelah", 6700 | "Adison", 6701 | "Lilyana", 6702 | "Nathalia", 6703 | "Paisley", 6704 | "Yaretzi", 6705 | "Scarlet", 6706 | "Braelyn", 6707 | "Kamila", 6708 | "Cailyn", 6709 | "Bethzy", 6710 | "Adyson", 6711 | "Joselin", 6712 | "Mariyah", 6713 | "Kinley", 6714 | "Jaylah", 6715 | "Charlee", 6716 | "Adamaris", 6717 | "Malaya", 6718 | "Khloe", 6719 | "Amirah", 6720 | "Briley", 6721 | "Jorja", 6722 | "Rayne", 6723 | "Sanai", 6724 | "Dahlia", 6725 | "Lorelai", 6726 | "Neveah", 6727 | "Izabelle", 6728 | "Miley", 6729 | "Mylee", 6730 | "Jordin", 6731 | "Jaslene", 6732 | "Audrina", 6733 | "Azul", 6734 | "Marely", 6735 | "Shiloh", 6736 | "Madilynn", 6737 | "Jaeda", 6738 | "Jazlynn", 6739 | "Londyn", 6740 | "Giada", 6741 | "Adelyn", 6742 | "Jocelynn", 6743 | "Mylie", 6744 | "Adalyn", 6745 | "Aliana", 6746 | "Giuliana", 6747 | "Azaria", 6748 | "Zaniyah", 6749 | "Alyvia", 6750 | "Joseline", 6751 | "Kelis", 6752 | "Lillianna", 6753 | "Kylah", 6754 | "Hadassah", 6755 | "Allisson", 6756 | "Caylee", 6757 | "Mareli", 6758 | "Dayami", 6759 | "Alisson", 6760 | "Nylah", 6761 | "Jazlene", 6762 | "Adalynn", 6763 | "Jaslyn", 6764 | "Gemma", 6765 | "Lailah", 6766 | "Brynlee", 6767 | "Raelynn", 6768 | "Marlie", 6769 | "Anabella", 6770 | "Ariella", 6771 | "Kamora", 6772 | "Paityn", 6773 | "Payten", 6774 | "Amiah", 6775 | "Averi", 6776 | "Avah", 6777 | "Karsyn", 6778 | "Jamiya", 6779 | "Laylah", 6780 | "Carleigh", 6781 | "Kenley", 6782 | "Sloane", 6783 | "Elianna", 6784 | ] 6785 | -------------------------------------------------------------------------------- /src/api/main.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | import fastapi 4 | 5 | from .data import names 6 | 7 | app = fastapi.FastAPI() 8 | 9 | 10 | @app.get("/generate_name") 11 | async def generate_name(starts_with: str = None): 12 | name_choices = names 13 | if starts_with: 14 | name_choices = [name for name in name_choices if name.lower().startswith(starts_with.lower())] 15 | random_name = random.choice(name_choices) 16 | return {"name": random_name} 17 | -------------------------------------------------------------------------------- /src/gunicorn.conf.py: -------------------------------------------------------------------------------- 1 | # Gunicorn configuration file 2 | # https://docs.gunicorn.org/en/stable/configure.html#configuration-file 3 | # https://docs.gunicorn.org/en/stable/settings.html 4 | import multiprocessing 5 | 6 | max_requests = 1000 7 | max_requests_jitter = 50 8 | 9 | log_file = "-" 10 | 11 | bind = "0.0.0.0:3100" 12 | 13 | worker_class = "uvicorn.workers.UvicornWorker" 14 | workers = (multiprocessing.cpu_count() * 2) + 1 15 | -------------------------------------------------------------------------------- /src/gunicorn_test.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from unittest import mock 3 | 4 | import pytest 5 | from gunicorn.app.wsgiapp import run 6 | 7 | 8 | def test_config_imports(): 9 | argv = ["gunicorn", "--check-config", "api.main:app"] 10 | 11 | with mock.patch.object(sys, "argv", argv): 12 | with pytest.raises(SystemExit) as excinfo: 13 | run() 14 | 15 | assert excinfo.value.args[0] == 0 16 | -------------------------------------------------------------------------------- /src/requirements.txt: -------------------------------------------------------------------------------- 1 | fastapi==0.111.0 2 | uvicorn[standard]==0.29.0 3 | gunicorn==22.0.0 4 | --------------------------------------------------------------------------------